Aiogram – это библиотека Python для создания Telegram ботов. Она предоставляет удобный и мощный интерфейс для взаимодействия с Telegram API. В этой статье мы рассмотрим наиболее распространенные методы, используемые в Aiogram.
Отправка сообщений
Для отправки сообщений в Aiogram используется метод send_message() . Он принимает два обязательных аргумента: идентификатор чата и текст сообщения. Вот пример использования этого метода:
from aiogram import Bot, types bot = Bot(token=’YOUR_API_TOKEN’) async def send_hello_message(chat_id: int): await bot.send_message(chat_id, ‘Привет, мир!’)
Отправка фото
Для отправки фото в Aiogram используется метод send_photo() . Он принимает два обязательных аргумента: идентификатор чата и объект типа InputFile . Вот пример использования этого метода:
from aiogram import Bot, types bot = Bot(token=’YOUR_API_TOKEN’) async def send_hello_photo(chat_id: int): with open(‘hello.jpg’, ‘rb’) as photo: await bot.send_photo(chat_id, photo)
Отправка клавиатуры
Для отправки клавиатуры в Aiogram используется метод send_message() , который может принимать дополнительные параметры для настройки клавиатуры. Например, для отправки простой инлайн-клавиатуры можно использовать следующий код:
Реферальная система для Telegram бота на Python / Aiogram
from aiogram import Bot, types bot = Bot(token=’YOUR_API_TOKEN’) async def send_hello_keyboard(chat_id: int): keyboard = types.InlineKeyboardMarkup() keyboard.add(types.InlineKeyboardButton(text=’Нажми меня’, callback_data=’button_pressed’)) await bot.send_message(chat_id, ‘Привет, мир!’, reply_markup=keyboard)
Получение информации о сообщении
Для получения информации о сообщении в Aiogram используется объект типа Message . Он может содержать различную информацию о сообщении, например, текст, идентификатор чата и т.д. Вот пример использования этого объекта:
from aiogram import Bot, types bot = Bot(token=’YOUR_API_TOKEN’) async def process_message(message: types.Message): chat_id = message.chat.id text = message.text await bot.send_message(chat_id, f’Вы написали: ‘)
Заключение
В этой статье мы рассмотрели наиболее распространенные методы, используемые в Aiogram. Надеюсь, эта информация была полезной для вас и поможет вам начать создание своих первых ботов с помощью Aiogram. Если у вас есть какие-либо вопросы или замечания, пожалуйста, не стесняйтесь обращаться к нам.
Источник: aiogram.ru
- Вопрос задан 17 дек. 2022
- 591 просмотр
Комментировать
Решения вопроса 0
Ответы на вопрос 1
Совершенствуюсь каждый день
Чтобы получить id пользователя через упоминание в Telegram с помощью aiogram, вам нужно будет сначала извлечь упоминание из сообщения, а затем использовать метод resolve_peer клиента для получения id пользователя.
Вот пример того, как это можно сделать:
#16. Регистрация пользователей в телеграм боте на Python | Aiogram
Код написан довольно костыльно, не могу не согласится, но для примера сгодится.
Ответ написан 21 дек. 2022
user_id = await bot.resolve_peer(mention.group(1)) ^^^^^^^^^^^^^^^^ AttributeError: ‘Bot’ object has no attribute ‘resolve_peer’
Какую версию aiogram вы используете?
Uni0005, забыл упомянуть, что resolve_peer нет в aiogram, для получения этой функции нужно использовать pyrogram. Но вы можете сохранять username пользователя в базу данных вместе с id, и при надобности извлекать эти значения.
Источник: qna.habr.com
Aiogram сообщение по id
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.
А также воспользуемся логированием, дабы посмотреть, что происходит под капотом.
Если вы собираетесь работать с отправкой эмоджи, и делать это не по их коду, например ‘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.
Рассмотрим следующий код:
Давайте запустим с ним бота:
Функция cmd_test2 не работает, т.к. диспетчер о ней не знает. Исправим эту ошибку и отдельно зарегистрируем функцию:
Снова запустим бота:
Обработка ошибок¶
За эти 10 секунд пользователь может успеть заблокировать бота со своей стороны и попытка вызвать метод reply приведёт к появлению исключения BotBlocked . Напишем специальный хэндлер для этого исключения:
Аналогично пишутся обработчики и на другие исключения. Таким образом, если одна и та же непредвиденная ситуация может возникнуть в различных хэндлерах, то можно вынести её обработку в отдельный хэндлер ошибок. Кода будет меньше, а оставшийся станет читабельнее.
У errors_handler есть одна особенность, из-за которой его использование может быть нежелательно. Дело в том, что после срабатывания и завершения хэндлера, управление в исходную функцию не возвращается. Проще говоря, если, например, 57-я итерация цикла из 100 привела к срабатыванию errors_handler, остальные итерации выполнены не будут, как и весь остальной код исходной функции. В этом случае ничего не остаётся, кроме как использовать try..except .
Синтаксический сахар¶
что значит ‘message: types.Message’ ?
Python является интерпретируемым языком с сильной, но динамической типизацией, поэтому встроенная проверка типов, как, например, в C++ или Java, отсутствует. Однако начиная с версии 3.5 в языке появилась поддержка подсказок типов, благодаря которой различные чекеры и IDE вроде PyCharm анализируют типы используемых значений и подсказывают программисту, если он передаёт что-то не то. В данном случае подсказка types.Message соообщает PyCharm-у, что переменная message имеет тип Message , описанный в модуле types библиотеки aiogram (см. импорты в начале кода). Благодаря этому IDE может на лету подсказывать атрибуты и функции.
Но теперь ваш бот не запустится, т.к. будет сразу завершаться с ошибкой Error: no token provided . Чтобы передать переменную окружения в PyCharm, откройте сверху раздел Run -> Edit Configurations и добавьте в окне Environment Variables переменную с именем BOT_TOKEN и значением токена.
Запустите снова бота и убедитесь, что он работает. Получившийся код можно смело сохранять в PyCharm в File Templates.
На этом мы закончим знакомство с библиотекой, а в следующих главах рассмотрим другие «фишки» aiogram и Telegram Bot API.
- Сообщение о музее современного искусства
- Сообщение о бытовой одежде
- Сообщение о видном деятеле ссср в годы оттепели или развитого социализма
- Сообщение о художнике ссср кратко
- Роботы 3 поколения сообщение
Источник: obrazovanie-gid.ru