Придумал. Хоть и очень приблизительно, но по крайней мере не вылазит за пределы и выглядит более менее:
string_size, letter_size = 0, 0
for line in text:
string_size, letter_size = draw.textsize(line, font=font)
string_size = int(width/letter_size)
text = textwrap.wrap(text_bot, string_size)
print(string_size)
Зная высоту шрифта символа, т.к. символы по высоте и ширине примерно равны, то просто делю ширину всего изображения на высоту символа и получаю примерное кол-во символов, которые могут вместится в строку.
Если кто знает более "правильный" вариант - буду рад.