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

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

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

Похожие темы

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

    Закрыта Перенесена Решенные Решенные заявки одобрено
    2
    1
    1 Лайки
    2 Сообщений
    115 Показы
    A9518437927A
    выдал разбан с условиями
  • Упал с табуретки

    Закрыта Перенесена Решенные Решенные заявки одобрено
    2
    0 Лайки
    2 Сообщений
    46 Показы
    NocturnTheSkyN
    1x Glock 17 + Ammo Возвращено лично в руки на сервере
  • добив + пропблок

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    8
    1 Лайки
    8 Сообщений
    329 Показы
    Dima GordD
    Привет! Привет! Просмотрев демку я могу увидеть нарушения правил, но я не могу понять кто именно их нарушает, по логам хран под лестницу они ОБА не ставили, тебя не добивали и вообще все круто, из чего выходит, что нарушения только у тебя. Log report generated 6 Oct, 14:13:45 #204742601 [28 Sept, 16:43:59] Карен Минасян (STEAM_0:0:607980955, Гражданин, Glock 17) was hurt: 15HP in by Никита Чпокин (STEAM_0:1:83394267, Гражданин, MAC10) with MAC10. Police online: 11 #204742603 [28 Sept, 16:43:59] Карен Минасян (STEAM_0:0:607980955, Гражданин, Glock 17) became a ragdoll (models/humans/octo/male_02_01.mdl) #204742615 [28 Sept, 16:44:03] Карен Минасян (STEAM_0:0:607980955, Гражданин, Руки) (inventory) died Participants: STEAM_0:0:607980955, STEAM_0:1:83394267 Ты нарушил общие правила сервера, пункт первый. Не используй читы, эксплойты и прочие файлы, дающие преимущество Запрещено использование и хранение модов, программ и скриптов, дающих преимущество (читы, эксплойты, автокликеры, антиAFK и подобные). К этому же относятся различные заменки, например, лазер, эффекты, текстуры Твой прицел на глоке нарушает данное правило, но на первый раз я выпишу тебе вотч лист, если подобное снова заметят, тебе выпишут большое наказание. Итог Ахмед Нагилав и Никита Чпокин не получают наказания, ввиду недостатка доказательств. Карен Минасян получает watchlist за 1 пункт общих правил сервера
  • powergaming

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    3
    0 Лайки
    3 Сообщений
    180 Показы
    D0n Bar0nD
    Привет, @Maybe! Внимательно ознакомившись с логами ситуации, я готов перейти к нарушению игрока “Амалия Бурак”: PowerGaming — находясь под дулом огнестрела, Амалии был выдвинут приказ о том, чтобы назвать пароль от кейпада, данный приказ был проигнорирован, за что Амалия получила пулю, что могло ей явно дать понять о серьезности намерений грабителей, вновь продолжая игнорировать, а так же отнекиваться словами о том, что пароль знает ее сожитель, Амалия ловит пулю, оказавшуюся смертельной. Не стоит так делать, ведь это нарушает правило PG. Для подтверждения своих слов, приложу вырезки из логов (отнекивания Амалии и ее убийство): Log report generated 12 Jul, 2:32:06 [12 Jul, 1:33:07] Амалия Бурак (STEAM_0:1:182406680): не знаю сожитель [12 Jul, 1:33:10] Амалия Бурак (STEAM_0:1:182406680): знает [12 Jul, 1:33:15] Амалия Бурак (STEAM_0:1:182406680): не помню [12 Jul, 1:33:16] Амалия Бурак (STEAM_0:1:182406680) (inventory) was killed by Алекс Мерсер (STEAM_0:0:212909829) with UMP45. Police online: 5 Participants: STEAM_0:1:182406680, STEAM_0:0:212909829 Нанесения ей урона с целью показать всю серьезность намерений грабителя: Log report generated 12 Jul, 2:32:20 [12 Jul, 1:32:52] Амалия Бурак (STEAM_0:1:182406680) was hurt: 23HP in by Алекс Мерсер (STEAM_0:0:212909829) with UMP45. Police online: 5 [12 Jul, 1:32:52] Амалия Бурак (STEAM_0:1:182406680) was hurt: 23HP in by Алекс Мерсер (STEAM_0:0:212909829) with UMP45. Police online: 5 Participants: STEAM_0:1:182406680, STEAM_0:0:212909829 Признание Амалии в том, что она нарушила правила, оправдывая это тем, что ситуация и так проигрышная для нее: Log report generated 12 Jul, 2:35:30 [12 Jul, 1:37:27] Алекс Мерсер (STEAM_0:0:212909829) successfully executed chat command: /pm "Амалия Бурак" зачем ты врешь то внаглую когда я видел как ты дверь открыл? [12 Jul, 1:37:40] Амалия Бурак (STEAM_0:1:182406680) successfully executed chat command: /PM "Алекс Мерсер" ты про что [12 Jul, 1:37:52] Алекс Мерсер (STEAM_0:0:212909829) successfully executed chat command: /pm "Амалия Бурак" про то что я просил открыть дверь [12 Jul, 1:38:01] Амалия Бурак (STEAM_0:1:182406680) successfully executed chat command: /PM "Алекс Мерсер" а , ну бля растерялась девочка. Не каждый может сохранить трезвый разум под дулом ствола [12 Jul, 1:38:59] Алекс Мерсер (STEAM_0:0:212909829) successfully executed chat command: /pm "Амалия Бурак" ну я жалобу подам брат [12 Jul, 1:39:11] Амалия Бурак (STEAM_0:1:182406680) successfully executed chat command: /PM "Алекс Мерсер" ну я вкурсе что ты подашь [12 Jul, 1:39:23] Алекс Мерсер (STEAM_0:0:212909829) successfully executed chat command: /pm "Амалия Бурак" а нахуй так делать то? [12 Jul, 1:39:55] Амалия Бурак (STEAM_0:1:182406680) successfully executed chat command: /PM "Алекс Мерсер" дружище блять вы втроем пасете хату часами не давая цивильного гейма , как иначе я могу с вами если для нас это lose-lose ситуация Participants: STEAM_0:0:212909829, STEAM_0:1:182406680 ВЕРДИКТ: “Амалия Бурак” - получит блокировку на 2 дня за нарушение правила PowerGaming
  • Деда лишили анальной девстености....

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    3
    0 Лайки
    3 Сообщений
    274 Показы
    WhatW
    Привет @FRESH-BAR ! Рассмотрел твою жалобу и готов вынести по ней вердикт. Начнем с Дженни. Заметил с его стороны нарушение правила NonRP(Лутинг), даже в тикете ему ответили, что это запрещено. -_- Log report generated 6 Jun, 13:38:54 [4 Jun, 13:51:51] Дженни Майерс (Гражданин) searched Труп - Виктор Осипов. Police online: 6 [4 Jun, 13:51:54] Дженни Майерс (Гражданин) moved [2250xДеньги]: [Труп - Брюки]➞[Дженни Майерс's Брюки] [4 Jun, 13:52:46] Дженни Майерс sent message to Дженни Майерс's ticket: лутинг вроде разрешили? [4 Jun, 13:53:27] Дженни Майерс (Гражданин): ДЕДА ЛИШИЛИ АНАЛЬНОЙ ДЕВСТВЕННОСТИ [4 Jun, 13:54:54] Омонтиз Торнтон sent message to Дженни Майерс's ticket: нет Participants: STEAM_0:0:564163097, STEAM_0:0:505824216 Джульяно далее. Заметил с его стороны нарушение правила NonRP(Лутинг) Log report generated 6 Jun, 13:45:21 [4 Jun, 13:53:42] Джульяно Диаз (Гражданин) searched Труп - Виктор Осипов. Police online: 7 [4 Jun, 13:55:42] Джульяно Диаз (Гражданин) moved [1xМарихуана]: [Джульяно Диаз's Брюки]➞[Джульяно Диаз's Руки] Participants: STEAM_0:0:651411576 Вердикт: Дженни Майерс, Джульяно Диаз получат наказания в виде блокировки игры на сервере сроком на 2 дня за нарушение правила NonRP. Обратная связь, дискорд - s_what_s.