Хочу описать несколько ошибок, с которыми я столкнулся при разработке бота для телеграм. Они популярные, но все таки запишу для себя чтобы не забыть.
Это глобальные переменные, большие тексты и отсутствие try/except.
Если ботом планируете пользоваться не только Вы, никогда не используйте глобальные переменные. Особенно, если в боте будет личная (персональная) информация. Пример: бот запрашивал имя, любое число и город. Данные сохранялись в переменные и потом выводились в конце пользователю для подтверждения.
В моем коде были глобальные переменные и пользователи могли видеть чужую информацию! Это происходило при одновременном обращении к боту. Для решения этой задачи нужно использовать классы или передавать переменные в функциях.
Я создавал новый массив и наполнял его на каждом шагу (использовал register_next_step_handler ). Первый ответ пользователя (имя) я передавал на второй шаг, дальше (число и имя с 1 шага) передавал на третий. И в конце уже разбивал данные.
Некоторые пользователи получали ошибки и заказчик толком не мог объяснить в чем причина. Дописав лог, проанализировал скриншоты я понял, что в причина в отсутствии логина telegram. Я не использовал try/except при выводе логина.
get_tg_login = mess.chat.username text = u'\U0001F531' + "<b>Введите Ваш <u>логин</u> в телеграме.</b>\n"+ u'\U0001F198'+"Если его нет, зайдите в настройки телеграма и введите имя пользователя, оно начинается с @...\n" try: text += u'\U00002049' + " <b>Может это " + get_tg_login + "?</b>" except: pass
На unicode (для смайлов) и разметку не обращайте внимание. При выводе использовал parse_mode= ‘Html’.
Запомните — для ответа пользователю в телеграм есть ограничение в 4096 символов! Я этого не знал. На выходных обратился ко мне заказчик и сказал что не мог получить данные по заказам (выгружали заявки за пару недель).
Решил разбивкой сообщения на несколько.
if len(text2s) > 4096: for x in range(0, len(text2s), 4096): bot.send_message(call.from_user.id, text2s[x:x+4096], parse_mode='Html') else: bot.send_message(call.from_user.id, text2s, parse_mode='Html')
Отправляем частями или отсылаем 1 сообщение.
Если бы не заказчики, я бы и не обратил внимания.
А с какими ошибками Вы сталкивались и как решали?
Очень много разговоров в последнее время за токен NOT. Много бирж будут делать листинг токена,…
Телеграм недавно запустил возможность стейкать (замораживать) USDT и получать за это их валюту TON. Очень…
Биржа криптовалют Binance проводит сейчас промо-акцию: новым пользователям дают ваучеры в сумме 110 долларов. Деньги…
Самый главный момент в работе с youtube - это получить ключ api через консоль разработчика…
Арендую сервер для небольшого проекта на python. И вот приходит мне уведомление, что за сутки…
Тестирую одну схему, и нужно на много видео наложить watermark. Решил делать через Python 3,…