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

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

Решенные Гайды
3 3 997 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
    4 Лайки
    8 Сообщений
    420 Показы
    FocusF
    @Lima Добро
  • Игровой помощник | Delta62

    Закрыта Перенесена Решенные Решенные заявки одобрено
    17
    1
    12 Лайки
    17 Сообщений
    1k Показы
    D0n Bar0nD
    Принят в команду!
  • Верните деньгу

    Закрыта Перенесена Решенные Решенные заявки одобрено
    4
    0 Лайки
    4 Сообщений
    188 Показы
    D0n Bar0nD
    Вернул на сервере реагенты, исходя из лог-репорта администратора выше!
  • краймер с глоком

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    3
    0 Лайки
    3 Сообщений
    228 Показы
    5555
    приват, готов разобрать. твою жалоб. посмотрев по логам, можно увидеть как игрок начинает стрельбу по тебе, не понятно зачем. Стрельбу вёл около полицейского департамента в переулке, а когда убил - начал лутать прямо на тротуаре на Бравери 8. Довольно проходимое место, относится к ЗЗ. Игроку будет выдан длительный запрет на криминал и вотчлист, в связи с его часами. [image: k5EmIRW.png]
  • 2 Лайки
    5 Сообщений
    329 Показы
    TekoyT
    Разбираю ситуацию, опираясь на демку и на правила сервера. Полицейский “Уолтер Перес” получит блокировку на 7 дней, за свои действия. Прыжок через крыши будет приравниваться как нарушение правила PG. Хоть у правила есть исключение, что полицейские могут немного быть сильнее чем положено, но это не относится к прыжкам между крышами с толпами людей, который могут его столкнуть вниз или не дать нормально приземлиться даже. Мало того, что игрок перепрыгнул через крыши, так еще как полицейский не понимал или не знал как действовать с игроками на ситуации. Показал полное несоответствие роли и отсутствие какого-либо отыгрыша. Однако не буду приравнивать это к NonRp, в силу того, что игрок мог оказаться на этой ситуации впервые, учитывая кол-во наигранного времени (30-35 часов). С учетом его истории наказаний, думаю этого времени (7 дней блокировки) хватит, чтобы переосмыслить свою игру на сервере. [image: G5oDaVp.png] Гражданин Гордон Цехов, он же строитель данной лестнице/лифта/пропов на крышу получит наказание за нарушение правил строительства и NonRp (фангейм) - создание ситуаций нацеленных на разрушение ролевой атмосферы (своим приходом сделал ситуацию максимально несерьезной, тайм-код демонстрации 2:40-2:55). Его постройка и его поведение на самой ситуации являются аболютно абсурдными и направлены на то, чтобы сделать ситуацию максимально несерьезной. Какова цель этой постройки и доступа к крыши, неизвестно. Видимо, чтобы там кучковались люди и лишний раз провоцировали полицию на какую-то недоситуацию с фанегеймом. Итог, Гордон Цехов нарушил правило построек (17 пункт) и за NonRp (пункт 1) + нарушение правила PG тайм-код 3:37-3:48. Блокировка для данного игрока за нарушение 3 правил сервера составит 20 дней + наложение вотч листов за описанные выше нарушения. [image: 9Ca3FIc.png] [image: ltjbb70.png] Полицейский Алекс Мерис получит вотч лист + запрет на игру за полицию сроком в 7 дней, для изучения основных и подробных правил сервера за нарушение правила NonRp. Тайм-код демки 3:04-3:10. Взял и на всю заорал непонятно зачем и для чего (даже если на него кто-то напал - это не повод орать во все горло. Уже были прецеденты, когда игроки специально искали повод поорать в рацию - такие ситуации пресекались моментально, вплоть до перманентной блокировки). [image: FwfhKHw.png] @Ебучий-Лис (топик-стартер) на тайм-коде 4:04-4:15 нарушил правило MG. Начал говорить о неправильной игры другого игрока через IC канал (войс чат). Получит наказание за нарушение в виде вотч-листа. Момент с убийством можно оправдать тем, что игрок (персонаж) представлял угрозу тебе и мог скинуть тебя с крыши. FK первого - нет (тайм-код 4:27-4:32). На будущее советую тебе оказывать медицинскую помощь игрокам, которых ты убил. Это входит в прямые обязанности офицера полиции - не выполнение таких базовых процедур можно прировнять к IC нарушению или ООС нарушение (несоответствие роли - NonRp) - тайм-код 4:50-4:56 Убийство на тайм-коде 5:45-5:47 очень спорное. Но в силу того, что человек после полученного ранения скинул другого человека с крыши, при этом оставался еще один игрок - правомерное, однако тебе как офицеру полиции нужно было держать человека с лопатой на прицеле, даже после его ранения. Применение дубинки на тайм-коде 6:04-6:06 не оправдывает никак твой поступок. В связи с этим мною принято решение выдать тебе запрет на игру за полицию сроком на 7 дней, в качестве наказания. Я понимаю, что ситуация, созданная этими игроками - привела тебя к дизморальному состоянию и ты уже не был в силах с ними отыгрывать дальше. Но это не дает тебе право создавать ответные нарушения и уж тем более нарушать правила нашего проекта. Гражданин Вильям Рич получит наказание за нарушение правила NonRp (нелогичное поведение), после убийства первого человека, офицером полиции (@Ебучий-Лис) на тайм-коде 4:27-4:32 - отписал в чат следующие слова: Вильям Рич: ээхххннзхахав + нарушение правил неролевых чатов, ты в ООС оскорбил полицейского назвав его долбоебом (провакационно-оскорбительное поведение): тайм код 6:14-6:14 [image: YsJHqdN.png] нарушение правила NonRp (нелогичное поведение), после убийства человека отписал в чат /y эххХЭахАхаХах и т.д. [image: 4TyCgeL.png] Упал, но не отыграл ранение и при этом так смело перепрыгивает крыши тайм-код 6:25-6:28 На протяжении всей демки, игрок Вильям Рич неоднократно писал число 52, что является именем/псевдонимом рэп исполнителя (ALBLAK 52 трек +7(952)812). - также нарушение правила NonRp (уже двойное нарушение одного и того же правила). Далее на тайм-коде 7:18-7:35 начинает скидывать человека, со словами я сейчас прыгну или я сейчас помогу одного чела спустить вниз. Данный игрок получит наказания за все свои нарушения по всей мере строгости. За содеянное получает блокировку сроком в 3 месяца. За нарушение описанных выше правил сервера. Гражданин Виталий Сороконожко получит наказание за нарушение правил: “Игровое имя персонажа” (СОРОКОНОЖКО) (пункт 7); NonRp (нелогичное поведение, пункт 1) Скинул игрока без каких-либо отыгровок, чисто механом; PG (неотыгровка ранения после полученного в ногу выстрела) (пункт 2). Фиксация нарушений по тайм-коду 5:00-5:45. Получит блокировку на 20 дней за содеянное. @Ебучий-Лис изучи вердикт и более не нарушай со своей стороны. Масс ФК не было, оправдан. Блокировка будет снята, новые наказания будут выданы.