• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Создание телеграм ботов. AioGram.

baykal

(L2) cache
Пользователь
Регистрация
16.03.2021
Сообщения
370
Реакции
838
Всех приветствую, дорогие читатели!

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

Бибилиотека AioGram работает со всеми версиями питона не ниже 3.8, уcтанавливается следущей командой:
Linux:
Код:
pip3 install aiogram
Windows:
Код:
pip install aiogram


Структура проектов

Структура проектов - важная часть написания телеграм бота.
Что же такое структура бота простыми словами? Это разбитие кода на несколько файлов/папок с файлами.
Для чего разбивают код на несколько файлов? Для более читабильного кода, что бы когда проект разрастется до болших размеров не нужно было искать что либо в одном файле, да и просто это более эстетично.
В данном случаем Нам хватит следущей стрктуры:
  • main.py
  • config.py
  • keyboard.py
Но для хорошего, емкого или коммерческого проекта структура проекта будет другая, возможно в следущих часятх я расскажу про нее.

Первый бот. Мини менеджер.

Сейчас сделаем первого бота, он будет выдавать контактную информацию.
Создаем в папке/дериктории/каталоге файлы main.py, config.py и keyboards.py

Импортируем сам AioGram и дополнительные методы и классы из него, я никогда в жизни не запоминал все импорты, я просто один раз записал их и копирую в каждый новый проект, но пока что мы импортруем только основу и файлы с клавиатурой и конфигурацией:
Python:
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
Файл с клавиатурой пока что будет пустовать, позже мы его заполним, сейчас мы заполним файл config.py:
Python:
token = 'тут токен от бота, брать у @BotFather'
Далее Нам нужно авторизовать бота, сдлеать две переменные для дальнейшим взаимодейстивем с ботом:
Код:
#main.py
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

bot = Bot(token)
dp = Dispatcher(bot)
Переменная bot отвечает за некую авторизацию, а переменная dp (сокращение dispatcher) нам понадобится для обработки событий.
Что такое событие? Это все, что происходит с ботом. Например, пользователь отправил боту команду - событие, пользователь отправил маедиафайл - событие, пользователь нажал на какую либо кнопку - событие.

Сейчас сделаем обработку команды start, этот обработчик должен быть в любом случае, т.к пользователь при взаимодействии с ботов всегда первый раз вводит команду start.
Python:
#main.py
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

bot = Bot(token)
dp = Dispatcher(bot)

@dp.message_handler(commands='start')
async def start(message: types.Message):
    await bot.send_message(message.from_user.id, 'Доброго времени суток, какую контактуню информацию ты хочешь получить?')
Разберем построчно:

@dp.message_handler(commands='start') это декоратор, в данном случае message_handler обрабатывает пришедшее сообщение /start, кто то может задасться вопрос, а при чем тут сообщение если мы вообще работает с командой /start? Я отвечу, бот воспринимает все, что приходит ему в виде текста в ЛС как сообщение, любой текст, будь то любая комнада, например, /start /help /contact и т.д, или обычный текст по типу "Привет", "Пока", "Бот лох" и т.д, а еще могут быть обычные кнопки, которые снизу под вводом текста обычно есть (в этом уроке мы сделаем их), по факту такие кнопки - обычный текст-шаблон для пользователя в виде кнопок.

Но вернемся к команде /start, что бы обозначить, что мы работаем именно с командой /start а не с командой /help в message_handler мы передаем аргумент commands='start', это значит, что декоратор @dp.message_handler(commands='start') будет обрабатывать только команду /start и никакую больше! Так же message_handler() имеет и другие аргументы, но их мы рассмотрим в следующих статьях.

async def start(message: types.Message) - функция, которая принимает тип сообщения types.Message, а слово message перед types.Message говоря простыми словами даст нам взаимодейстоввать с пришедшим сообщением, и сейчас вы поймете что я имею ввиду. Так же хочу сказать что название функции может быть любым, т.е может быть:
  • async def admin(message: types.Message)
  • async def call_func(callback: types.CallbackQuery)
  • async def hi_handler(message: types.Message)
  • async def kak_ugodno_mojno_nazvat(message: types.Message)
Но не стоит забывать, что лучше называть функцию так, что бы было понятно что она делает, и по этому в нашем коде я назвал ее start, т.к она отвечает на команду /start, все просто)
Код:
await bot.send_message(message.from_user.id, 'Доброго времени суток, какую контактуню информацию ты хочешь получить?')
Эта строчка нужна для отправки сообщения, рассмотрим эту строчку поподробнее.
await используется по тому, что после него идет асинхронная функция.
Ну вот нам и понадобилась перменная bot, к ней мы будет обращаться что бы отправить что либо пользователю)
Сама функция send_message нужна для отправки сообщения, а именно какого либо текста, что бы отправить, напрмиер, фото, нужна будет уже другая функция.

message.from_user.id - это самый обычный id юзера, но не стоит забывать что id вещь достаточно мощнаяя, с ее помощью в дальнейшем мы будет идентифицировать пользовтеля в боте, но пока что не берите это в голову. ID используется для того, что бы бот знал, какому пользователю отправить сообщение. Следущим агрументом идет сам текст, который мы будем отправлять пользователю, у меня это "Доброго времени суток, какую контактуню информацию ты хочешь получить?", там может быть все что душе угодно, любой текст который вы придумаете.

Теперь нам нужно сделать так, что бы бот работал постоянно, для этого в конце кода мы пишем следущее:
Python:
#main.py
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

bot = Bot(token)
dp = Dispatcher(bot)

@dp.message_handler(commands='start')
async def start(message: types.Message):
    await bot.send_message(message.from_user.id, text='Доброго времени суток, какую контактуню информацию ты хочешь получить?')

executor.start_polling(dp, skip_updates=True)
executor.start_polling(dp, skip_updates=True) - нужен что бы бот работал постоянно и не оффался.

Клавиатура

Есть два вида так называемой клавиатры, InlineKeyboard (та что под сообщением) и ReplyMarkup (та что под вводом текста). Если с ReplyMarkup все будет понятно и просто, то с инлайн клавиатурой можно творить чудеса! В дальнейших уроках я покажу Вам на что способна инлайн клавиатура.
Python:
#keyboards.py
from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton

user_menu = ReplyKeyboardMarkup(resize_keyboard=True)
user_menu.row(KeyboardButton('Контактная информация'))
user_menu.row(KeyboardButton('Новости'))
Разберем построчно.

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

user_menu = ReplyKeyboardMarkup(resize_keyboard=True) тут уже интереснее, здесь мы создаем переменную, в которой создаем саму клавиатуру ReplyKeyboardMarkup, инициализируем ее, в ее агрументах есть resize_keyboard=True, этот параметр отвечает за нормальны размер клавиатуры, что бы она не была огромная.

А вот дальше уже идет добавление кнопок в клавиатуру.
user_menu.row(KeyboardButton('Контактная информация')) тут KeyboardButton как раз отвечает за создание самой кнопки, а .row - добавление кнопки, т.к если сказать простым языком мы через .row добавляем в клавиатуру user_menu кнопку KeyboardButton с текстом 'Контактная информация', здесь вроде тоже ничего сложного, идем дальше.

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

Идем в main.py в строчку с отправлением сообщения (12 строчка) и добавляем новый параметр reply_markup, которому присваиваем нужную клавиатуру. В самом начале мы ее импортировали, значит проблем возникнуть не должно.
Python:
#main.py
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

bot = Bot(token)
dp = Dispatcher(bot)

@dp.message_handler(commands='start')
async def start(message: types.Message):
    await bot.send_message(message.from_user.id, text='Доброго времени суток, какую контактуню информацию ты хочешь получить?', reply_markup=kb.user_menu)

executor.start_polling(dp, skip_updates=True)
Все просто, добавили новый параметр - клавиатуру, тут думаю объяснения не нужны.
Переходим в бота и пишем ему комнаду /start
1.png


Отлично! Кнопки на месте, это радует, но они не работаю, по тому что мы не задали им никаких функций) Давайте сделаем это, для этого нам понадобится сделать два декоратора для обработки текста из кнопок. Как работает обработка сообщений вы уже знаете, но теперь мы будет обрабатывать не commands='start' а text, смотрим код:
Python:
#main.py
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

bot = Bot(token)
dp = Dispatcher(bot)

@dp.message_handler(commands='start')
async def start(message: types.Message):
    await bot.send_message(message.from_user.id, text='Доброго времени суток, какую контактуню информацию ты хочешь получить?', reply_markup=kb.user_menu)

@dp.message_handler(text='Контактная информация')
async def contact(message: types.Message):
    await bot.send_message(message.from_user.id, text='Контактная Инфа ')

@dp.message_handler(text='Новости')
async def news(message: types.Message):
    await bot.send_message(message.from_user.id, text='Тут какие то новости')

executor.start_polling(dp, skip_updates=True)
Видим, у нас появились новые обработчики, все точно так же как с командой старт, только в место параметра commands у нас параметр text и в место 'start' текст нужной нам клавиатуры. Тут думаю тоже проблем ни у кого не возникнет, а если же возникли пишите в комментариях)

Хорошо, а где контактная информация то? Для нее мы сделаем Inline клавиатуру, она создается почти так же как и replykeyboard

Создаем inline клавиатуру:
Python:
#keyboards.py
from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton

user_menu = ReplyKeyboardMarkup(resize_keyboard=True)
user_menu.row(KeyboardButton('Контактная информация'))
user_menu.row(KeyboardButton('Новости'))

contact_info = InlineKeyboardMarkup()
contact_info.row(InlineKeyboardButton(text='Модератор', url='https://vk.com/moderator'),
                InlineKeyboardButton(text='Менеджер', url='https://vk.com/manager'))
contact_info.row(InlineKeyboardButton(text='Админ', url='https://vk.com/admin'))
Разберем инлайн клвиатуру, с ней уже поинтереснее.

contact_info = InlineKeyboardMarkup() тут так же как и с первой клавиатурой, просто создаем ее.
contact_info.row(InlineKeyboardButton(text='Модератор', url='https://vk.com/moderator'),
InlineKeyboardButton(text='Менеджер', url='https://vk.com/manager'))
Схоже с первой клавиатурой, но тут по мимо текста кнопки мы указываем еще и то, куда будет вести эта кнопка, в данном случае это вымышленные страницы ВК, но в место url там может быть кое что другое, позже мы с этим 'кое чем' познакомимся.
Что бы получилось две кнопки в ряд мы просто содаем их через запятую.

Отлично, с инлайн клавиатурой мы по быстрому разобрались, теперь давайте отправим ее пользователю:
Python:
#main.py
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

bot = Bot(token)
dp = Dispatcher(bot)

@dp.message_handler(commands='start')
async def start(message: types.Message):
    await bot.send_message(message.from_user.id, text='Доброго времени суток, какую контактуню информацию ты хочешь получить?', reply_markup=kb.user_menu)

@dp.message_handler(text='Контактная информация')
async def contact(message: types.Message):
    await bot.send_message(message.from_user.id, text='Контактная Инфа', reply_markup = kb.contact_info)

@dp.message_handler(text='Новости')
async def news(message: types.Message):
    await bot.send_message(message.from_user.id, text='Тут какие то новости')

executor.start_polling(dp, skip_updates=True)
На этом урок подошел к концу, спасибо тем, кто дочитал до конца. Это моя статья взятая с зеленого форума, т.к на эксплоите я новичок хочу услышать мнение о том, как тут относяться к подобного рода статьям? Жду фидбека, еще раз всем спасибо.

main.py весь код:
Python:
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
bot = Bot(token)
dp = Dispatcher(bot)
@dp.message_handler(commands='start')
async def start(message: types.Message):
    await bot.send_message(message.from_user.id, text='Доброго времени суток, какую контактуню информацию ты хочешь получить?', reply_markup=kb.user_menu)

@dp.message_handler(text='Контактная информация')
async def contact(message: types.Message):
    await bot.send_message(message.from_user.id, text='Контактная Инфа', reply_markup = kb.contact_info)

@dp.message_handler(text='Новости')
async def news(message: types.Message):
    await bot.send_message(message.from_user.id, text='Тут какие то новости')

executor.start_polling(dp, skip_updates=True)

keyboards.py:
Python:
from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton

user_menu = ReplyKeyboardMarkup(resize_keyboard=True)
user_menu.row(KeyboardButton('Контактная информация'))
user_menu.row(KeyboardButton('Новости'))

contact_info = InlineKeyboardMarkup()
contact_info.row(InlineKeyboardButton(text='Модератор', url='https://vk.com/moderator'),
                InlineKeyboardButton(text='Менеджер', url='https://vk.com/manager'))
contact_info.row(InlineKeyboardButton(text='Админ', url='https://vk.com/admin'))

автор @multicoder
источник exploit.in
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Всех приветствую, дорогие читатели!

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

Бибилиотека AioGram работает со всеми версиями питона не ниже 3.8, уcтанавливается следущей командой:
Linux:
Код:
pip3 install aiogram
Windows:
Код:
pip install aiogram


Структура проектов

Структура проектов - важная часть написания телеграм бота.
Что же такое структура бота простыми словами? Это разбитие кода на несколько файлов/папок с файлами.
Для чего разбивают код на несколько файлов? Для более читабильного кода, что бы когда проект разрастется до болших размеров не нужно было искать что либо в одном файле, да и просто это более эстетично.
В данном случаем Нам хватит следущей стрктуры:
  • main.py
  • config.py
  • keyboard.py
Но для хорошего, емкого или коммерческого проекта структура проекта будет другая, возможно в следущих часятх я расскажу про нее.

Первый бот. Мини менеджер.

Сейчас сделаем первого бота, он будет выдавать контактную информацию.
Создаем в папке/дериктории/каталоге файлы main.py, config.py и keyboards.py

Импортируем сам AioGram и дополнительные методы и классы из него, я никогда в жизни не запоминал все импорты, я просто один раз записал их и копирую в каждый новый проект, но пока что мы импортруем только основу и файлы с клавиатурой и конфигурацией:
Python:
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
Файл с клавиатурой пока что будет пустовать, позже мы его заполним, сейчас мы заполним файл config.py:
Python:
token = 'тут токен от бота, брать у @BotFather'
Далее Нам нужно авторизовать бота, сдлеать две переменные для дальнейшим взаимодейстивем с ботом:
Код:
#main.py
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

bot = Bot(token)
dp = Dispatcher(bot)
Переменная bot отвечает за некую авторизацию, а переменная dp (сокращение dispatcher) нам понадобится для обработки событий.
Что такое событие? Это все, что происходит с ботом. Например, пользователь отправил боту команду - событие, пользователь отправил маедиафайл - событие, пользователь нажал на какую либо кнопку - событие.

Сейчас сделаем обработку команды start, этот обработчик должен быть в любом случае, т.к пользователь при взаимодействии с ботов всегда первый раз вводит команду start.
Python:
#main.py
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

bot = Bot(token)
dp = Dispatcher(bot)

@dp.message_handler(commands='start')
async def start(message: types.Message):
    await bot.send_message(message.from_user.id, 'Доброго времени суток, какую контактуню информацию ты хочешь получить?')
Разберем построчно:

@dp.message_handler(commands='start') это декоратор, в данном случае message_handler обрабатывает пришедшее сообщение /start, кто то может задасться вопрос, а при чем тут сообщение если мы вообще работает с командой /start? Я отвечу, бот воспринимает все, что приходит ему в виде текста в ЛС как сообщение, любой текст, будь то любая комнада, например, /start /help /contact и т.д, или обычный текст по типу "Привет", "Пока", "Бот лох" и т.д, а еще могут быть обычные кнопки, которые снизу под вводом текста обычно есть (в этом уроке мы сделаем их), по факту такие кнопки - обычный текст-шаблон для пользователя в виде кнопок.

Но вернемся к команде /start, что бы обозначить, что мы работаем именно с командой /start а не с командой /help в message_handler мы передаем аргумент commands='start', это значит, что декоратор @dp.message_handler(commands='start') будет обрабатывать только команду /start и никакую больше! Так же message_handler() имеет и другие аргументы, но их мы рассмотрим в следующих статьях.

async def start(message: types.Message) - функция, которая принимает тип сообщения types.Message, а слово message перед types.Message говоря простыми словами даст нам взаимодейстоввать с пришедшим сообщением, и сейчас вы поймете что я имею ввиду. Так же хочу сказать что название функции может быть любым, т.е может быть:
  • async def admin(message: types.Message)
  • async def call_func(callback: types.CallbackQuery)
  • async def hi_handler(message: types.Message)
  • async def kak_ugodno_mojno_nazvat(message: types.Message)
Но не стоит забывать, что лучше называть функцию так, что бы было понятно что она делает, и по этому в нашем коде я назвал ее start, т.к она отвечает на команду /start, все просто)
Код:
await bot.send_message(message.from_user.id, 'Доброго времени суток, какую контактуню информацию ты хочешь получить?')
Эта строчка нужна для отправки сообщения, рассмотрим эту строчку поподробнее.
await используется по тому, что после него идет асинхронная функция.
Ну вот нам и понадобилась перменная bot, к ней мы будет обращаться что бы отправить что либо пользователю)
Сама функция send_message нужна для отправки сообщения, а именно какого либо текста, что бы отправить, напрмиер, фото, нужна будет уже другая функция.

message.from_user.id - это самый обычный id юзера, но не стоит забывать что id вещь достаточно мощнаяя, с ее помощью в дальнейшем мы будет идентифицировать пользовтеля в боте, но пока что не берите это в голову. ID используется для того, что бы бот знал, какому пользователю отправить сообщение. Следущим агрументом идет сам текст, который мы будем отправлять пользователю, у меня это "Доброго времени суток, какую контактуню информацию ты хочешь получить?", там может быть все что душе угодно, любой текст который вы придумаете.

Теперь нам нужно сделать так, что бы бот работал постоянно, для этого в конце кода мы пишем следущее:
Python:
#main.py
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

bot = Bot(token)
dp = Dispatcher(bot)

@dp.message_handler(commands='start')
async def start(message: types.Message):
    await bot.send_message(message.from_user.id, text='Доброго времени суток, какую контактуню информацию ты хочешь получить?')

executor.start_polling(dp, skip_updates=True)
executor.start_polling(dp, skip_updates=True) - нужен что бы бот работал постоянно и не оффался.

Клавиатура

Есть два вида так называемой клавиатры, InlineKeyboard (та что под сообщением) и ReplyMarkup (та что под вводом текста). Если с ReplyMarkup все будет понятно и просто, то с инлайн клавиатурой можно творить чудеса! В дальнейших уроках я покажу Вам на что способна инлайн клавиатура.
Python:
#keyboards.py
from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton

user_menu = ReplyKeyboardMarkup(resize_keyboard=True)
user_menu.row(KeyboardButton('Контактная информация'))
user_menu.row(KeyboardButton('Новости'))
Разберем построчно.

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

user_menu = ReplyKeyboardMarkup(resize_keyboard=True) тут уже интереснее, здесь мы создаем переменную, в которой создаем саму клавиатуру ReplyKeyboardMarkup, инициализируем ее, в ее агрументах есть resize_keyboard=True, этот параметр отвечает за нормальны размер клавиатуры, что бы она не была огромная.

А вот дальше уже идет добавление кнопок в клавиатуру.
user_menu.row(KeyboardButton('Контактная информация')) тут KeyboardButton как раз отвечает за создание самой кнопки, а .row - добавление кнопки, т.к если сказать простым языком мы через .row добавляем в клавиатуру user_menu кнопку KeyboardButton с текстом 'Контактная информация', здесь вроде тоже ничего сложного, идем дальше.

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

Идем в main.py в строчку с отправлением сообщения (12 строчка) и добавляем новый параметр reply_markup, которому присваиваем нужную клавиатуру. В самом начале мы ее импортировали, значит проблем возникнуть не должно.
Python:
#main.py
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

bot = Bot(token)
dp = Dispatcher(bot)

@dp.message_handler(commands='start')
async def start(message: types.Message):
    await bot.send_message(message.from_user.id, text='Доброго времени суток, какую контактуню информацию ты хочешь получить?', reply_markup=kb.user_menu)

executor.start_polling(dp, skip_updates=True)
Все просто, добавили новый параметр - клавиатуру, тут думаю объяснения не нужны.
Переходим в бота и пишем ему комнаду /start
Посмотреть вложение 54532

Отлично! Кнопки на месте, это радует, но они не работаю, по тому что мы не задали им никаких функций) Давайте сделаем это, для этого нам понадобится сделать два декоратора для обработки текста из кнопок. Как работает обработка сообщений вы уже знаете, но теперь мы будет обрабатывать не commands='start' а text, смотрим код:
Python:
#main.py
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

bot = Bot(token)
dp = Dispatcher(bot)

@dp.message_handler(commands='start')
async def start(message: types.Message):
    await bot.send_message(message.from_user.id, text='Доброго времени суток, какую контактуню информацию ты хочешь получить?', reply_markup=kb.user_menu)

@dp.message_handler(text='Контактная информация')
async def contact(message: types.Message):
    await bot.send_message(message.from_user.id, text='Контактная Инфа ')

@dp.message_handler(text='Новости')
async def news(message: types.Message):
    await bot.send_message(message.from_user.id, text='Тут какие то новости')

executor.start_polling(dp, skip_updates=True)
Видим, у нас появились новые обработчики, все точно так же как с командой старт, только в место параметра commands у нас параметр text и в место 'start' текст нужной нам клавиатуры. Тут думаю тоже проблем ни у кого не возникнет, а если же возникли пишите в комментариях)

Хорошо, а где контактная информация то? Для нее мы сделаем Inline клавиатуру, она создается почти так же как и replykeyboard

Создаем inline клавиатуру:
Python:
#keyboards.py
from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton

user_menu = ReplyKeyboardMarkup(resize_keyboard=True)
user_menu.row(KeyboardButton('Контактная информация'))
user_menu.row(KeyboardButton('Новости'))

contact_info = InlineKeyboardMarkup()
contact_info.row(InlineKeyboardButton(text='Модератор', url='https://vk.com/moderator'),
                InlineKeyboardButton(text='Менеджер', url='https://vk.com/manager'))
contact_info.row(InlineKeyboardButton(text='Админ', url='https://vk.com/admin'))
Разберем инлайн клвиатуру, с ней уже поинтереснее.

contact_info = InlineKeyboardMarkup() тут так же как и с первой клавиатурой, просто создаем ее.
contact_info.row(InlineKeyboardButton(text='Модератор', url='https://vk.com/moderator'),
InlineKeyboardButton(text='Менеджер', url='https://vk.com/manager'))
Схоже с первой клавиатурой, но тут по мимо текста кнопки мы указываем еще и то, куда будет вести эта кнопка, в данном случае это вымышленные страницы ВК, но в место url там может быть кое что другое, позже мы с этим 'кое чем' познакомимся.
Что бы получилось две кнопки в ряд мы просто содаем их через запятую.

Отлично, с инлайн клавиатурой мы по быстрому разобрались, теперь давайте отправим ее пользователю:
Python:
#main.py
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

bot = Bot(token)
dp = Dispatcher(bot)

@dp.message_handler(commands='start')
async def start(message: types.Message):
    await bot.send_message(message.from_user.id, text='Доброго времени суток, какую контактуню информацию ты хочешь получить?', reply_markup=kb.user_menu)

@dp.message_handler(text='Контактная информация')
async def contact(message: types.Message):
    await bot.send_message(message.from_user.id, text='Контактная Инфа', reply_markup = kb.contact_info)

@dp.message_handler(text='Новости')
async def news(message: types.Message):
    await bot.send_message(message.from_user.id, text='Тут какие то новости')

executor.start_polling(dp, skip_updates=True)
На этом урок подошел к концу, спасибо тем, кто дочитал до конца. Это моя статья взятая с зеленого форума, т.к на эксплоите я новичок хочу услышать мнение о том, как тут относяться к подобного рода статьям? Жду фидбека, еще раз всем спасибо.

main.py весь код:
Python:
import keyboards as kb
from config import *
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
bot = Bot(token)
dp = Dispatcher(bot)
@dp.message_handler(commands='start')
async def start(message: types.Message):
    await bot.send_message(message.from_user.id, text='Доброго времени суток, какую контактуню информацию ты хочешь получить?', reply_markup=kb.user_menu)

@dp.message_handler(text='Контактная информация')
async def contact(message: types.Message):
    await bot.send_message(message.from_user.id, text='Контактная Инфа', reply_markup = kb.contact_info)

@dp.message_handler(text='Новости')
async def news(message: types.Message):
    await bot.send_message(message.from_user.id, text='Тут какие то новости')

executor.start_polling(dp, skip_updates=True)

keyboards.py:
Python:
from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton

user_menu = ReplyKeyboardMarkup(resize_keyboard=True)
user_menu.row(KeyboardButton('Контактная информация'))
user_menu.row(KeyboardButton('Новости'))

contact_info = InlineKeyboardMarkup()
contact_info.row(InlineKeyboardButton(text='Модератор', url='https://vk.com/moderator'),
                InlineKeyboardButton(text='Менеджер', url='https://vk.com/manager'))
contact_info.row(InlineKeyboardButton(text='Админ', url='https://vk.com/admin'))

автор @multicoder
источник exploit.in
А можешь ещё и исходники сами файлы сюда запулить во вложения бро? Статья бомба
 
Не в упрёк, но по-моему это просто вольный перевод описания библиотеки(конкретно тут aiogram, хотя они все довольно похожи) с комментариями. Ни слова про работу с коллбэками, красивые инлайн клавиатуры, удаление/редактирование сообщений от бота, ну и других практик написания ботов с использованием подобных библиотек.
Но для новичка сойдет, могу дополнить на досуге если тут есть интересующиеся темой разработки ТГ ботов.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх