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

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

Решенные Гайды
3 3 1.1k 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 открыл эту тему в

Похожие темы

  • стрельба на загородной азс

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    8
    2 Лайки
    8 Сообщений
    628 Показы
    afreesailorA
    Рассмотрев твою жалобу выявил следующие нарушения: 1 - Уилл Вашингтон: NonRP (Лутинг, шутинг) - Log report generated 3 Jun, 5:06:03 [2 Jun, 2:46:38] Уилл Вашингтон (STEAM_0:1:753517222, Гражданин) searched Труп - Майл Андресон. Police online: 13 [2 Jun, 2:46:54] Уилл Вашингтон (STEAM_0:1:753517222, Гражданин) searched Труп - Россо Эспозито. Police online: 13 [2 Jun, 2:47:13] Уилл Вашингтон (STEAM_0:1:753517222, Гражданин) searched Труп - Денер Тубский. Police online: 13 Participants: STEAM_0:1:753517222 Log report generated 3 Jun, 5:08:57 [2 Jun, 2:45:46] Майл Андресон (STEAM_0:1:482148082, Офицер полиции) was hurt: 9HP in руку by Уилл Вашингтон (STEAM_0:1:753517222, Гражданин) with Glock 17. Police online: 13 [2 Jun, 2:45:46] Майл Андресон (STEAM_0:1:482148082, Офицер полиции) was hurt: 19HP in by Уилл Вашингтон (STEAM_0:1:753517222, Гражданин) with Glock 17. Police online: 13 Participants: STEAM_0:1:482148082, STEAM_0:1:753517222 FreeDamage (Нанесение урона безоружному офицеру без весомой причины) - PG (Неотыгровка ранений) - 2 - Россо Эспозито FreeKill (Убийство безоружного офицера и добив) Log report generated 3 Jun, 5:12:06 [2 Jun, 2:45:40] Майл Андресон (STEAM_0:1:482148082, Офицер полиции) was hurt: 19HP in by Россо Эспозито (STEAM_0:0:535470196, Гражданин) with Glock 17. Police online: 13 [2 Jun, 2:45:46] Майл Андресон (STEAM_0:1:482148082, Офицер полиции) (inventory) was knocked by Россо Эспозито (STEAM_0:0:535470196, Гражданин) with Glock 17. Police online: 13 [2 Jun, 2:45:46] Майл Андресон (STEAM_0:1:482148082, Офицер полиции) (knocked) was killed by Россо Эспозито (STEAM_0:0:535470196, Гражданин) with Glock 17. Police online: 13 Participants: STEAM_0:1:482148082, STEAM_0:0:535470196 NonRP (Игра ради шутинга) 3 - Майл Андерсон PG (Попытка достать оружие, будучи под градом пуль и раненым, видно на демке) ИТОГ: Майл Андерсон - Получит игровую блокировку, сроком на 7 дней, за PG Россо Эспозито - Получит игровую блокировку, сроком на 21 день, а так-же запрет на крайм на полтора месяца. Уилл Вашингтон - Получит игровую блокировку, сроком на 44 дня, а так-же запрет на крайм на три месяца, за NonRP, FreeDamage, PowerGaming, а так-же активный вотч лист. Все наказания выдаются с учётом часов, и вотч листов (При наличии), а так-же серьёзности нарушения. Игроки, потерявшие свои вещи на момент убийства могут обратиться с заявкой на возврат предмета с пингом меня, для прикрепления логов утерянных предметов.
  • ФК

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    3
    0 Лайки
    3 Сообщений
    318 Показы
    hanssH
    Здарова!!! Log report generated 29 Apr, 21:03:28 [27 Apr, 21:26:38] Гарри Миллер (STEAM_0:1:463915949) used tool advdupe2 [27 Apr, 21:28:25] Вятчеслав Бутусов (STEAM_0:0:619310717, Гражданин, Glock 17) aimed at Гарри Миллер (STEAM_0:1:463915949, Гражданин, Руки) with Glock 17. Police online: 15 [27 Apr, 21:28:25] Гарри Миллер (STEAM_0:1:463915949, Гражданин, Руки) was hurt: 19HP in by Вятчеслав Бутусов (STEAM_0:0:619310717, Гражданин, Glock 17) with Glock 17. Police online: 15 [27 Apr, 21:28:26] Гарри Миллер (STEAM_0:1:463915949, Гражданин, Руки) was hurt: 19HP in by Вятчеслав Бутусов (STEAM_0:0:619310717, Гражданин, Glock 17) with Glock 17. Police online: 15 [27 Apr, 21:28:26] Гарри Миллер (STEAM_0:1:463915949, Гражданин, Руки) was hurt: 19HP in by Вятчеслав Бутусов (STEAM_0:0:619310717, Гражданин, Glock 17) with Glock 17. Police online: 15 [27 Apr, 21:28:27] Гарри Миллер (STEAM_0:1:463915949, Гражданин, Руки) (inventory) was knocked by Вятчеслав Бутусов (STEAM_0:0:619310717, Гражданин, Glock 17) with Glock 17. Police online: 15 Participants: STEAM_0:1:463915949, STEAM_0:0:619310717 Причины для того чтобы убивать парня? Нету… Log report generated 29 Apr, 21:04:19 [27 Apr, 21:29:21] Вятчеслав Бутусов (STEAM_0:0:619310717, Гражданин) successfully executed chat command: /looc Я испугался [27 Apr, 21:29:28] Вятчеслав Бутусов (STEAM_0:0:619310717, Гражданин) successfully executed chat command: /looc Думал ты с ганом Participants: STEAM_0:0:619310717 Испугался так испугался… Вердикт: Вятчеслав Бутусов (STEAM_0:0:619310717) -Получает неприятный watch за FK. ЕСЛИ ХОЧЕШЬ НАПИСАТЬ ЗАЯВКУ НА ВОЗВРАТ - ПИШИ!! @Coroner-with-standarts
  • жалоба Айболат Сулейменов

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    2
    -2 Лайки
    2 Сообщений
    456 Показы
    K
    Привет! Тебя забанили на дае недели, теперь ты решил приплести метагейминг? С тобой я неконтактировал ниразу, только сегодня.
  • Сергей Бибонов PowerGaming

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    3
    1 Лайки
    3 Сообщений
    292 Показы
    D0n Bar0nD
    Привет, @secret! Внимательно ознакомившись с твоей демонстрацией экрана, я готов переходить к нарушению со стороны игрока с ником “Сергей Бибонов”: PowerGaming — получив серьезные раны (даже не учитывая механ урон, который банально может не пройти) после столкновения, Сергей решает дать по газам, крикнув Рэнди парочку ласковых в след, конечно же, не отыграв полученные увечья. В последующем стоит отыграть подобные увечья командами, которые присутствуют на сервере ВЕРДИКТ: ОДОБРЕНО “Сергей Бибонов” - получит блокировку на 2 дня за нарушение правила PG
  • МГ, ООС неприязнь, НонРп

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    5
    -5 Лайки
    5 Сообщений
    558 Показы
    вячВ
    Игрок Андретто Челябинни получит игровую блокировку сроком на 10 дней за: NonRP - не совсем увидел объяснение лично от Андерлорда на то, зачем данная афера была произведена. Все аргументы были лишь в том, что “да мы троллим” “он меня доксил” и тому прочие. Объяснений в рамках совершенной ситуации я не получил, и, соответственно у этого действия мотива не имеется. Так же ранее администратор давал ему варнинг и кикал за порчу ролевой атмосферы. MG - перенос ООС-конфликтов в игровую почву. Общение в IC чате со своими друзьями в ООС-манере. Нарушение общих правил сервера - оскорбления игрока(-ов) сервера в /pm. Игрок Вацок Анашкин получит предупреждение за неигровой никнейм. Ничего серьезного в логах не увидел, так же не знаю, какую степень имеет игрок Акакий во всем вашем внутреннем конфликте. Закрыто. Одобрено.