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

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

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

Похожие темы

  • Заявка на возрат в связи с тем что забанили читак

    Закрыта Перенесена Решенные Решенные заявки одобрено
    4
    0 Лайки
    4 Сообщений
    51 Показы
    WiseGenieW
    1 x Телефон  1 x CZ-75  4650 x Деньги Деньги зачислил на банковский счет. Остальное вернул в хран
  • марат украл шапку

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    6
    1 Лайки
    6 Сообщений
    231 Показы
    OwinizO
    Привет! @qwer Изучив содержание жалобы и логи хочу сказать: Игрок Ишак Баранович нарушает НОПС украв шапку и вводя игрока в заблуждение говоря что ничего не брал Log report generated 28 Jan, 1:35:33 [13 Jan, 20:17:35] Иван Нилсон (Гражданин) dropped [1xЧерная шапка-ушанка] from [Иван Нилсон's Брюки] [13 Jan, 20:17:45] Ишак Баранович (Гражданин) picked up [1xЧерная шапка-ушанка] dropped by Иван Нилсон (Гражданин) Participants: STEAM_0:1:760495931, STEAM_0:0:779690453 Log report generated 28 Jan, 1:35:56 [13 Jan, 20:18:24] Ишак Баранович (Гражданин): у меня нету ничего Participants: STEAM_0:0:779690453 Вердикт: Жалоба на игрока Ишак Баранович одобрена игрок нарушил НОПС - Нарушение Общих Правил Сервера игрок получит наказание сроком в 7 дней (P.S. Для получения шапки пиши на возврат)
  • жалоба от друга лив рп, лутерство

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    4
    1 Лайки
    4 Сообщений
    210 Показы
    To4kaDot.T
    Привет @mclander32. Я разобрал твою жалобу и увидел, как он выкинул с тебя Беретту, а через некоторое время ливнул. Судьбу береты к сожалению я узнать не смог в связи с этим нельзя доказать, что он слутал ее. Исходя из всего, игрок Билл Линкольн(STEAM_0:1:595990162) получает WatchList за LeaveRP.
  • 3000 часов и мастер сбора ганов.

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    8
    1 Лайки
    8 Сообщений
    399 Показы
    hanssH
    Привет! Посмотрел логи и позиции где все происходили, прочитал ваш текст который вы тут настрочили, готов вынести вердикт. грабившие магазин проигнорировали триггер отыгрывающий камеру и свободно прошли в помещение начав грабить продавца. Прочитал момент с камерой несколько раз и не понял что и как тут… В этих действиях от игроков я не вижу нарушения. Я пытаясь помочь ему беру из сумки Галил и захожу стрелку в спину пытаясь его обезвредить Ты проигнорировал факт того что преступников несколько, беру в учёт что они хорошо вооружены еще, хорошо ты офицер - но ты офицер вне смены, что доказывают логи. Выходит ты проигнорировал как минимум двух тяжело вооруженных парней? Как по мне лучше уже вызвать полицию, запомнить их лица и т.д. Лучше выжить чем умереть отдав жизнь не за что, или за рандомный бизнес, объективно. (Ты сам понимаешь как работают офицеры полиции, увидел парня с оружием в руках = убить его нужно, не всегда, конечно-же, но шансы есть, большие шансы.) Тут я вижу нарушения правила PG (PowerGaming). Теперь переходим к грабителям. [image: 1750809509017-32151.png] Вот все точки, где что и как происходило. (Ниже скину скриншот карты[image: 1750809545332-313.png] ) Беру в учёт правила про зоны, не смотря на место, где произошло твое убийство, а именно - рядом с полицейским департаментом, они проводили налёт, в этой ситуации он заметил что ты достаёшь свой галил, в скорее понимает что ты хочешь убить его друзей, которые находились в это время внутри самого здания, проводили ограбления дальше, в моменте он бы потерял все, как минимум “награбленное”, как максимум друзей. После твоего убийства, они сбежали, не вижу по позициям что они шутались дальше в бизнесе этом. Если бы он стоял дальше, тогда я бы выдал Пг и игру ради шутинга. Не вижу нарушения в этом моменте. STEAM_0:1:179157093 Бруно Вестервальд - Скорее всего был 4 парнем который так-же был на улице, не могу знать сколько их было точно. Так что предположительно данный игрок был участником ограбления или же налёта. С его стороны так-же нарушений не вижу. Он даже отыграл, что взял пушку. Log report generated 25 Jun, 2:48:11 [23 Jun, 17:50:45] Бруно Вестервальд (STEAM_0:1:179157093, Гражданин, Руки) picked up [1xGalil] Participants: STEAM_0:1:179157093 Log report generated 26 Jun, 3:58:34 [23 Jun, 17:52:28] Бруно Вестервальд (STEAM_0:1:179157093, Гражданин) successfully executed chat command: /it Бруно забрал автомат, лежащий на полу и убежал. Participants: STEAM_0:1:179157093 Вердикт: Игроки которые играли за криминал ничего не нарушили… В свою-же очередь истец который подал жалобу, нарушил правило Pg. Получаешь за это watch. STEAM_0:1:30895250
  • Обманул бармен

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    6
    0 Лайки
    6 Сообщений
    350 Показы
    pluxurypurpP
    Привет, еще раз приносим большие извинения за столь долгое ожидание. Просмотрев логи, я увидел как он подобрав твой хайпоинт, вызывает полицию и кладет оружие в хранилище: Log report generated 22 Jun, 14:32:26 #193342413 [2 Jun, 11:02:53] Эмиль Уиллсон (STEAM_0:1:794262067, Повар, Руки) picked up [1xHi-Point C-9] dropped by Мартинес Максимилиан (STEAM_0:1:448448824, Гражданин, Руки) #193342461 [2 Jun, 11:03:34] Эмиль Уиллсон (STEAM_0:1:794262067, Повар, Руки) used [1xТелефон] from Эмиль Уиллсон (STEAM_0:1:794262067)'s Куртка #193342470 [2 Jun, 11:03:46] Эмиль Уиллсон (STEAM_0:1:794262067, Повар, Руки) called police under nickname "Эмиль Уиллсон" and sent their pos to cops. Message text: Наркоманы в хате #193342488 [2 Jun, 11:04:01] Эмиль Уиллсон (STEAM_0:1:794262067, Повар, Руки) moved [1xHi-Point C-9]: [Эмиль Уиллсон (STEAM_0:1:794262067)'s Руки]➞[Хранилище - Эмиль Уиллсон] Participants: STEAM_0:1:794262067, STEAM_0:1:448448824 Но самое интересное, что он решает его после снова достать из хранилища и выбросить куда-то: Log report generated 22 Jun, 14:34:53 #193342511 [2 Jun, 11:04:13] Эмиль Уиллсон (STEAM_0:1:794262067, Повар, Руки) moved [1xHi-Point C-9]: [Хранилище - Эмиль Уиллсон]➞[Эмиль Уиллсон (STEAM_0:1:794262067)'s Руки] #193342519 [2 Jun, 11:04:18] Эмиль Уиллсон (STEAM_0:1:794262067, Повар, Руки) dropped [1xHi-Point C-9] from [Эмиль Уиллсон (STEAM_0:1:794262067)'s Руки] Participants: STEAM_0:1:794262067 После же еще нашел логи продажи марихуаны перед этим: Log report generated 22 Jun, 14:45:59 #193341042 [2 Jun, 10:51:21] Эмиль Уиллсон (STEAM_0:1:794262067, Повар, Руки) moved [1xМарихуана]: [Хранилище - Эмиль Уиллсон]➞[Эмиль Уиллсон (STEAM_0:1:794262067)'s Руки] #193341045 [2 Jun, 10:51:22] Эмиль Уиллсон (STEAM_0:1:794262067, Повар, Руки) moved [1xМарихуана]: [Хранилище - Эмиль Уиллсон]➞[Эмиль Уиллсон (STEAM_0:1:794262067)'s Руки] #193341046 [2 Jun, 10:51:23] Эмиль Уиллсон (STEAM_0:1:794262067, Повар, Руки) moved [1xМарихуана]: [Хранилище - Эмиль Уиллсон]➞[Эмиль Уиллсон (STEAM_0:1:794262067)'s Руки] #193341048 [2 Jun, 10:51:24] Эмиль Уиллсон (STEAM_0:1:794262067, Повар, Руки) moved [1xМарихуана]: [Хранилище - Эмиль Уиллсон]➞[Эмиль Уиллсон (STEAM_0:1:794262067)'s Руки] #193341059 [2 Jun, 10:51:37] Раймонд Радригиз (STEAM_0:1:74811748, Гражданин, Руки) moved [1xМарихуана]: [Эмиль Уиллсон (STEAM_0:1:794262067)'s Руки]➞[Раймонд Радригиз (STEAM_0:1:74811748)'s Руки] #193341064 [2 Jun, 10:51:40] Раймонд Радригиз (STEAM_0:1:74811748, Гражданин, Руки) moved [10128xДеньги]: [Раймонд Радригиз (STEAM_0:1:74811748)'s Брюки]➞[Эмиль Уиллсон (STEAM_0:1:794262067)'s Руки] #193342511 [2 Jun, 11:04:13] Эмиль Уиллсон (STEAM_0:1:794262067, Повар, Руки) moved [1xHi-Point C-9]: [Хранилище - Эмиль Уиллсон]➞[Эмиль Уиллсон (STEAM_0:1:794262067)'s Руки] #193342519 [2 Jun, 11:04:18] Эмиль Уиллсон (STEAM_0:1:794262067, Повар, Руки) dropped [1xHi-Point C-9] from [Эмиль Уиллсон (STEAM_0:1:794262067)'s Руки] Participants: STEAM_0:1:794262067, STEAM_0:1:74811748 По вердикту, могу сказать, что механа здесь так-как он выбросил пистолет, но ситуация с самой продажей является нарушением, так-как обманывать игроков при продаже будучи за мирные профессии является нарушением. Игрок уже находится в бане, так что тот получит длительный вотчлист за нарушение подробных правил игры за мирные профессии.