Как лучше сделать рефакторинг большой функции?
Сделал викторину для бота, пользователь пишет команду и программа попадает в эту функцию:
def iqmetr(self, chatid, sql, db, botname, last): # last - время когда была вызвана функция
points = []
while True:
a = random.randint(1, 50)
b = random.randint(1, 50)
c = a + b
subclient.send_message(chatId=chatid, message=f"Сколько будет {a}+{b} ?\nУ тебя 30 секунд!")
while time() - float(last[0]) < 30:
msg = subclient.get_chat_messages(chatId=chatid, size=5)
for message, messageId, messageType, mediaType, author, authorid in zip(
msg.content, msg.messageId,
msg.type, msg.mediaType,
msg.author.nickname,
msg.author.userId):
sql.execute("SELECT COUNT(messageid) FROM stats WHERE messageid=(?)",(messageId,))
for i in sql:
if i[0] == 0: # Если сообщения нету в базе данных: добавить его
now = datetime.datetime.now()
sql.execute("INSERT INTO stats VALUES (?, ?, ?, ?)", (authorid, messageId, author, str(now.strftime("%d-%m-%Y"))))
db.commit()
if author != botname:
if messageType == 0:
if message.lower() == str(c):
points.append(5)
subclient.send_message(chatId=chatid, message="Правильно. +5 баллов")
break
elif message.lower() != str(c):
subclient.send_message(chatId=chatid, replyTo=messageId, message="Нет")
else:
continue
break
else:
continue
break
else:
sum_points = sum((int(points[i]) for i in range(0, int(len(points)))))
subclient.send_message(chatId=chatid, message=f"Время вышло! Ты заработал +{sum_points} points")
return
Бот задает вопрос "[рандомное число]+[рандомное число]=?", и если ответ верный, происходит выход со вложенного цикла и вопрос задается по новой с новыми числами. И так на протяжении 30 секунд, после чего происходит выход с функции. Как можно улучшить этот код ?