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

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

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

Похожие темы

  • Propblock

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    3
    1 Лайки
    3 Сообщений
    95 Показы
    Жеси ПикмиЖ
    Привет @fletcher! Изучил я жалобу, логи и готов подвести итоги, но перед этим быстренько пробежимся по ситуации. Из логов понятно что тот мужчина тебя пускать и не собирается, так как ни кодов ни удаления пропов я не вижу, о чем можно судить из его /pm сообщения. На его месте нужно было предоставить тебе доступ к квартире и/или пароль. Логи: Log report generated 9 Nov, 16:14:16 #208268879 [8 Nov, 2:37:29] Матео Варгас (STEAM_0:1:228471143, Гражданин) successfully executed chat command: /pm "Рэй Клэйтон" бывает хули, живи по закону Participants: STEAM_0:1:228471143 Вердикт! Жалоба получает статус одобрено! Матео Варгас - получит 2,5 дня игровой блокировки за нарушения правила PropBlock. Spoiler P.S. В следующий раз, пожалуйста, указывай свой SteamID правильно:)
  • LeaveRP, Mehan

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    3
    1 Лайки
    3 Сообщений
    119 Показы
    pluxurypurpP
    Появилась возможность встретиться со всеми игроками на сервере, поговорив в АЗ, оба сознались в нарушении, из-за чего вместе с подавшим жалобу игроком было принято слегка смягчить наказание
  • Жалоба на игроков

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    4
    0 Лайки
    4 Сообщений
    336 Показы
    NocturnTheSkyN
    ОТВЕТ АДМИНИСТРАЦИИ ㅤ Привет, @Вадик-Глушитель ! ㅤ upd: Извиняюсь за долгий ответ… Ознакомившись с твоей жалобой, а также сверив логи и просмотрев твою прикрепленную демонстрацию, давай разберемся с самого начала: Как я вижу, ты вместе со своими друзьями по твоим словами открыли “казино” по адресу Бравери 1, этаж 4, кв. 1. Учитывая ситуацию, что за все время приобретения здания, от владельца помещения - Геннадий Север (STEAM_0:0:437210972), не разу не было рекламы через команду /advert , и учитывая, что в помещении у вас стоял лабораторный стол где один из жильцов помещения взаимодействовал с ним, а другие игроки были заняты взаимодействием со своими вещами и хранилищами, и за все время я не увидел взаимодействия владельца или игроков проживающих там характерные действия для игорного бизнеса ( по сути это является просто квартирой в которой находились пропы которые обычно используют для постройки казино ) Это сразу отметает правило, о которым ты сообщил в топике: В соответствии с правилом 20 пунктом 2 строго воспрещается проводить ограбления крупного бизнеса в отсутствии 4 и менее полицейских, т.к. казино автоматически считается крупным бизнесом, а на сервере такого количества полицейских не было. Это подтверждают следующие логи: 24 Feb, 2:53:34 Вадим Глушаков (STEAM_0:0:183490628, Гражданин) moved [2xМедицинский порошок]: [Лабораторный стол]➞[Вадим Глушаков (STEAM_0:0:183490628)'s Руки] 24 Feb, 2:53:38 Вадим Глушаков (STEAM_0:0:183490628, Гражданин) moved [4xПорошковый реагент]: [Лабораторный стол]➞[Вадим Глушаков (STEAM_0:0:183490628)'s Руки] 24 Feb, 2:53:55 Вадим Глушаков (STEAM_0:0:183490628, Гражданин) moved [4xПорошковый реагент]: [Вадим Глушаков (STEAM_0:0:183490628)'s Руки]➞[Хранилище - Вадим Глушаков] 24 Feb, 2:57:34 Геннадий Петрушкин (STEAM_0:0:460322716, Токарь) moved [7xМушка]: [Геннадий Петрушкин (STEAM_0:0:460322716)'s Руки]➞[Верстак] 24 Feb, 2:57:33 Геннадий Петрушкин (STEAM_0:0:460322716, Токарь) moved [2xКлей]: [Геннадий Петрушкин (STEAM_0:0:460322716)'s Руки]➞[Верстак] 24 Feb, 2:57:32 Геннадий Петрушкин (STEAM_0:0:460322716, Токарь) moved [2xЗатвор]: [Геннадий Петрушкин (STEAM_0:0:460322716)'s Руки]➞[Верстак] 24 Feb, 2:57:32 Геннадий Петрушкин (STEAM_0:0:460322716, Токарь) moved [5xПоршень]: [Геннадий Петрушкин (STEAM_0:0:460322716)'s Руки]➞[Верстак] 24 Feb, 2:57:31 Геннадий Петрушкин (STEAM_0:0:460322716, Токарь) moved [5xПружина]: [Геннадий Петрушкин (STEAM_0:0:460322716)'s Руки]➞[Верстак] 24 Feb, 2:57:30 Вадим Глушаков (STEAM_0:0:183490628, Гражданин) picked up [1xГоршок] dropped by Геннадий Север (STEAM_0:0:437210972, Гражданин) Далее, дверь в ваше помещение взламывается одним из грабителей, и к вам забегают 3 грабителя с целью ограбления вас и ваших хранилищ, этими грабителями были: Юрий Матюшевский (STEAM_0:0:101445004) Мартин Холл (STEAM_0:0:440978879) Григорий Бензо (STEAM_0:0:158285829). Это подтверждают следующие логи: 24 Feb, 3:04:56 Мартин Холл (STEAM_0:0:440978879, Гражданин) lockpicked Геннадий Север (STEAM_0:0:437210972, Гражданин)'s prop_door_rotating: success. Police online: 1 Далее, игрок - Григорий Бензо (STEAM_0:0:158285829) зайдя в помещение убивает безоружного игрока - Геннадий Север (STEAM_0:0:437210972), после расправляется и c игроком Вадим Глушаков (STEAM_0:0:183490628), который держал оружие в руках, но не представлял опасности для Бензо и не целился в него. Это подтверждают следующие логи: 24 Feb, 3:05:00 Григорий Бензо (STEAM_0:0:158285829, Гражданин) aimed at Геннадий Север (STEAM_0:0:437210972, Гражданин) with Colt M1911. Police online: 1 24 Feb, 3:05:00 Геннадий Север (STEAM_0:0:437210972, Гражданин) (inventory) was knocked by Григорий Бензо (STEAM_0:0:158285829, Гражданин) with Colt M1911. Police online: 1 24 Feb, 3:05:05 Вадим Глушаков (STEAM_0:0:183490628, Гражданин) (inventory) was knocked by Григорий Бензо (STEAM_0:0:158285829, Гражданин) with Colt M1911. Police online: 1 Далее, грабители взламывают хранилища и обыскивают людей находящиеся в помещении, после покидают место преступления, а вскоре и покидают сам сервер предварительно не отписав в общий неролевой чат (OOC), и не убедившись, что ролевые взаимодействия с ними окончены. upd: Я заметил, что после ситуации Мартин Холл (STEAM_0:0:440978879) взломал машину другого игрока на Рузвельте. Это подтверждают следующие логи: Мартин Холл (STEAM_0:0:440978879) 24 Feb, 3:05:02 Мартин Холл (STEAM_0:0:440978879, Гражданин) aimed at Геннадий Петрушкин (STEAM_0:0:460322716, Токарь) with Glock 17. Police online: 1 24 Feb, 3:05:28 Мартин Холл (STEAM_0:0:440978879, Гражданин) searched Геннадий Петрушкин (STEAM_0:0:460322716, Токарь). Police online: 1 24 Feb, 3:06:29 Мартин Холл (STEAM_0:0:440978879, Гражданин) stole [1xЭкстрактор, 2xПиво, 2xЭспрессо, 1xЕда, 1xВодка, 1xТелефон] from [Хранилище - Вадим Глушаков]. Police online: 1 24 Feb, 3:07:04 Мартин Холл (STEAM_0:0:440978879, Гражданин) lockpicked Геннадий Петрушкин (STEAM_0:0:460322716, Токарь)'s octoinv_storage: success. Police online: 1 24 Feb, 3:07:25 Мартин Холл (STEAM_0:0:440978879, Гражданин) stole [1xПроцессор, 1xСтанок, 10xБолт, 1xРация, 1xЧерные авиаторы, 4xПружина] from [Хранилище - Геннадий Петрушкин]. Police online: 1 24 Feb, 3:09:09 Мартин Холл (STEAM_0:0:440978879, Гражданин) stole [1xНаркотик (painkiller), 2xПиво, 1xШаурма, 2xКастрюля, 1xМалый калибр, 1xНаркотик (alcohol)] from [Хранилище - Геннадий Север]. Police online: 1 24 Feb, 3:12:56 Мартин Холл (STEAM_0:0:440978879, Гражданин) lockpicked Нелл Вегас (STEAM_0:1:755939544, Местный)'s gmod_sent_vehicle_fphysics_base: success. Police online: 1 24 Feb, 3:13:37 Мартин Холл (STEAM_0:0:440978879, Гражданин) lockpicked Нелл Вегас (STEAM_0:1:755939544, Местный)'s gmod_sent_vehicle_fphysics_base: success. Police online: 1 24 Feb, 3:23:15 Player disconnected: Мартин Холл (STEAM_0:0:440978879, Гражданин), Disconnect by user. Григорий Бензо (STEAM_0:0:158285829) 24 Feb, 3:05:00 Геннадий Север (STEAM_0:0:437210972, Гражданин) (inventory) was knocked by Григорий Бензо (STEAM_0:0:158285829, Гражданин) with Colt M1911. Police online: 1 24 Feb, 3:05:05 Вадим Глушаков (STEAM_0:0:183490628, Гражданин) (inventory) was knocked by Григорий Бензо (STEAM_0:0:158285829, Гражданин) with Colt M1911. Police online: 1 24 Feb, 3:05:41 Григорий Бензо (STEAM_0:0:158285829, Гражданин) aimed at Андрей Таборицкий (STEAM_0:1:895105029, Городской работник) with Colt M1911. Police online: 1 24 Feb, 3:06:02 Григорий Бензо (STEAM_0:0:158285829, Гражданин) searched Андрей Таборицкий (STEAM_0:1:895105029, Городской работник). Police online: 1 24 Feb, 3:06:33 Григорий Бензо (STEAM_0:0:158285829, Гражданин) picked up [1559xДеньги] dropped by Геннадий Петрушкин (STEAM_0:0:460322716, Токарь) 24 Feb, 3:08:42 Григорий Бензо (STEAM_0:0:158285829, Гражданин) searched Труп - Вадим Глушаков. Police online: 1 24 Feb, 3:08:45 Григорий Бензо (STEAM_0:0:158285829, Гражданин) moved [500xДеньги]: [Труп - Брюки]➞[Григорий Бензо (STEAM_0:0:158285829)'s Брюки] 24 Feb, 3:08:52 Григорий Бензо (STEAM_0:0:158285829, Гражданин) searched Труп - Геннадий Север. Police online: 1 24 Feb, 3:08:55 Григорий Бензо (STEAM_0:0:158285829, Гражданин) moved [1xСигареты]: [Труп - Куртка]➞[Григорий Бензо (STEAM_0:0:158285829)'s Брюки] 24 Feb, 3:13:26 Григорий Бензо (STEAM_0:0:158285829, Гражданин) lockpicked Михаил Белов (STEAM_0:0:508077149, Механик)'s octoinv_storage: success. Police online: 1 24 Feb, 3:13:47 Григорий Бензо (STEAM_0:0:158285829, Гражданин) stole [2xКурок, 2xВодка, 1xПиво, 1xФигурка Старьевщика] from [Хранилище - Михаил Белов]. Police online: 1 24 Feb, 3:28:48 Григорий Бензо (STEAM_0:0:158285829, Гражданин) moved [1xHi-Point C-9]: [Григорий Бензо (STEAM_0:0:158285829)'s Руки]➞[Хранилище - Григорий Бензо] 24 Feb, 3:29:20 Григорий Бензо (STEAM_0:0:158285829, Гражданин) moved [1xМетамфетамин]: [Хранилище - Григорий Бензо]➞[Григорий Бензо (STEAM_0:0:158285829)'s Руки] 24 Feb, 3:36:06 Player disconnected: Григорий Бензо (STEAM_0:0:158285829, Гражданин), Disconnect by user. Юрий Матюшевский (STEAM_0:0:101445004) 24 Feb, 3:08:41 Damage Юрий Матюшевский (STEAM_0:0:101445004, Гражданин) aimed at Геннадий Петрушкин (STEAM_0:0:460322716, Токарь) with Beretta 92. Police online: 1 24 Feb, 3:09:59 Юрий Матюшевский (STEAM_0:0:101445004, Гражданин) successfully executed chat command: /me бьет парня по затылку рукояткой пистолета пытаясь вырубить 24 Feb, 3:10:00 Юрий Матюшевский (STEAM_0:0:101445004, Гражданин) successfully executed chat command: /roll 24 Feb, 3:23:47 Юрий Матюшевский (STEAM_0:0:101445004, Гражданин) moved [1xBeretta 92]: [Юрий Матюшевский (STEAM_0:0:101445004)'s Куртка]➞[Victoria – багажник] 24 Feb, 3:24:23 Player disconnected: Юрий Матюшевский (STEAM_0:0:101445004, Гражданин), Disconnect by user. Подводя итог, я готов сказать следующее: Григорий Бензо (STEAM_0:0:158285829), нарушил правила: Нарушение правил игры за Криминал, FreeKillx2, LeaveRP. Юрий Матюшевский (STEAM_0:0:101445004), нарушил правила: Нарушение правил игры за Криминал, LeaveRP. Мартин Холл (STEAM_0:0:440978879), нарушил правила: Нарушение правил игры за Криминал x2, LeaveRP. Сводка из правила --> 20. Подробные правила игры за криминал --> 20.2. Ограничение криминала Spoiler [image: ZQfwSR4.png] Игроки Мартин Холл (STEAM_0:0:440978879), Юрий Матюшевский (STEAM_0:0:101445004), Григорий Бензо (STEAM_0:0:158285829), совершали криминальные действия при наличии менее 2х полицейских, что и является данным нарушением, (начиная с самого начала данной ситуации вплоть до ее окончания, кол-во полицейских даже не увеличилось) Игрокам не следовало так поступать, они должны были дождаться когда количество полицейских будет минимум от 2х, для того чтобы они смогли совершать криминальные действия, в их случае - взлом квартиры с целью ограбления. Сводка из правила --> 1. Нелогичное поведение --> 1.2. AFKAbuse и LeaveRP Spoiler [image: G5xL1K6.png] Игроки Мартин Холл (STEAM_0:0:440978879), Юрий Матюшевский (STEAM_0:0:101445004), Григорий Бензо (STEAM_0:0:158285829), после совершения криминальных действий, кражи вещей других игроков, взлома квартиры и хранилищ, не стоило покидать сервер не отписав в общий неролевой чат (OOC) и не убедившись, что все ролевые взаимодействия с ними окончены. Сводка из правила --> 4. Убийство и урон --> 4.2. FreeKill Spoiler [image: T5WGQ2D.png] Игрок Григорий Бензо (STEAM_0:0:158285829) после того, как помещение было взломано, ворвавшись туда совершил убийство двоих гражданских которые не представляли прямую угрозу его жизни, что и является нарушением. Игроку не стоило так поступать, в его случае ему следовало пригрозить гражданским оружием, чтобы те выполняли его приказы, в случае если бы гражданские делали это слишком медленно или не подчинялись, Бензно мог нанести гражданским физический вред для запугивания. Убийство всегда является - крайней мерой. ㅤ ДОПОЛНЕНИЕ ㅤ upd: Момент, не относящийся к жалобе топикстартера, но мне стоит подметить. Администрируя на сервере 03.03.25 23:20~ , я заметил одного из нарушителей данной жалобы, а именно - Григорий Бензо (STEAM_0:0:158285829), я решил уведомить его в админ-зоне о том, что тот будет наказан и ему будет выдано соразмерное наказание его нарушениям, но тут, я увидел что он разместил и закрепил хранилище в кустах в парке сзади полицейского департамента, что также является нарушением. Сводка из правила --> 14. Постройки 14.1. Общие правила построек Spoiler [image: TDTtuv5.png] Игроку Григорий Бензо (STEAM_0:0:158285829), не стоило размещать и закреплять хранилище на улице, для этого ему следовало купить помещение для проживания и разместить хранилище там. ВЕРДИКТ ㅤ Учитывая, что игроки Григорий Бензо (STEAM_0:0:158285829), Мартин Холл (STEAM_0:0:440978879), Юрий Матюшевский (STEAM_0:0:101445004), имеют достаточно много часов на сервере. Игрок Григорий Бензо (STEAM_0:0:158285829), получит наказание в виде временной блокировки аккаунта, а также временный запрет на игру за криминал после выхода из блокировки. Игрок Мартин Холл (STEAM_0:0:440978879), получит наказание в виде временной блокировки аккаунта. Игрок Юрий Матюшевский (STEAM_0:0:101445004), получит наказание в виде временной блокировки аккаунта. upd: с игроком Григорий Бензо (STEAM_0:0:158285829), была проведена беседа в админ-зоне и ему известно о его нарушениях. upd x2: Топикстартер @Вадик-Глушитель может отправить заявку на возврат украденных вещей, предварительно указав мой никнейм в заявке, чтобы я подтвердил возврат вещей лог-репортом. upd x3: Как заявил топикстартер ранее, я не вижу в действиях игроков то, что может оскорблять администрацию, правила и сообщество сервера.
  • Жалоба на FreeKill двоих людей

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    3
    0 Лайки
    3 Сообщений
    198 Показы
    DoggeD
    Привет, рассмотрев логи я готов вынести вердикт: Игрок действительно нарушил правило FreeKill, так как в логах я не увидел никаких особых действия от вас из-за которых можно было бы убить вас. Log report generated 9 Nov, 22:44:22 [4 Nov, 18:58:58] Кейн Пирс (STEAM_0:1:565872977, Гражданин, Colt M1911) aimed at Джереми Вантсон (STEAM_0:0:589372958, Гражданин, Руки) with Colt M1911. Police online: 16 [4 Nov, 18:58:59] Джереми Вантсон (STEAM_0:0:589372958, Гражданин, Руки) (inventory) was knocked by Кейн Пирс (STEAM_0:1:565872977, Гражданин, Colt M1911) with Colt M1911. Police online: 16 [4 Nov, 18:59:00] Кейн Пирс (STEAM_0:1:565872977, Гражданин, Colt M1911) aimed at Патрик Уилсон (STEAM_0:0:528001776, Гражданин, Руки) with Colt M1911. Police online: 16 [4 Nov, 18:59:00] Патрик Уилсон (STEAM_0:0:528001776, Гражданин, Руки) (inventory) was knocked by Кейн Пирс (STEAM_0:1:565872977, Гражданин, Colt M1911) with Colt M1911. Police online: 16 Participants: STEAM_0:1:565872977, STEAM_0:0:589372958, STEAM_0:0:528001776 Итог: Кейн Пирс получит блокировку за FKx2 на 5 дней.
  • НРП, + Убиство просто так. Без краймеров.

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    3
    0 Лайки
    3 Сообщений
    152 Показы
    briniB
    Решено в игре.