Python Telegram Bot
Open in Telegram
☑️ Заявки принимаются автоматически! Обучаем созданию и продвижению чат-ботов в телеграм. ссылка: @pybotg связь: @oksi_young https://telega.in/channels/+Mj_twnrYuAxkZmUy/card/?r=BrHKEWMo
Show more5 003
Subscribers
No data24 hours
-67 days
+1730 days
Posts Archive
5 003
Финал поста выше
Теперь, давайте проверим, как все это работает. Заходим в
config.py и запускаем бота. Все те ошибки, которые у нас были прописаны в start.py бот нам вывел.
Для чего это может быть полезно? Если вы хотите фиксировать эти ошибки, но не выводить их, то данная функция поможет вам с этим, фиксируя ошибки там, где вам нужно. Ну или например, у вас появилась какая то незарегистрированная ошибка, то бот автоматически отправит ее в хендлер ошибок, который имеет вид logging.exception(f"Update: {update} \n{exception}').
В данный хендлер летят все необработанные или незарегестрированные ошибки, возникающие при работе бота.5 003
Сделайте сообщения об ошибках полезными
После фразы о том, что у бота что-то не получилось, добавьте какое-то предложение пользователю, хотя бы «вернуться в главное меню». Не оставляйте тупиков, об этом говорилось выше.
5 003
Оператор del
Существует способ удаления элемента из списка с учетом его индекса вместо значения: оператор
del. В отличие от метода pop(), она не возвращает значение. Оператор del может также использоваться для удаления слайсов из списка или полной очистки списка (что мы делали ранее через присваивание пустого списка слайса) (Код 1).
del также можно использовать для удаления целых переменных (Код 2).
Ссылка на имя a в дальнейшем вызовет ошибку (по крайней мере до тех пор, пока с ним не будет связано другое значение).
#python_обучение5 003
Питонизация - канал с пакетами для Python.
Полезно тем, кто хоть немного знаком с питоном или хочет с ним познакомиться.
Большинство инструментов уже написали за вас, остаётся только брать и использовать.
Подпишись, чтобы не писать велосипеды и экономить сотни или тысячи часов!
https://t.me/+32FrwNHyAxMwMmVi
5 003
Продолжение к посту выше
Условие будет иметь следующий вид:
if isinstance(exception, CantDemoteChatCreator): logging.debug("Can't demote chat creator") return True. В общем, это стандартые ошибки, на которые вы пишите стандартные ответы.
Далее рассмотри еще одну ошибку, которая реагирует на неправильно введенные теги для парсинга. Ее название CantParseEntities. Для нее условие будет выглядеть следующим образом: if ininstance(exception, CantParseEntities): await Update.get_current().message.answer(f"Попало в хендлер ошибок. CantParseEntities: {exception.args}").
В данном условии мы получаем текущий апдейт с помощью контекстных переменных и отвечаем пользователю с передачей аргументов, которые выдали ошибку. Ну и конечно же, мы возвращаем True для того, чтобы эта ошибка опять не повторялась и не крутилась вечно в вебхуке.5 003
4PDA теперь в Telegram!
4PDA – крупнейший в рунете тематический ресурс, посвященный технологиям, приложениям и кодингу. Специально для программистов у них появился официальный канал в телеграм, где вы увидите сливы платных курсов, интересные статьи и много другого!
Подписывайтесь: @4pda_forum
5 003
☑️ Телеграм бот
• Бюджет: 10 000₽
• Срок: 07.11.22
• Задача:
В канале – кнопки бота:
I. Создать игру
II. Мои игры
III. Ближайшие игры
IV. Полезная информация
I “Создать игру”
Бот кидает в личку вопросы:
1) Название игры (через открытый поисковик tesera.ru) (фото №4)
2) Дата: ( предлагает вариант ближайших 7 дней (даты) + «свой вариант» – дд.мм.гг.)
3) Время (предлагает варианты 13:00, 13:30, 14:00, 18:30, 19:00,19:30, «свой вариант» – чч.мм.
4) Кол-во игроков (указать число)
5) Сложность: предлагает три вариант ответа:
А) «Правила простые. Игра быстрая»
Б) «Правила содержат много нюансов. Партия может быть более 1,5 часов»
В) «Сложные правила. Возможно очень длинная партия» ......
Откликнуться
5 003
Продолжение к посту выше
В самом файле много разного текста, давайте разбираться подробнее. Начнем с импортов. В хендлер ошибок импортирован
logging, из aiogram.types импортирован Update и из loader - dp, то есть наш диспачер. На самом деле, регистрация хендлера ошибок ничем не отличается от регистрации обычного хендлера.
Далее, нас встречает асинхронная функция async def errors_handler(update, exception), которая принимает 2 параметра: update - пришедший апдейт, exception - исключения, которые выбил апдейт.
Из aiogram.utils.exception импортируются всевозможные ошибки и с помощью обычного условного оператора происходит сравнение на соответствие одной из них. В следующем посте покажем на примере одно из ошибок, а точнее на CantDemoteChatCreator, то есть невозможность понижения должности создателя чата.5 003
Используйте изображения
Сейчас добавить изображение можно на всех платформах, в том числе в СМС. Картинка привлекает внимание к сообщению и в связке с подписью эффективнее, чем просто текст. Но не злоупотребляйте.
5 003
Станьте Python-разработчиком на Хекслете
✔ Пройдите бесплатные вводные курсы, чтобы познакомиться с профессией.
✔ Если понравится — присоединяйтесь к обучению в группе с наставником
✔ Развивайте нетворкинг в 26-тысячном сообществе айтишников
✔ Выполняйте проекты, участвуйте в Open Source, готовьтесь к трудоустройству
P.S. Вводные курсы профессии доступны бесплатно сразу после регистрации. Оцените формат и решите, стоит ли продолжать!
5 003
Вложенные списковые включения
Первое выражение в списковом включении может быть любым произвольным выражением, включая другое списочное включение.
Рассмотрим Код 1 - пример матрицы 3x4, реализованной в виде 3 списков списка длины 4.
Следующее списковое включение будет преобразовывать строки и столбцы Код 2.
#python_обучение
5 003
Одна из крутых возможностей
aiogram - это хендлер ошибок, который позволяет в случае некоторых ошибок не то что не падать боту, но еще и как то на них реагировать. Тогда, если вы никак не обработали хендлер, то он попадет в хендлер ошибок, где с ним можно что угодно сделать. Таким образом, в этих постах мы будем разбирать ветку errors handler.
У нас остался лишь хендлер для команды старт, где у нас все импортировано по умолчанию, но, в добавок к этому, еще импортирован logging для того, чтобы как то показать, что происходит в логах.
Давайте, наконец, разберем, что за хендлер ошибок и для чего он. Мы заходим в handlers/errors/errors_handler.py. Опять же, файл errors_handler.py уже зарегестрирован в ините.5 003
Одна из крутых возможностей
aiogram - это хендлер ошибок, который позволяет в случае некоторых ошибок не то что не падать боту, но еще и как то на них реагировать. Тогда, если вы никак не обработали хендлер, то он попадет в хендлер ошибок, где с ним можно что угодно сделать. Таким образом, в этих постах мы будем разбирать ветку errors handler.
У нас остался лишь хендлер для команды старт, где у нас все импортировано по умолчанию, но, в добавок к этому, еще импортирован logging для того, чтобы как то показать, что происходит в логах.
Давайте, наконец, разберем, что за хендлер ошибок и для чего он. Мы заходим в handlers/errors/errors_handler.py. Опять же, файл errors_handler.py уже зарегестрирован в ините.5 003
Из чего состоит стратегия продвижения
Тактика на первые месяцы работы: что, когда и зачем делать, какие результаты должны быть
• Контент-стратегия - какой контент публиковать и зачем
• Рекламная стратегия - кого и как привлекать, как получать продажи
• Визуальная концепция - оформление сообщества и публикаций
• Критерии оценки результатов - какие метрики учитывать, что считать успехом
5 003
Финал поста выше
Ответ пользователю будет происходить по следующему сценарию:
await message.answer("Спасибо за ваши ответы"). После чего, нам нужно предоставить пользователю его ответы: awat message.answer(f"Ответ 1: {answer1}"), await message.answer(f"Ответ 2: {answer2}").
Теперь, для того, чтобы пользователь не оставался все время в состоянии ответа на 2 вопрос, мы должны его сбросить. Есть, опять же, несколько вариантов как это сделать. 1 вариант более простой: await state.finish(), то есть, у нас сбрасывается состояние и данные, которые в нем сохранены. 2 вариант: await state.reset_state(), который тоже сбросит состояние и все данные. 3 вариант используется в том случае, если вам нужно сбросить состояние, но не сбрасывать данные: await state.reset_state(with_data=False).