Aiogram сообщение по id

Обновлено: 05.07.2024

Chat-клиент, chat-сервер
Доброго времени суток. Задача - написать чат-сервер и чат-клиент на сокетах. Клиент и сервер.

Решение

Как в aiogram сохранить данные для нулевого состояния FSM?
Здравствуйте. Возник вопрос, как сохранять пользовательские данные в машине состояний при нулевом.

Как к инлайн кнопке Python telegram bot на aiogram сделать выполнение функции другого кода
Я нашел простой пример парсера(код и результат на картинке) и у меня вопрос, как сделать так, что.

Где можно найти статью как написать PHP-CHAT на IRCe?
Привет! Кто нить знает где можно найти статью как написать PHP-CHAT на IRCe.Если конечно такое.

Webhooks aiogram
Пожалуйста помогите разобраться с установкой вебхуков для aiogram. Взял этот пример import.

Нужно получить id пользователя, который использует бота. Как можно это сделать в aiogram?


1 ответ 1

введите сюда описание изображения

Всё ещё ищете ответ? Посмотрите другие вопросы с метками python telegram-bot aiogram или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2022 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2022.3.1.41564

А также воспользуемся логированием, дабы посмотреть, что происходит под капотом.

Если вы собираетесь работать с отправкой эмоджи, и делать это не по их коду, например '\U0001F31A' , а пользоваться наглядными названиями как :new_moon_with_face: , то необходимо установить библиотеку emoji , для этого воспользуемся командой pip install emoji (или командой python3.6 -m pip install emoji , если у вас установлено несколько интерпретаторов питона).

Зачем хранить айди файлов, которые мы отправляем?

Наконец-то код!

Для начала создаем модель таблицы для нашей базы данных. Файл db_map.py:

Теперь загружаем в Телеграм файлы и сохраняем возвращаемые айди в базу данных. Для этого я написал небольшой скрипт, который доступен по ссылке. Если будете исполнять его на своём компьютере, можете обратить внимание на то самое логирование библиотеки aiogram.

Вот результат выполнения скрипта:


Представим, что в базе данных было ещё несколько полей, по которым вы в коде будете получать необходимые данные. Теперь переходим к основному коду бота. Так как создание логики запросов к БД - не тема этих уроков, допустим, что вы получили данные при старте программы и записали их в переменные (строки кода 17 - 26).

Создаем хэндлер команд /start и /help :

Обращу внимание читателя на то, что в ответе на команду /help мы воспользовались новыми методами: text и bold . Эти на первый взгляд простые функции сильно упрощают работу с генерацией текста. Первая склеивает в одно целое все передаваемые ей строчки, перемежая сепаратором (по умолчанию пробел, в таких случаях переменную sep вообще не нужно указывать), а вторая обрамляет входящую строчку метками для жирного текста (в данном примере используется разметка Markdown, поэтому это символы * . Для HTML теги будут другие). По аналогии работают методы italic , code и pre для Markdown и аналогичные для HTML. А чтобы Телеграм понял, что эти символы здесь не просто так, но обозначают разметку, мы явно указываем тип этой самой разметки: parse_mode=ParseMode.MARKDOWN . Напомню, что все необходимые импорты можно посмотреть по ссылке.

Затем добавляем обработчики всех остальных команд

О каждой по отдельности (за одно разберем эмоджи):


Отправка фото с комментарием + эмоджи:

Тут мы дополнительно передаем данные в параметр caption , предварительно преобразовав текст, чтобы получить эмоджи из его кода. Теперь от простого переходим к более сложному.


Отправка медиагруппы (где смешались кони, люди фото и видео):

Итак, что же произошло в коде? Для начала создаем массив и кладем в него один элемент типа InputMediaVideo . Первый входной параметр - само видео (в данном случае айди), а второй элемент - caption (его передавать не обязательно). Дальше в цикле заполняем массив элементами типа InputMediaPhoto . Их создаем без подписи, тем самым делаем так, что всей медиагруппе принадлежит комментарий, оставленный к первому медиа. Затем просто в нужный метод передаем массив элементов. Можно, конечно, ещё было передать сразу медиагруппу, сделав MediaGroup(media) , но так как библиотека делает это сама, то какой смысл писать лишний код и делать лишний импорт?


Отправка видеозаметки (видео в кружочке):


Отправка файла:

Тут как и в предыдущем примере предполагаем, что файл нужно ещё откуда-то достать или, может, сгенерировать, поэтому снова отправляем chatAction , выжидаем драматичную паузу и отправляем сам файл.


Преформатированный текст:

Так как разметка тут немного шалит, приложу ещё и скриншот кода с более понятной подсветкой синтаксиса: Тут мы отправляем преформатированный текст. Обычно такая разметка необходима при отправке блоков кода. По сути, это тот же моноширинный шрифт как и при использовании code (рассмотрим его ниже), однако pre работает для многострочных вставок и автоматически отделяется переносом строки до и после. В качестве примера отправим данную же функцию с её хэндлером. Получаем такой результат:

Ну и напоследок немного улучшим знания, полученные в предыдущем уроке и закрепим их на деле:


Домашнее задание

В качестве домашнего задания предлагаю вам поэкспериментировать и выполнить следующие действия:

help! я создал 20 deep_link’ов, а потом не нашел функции их удаления! Как от них избавиться?

Можете пж подсказать как из любого текста выбрать только числа? Тип у меня есть:. [(99999,)] Нужно число 99999

Ребят, вопрос, не по ботам, вобщем по телеге. Телеграм сейчас у всех работает так дерьмово? У меня Интернет работает прекрасно, но только не телеграм. Скорость загрузки до 100.

с компа видое в норм разрешении, а с телефона жмых. Отправляю байтами. С чем может быть связано?

Подскажите пожалуйста, первый раз пишу код чтобы он норм работал асихронно. как привильно сделать конектиться один раз к базе в самом начале скрипта или же в каждой асихронной.

Для начала давайте создадим каталог для бота, организуем там virtual environment (далее venv) и установим библиотеку aiogram.
Проверим, что установлен Python версии 3.7 (если вы знаете, что установлен 3.8 и выше, можете пропустить этот кусок):

О версиях aiogram

В этой главе используется aiogram версии 2.9.2, но перед началом работы рекомендую заглянуть в канал релизов библиотеки и проверить наличие более новой версии. Подойдёт любая более новая, начинающаяся с цифры 2, поскольку в будущем ожидается релиз aiogram 3.0 с заметными изменениями и без обратной совместимости.
Чтобы избежать неприятностей, зафиксируемся на 2.9.2 и далее будем обновляться вручную.

Обратите внимание на префикс "venv" в терминале. Он указывает, что мы находимся в виртуальном окружении с именем "venv". Проверим, что внутри venv вызов команды python указывает на всё тот же Python 3.7:

Последней командой deactivate мы вышли из venv, чтобы он нам не мешал.

Первый бот¶

Давайте создадим файл bot.py с базовым шаблоном бота на aiogram:

Первое, на что нужно обратить внимание: aiogram — асинхронная библиотека, поэтому ваши функции тоже должны быть асинхронными, а перед вызовами методов API нужно ставить ключевое слово await, т.к. эти вызовы возвращают корутины.

Асинхронное программирование в Python

Не стоит пренебрегать официальной документацией!
Прекрасный туториал по asyncio доступен на сайте Python.

Рассмотрим следующий код:

Команда /test2 не работает

Давайте запустим с ним бота:

Функция cmd_test2 не работает, т.к. диспетчер о ней не знает. Исправим эту ошибку и отдельно зарегистрируем функцию:

Обе команды работают

Снова запустим бота:

Обработка ошибок¶

За эти 10 секунд пользователь может успеть заблокировать бота со своей стороны и попытка вызвать метод reply приведёт к появлению исключения BotBlocked . Напишем специальный хэндлер для этого исключения:

Аналогично пишутся обработчики и на другие исключения. Таким образом, если одна и та же непредвиденная ситуация может возникнуть в различных хэндлерах, то можно вынести её обработку в отдельный хэндлер ошибок. Кода будет меньше, а оставшийся станет читабельнее.

У errors_handler есть одна особенность, из-за которой его использование может быть нежелательно. Дело в том, что после срабатывания и завершения хэндлера, управление в исходную функцию не возвращается. Проще говоря, если, например, 57-я итерация цикла из 100 привела к срабатыванию errors_handler, остальные итерации выполнены не будут, как и весь остальной код исходной функции. В этом случае ничего не остаётся, кроме как использовать try..except .

Синтаксический сахар¶

Разница между message.answer() и message.reply()

что значит 'message: types.Message' ?

Python является интерпретируемым языком с сильной, но динамической типизацией, поэтому встроенная проверка типов, как, например, в C++ или Java, отсутствует. Однако начиная с версии 3.5 в языке появилась поддержка подсказок типов, благодаря которой различные чекеры и IDE вроде PyCharm анализируют типы используемых значений и подсказывают программисту, если он передаёт что-то не то. В данном случае подсказка types.Message соообщает PyCharm-у, что переменная message имеет тип Message , описанный в модуле types библиотеки aiogram (см. импорты в начале кода). Благодаря этому IDE может на лету подсказывать атрибуты и функции.

Всё хорошо, но если вдруг вы захотите поделиться с кем-то кодом, то придётся каждый раз помнить об удалении из исходников токена бота, иначе придётся его перевыпускать у @BotFather. Чтобы обезопасить себя, давайте перестанем указывать токен прямо в коде, а вынесем его как переменную окружения.
Замените следующие строчки из начала файла:

Но теперь ваш бот не запустится, т.к. будет сразу завершаться с ошибкой Error: no token provided . Чтобы передать переменную окружения в PyCharm, откройте сверху раздел Run -> Edit Configurations и добавьте в окне Environment Variables переменную с именем BOT_TOKEN и значением токена.

Разница между message.answer() и message.reply()

Запустите снова бота и убедитесь, что он работает. Получившийся код можно смело сохранять в PyCharm в File Templates.

На этом мы закончим знакомство с библиотекой, а в следующих главах рассмотрим другие "фишки" aiogram и Telegram Bot API.

Читайте также: