1LIK, да? В том числе если послать несколько сообщений? В том числе с разных учёток?
В любом случае, мысль в том, что после того, как response() отработает, get_photo() останется и будет лезть в обработку фото, возможно, мешая другим частям бота. Используй FSM, опиши get_photo() отдельно, и проверяй, что пользователь выполнил нужные предыдущие шаги.
Не говоря уже о том, что для КАЖДОГО вызова response() питон будет создавать новую копию get_photo() и привязывать её к боту. Бот выберет одну из этих копий (зависит от реализации, первую или последнюю), но остальные-то никуда не денутся. Так что будет утечка памяти со временем.
ElezthemDev, т.е. у тебя print() ничего не выводит? Значит, текст выводится самим discord.py, а твой print() не выполняется вообще. А это значит, у тебя on_command_error() просто не вызывается в нужный момент, и проблема именно в этом, а не в твоём коде внутри on_command_error().
Выясняй почему. Попробуй сделать минимального бота, у которого одна команда, которая всегда выбрасывает исключение, и прикрути к нему обработчик ошибок. Если заработает - ищи разницу со своим кодом. Если нет - надо будет копать дальше.
он пишет это в консоли
Command raised an exception: Forbidden: 403 Forbidden (error code: 50013): Missing Permissions
Я спрашиваю, этот текст выводится в результате выполнения строки print(error)?
Если эту строку закомментировать, он всё равно выводится, или перестаёт?
Это позволит ответить на важный вопрос: у тебя вообще управление передаётся внутрь on_command_error(), или нет?
qw1klyy, да, нужен. Но ему не место в обработчике команды. Кури asyncio.create_task().
На крайний случай, храни ссылку на полученный таск в глобальной переменной, и проверяй её содержимое при выполнении команды. Тогда ты сможешь понять, выполняется у тебя сейчас цикл или нет, и выполнить соответствующее действие (ну или не выполнять).
qw1klyy, угу, поддерживаю Everything_is_bad. Запускай цикл проверки непосредственно при старте бота, клади последний результат куда-то (в глобальную переменную, в БД или ещё куда), а по команде просто бери этот результат и выдавай пользователю.
Впрочем, в коде я не вижу, зачем тебе вообще цикл. Проверка баланса - разовое действие вроде.
С помощью получению номера на котором находится строка с e-mail он получает пароль блягодаря getline(из другого файла), но когда я ввожу верные данные он выводит ошибка.
А теперь ещё раз, медленно, и по-русски, пожалуйста.
Если быть точным, то не для выделения памяти, а для получения экземпляра объекта. Причем не обязательно через создание нового экземпляра того же класса.