Python Telegram Bot
前往频道在 Telegram
☑️ Заявки принимаются автоматически! Обучаем созданию и продвижению чат-ботов в телеграм. ссылка: @pybotg связь: @oksi_young https://telega.in/channels/+Mj_twnrYuAxkZmUy/card/?r=BrHKEWMo
显示更多5 003
订阅者
无数据24 小时
-67 天
+1730 天
帖子存档
5 003
Ребят, хватит спамить личку с вопросами о сливах Skillbox, GeekBrains, Skillfactory и других
Все курсы давно лежат ТУТ, залиты на ютуб по приватной ссылке.
➡️ Ссылка для удобства.
5 003
А в этих постах мы более подробно покажем как скачивать фото и видео разными способами, а так же, как их отправлять и формировать из них альбомы.
Для этого нам понадобится хендлер в папке
users. Там мы создадим файл sending_cats.py(потому что, ради примера мы будем отправлять фото и видео котиков 😺).
Пишем хендлер, в котором мы будем доставать айдишники наших фото: @dp.message_handler(content_types=ContentType.PHOTO) async def get_file_id(message: Message): await message.reply(message.photo[-1].file_id).
Для видео делаем точно так же, но с небольшими изменениями: меняем content_types с PHOTO на VIDEO и вместо message.photo[-1].file_id пишем message.video.file_id. Таким образом мы получим айдишники фото и видео, и сможем их отправлять/пересылать5 003
Журнал Академии Яндекса — интересно об IT
Помогает молодым IT-специалистам работать с удовольствием и эффективно
→ Расскажет, как попасть в компанию, которая вдохновляет.
→ Научит правильно организовать работу, расти в глазах коллег (и профессионально).
→ Поможет на лету решать проблемы, стать своим в сообществе и работать без стресса.
→ Покажет, как устроена работа в Яндексе изнутри — с точки зрения команд, продуктов и технологий.
→ Подсветит гиковские темы: от старых компьютерных игр до редких языков программирования.
Подписывайтесь, чтобы не пропустить свежие публикации!
5 003
Финал поста выше
Продолжаем писать хендлер:
async def catch_doc(message: types.Message): await message.document.download() await message.reply("Документ скачан\n" f"FILE ID - {message.document.file_id}", parse_mode="HTML").
Теперь сделаем хендлер для аудио сообщений: @dp.message_handler(content_types=types.ContentType.AUDIO) async def catch_audio(message: types.Message): await message.auido.download() await message.reply("Аудиозапись скачана\n" f"FILE ID - {message.audio.file_id}", parse_mode="HTML").
Подобным образом можно сделать хендлеры на видео и фото. Ну и последнее, что мы можем сделать - ловить все оставшееся: @dp.message_handler(content_types=types.ContentType.Any) async def catch_any(message: types.Message): await message.reply(f"Вы прислали ... {message.content_type}")
Далее, импортируем файл в инициализатор, запускаем бота и тестируем5 003
Определение очищающих действий. Часть 2
В следующих пунктах рассматриваются более сложные случаи возникновения исключения:
— Если исключение вызывается во время выполнения предложения
try, исключение может обрабатываться предложением except. Если исключение не обрабатывается предложением except, оно повторно создаётся после выполнения блока finally.
— При выполнении блока except или else может возникнуть исключение. Это исключение вновь вызывается после выполнения блока finally.
— Если try оператор достигает break, continue или return оператора, то finally уточнение будет выполняться непосредственно перед выполнением break, continue или return операторами.
— Если finally блок будет включать return оператор, возвращаемое значение будет из return оператора finally, не значение из блока return оператор try.
Более простой пример приведен на фото к посту.
#python_обучение5 003
Определение очищающих действий. Часть 2
В следующих пунктах рассматриваются более сложные случаи возникновения исключения:
— Если исключение вызывается во время выполнения предложения
try, исключение может обрабатываться предложением except. Если исключение не обрабатывается предложением except, оно повторно создаётся после выполнения блока finally.
— При выполнении блока except или else может возникнуть исключение. Это исключение вновь вызывается после выполнения блока finally.
— Если try оператор достигает break, continue или return оператора, то finally уточнение будет выполняться непосредственно перед выполнением break, continue или return операторами.
— Если finally блок будет включать return оператор, возвращаемое значение будет из return оператора finally, не значение из блока return оператор try.
Более простой пример приведен на фото к посту.
#python_обучение5 003
Продолжение к посту выше
Для того, чтобы ловить видео и фото одновременно, есть несколько способов: использовать сразу несколько декораторов, либо таким способом:
content_types=types.ContentTypes.VIDEO | types.ContentTypes.PHOTO).
Разница ContentType от ContentTypes в том, что первое будет передаваться в виде простой строки, а второе в виде списка строк. На этом теория все, приступим к практике.
В папке users создаем файл catch_media.py, куда мы будем ловить разные типы передаваемых данных. Для начала создадим какое то подобие эхо хендлера: @dp.message_handler() async def catch_text(message: types.Message) await message.answer("Вы прислали текст")
Теперь, если вдруг пользователь захочет прислать документ, мы подготовим для этого хендлера, который допишем в следующем посте: @dp.message_handler(content_types=types.ContentType.DOCUMENT)5 003
📞Слив курсов от Yandex и Tinkoff уже на канале!!!!
Подписывайся на канал и изучай любимые языки программирования совершенно 🎁бесплатно🎁.
➡️ Смотреть курсы⬅️
5 003
Определение очищающих действий. Часть 1
У оператора
try есть другой необязательный блок, предназначенный для операций очистки, которые нужно выполнить независимо от условий (ФОТО)
Если присутствует finally блок, finally блок будет выполняться как последняя задача перед завершением try оператором. Блок finally работает, производит ли try оператор исключение или нет5 003
В данной серии постов мы поговорим про работу с Content Type. Как мы говорили и раньше, в обычный
message_handler могут попадать различные типы сообщение: обычный текст, фото, видео, аудио, стикеры, gif и м.д.
По умолчанию, если вы никаких фильтров не указывали, то в message_handler будут лететь только текстовые сообщения, остальной контент будет просто лететь мимо, что заметно в реакции бота(он будет молчать). Данное поведение хендлера обусловленно тем, что в message_handler по умолчанию стоит ContentType.Text. Ну а для того, чтобы ловить другие виды сообщений, вам явно нужно будет указать content_types.
Туда можно засунуть, например, видео: content_types="video", ну или обмазаться константами, которые предлагает сам aiogram: content_types=types.ContentType.VIDEO5 003
📌 Бесплатно освойте профессию дизайнера с нуля. Вместе сделаем вам портфолио из 4+ работ с личной поддержкой от наставника.
Что вы получите?
— Фидбэк (мощный разбор всех ДЗ от куратора)
— Тусовка (личный кабинет с уроками + живой чат)
— Портфолио и экзамен (упакуем по урокам и проверим)
— Мастер-класс "как заработать на дизайне" и найти клиента
🔥 Будем делать: веб-дизайн, графический дизайн, анимацию интерфейсов.
→ Начать обучение бесплатно
Программа бесплатного курса:
— Обучение по Figma с нуля и 4+ дз с личным разбором
— Изучение основ дизайна (контент, сетки, композиция т.д.)
— Создание анимации интерфейса
— Все о профессии и доходе дизайнера (как найти клиентов и сколько можно заработать)
👉 Первый урок уже сегодня, кликайте сюда и забирайте все бонусы
5 003
Финал поста выше
А вот и хендлер на случай отмены админом публикации поста:
@dp.callback_query_handler(post_callback.filter(action="cancel"), user_id=admins) async def decline_post(call: CallbackQuery): await call.answer("Вы отклонили этот пост.", show_alert=True) await call.edit_replay_markup()
Если сильно захотеть, то в нашем post_callback можно еще прописывать айдишники пользователя, то есть нужно немного изменить сам callback. Но это понадобится на тот случай, если вы захотите оповещать пользователя о том, что его пост отклонен. Хотя, это не обязательно и наш бот и без этого будет работать нормально.
На этом заканчиваем с хендлерами. Импортируем их в users: from .poster import dp и идем тестить бота. Все работает как надо, посты отправляются, принимаются админами и публикуются5 003
Исключения, определенные пользователями
В программах можно определять свои собственные исключения, посредством создания нового класса исключения. В общем случае, исключения должны наследоваться от класса
Exception явно или неявно.
Классы исключений могут быть определены так, чтоб делать всё, что делают любые другие классы, но обычно их внутренняя структура довольно проста, и предоставляет лишь некоторые атрибуты, которые позволяют обработчикам исключения извлекать информацию об ошибке.
Большинство исключений определяется с именем оканчивающееся на «Error», подобно именованию стандартных исключений.
Многие стандартные модули определяют свои собственные исключения для сообщения об ошибках, которые могут происходить в функциях, что они определяют.
#python_обучение5 003
Есть 2 способа выучить Python:
1. Платить за дорогие курсы и втыкать в обучающие ролики на ютубе. Напичкать себя теорией, но так и не научиться кодить.
2. Читать канал Python Teacher.
Здесь вы в коротких постах впитаете все алгоритмы, освоите разные библиотеки и фишки языка. А это уже заявочка на хорошую работу.
Много реальных примеров и готового кода, переходи и прокачивай скиллы! @python_teacher
5 003
Продолжение к посту выше
Продолжаем писать хендлер:
@dp.callback_query_handler(post_callback.filter(action="post"), user_id=admins) async def approve_post(call: CallbackQuery): await call.answer("Вы одобрили этот пост", show_alert=True).
Теперь мы выбираем какой то канал, в который хотим отправить это сообщение. Для этого пишем в этом же хендлере: target_channel = channels[0].
Далее, чтобы отправить отформатированное нужным способом сообщение, которое пришло админу, мы делаем следующее: message(данная переменная будет хранить чистое сообщение без инлайн кнопок) = await call.message.edit_replay_markup() await message.send_copy(chat_id=target_channel). На случай, если админ отменил публикацию поста, мы напишем отдельный хендлер в следующем посте