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

Простой 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 открыл эту тему в

Похожие темы

  • Убил коп после чего выпала маска мумии

    Закрыта Перенесена Решенные Решенные заявки одобрено
    3
    0 Лайки
    3 Сообщений
    72 Показы
    NocturnTheSkyN
    1х Маска мумии Вернул в хранилище
  • ночной рдм

    Закрыта Перенесена Решенные Решенные заявки одобрено
    4
    1 Лайки
    4 Сообщений
    104 Показы
    StydentS
    Вернул в хран. 1xВзломщик 1xTEC-9 1xДекстроза 5xОтмычка 1xКрупный калибр 3xМалый калибр
  • От лица GunsOMG

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    8
    -5 Лайки
    8 Сообщений
    328 Показы
    kaban_sonK
    Привет @ToopekStroiniy! Я рассмотрел твою жалобу и лог ситуации и готов вынести вердикт. Джеймс Кафлин (STEAM_0:0:216520831): PG - не отыгровка ранения полученного при сопротивлении, лог ниже Log report generated 17 Apr, 19:56:57 [15 Apr, 15:17:38] Джеймс Кафлин (Местный) successfully executed chat command: /me очень медленно встает с одной коленки. [15 Apr, 15:17:58] Джеймс Кафлин (Местный) successfully executed chat command: /me делает толчок в сторону священика, после чего начинает бить ногами. [15 Apr, 15:20:10] Джеймс Кафлин (Местный) was hurt: 15HP in левую ногу by Сергей Калашников (Гражданин) with Ножик. Police online: 13 Participants: STEAM_0:0:216520831, STEAM_0:1:540160221 Сергей Калашников (STEAM_0:1:540160221): Игра запрещенной роли - посмотрев твои логи я нашел лишь маниакально одержимое поведение твоего персонажа, которое идет в сторону приченения вреда другим людям путем их похищения и последующего “Страшного суда”, логи ниже Log report generated 17 Apr, 20:11:22 [15 Apr, 15:05:48] Сергей Калашников (Гражданин): Можешь не бояться меня, ведь я пришел помочь тебе, сын мой. Бог защищает тебя и он хочет тебе помочь избавиться от грехов. Ты очень долго грешил и настало то время когда ты очистишься.... Будешь чистым... Как мрамор. [15 Apr, 15:06:28] Сергей Калашников (Гражданин): Надеюсь ты будешь сотрудничать, ты же хочешь очиститься? [15 Apr, 15:07:17] Сергей Калашников (Гражданин): Джеймс, знай что я не хочу тебе зла, но я буду выполнять волю Божью даже если прийдется тебя убить. [15 Apr, 15:08:43] Сергей Калашников (Гражданин): Это хорошо, сын. Перед тем как мы начнем ритуал Страшного Суда мне нужно будет составить твоё досье. Participants: STEAM_0:1:540160221 Нус-с подведем итоги разбора ситуации, жалоба получает статус Одобрено. Ну и не забываем про взыскания. Джеймс Кафлин (STEAM_0:0:216520831) - Получит WatchList за нарушение правила PG. Сергей Калашников (STEAM_0:1:540160221) - Получит блокировку сроком 25 дней из за имеющегося WatchList’a.
  • Power Gaming

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    3
    0 Лайки
    3 Сообщений
    210 Показы
    Ronbon99R
    Привет, @крутой-про! Внимательно ознакомившись с логами, я готов перейти к нарушению игрока с ником “Майкл Вильямс”: Нарушение правило Powergaming (PG): Игнорирование страха, боли, действия превыше человеческих сил – все это является нарушением правила PowerGaming. В данном случае “Райан Хилрой” долгое время направлял оружие на “Майкла Вильямса” на, что Майкл решил проигнорировать зная, что у него уже имеются ранения и пытался сначала достать пистолет Glock не смотря на угрозу жизни, а потом вовсе решил достать нож и зарезать тебя. В следующий раз не стоит так делать и слушать все приказы человека с оружием, и исполнять все его приказы ради безопасности своей жизни. Нарушение правила Free Kill (FK) — убийство без причины. Убийство всегда является самой крайней мерой. Для убийства персонажа необходима весомая причина или мотивация, а также должны соблюдаться рамки логики. В данном случае убийство не подаётся логике из-за того, что офицеры уже были на ситуации и были готовы помочь, когда Райан Хилрой уже пытался сбежать с места преступления Майкл Вильямс зачем-то решил побежать за ним имея ранения и зарезав не имея на этого веского повода. Нельзя убить персонажа другого игрока просто, потому что он ограбил тебя несколько секунд назад и пытался сбежать когда офицеры полиции уже были в здании. В будущем стоит дождаться когда грабитель уйдёт и начать звать на помощь, и стоит сделать акцент на том, что у тебя имеются ранения и тебе нужна помощь парамедиков, а уже потом говорить куда побежал твой обидчик. Для подтверждения своих слов, приложу вырезку из логов: Log report generated 15 Jul, 13:06:55 [14 Jul, 13:53:21] Райан Хилрой (STEAM_0:1:589400574, Гражданин, Руки) used [1xMAC10] from Райан Хилрой (STEAM_0:1:589400574)'s Куртка [14 Jul, 13:54:53] Райан Хилрой (STEAM_0:1:589400574, Гражданин, MAC10) aimed at Майкл Вильямс (STEAM_0:1:544966118, Гражданин, Glock) with MAC10. Police online: 10 [14 Jul, 13:54:55] Майкл Вильямс (STEAM_0:1:544966118, Гражданин, Glock) was hurt: 15HP in by Райан Хилрой (STEAM_0:1:589400574, Гражданин, MAC10) with MAC10. Police online: 10 [14 Jul, 13:55:52] Райан Хилрой (STEAM_0:1:589400574, Гражданин, MAC10) aimed at Майкл Вильямс (STEAM_0:1:544966118, Гражданин, Руки) with MAC10. Police online: 10 [14 Jul, 13:55:54] Майкл Вильямс (STEAM_0:1:544966118, Гражданин, Руки) used [1xGlock] from Майкл Вильямс (STEAM_0:1:544966118)'s Куртка [14 Jul, 13:55:56] Майкл Вильямс (STEAM_0:1:544966118, Гражданин, Руки) picked up [1xGlock] [14 Jul, 13:56:11] Майкл Вильямс (STEAM_0:1:544966118, Гражданин, Руки) dropped [1xGlock] from [Майкл Вильямс (STEAM_0:1:544966118)'s Куртка] [14 Jul, 13:56:13] Райан Хилрой (STEAM_0:1:589400574, Гражданин, MAC10) picked up [1xGlock] dropped by Майкл Вильямс (STEAM_0:1:544966118, Гражданин, Руки) [14 Jul, 13:56:15] Майкл Вильямс (STEAM_0:1:544966118, Гражданин, Руки) used [1xНожик] from Майкл Вильямс (STEAM_0:1:544966118)'s Куртка [14 Jul, 13:56:17] Майкл Вильямс (STEAM_0:1:544966118, Гражданин, Руки) picked up [1xНожик] [14 Jul, 13:56:20] Майкл Вильямс (STEAM_0:1:544966118, Гражданин, Руки) used [1xНожик] from Майкл Вильямс (STEAM_0:1:544966118)'s Куртка [14 Jul, 13:56:26] Майкл Вильямс (STEAM_0:1:544966118, Гражданин, Ножик) aimed at Райан Хилрой (STEAM_0:1:589400574, Гражданин, MAC10) with Ножик. Police online: 10 [14 Jul, 13:56:27] Райан Хилрой (STEAM_0:1:589400574, Гражданин, MAC10) was hurt: 15HP in by Майкл Вильямс (STEAM_0:1:544966118, Гражданин, Ножик) with Ножик. Police online: 10 [14 Jul, 13:56:27] Райан Хилрой (STEAM_0:1:589400574, Гражданин, MAC10) (inventory) was killed by Майкл Вильямс (STEAM_0:1:544966118, Гражданин, Ножик) with Ножик. Police online: 10 Participants: STEAM_0:1:589400574, STEAM_0:1:544966118 ВЕРДИКТ: “Майкл Вильямс” получит игровую блокировку на 4 дня за нарушения правил Free Kill (FK) и Powergaming (PG) ДАННЫЙ ИГРОК НАХОДИТСЯ В ПЕРМАНЕНТНОЙ БЛОКИРОВКЕ
  • Король интернета

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    3
    0 Лайки
    3 Сообщений
    167 Показы
    1000+71
    Привет, @Dìablo Посмотрел твою демку, могу сказать следующее: Игорь Деревяшкин - действительно нарушил правила сервера. Игроку не следовало вести себя подобным образом. Вердикт: Одобрено. Игрок получит блокировку на день. [image: ezgif-3-8d293c08bf.gif?ex=664c0170&is=664aaff0&hm=d6adad6087498ec20eb680a5945928dd0de92be8338eaa0caa1b38765b2339ae&]