Как сделать inline кнопку Telegram python aiogram

Содержание

Привет, Хабр! Продолжаю серию статей про разработку telegram-ботов на библиотеке aiogram и языке программирования Python. Хочется отметить, что статья не является документацией или учебником. Я просто рассказываю пошагово как разработать полнофункционального бота, стараясь затронуть как можно больше тем. Если вы не увидели в статье чего-то очень важного по вашему мнению — предложите рассмотреть тему в следующей статье в комментариях.

Всем приятного чтения, жду вашего мнения, критики и вопросов в комментариях.

В предыдущей части мы настроили окружение и среду разработки и теперь готовы начать писать бота. В этой статье мы создадим меню и базовую логику взаимодействия с пользователем, а также подключим API OpenAI.

Создание меню

Меню нашего бота будет реализовано с помощью inline кнопок. Для начала надо создать клавиатуру главного меню. Все клавиатуры будут храниться в файле kb.py , поэтому открываем его и пишем в него такой код:

from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove menu = [ [InlineKeyboardButton(text=» Генерировать текст», callback_data=»generate_text»), InlineKeyboardButton(text=» Генерировать изображение», callback_data=»generate_image»)], [InlineKeyboardButton(text=» Купить токены», callback_data=»buy_tokens»), InlineKeyboardButton(text=» Баланс», callback_data=»balance»)], [InlineKeyboardButton(text=» Партнёрская программа», callback_data=»ref»), InlineKeyboardButton(text=» Бесплатные токены», callback_data=»free_tokens»)], [InlineKeyboardButton(text=» Помощь», callback_data=»help»)] ] menu = InlineKeyboardMarkup(inline_keyboard=menu) exit_kb = ReplyKeyboardMarkup(keyboard=[[KeyboardButton(text=»◀️ Выйти в меню»)]], resize_keyboard=True) iexit_kb = InlineKeyboardMarkup(inline_keyboard=[[InlineKeyboardButton(text=»◀️ Выйти в меню», callback_data=»menu»)]])

Здесь мы создаём основную клавиатуру menu , сразу же добавляя все кнопки в два столбца. Есть несколько способов создания клавиатур в aiogram 3:

#4. Inline кнопки телеграм бота на Python | Aiogram

  • Передать двумерный список кнопок как аргумент при создании клавиатуры. Данный способ используется в нашем проекте для создания меню. Удобен когда клавиатура статичная и все данные для неё заранее известны.
  • Использовать Keyboard Builder. Этот способ тоже будет использоваться для создания динамических клавиатур в дальнейшем. Чтобы создать клавиатуру через Keyboard Builder можно использовать следующий код:
Еще по теме:  В уидеозвонке Телеграм не видно собеседника при видеозвонке

builder = InlineKeyboardBuilder() for i in range(15): builder.button(text=f”Кнопка ”, callback_data=f”button_”) builder.adjust(2) await msg.answer(“Текст сообщения”, reply_markup=builder.as_markup())

Здесь мы создаём Keyboard Builder и в цикле добавляем в него кнопки. builder.adjust(2) группирует кнопки в 2 столбца. Далее отправляется сообщение с созданной клавиатурой, которая из Keyboard Builder преобразовывается в Keyboard Markup функцией builder.as_markup() .

Как работать с Телеграм Inline кнопками на Python

Клавиатура создана, теперь надо написать функции для вывода приветственного сообщения и меню. Тексты сообщений, используемые в боте, мы вынесем в отдельный файл text.py , чтобы можно было менять тексты, используемые в нескольких местах в боте, через изменение одной переменной в text.py .

greet = «Привет, , я бот, использующий нейросети от OpenAI, такие как ChatGPT и Dall-e. Задавай мне вопросы и я постараюсь ответить ☺️» menu = » Главное меню»

Теперь пишем обработчики в файле handlers.py .

Если вы всё сделали правильно, то после запуска бота (через файл main.py ) вы увидите, что бот отвечает на команду /start и на слово «Меню».

Давайте подробнее разберём код, который мы написали. Первая часть файла похожа идентична предыдущей статье, а вот код обработчиков изменился. В функции start вместо отправки строки мы отправляем текст из переменной greet модуля text , причём форматируем его, подставляя имя пользователя ( msg.from_user.full_name ), а также прикрепляем к сообщению inline-клавиатуру, которую создали до этого.

Далее добавился обработчик menu . Как вы могли заметить, перед объявлением функции стоят целых три декоратора. Это означает, что функция запустится, если сработает любой из трёх фильтров. В нашем примере функция будет реагировать на сообщения с текстом «Меню», «Выйти в меню» и «◀️ Выйти в меню». В самой функции нет ничего особенного, она просто отправит текст text.menu с клавиатурой kb.menu . Пока что ни один из наших пунктов меню не работает, давайте исправим это.

Подключение API OpenAI

Сейчас мы реализуем основной полезный функционал нашего бота — работа с нейросетями. Прежде всего стоит отметить, что API не бесплатное, однако при регистрации даётся бесплатно 5$ на счёт. Для тестов нам этого вполне хватит.

Сначала надо получить токен API, для этого регистрируемся на сайте OpenAI, используя VPN и иностранный номер телефона, можно использовать виртуальный, однако не на все виртуальные номера получается зарегистрироваться. После регистрации заходим в аккаунт, в раздел View API Keys и создаём ключ API. Обязательно скопируйте и сохраните ключ в надёжном месте, так как его нельзя будет посмотреть позже, только создать новый.

После того как вы получили API Key его надо сохранить в конфиге, например в переменной OPENAI_TOKEN . Также установите библиотеку openai для работы с API

pip install openai

Теперь когда все приготовления закончены, приступим к функциям для использования API. У нас будет две функции: для генерации текста и для генерации изображений, мы поместим их в файл utils.py , так как они не привязаны к aiogram и могут рассматриваться как внешний модуль.

import openai import logging import config openai.api_key = config.OPENAI_TOKEN async def generate_text(prompt) -> dict: try: response = await openai.ChatCompletion.acreate( model=»gpt-3.5-turbo», messages=[ ] ) return response[‘choices’][0][‘message’][‘content’], response[‘usage’][‘total_tokens’] except Exception as e: logging.error(e) async def generate_image(prompt, n=1, size=»1024×1024″) -> list[str]: try: response = await openai.Image.acreate( prompt=prompt, n=n, size=size ) urls = [] for i in response[‘data’]: urls.append(i[‘url’]) except Exception as e: logging.error(e) return [] else: return urls

Еще по теме:  Могут ли посмотреть Телеграмм

Рассмотрим код подробнее. После импортов мы настраиваем библиотеку openai , давая ей наш ключ от API. Затем объявляем две функции:

  • generate_text — для генерации текста
  • generate_image — для генерации изображений

В обеих функциях используется конструкция try-catch для обработки исключений, в этом примере мы ничего не делаем, а лишь выводим ошибку в логи и возвращаем пустое значение.

Функция openai.ChatCompletion.acreate генерирует текст с помощью моделей завершения текста. В качестве параметров передаём используемую модель, в нашем случае gpt-3.5-turbo — самая дешёвая и быстрая на данный момент, и сообщения — список словарей с ключами system, user, assistant. Все переданные сообщения будут учтены при создании ответа, подробнее можете почитать в документации.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

aiogram-lessons / lesson-05 / keyboards.py /

Code definitions
Code navigation index up-to-date

  • Go to file T
  • Go to line L
  • Go to definition R
  • Copy path
  • Copy permalink

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Latest commit e380d51 Apr 3, 2018

1 contributor

Users who have contributed to this file

73 lines (56 sloc) 2.58 KB

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents Copy raw contents

Copy raw contents

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

from aiogram . types import ReplyKeyboardRemove ,
ReplyKeyboardMarkup , KeyboardButton ,
InlineKeyboardMarkup , InlineKeyboardButton
button_hi = KeyboardButton ( ‘Привет! ‘ )
greet_kb = ReplyKeyboardMarkup ()
greet_kb . add ( button_hi )
greet_kb1 = ReplyKeyboardMarkup ( resize_keyboard = True ). add ( button_hi )
greet_kb2 = ReplyKeyboardMarkup (
resize_keyboard = True , one_time_keyboard = True
). add ( button_hi )
button1 = KeyboardButton ( ‘1️⃣’ )
button2 = KeyboardButton ( ‘2️⃣’ )
button3 = KeyboardButton ( ‘3️⃣’ )
markup3 = ReplyKeyboardMarkup (). add (
button1 ). add ( button2 ). add ( button3 )
markup4 = ReplyKeyboardMarkup (). row (
button1 , button2 , button3
)
markup5 = ReplyKeyboardMarkup (). row (
button1 , button2 , button3
). add ( KeyboardButton ( ‘Средний ряд’ ))
button4 = KeyboardButton ( ‘4️⃣’ )
button5 = KeyboardButton ( ‘5️⃣’ )
button6 = KeyboardButton ( ‘6️⃣’ )
markup5 . row ( button4 , button5 )
markup5 . insert ( button6 )
markup_request = ReplyKeyboardMarkup ( resize_keyboard = True ). add (
KeyboardButton ( ‘Отправить свой контакт ☎️’ , request_contact = True )
). add (
KeyboardButton ( ‘Отправить свою локацию ️’ , request_location = True )
)
markup_big = ReplyKeyboardMarkup ()
markup_big . add (
button1 , button2 , button3 , button4 , button5 , button6
)
markup_big . row (
button1 , button2 , button3 , button4 , button5 , button6
)
markup_big . row ( button4 , button2 )
markup_big . add ( button3 , button2 )
markup_big . insert ( button1 )
markup_big . insert ( button6 )
markup_big . insert ( KeyboardButton ( ‘9️⃣’ ))
inline_btn_1 = InlineKeyboardButton ( ‘Первая кнопка!’ , callback_data = ‘button1’ )
inline_kb1 = InlineKeyboardMarkup (). add ( inline_btn_1 )
inline_kb_full = InlineKeyboardMarkup ( row_width = 2 ). add ( inline_btn_1 )
inline_kb_full . add ( InlineKeyboardButton ( ‘Вторая кнопка’ , callback_data = ‘btn2’ ))
inline_btn_3 = InlineKeyboardButton ( ‘кнопка 3’ , callback_data = ‘btn3’ )
inline_btn_4 = InlineKeyboardButton ( ‘кнопка 4’ , callback_data = ‘btn4’ )
inline_btn_5 = InlineKeyboardButton ( ‘кнопка 5’ , callback_data = ‘btn5’ )
inline_kb_full . add ( inline_btn_3 , inline_btn_4 , inline_btn_5 )
inline_kb_full . row ( inline_btn_3 , inline_btn_4 , inline_btn_5 )
inline_kb_full . insert ( InlineKeyboardButton ( «query=»» , switch_inline_query = » ))
inline_kb_full . insert ( InlineKeyboardButton ( «query=’qwerty'» , switch_inline_query = ‘qwerty’ ))
inline_kb_full . insert ( InlineKeyboardButton ( «Inline в этом же чате» , switch_inline_query_current_chat = ‘wasd’ ))
inline_kb_full . add ( InlineKeyboardButton ( ‘Уроки aiogram’ , url = ‘https://surik00.gitbooks.io/aiogram-lessons/content/’ ))
  • Copy lines
  • Copy permalink
  • View git blame
  • Reference in new issue
Еще по теме:  Как сделать бота в Телеграмм для такси

Источник: github.com

КАК СДЕЛАТЬ КНОПКИ ДЛЯ TELEGRAM БОТА НА PYTHON | AIOGRAM КНОПКИ

Всем привет! В этом видео ролике, вы узнаете, как создавать обычные кнопки для своего Telegram бота на python с помощью библиотеки aiogram. Если вы хотите, чтобы я сделал видео про то, как сделать inline кнопки, пишите в комментариях.

Комментариев нет.

Следующее

Г*внокодеры #2 | Как сделать инлайн кнопки Телеграм Бот (feat. Фсоки)

Г*внокодеры #2 | Как сделать инлайн кнопки Телеграм Бот (feat. Фсоки)

от admin 1 год назад 0 Просмотры

Библиотека Tkinter в Python | Создание кнопки на Python | Программирование на Python с нуля. Урок 7

Библиотека Tkinter в Python | Создание кнопки на Python | Программирование на Python с нуля. Урок 7

от admin 10 месяцев назад 3 Просмотры

Создал Telegram Python Бота Для Постинга Мемов | Библиотека Aiogram

Создал Telegram Python Бота Для Постинга Мемов | Библиотека Aiogram

от admin 1 год назад 107 Просмотры

Как сделать меню для Телеграм бота на aiogram Python

Как сделать меню для Телеграм бота на aiogram Python

от admin 1 год назад 39 Просмотры

Telegram бот на python - курс по созданию бота по документации aiogram и Telegram API

Telegram бот на python — курс по созданию бота по документации aiogram и Telegram API

от admin 2 недели назад 1 Просмотры

Пишем ИГРУ лабиринт с КНОПКАМИ для TELEGRAM на PYTHON . // Создание TELEGRAM бота на PYTHON

Пишем ИГРУ лабиринт с КНОПКАМИ для TELEGRAM на PYTHON . // Создание TELEGRAM бота на PYTHON

от admin 1 год назад 31 Просмотры

Парсинг динамического сайта на Python + Telegram бот на AIOGram | Requests, AIOGram, API, JSON

Парсинг динамического сайта на Python + Telegram бот на AIOGram | Requests, AIOGram, API, JSON

от admin 1 год назад 16 Просмотры

Как сделать бота для TELEGRAM на Python? | Бот модератор

Как сделать бота для TELEGRAM на Python? | Бот модератор

от admin 1 год назад 5 Просмотры

Реферальная система для Telegram бота на Python / Aiogram

Реферальная система для Telegram бота на Python / Aiogram

от admin 1 год назад 36 Просмотры

Как сделать анонимного чат бота Telegram на Python | Часть 2

Как сделать анонимного чат бота Telegram на Python | Часть 2

от admin 2 года назад 5 Просмотры

Как сделать систему регистрации для Telegram бота

Как сделать систему регистрации для Telegram бота

от admin 1 год назад 4 Просмотры

#1 Парсинг сайта + Telegram бот на aiogram | Requests, beautifulsoup, aiogram

#1 Парсинг сайта + Telegram бот на aiogram | Requests, beautifulsoup, aiogram

от admin 1 год назад 14 Просмотры

Изучение PyQT (Python GUI) / Урок #2 – Библиотека PyQT5. Надписи и кнопки

Изучение PyQT (Python GUI) / Урок #2 – Библиотека PyQT5. Надписи и кнопки

от admin 2 года назад 2 Просмотры

Запись AMA Polygon: как нажимать кнопки в DeFi скриптом на Python

Запись AMA Polygon: как нажимать кнопки в DeFi скриптом на Python

от admin 1 год назад 1 Просмотры

Как сделать локализацию бота на Python / Aiogram

Как сделать локализацию бота на Python / Aiogram

от admin 4 месяцев назад 2 Просмотры

Пишем Telegram бота на Python + Загружаем Telegram бота на сервер(хостинг)

Пишем Telegram бота на Python + Загружаем Telegram бота на сервер(хостинг)

от admin 2 года назад 10 Просмотры

СОЗДАНИЕ TELEGRAM БОТА НА PYTHON | AIOGRAM

СОЗДАНИЕ TELEGRAM БОТА НА PYTHON | AIOGRAM

от admin 1 год назад 4 Просмотры

Создаем Telegram бота (aiogram) №5. База данных 2.

Создаем Telegram бота (aiogram) №5. База данных 2.

от admin 10 месяцев назад 5 Просмотры

JS Практика - Сделать кнопки для одновременного изменения цвета, поворота, скругления, восстановлени

JS Практика — Сделать кнопки для одновременного изменения цвета, поворота, скругления, восстановлени

от admin 2 года назад 2 Просмотры

Как сделать Telegram бота за 5 минут на aiogram 3.x. Шаблон бота.

Как сделать Telegram бота за 5 минут на aiogram 3.x. Шаблон бота.

от admin 2 месяцев назад 0 Просмотры

7.5 Упорядоченные цифры.

7.5 Упорядоченные цифры. «Поколение Python»: курс для начинающих. Курс Stepik

от admin 11 месяцев назад 2,697 Просмотры

Добавить в плейлист

К сожалению, только зарегистрированные пользователи могут создавать списки воспроизведения.

Поделиться

КАК СДЕЛАТЬ КНОПКИ ДЛЯ TELEGRAM БОТА НА PYTHON | AIOGRAM КНОПКИ

КАК СДЕЛАТЬ КНОПКИ ДЛЯ TELEGRAM БОТА НА PYTHON | AIOGRAM КНОПКИ ВК — https://vk.com/svyatlis999 Всем привет! В этом видео ролике, вы узнаете, как созд.

Опубликовать в социальную сеть
Поделиться видео

Russian

  • Albanian
  • Amharic
  • Arabic
  • Brazilian
  • Bulgarian
  • Croatian
  • Danish
  • Deutsch
  • English
  • Farsi
  • Français
  • Georgian
  • Greek
  • Hebrew
  • Italian
  • Lithuanian
  • Nederlands
  • Polish
  • Portuguese
  • Română
  • Serbian
  • Slovak
  • Spanish
  • Swedish
  • Türkçe
  • Thai

Источник: best-coding.ru

Рейтинг
( Пока оценок нет )
Загрузка ...