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

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

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

Похожие темы

  • Заявка на разбан

    Закрыта Перенесена Решенные Решенные заявки одобрено
    5
    1 Лайки
    5 Сообщений
    664 Показы
    WiseGenieW
    Одобрено на условиях
  • Возврат от ПРОКОПА

    Закрыта Перенесена Решенные Решенные заявки одобрено
    3
    0 Лайки
    3 Сообщений
    298 Показы
    D0n Bar0nD
    @Nikkoman, вернул вещи в куртку, хран забит, все положить не удалось, свяжись со мной в дс: d0nbar0n, чтобы я тебе выдал трубку и AR-15 UPD: Вернул AR-15 и трубку на сервере
  • Заявка на возврат из за вылета

    Закрыта Перенесена Решенные Решенные заявки одобрено
    2
    0 Лайки
    2 Сообщений
    197 Показы
    smokiondahoodS
    Привет, вернул в игре.
  • PowerGaming+Nrp (ААА ЭЩКЕРЕЕ)

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    4
    -1 Лайки
    4 Сообщений
    350 Показы
    D0n Bar0nD
    Привет, @Kusume! Внимательно ознакомившись с логами, я готов обозначить нарушения, начнем с “Брюс Тайсон”: 1. Нарушение Общих Правил Сервера (Токсичность в неролевых чатах) — не стоит вести себя агрессивно в неролевых чатах, это может привести к созданию конфликтов, лучше решить все мирно, у нас же фрэндли комьюнити, как никак, поэтому в будущем стоит быть более сдержанным. Для подтверждения нарушения игрока, приложу вырезку из логов: Log report generated 11 Jul, 19:30:29 [11 Jul, 11:23:33] Брюс Тайсон (STEAM_0:1:613265805) successfully executed chat command: /looc хули ты истеришь [11 Jul, 11:26:17] Брюс Тайсон (STEAM_0:1:613265805) successfully executed chat command: /looc слеш ме хард эрэрпе [11 Jul, 11:28:11] Брюс Тайсон (STEAM_0:1:613265805) successfully executed chat command: /looc ты сука заебал тут реветь как будто я тебя затулил без отыгровки ранений [11 Jul, 11:28:43] Брюс Тайсон (STEAM_0:1:613265805) successfully executed chat command: /looc как у тебя сука ноги сломаны ? ты через окно даже не вылетал что бы они были сломаны [11 Jul, 11:32:08] Брюс Тайсон (STEAM_0:1:613265805) successfully executed chat command: / сука пиздец ты фрикуешь конечно [11 Jul, 11:34:55] Брюс Тайсон (STEAM_0:1:613265805) successfully executed chat command: / хуй соси тебя тоже уволили Participants: STEAM_0:1:613265805 2. NonRP (LeaveRP) — перед выходом с сервера, стоит убедиться, что с твоим персонажем не имеется взаимодействий, для этого нужно использовать “/ooc [текст]” или “// [текст]”. Для подтверждения этого, приложу вырезку из логов: Log report generated 11 Jul, 19:30:59 [11 Jul, 11:39:16] Player disconnected: Брюс Тайсон (STEAM_0:1:613265805), Disconnect by user. Participants: STEAM_0:1:613265805 Теперь перейдем к нарушению топик стартера с ником “Кэти Браун”, оно является идентичным первой провинности Брюса, поэтому точно так же, настоятельно рекомендую пересмотреть момент общения в неролевых чатах. Вновь, для подтверждения своих слов, приложу вырезку из логов: Log report generated 11 Jul, 19:37:30 [11 Jul, 11:23:07] Кэти Браун (STEAM_0:0:564163097) successfully executed chat command: / играй ранения петух [11 Jul, 11:31:55] Кэти Браун (STEAM_0:0:564163097) successfully executed chat command: / СУКА У МЕНЯ КРОВЬ ИЗ НОСА ТЕЧЕТ, И ШРАМ НА ЛБУ, ТЫ ТУРНИКЕТ НАКЛАДЫВАЕШЬ [11 Jul, 11:32:20] Кэти Браун (STEAM_0:0:564163097) successfully executed chat command: / ты ваще еблан? [11 Jul, 11:35:30] Кэти Браун (STEAM_0:0:564163097) successfully executed chat command: /pm "Марк Фолд" я пойду писать жалобу на этого долбоеба Participants: STEAM_0:0:564163097 ВЕРДИКТЫ: “Брюс Тайсон” - получит блокировку на 1 день за нарушение правил НОПС (Токсичность в неролевых чатах)+NonRP (LeaveRP) “Кэти Браун” - получит WatchList за нарушение правила НОПС (Токсичность в неролевых чатах)
  • нормас так меня раскумарили

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    3
    0 Лайки
    3 Сообщений
    575 Показы
    Raiden KitrovR
    Привет, рассмотрел жалобу, готов вынести вердикт. Рассмотрев всю ситуацию скажу что заметил в действиях игрока нарушение действующих правил сервера. А именно FK. Игроку не стоило тебя добивать, так как ты не успел ему сделать чего такого. Так как ты просто пытался отогнать гражданских от здания во избежание жерт. Игрок получит вотч лист за свои нарушения. Удачи