Перейти к содержимому

Простой Telegram бот на Python (ScreenShoter)

Решенные Гайды
3 3 595 1
  • Здравствуйте! Сегодня я хочу поделиться с вами опытом создания простого 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
      /screen
      И как видим всё работает!

    Данный гайд создан для ознакомления с языком Python и библиотекой aiogram

    Если у вас возникли вопросы, можете написать либо в комментарии, либо в лс форума, либо по контактам:
    TG: https://t.me/mongoliatupo
    Discord: _monterat (отвечаю не всегда)

    Пишу на форуме впервые, поэтому не судите строго, лучше посоветуйте что нибудь)

  • нормально

  • Интересный, подробный гайд. +rep за подробное описание что и как делать💯

  • нормально

  • andrey_p1mplA andrey_p1mpl выбрал решение
  • andrey_p1mplA andrey_p1mpl закрывает тему
  • andrey_p1mplA andrey_p1mpl открыл эту тему в

Похожие темы

  • пропала кепка салем и хеллоун сумка

    Закрыта Перенесена Решенные Решенные заявки одобрено
    3
    0 Лайки
    3 Сообщений
    47 Показы
    NocturnTheSkyN
    1х Кепка “Salem” Вернул в хранилище
  • Встречная жалоба на алекс уайт (NRP+Mehan+FunGame+оск в looc чат+нарушение атмосферы)

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    14
    0 Лайки
    14 Сообщений
    506 Показы
    Dima GordD
    Приветствую! Извиняюсь за задержку, просмотрев демонстрацию экрана я могу заключить, что игрок нарушил NonRp + Mehan NonRP (NRP) — нелогичное, неролевое, фановое поведение, к нему также приравнивается выход из игры или в AFK во время важных ситуаций для получения выгоды Mehan — злоупотребление возможностями игрового движка без отыгровок Алексе Уайт явно не стоило спавнить пропы и в целом портить ситуацию, делать её фановой. Я не знаю как разворачивались события до и вообще не знаю причин подобного поведения, поэтому вы не увидите моей версии “Как можно было поступить” Итог Алекса Уайт будет под наблюдением администрации (watch list), если подобное поведение повториться, игрок получить ОЧЕНЬ строгое наказание P.S немного опоздал :З
  • Потерял шляпу

    Закрыта Перенесена Решенные Решенные заявки одобрено
    3
    0 Лайки
    3 Сообщений
    97 Показы
    D0n Bar0nD
    Вернул в игре!
  • Масс РДМ+ Читы

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    3
    -1 Лайки
    3 Сообщений
    251 Показы
    DoggeD
    Уже в перманентной блокировке за MassFK.
  • урррр

    Закрыта Перенесена Решенные Решенные заявки одобрено
    2
    0 Лайки
    2 Сообщений
    159 Показы
    p0werP
    Log report generated 21 Jun, 14:33:15 [3 May, 17:28:54] Ричи Перес (Токарь) stole [1xТелефон, 1xМешок тыквенных семечек, 1xКрупный калибр, 1xСтатуэтка, 10xПлотная бумага, 1xСтроительная каска, 1xХоккейная маска] from [Хранилище - Боб Рохас]. Police online: 8 [3 May, 18:11:38] Ричи Перес (Токарь) stole [1xM249, 1xАК-12, 1xGlock 25, 1xКлюч, 1x?????] from [Хранилище - Боб Рохас]. Police online: 6 [3 May, 18:28:07] Ричи Перес (Токарь) stole [1xДробящие патроны, 1xAK-ALPHA, 1xP90, 1xColt M1911, 1xGlock 25, 1xMP5K, 1xГриб] from [Хранилище - Боб Рохас]. Police online: 4 Participants: STEAM_0:0:757269468, STEAM_0:1:200943977 ВЕРНУ . . . . … . .В ХРАН…