Написание Telegram ботов на Python [aiogram]

PYDEV

Пользователь
Пользователь
Авг 31, 2023
72
18
8
Многие начинающие python-программисты задаются вопросом, а как сделать бота в Telegram? Я хочу небольшой пример показать, написав простейшего бота.
Сначала напишем игру "Угадай число" для обычной консоли, а потом эту игру перенесём в нашего Telegram бота. Думаю после этого вы поймёте, насколько просто можно написать бота в телеграме.
И так, я сделал игру "Угадай число" используя встроенную библиотеку в python, random. Вот как выглядит код:
Python:
from random import randint

start_num = 0
end_num = 20
random_num = randint(start_num, end_num)

print(f'''
Добро пожаловать в игру Угадай число!
Всё очень просто, компьютер загадает число от {start_num} до {end_num}, тебе необходимо его угадать!
Вперёд :)''')

user_num = int(input('Какое число я загадал? '))

while user_num != random_num:
    if user_num < random_num:
        print('Загаданное число больше. Попробуй ещё раз: ')
    elif user_num > random_num:
        print('Загаданное число меньше. Попробуй ещё раз: ')
    user_num = int(input('Какое число я загадал? '))
else:
    print(f'Поздравляю, ты выиграл! Загаданное число - {random_num}')
Строго не судите, набросал за 5 мин, про обработку исключений не стал запариться :)
Было бы круто перенести эту игру в бота? Всё просто!

1. Переходим в телеграме в бот @BotFather и вводим команду: /newbot.
2. По инструкции создаем своего бота, и получим токен нашего бота, вот так примерно выглядит:
6384386836:AAFZgWhJH0zoq4jxaAuc9rqNcRJHz8AIW10
3. Скопируем его.
4. Теперь нам нужно установить необходимую библиотеку для работы с telegram API. Я пользуюсь современной, асинхронной библиотекой aiogram. Открываем терминал и через команду: pip install aiogram установим её.
5. Можно приступать к написанию кода.
В качестве примера я перенесу игру "Угадай число" в моего бота. У меня получился вот такой код:
Python:
from aiogram import Bot, Dispatcher, types, executor
from random import randint

TOKEN_API = 'YOUR_BOT_TOKEN'

start_num = 0
end_num = 20
random_num = randint(start_num, end_num)

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

START_MESSAGE = f'''
Добро пожаловать в игру Угадай число!
Всё очень просто, бот загадает число от {start_num} до {end_num}, тебе необходимо его угадать!
Вперёд :)'''

@dp.message_handler(commands=['start'])
async def cmd_start(msg: types.Message) -> None:
    await bot.send_message(msg.from_user.id,
                           START_MESSAGE,
                           parse_mode='HTML')

    await bot.send_message(msg.from_user.id,
                           'Какое число я загадал?')

@dp.message_handler(content_types=['text'])
async def cmd_game(msg: types.Message) -> None:
    if not msg.text.isdigit():
        await msg.answer('Введи корректное число.')
        return
    user_num = int(msg.text)
    if user_num < random_num:
        await msg.answer('Загаданное число больше. Попробуй ещё раз: ')
    elif user_num > random_num:
        await msg.answer('Загаданное число меньше. Попробуй ещё раз: ')
    else:
        await msg.answer(f'Поздравляю, ты выиграл! Загаданное число - {random_num}')

if __name__ == '__main__':
    executor.start_polling(dispatcher=dp,
                           skip_updates=True)
да, тут есть вопросы безопасности и т.д. Но, в рамках учебной цели думаю сойдёт!
6. Запустим код и переходим к нашему боту. Проверим, всё ли работает, и радуемся!
 
Последнее редактирование:

PYDEV

Пользователь
Пользователь
Авг 31, 2023
72
18
8
Python:
import os
import asyncio

from aiogram import Bot, Dispatcher, F
from aiogram.types.message import Message

bot = Bot(token=os.getenv("BOT_TOKEN"))
dp = Dispatcher()

SYSTEM_MESSAGES = (
    F.pinned_message
    | F.new_chat_title
    | F.new_chat_photo
    | F.delete_chat_photo
    | F.new_chat_members
    | F.left_chat_member
    | F.migrate_to_chat_id
    | F.migrate_from_chat_id
    | F.video_chat_started
    | F.video_chat_ended
    | F.video_chat_scheduled
    | F.video_chat_participants_invited
)

@dp.message(SYSTEM_MESSAGES)
async def cmd_del(message: Message) -> None:
    try:
        await message.delete()
    except Exception as e:
        print(f"Error: {e}")

async def main() -> None:
    await bot.delete_webhook(drop_pending_updates=True)
    await dp.start_polling(bot)

if __name__ == "__main__":
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        print("Bot stopped.")
это простейший бот на aiogram 3 для удаления всех системных сообщений в вашей группе. забирайте кому нужно))
 

Форум IT Специалистов