Добро пожаловать! Форум WLUX.NET - Игры, Читы, Скрипты, Статьи, Софт, Курсы.

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

Добро пожаловать гость!

Приветствуем вас на нашем форуме! Мы очень рады вас видеть и с большим удовольствием поделимся всей информацией нашего форума!

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

Система наград, ежедневное пополнения тем!

Общайся, получай награды.

Статьи, гайды, софт

У нас вы можете скачать бесплатно читы для игр. Полезные гайды на любые темы и схемы заработка. Есть раздел халявы!

FAQ по форуму

Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

  • Добро пожаловать на сайт - wlux.net!

    FAQ по форуму

    1. Все сообщения до группы местный проходят модерацию от 1 минуты до 24 часа

    2. Сообщения учитываются в следующих разделах: Читать

    3.Что-бы скачать вложение нужно 2 сообщения.

    4.Личные переписки не работают на форуме

    5. Запрещено: Просить скрытый текст , спам, реклама, скам, ддос, кардинг и другая чернуха, нарушать любые законы РФ/СНГ = бан аккаунта

    6. Внимание! Мы не удаляем аккаунты с форума! Будьте внимательны ДО регистрации! Как удалить аккаунт на форуме?!

    5.Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

python Гайд Создаём Telegram бота на aiogram 3 для новичков

wlux.net Оффлайн

wlux.net

Где волчьи уши, там волчьи зубы.
Команда форума
LV
7
 
20.06.2022
26 939
230
36
Награды
10
Пол
Муж.

Репутация:

  • Автор темы
  • Администратор
  • Модератор
  • Команда форума
  • #1
Статья является уроком для новых пользователей с разбором функциональности бота.

Нужные библиотеки:

aiogram версия 3.0.0rc2
Установка библиотеки:
Заходим в командную строку и прописываем:


pip install aiogram -U --pre
Установится последняя версия aiogram. Если прописать:
То установится aiogram 2.x

Подготовка для разработки:
Нужен любой редактор кода, подойдет как Sublime Text, VS code, PyCharm и т.п.
Я использую PyCharm. Создаем проект и погнали.

Архитектура проекта:
Создание папок:

Handlers
- В этой директории будет все основные функции бота.

Middlewares - Директория нужна для мидлвари, так скажем прослойка в коде.

Keyboards - Клавиатура для бота.

DataBase - Создание базы данных.

Создание файлов:

bot.py
- Запускает бот.

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

Дальше файлы будем создавать по факту.

Дальше файлы будем создавать по факту..png

Приступаем к работе:
Заходим в

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.

нажимаем 'Старт', пишем /newbot.

Даем имя нашему боту и дальше даем ему username, Random_bot либо RandomBot, Назвать бота можно как угодно так же как и username.

Когда получили Token бота, переходим в редактор кода.

Заходим в config.py и прописываем:

Python:
BOT_TOKEN = 'Тут ваш Token'

Приступаем к работе.png

Заходим в bot.py и начинаем писать код.

Python:
import asyncio
import logging
from aiogram import Bot, Dispatcher
from config import BOT_TOKEN

async def main():
    bot = Bot(BOT_TOKEN, parse_mode='HTML')
    dp = Dispatcher()
    dp.include_routers(router)
    await bot.delete_webhook(drop_pending_updates=True)
    await dp.start_polling(bot)
if __name__ == '__main__':
    logging.basicConfig(level=logging.INFO)
    asyncio.run(main())

Заходим в bot.py и начинаем писать код.png

Импорты:

import asyncio -
Асинхронный модуль для написания кода входа и выхода.

import logging - Модуль который уведомляет о состоянии событий нашего бота.

from aiogram import Bot, Dispatcher - Aiogram основная библиотека для написания бота, из нее импортируем объект бота и диспетчер, он принимает все события и обрабатывает их.

from config import BOT_TOKEN - Из файла config импортируем переменную BOT_TOKEN.

Функция main():​

async def main(): - Асинхронное создание функции называем ее main(), в основном стандартное имя функции, функцию можно назвать как угодно.

bot = Bot(BOT_TOKEN, parse_mode='HTML') - Создаем объект бота и помечаем разметку сообщений 'parse_mode' как HTML, для меня разметка простая да и во все она не сложная.

dp = Dispatcher() - Диспетчер, ну тут все и так понятно.

dp.include_routers(router) - Подключает к диспетчеру все наши роутеры(Обработчики). Пример с Роутерами увидите в следующих файлов. Роутеры можно регистрировать двумя способами:

dp.include_routers(start.router, menu.router)

или

dp.include_routers(start.router)

dp.include_routers(menu.router)

await bot.delete_webhook(drop_pending_updates=True)
- Удаляет все сообщения, которые произошли после последнего завершения работы бота.

await dp.start_polling(bot) - Периодически отправляет запрос на Telegram сервер, что бы узнать появилось ли новое событие.

logging.basicConfig(level=logging.INFO) - информирует о новых событиях в боте.

Команда /start:
Переходим в папку handlers, создаем Python файл: start.py.

В нем пишем:

Python:
from aiogram import Router, F
from aiogram.filters import Command
from aiogram.types import Message

router = Router()

@router.message(Command('start'))
async def command_start(message: Message):
    await message.answer(f'Привет {message.from_user.full_name}!'
                         'Это твой новый бот!')

Команда start.png

Все необходимое импортируем из библиотеки aiogram.

F
- Новый магический фильтр который может обрабатывать любой тип сообщения.

Command - Фильтр для работы с командами.

Message - Тип для работы с сообщениями

Затем создаем Router, для следящей привязки его к обработчиком.

@router.message(Command('start')) - Создаем декоратор обработчика событий с фильтром команды start

Создаем асинхронную функцию с типом Message и в ней отвечаем пользователю. Отвечать текстом на сообщение можно двумя способами при помощи answer и reply.

Python:
await message.answer(f'Привет {message.from_user.full_name} Это твой новый бот!')

Пример с answer.png
Пример с answer

Python:
await message.reply(f'Привет {message.from_user.full_name} Это твой новый бот!')

Пример с reply.png
Пример с reply

{message.from_user.full_name} - Выводит полное имя и фамилию пользователя(full_name), так же есть и другие типы такие как id, username, last_name, first_name и т.п.

Теперь разберем {message.from_user.options}:

message
- объект функции,

from_user - Обращение к пользователю

options - тут параметры которые нам нужны, о них я говорил выше.

Обратно переходим в main.py в импортах пишем

Python:
from handlers import start

В функции main, изменяем строку dp.include_routers(router) в ней
дописываем dp.include_routers(start.router)

Кнопки:

Существуют два вида кнопок это Inline и Reply.

Существуют два вида кнопок это Inline и Reply..png


Reply кнопки.png

Переходим в директорию keyboards в ней создаем две директории:

1.Reply

2.Inline


В директории Reply создадим файл menu_kb_reply.py

В директории Reply  2.png

Python:
from aiogram.types import ReplyKeyboardMarkup
from aiogram.utils.keyboard import ReplyKeyboardBuilder
def menu_kb() -> ReplyKeyboardMarkup:
    kb_main = ReplyKeyboardBuilder()
    kb_main.button(text='Профиль')
    kb_main.button(text='О проекте')
    kb_main.adjust(2)
    return kb_main.as_markup(resize_keyboard=True)

Из aiogram импортируем все то что надо, создаем Router, создаем декоратор с фильтром F.text, бот будет принимать слово Профиль от пользователя и затем выполняет код внутри функции..png

Из aiogram импортируем все нужное для клавиатуры.
Создаем функцию menu_kb в ней создаем клавиатуру.

adjust(2) - Сделает клавиатуру в два столбца.

as_markup(resize_keyboard=True) - преобразовывает с ReplyKeyboardBuilder() в ReplyKeyboardMarkupб, resize_keyboard=True - делает кнопки по меньше внизу будет два примера.

as_markup(resize_keyboard=True) - преобразовывает с ReplyKeyboardBuilder() в ReplyKeyboardMarkupб, resize_keyboard=True - делает кнопки по меньше внизу будет два примера..png

Без resize_keyboard=True.png

Переходим в файл start.py

Импортируем кнопки:
Python:
from keyboards.reply.menu_kb_reply import menu_kb

Приписываем после нашего сообщения, клавиатуру reply_markup=menu_kb()

Приписываем после нашего сообщения, клавиатуру reply_markup=menu_kb().png

Теперь в директории handlers создаем директорию menu, в ней создаем Python файл profile.py.

Теперь в директории handlers создаем директорию menu, в ней создаем Python файл profile.py..png

Для чего это нужно? Будет удобно в дальнейшем когда будет большой проект, не искать где же тот файл, а все файлы будут разбиты по директориям.

Переходим в файл profile.py, прописываем:

Python:
from aiogram import Router, F
from aiogram.types import Message

router = Router()

@router.message(F.text == 'Профиль')
async def command_start(message: Message):
    await message.reply(f'Пользователь {message.from_user.full_name}!\n'
                         f'Ваш id: {message.from_user.id}')

Из aiogram импортируем все то что надо, создаем Router, создаем декоратор с фильтром F.text, бот будет принимать слово Профиль от пользователя и затем выполняет код внутри функции..png

Из aiogram импортируем все то что надо, создаем Router, создаем декоратор с фильтром F.text, бот будет принимать слово Профиль от пользователя и затем выполняет код внутри функции.

Создаем Python файл в этой же директории about_project.py и в нем пишем:

Python:
from aiogram import Router, F, types
from aiogram.types import Message
from aiogram.utils.keyboard import InlineKeyboardBuilder

router = Router()

@router.message(F.text == 'О проекте')
async def command_start(message: Message):
    kb_project_url = InlineKeyboardBuilder()
    kb_project_url.row(types.InlineKeyboardButton(
        text="Наш канал", url="https://t.me/AITDteam")
    )
    await message.reply(f'Проект будет в скором времени обновляться!', reply_markup=kb_project_url.as_markup())

Все тоже самое что и в profile.py, лишь только добавляется Inline клавиатура..png

Все тоже самое что и в profile.py, лишь только добавляется Inline клавиатура.

В коде URL кнопка, т.е при помощи ее можно переходить на какой либо URL-адрес.

Переходим в bot.py.

В импортах пишем:
Python:
from handlers.menu import profile, about_project

В строке dp.include_routers() в скобках дописываем profile.router, about_project.router, получилось

Python:
dp.include_routers(start.router, profile.router, about_project.router)

dp.include_routers(start.router, profile.router, about_project.router).png

Запуск бота:
Запускаем бота, в консоль появилась информация от библиотеки logging.

Запуск бота нашего.png

Переходим в нашего бота, нажимаем Старт.

Проверка работоспособности бота:
Переходим в нашего бота, нажимаем Старт..png Проверка работоспособности бота.png
 
hhh22 Оффлайн

hhh22

Участник
LV
0
 
06.03.2024
6
0
7
Награды
1
24

Репутация:

вообще это баян, мб новичкам интересней про инлайн кнопки узнать
 

Поиск по форуму

Похожие темы:

shape1
shape2
shape3
shape4
shape7
shape8
Верх