Здравствуйте! Сегодня я хочу поделиться с вами опытом создания простого Telegram-бота на языке Python. В качестве примера я возьму бота, который делает скриншоты по заданному времени.
Используемые версии:
Версия Aiogram: 3.17.0
Версия Python: 3.11.7
Создание бота в телеграмм:
- Заходим в телеграмм и ищем там @BotFather
- Как нашли, пишем /newbot
Он попросит написать имя для бота, пишем свое название бота
Затем он попросит ввести username бота, пишем, ОБЯЗАТЕЛЬНО В КОНЦЕ ДОБАВИТЬ _bot - После того как мы это сделали, он нам даст токен, его нам нужно сохранить, мы его позже используем
- Так же нужно перейти в нашего бота и написать любое сообщение
Установка Python и создание бота:
- Для начала надо установить сам Python с этого сайта (я буду использовать версию 3.11, т.к она мне привычнее, но вы можете использовать последнюю)
- После установки нам нужно установить IDE, на выбор есть несколько: VSCode, Sublime, Notepad++, я буду использовать VSCode, так как он удобен в плане подсветки синтаксиса и удобных расширений, Notepad++ совершенно не советую использовать, т.к он максимально неудобен, а так можете хоть в обычном блокноте писать код
- Теперь нужно установить зависимости, для этого надо открыть командную строку WIndows и написать там
pip install aiogram pyautogui
- После установки IDE, нам нужно создать папку в которой мы будем работать
- Как создали папку, надо создать папку handlers и файл main.py (не в handlers)
Так выглядит наша рабочая директория:
Заходим в файл main.py
И пишем там наш код:
# Импортируем библиотеки
import asyncio
import logging
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from aiogram.enums.parse_mode import ParseMode
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.client.bot import DefaultBotProperties
from aiogram.types.input_file import FSInputFile
import asyncio
import pyautogui
import os
token = "ВАШ ТОКЕН" # Токен бота который мы берем с t.me/botfather
my_id = 35ВАШ_АЙДИ # ID Кому будут отправляться сообщения, получить его можно в t.me/username_to_id_bot
time_to_screen = 120 # (в секундах) Каждые 2 минуты отправлять скриншот
bot = Bot(token=token, default=DefaultBotProperties(parse_mode=ParseMode.HTML))
dp = Dispatcher(storage=MemoryStorage())
def make_screen(filename):
'''
Функция создания скриншота
'''
pyautogui.screenshot(filename)
return filename
async def send_screenshot():
'''
Функция отправки скриншота каждые N секунд (задается time_to_screen)
'''
while True: # Бесконечный цикл
filename = make_screen("screenshottime.png") # Делаем скриншот с аргументом названия файла (получившегося скриншота)
await bot.send_photo(my_id, filename) # Функция отправки скриншота
await asyncio.sleep(time_to_screen) # Спим N секунд (задается time_to_screen)
@dp.message(Command('screen')) # Инициализируем команду /screen
async def screenshot(message: types.Message):
'''
Функция скриншота после комманды
'''
if message.from_user.id == my_id: # Проверяем, мы ли написали сообщение
filename = make_screen("screenshotcmd.png") # Делаем скриншот с аргументом названия файла (получившегося скриншота)
if os.path.exists(filename): # Проверяем, сделался ли скриншот
await message.answer_photo(FSInputFile(filename)) # Если файл скриншота существует, отправляем его
else:
await message.reply("Произошла ошибка при скриншоте") # Если не существует, то отправляем соответствующее сообщение
async def main():
await bot.delete_webhook(drop_pending_updates=True)
asyncio.create_task(send_screenshot())
await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
asyncio.run(main())
Заполняем свои данные в token и my_id
-
Запускаем код, для этого нужно перейти в папку с нашим скриптом, открыть там Командную строку, что бы это сделать, надо нажать правую кнопку мыши по свободному пространству в папке и нажать “Открыть в терминале” или “Открыть в командной строке”
-
Затем прописать там py main.py, мы увидим что бот запустился
Так же нам в лс придет скриншот нашего экрана
-
Надо проверить команду /screen
Пишем в бота /screen
И как видим всё работает!
Данный гайд создан для ознакомления с языком Python и библиотекой aiogram
Если у вас возникли вопросы, можете написать либо в комментарии, либо в лс форума, либо по контактам:
TG: https://t.me/mongoliatupo
Discord: _monterat (отвечаю не всегда)
Пишу на форуме впервые, поэтому не судите строго, лучше посоветуйте что нибудь)