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

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

Решенные Гайды
3 3 998 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 Сообщений
    421 Показы
    FocusF
    @Lima Добро
  • Верните мои вещи

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

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    3
    2
    0 Лайки
    3 Сообщений
    272 Показы
    NoSiFiXN
    Привет, рассмотрел логи: Log report generated 1 Dec, 21:42:07 #210068936 [29 Nov, 20:10:07] Ису Махачев (STEAM_0:0:952815498, Токарь, None) changed team: Гражданин ➞ Токарь #210069104 [29 Nov, 20:12:07] Майкл Браун (STEAM_0:0:175651509, Гражданин, Руки) was hurt: 12HP in by Ису Махачев (STEAM_0:0:952815498, Токарь, Руки) with Руки. Police online: 15 #210069107 [29 Nov, 20:12:08] Димас Кирик (STEAM_0:0:645770044, Гражданин, Руки) was hurt: 10HP in by Ису Махачев (STEAM_0:0:952815498, Токарь, Руки) with Руки. Police online: 15 #210069822 [29 Nov, 20:16:42] Россо Эспозито (STEAM_0:0:535470196, Гражданин, Руки) was hurt: 11HP in by Ису Махачев (STEAM_0:0:952815498, Токарь, Руки) with Руки. Police online: 15 #210069825 [29 Nov, 20:16:43] Россо Эспозито (STEAM_0:0:535470196, Гражданин, Руки) was hurt: 10HP in by Ису Махачев (STEAM_0:0:952815498, Токарь, Руки) with Руки. Police online: 15 #210069828 [29 Nov, 20:16:44] Россо Эспозито (STEAM_0:0:535470196, Гражданин, Руки) was hurt: 9HP in by Ису Махачев (STEAM_0:0:952815498, Токарь, Руки) with Руки. Police online: 16 #210069829 [29 Nov, 20:16:45] Димас Кирик (STEAM_0:0:645770044, Гражданин, Руки) was hurt: 9HP in by Ису Махачев (STEAM_0:0:952815498, Токарь, Руки) with Руки. Police online: 16 #210069831 [29 Nov, 20:16:47] Россо Эспозито (STEAM_0:0:535470196, Гражданин, Руки) was hurt: 4HP in by Ису Махачев (STEAM_0:0:952815498, Токарь, Руки) with Руки. Police online: 16 #210069833 [29 Nov, 20:16:48] Россо Эспозито (STEAM_0:0:535470196, Гражданин, Руки) was hurt: 1HP in by Ису Махачев (STEAM_0:0:952815498, Токарь, Руки) with Руки. Police online: 16 #210069841 [29 Nov, 20:16:53] Россо Эспозито (STEAM_0:0:535470196, Гражданин, Руки) (inventory) is unconscious for 56 seconds by Ису Махачев (STEAM_0:0:952815498, Токарь, Руки) with Руки. Police online: 16 #210069853 [29 Nov, 20:17:00] Ису Махачев (STEAM_0:0:952815498, Токарь, Руки) searched Тело - Россо Эспозито. Police online: 16 #210069962 [29 Nov, 20:18:02] Ису Махачев (STEAM_0:0:952815498, Токарь, Руки) (inventory) is near death by Ллойд Фостер (STEAM_0:1:171780823, Гражданин, Beretta 92) with Beretta 92. Police online: 16 #210070242 [29 Nov, 20:20:45] Джеймс Мерсер (STEAM_0:0:832867958, Парамедик, Руки) revived Ису Махачев (STEAM_0:0:952815498, Токарь, Руки) #210070311 [29 Nov, 20:21:04] Киллиан Сёрф (STEAM_0:0:151631673, Офицер полиции, Тазер) tazed Ису Махачев (STEAM_0:0:952815498, Токарь, Руки) #210072029 [29 Nov, 20:36:47] Player disconnected: Ису Махачев (STEAM_0:0:952815498, Токарь, Руки), Disconnect by user. Participants: STEAM_0:0:952815498, STEAM_0:0:175651509, STEAM_0:0:645770044, STEAM_0:0:535470196, STEAM_0:1:171780823, STEAM_0:0:832867958, STEAM_0:0:151631673 Вижу Ису Махачев (STEAM_0:0:952815498) PG - неотыгровка ранений, FD - нанесение урона без причины и NonRP - обыск тел без отыгровок. Итог: ОДОБРЕНО Ису Махачев (STEAM_0:0:952815498) получит временную блокировку на 4 дня из-за малого количества отыгранного времени.
  • Часики за копа

    Закрыта Перенесена Решенные Решенные заявки одобрено
    2
    0 Лайки
    2 Сообщений
    109 Показы
    julianscandiumJ
    Привет, @школьний-принц Посмотрел логи и заметил только две игровые сессии на сержанте за последние три месяца - обе довольно короткие. Начислил на твой на аккаунт лишь 25 часов, этого хватит для доступа к основным должностям.
  • Похоже я был неверный

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    6
    1 Лайки
    6 Сообщений
    372 Показы
    NoSiFiXN
    Привет. Рассмотрев логи и демонстрацию, я увидел нарушения у: Бахбулат Ассаев (STEAM_0:1:625725511) Пришёл в ПД вместе со своей паствой, ломился в двери. Убил тебя внутри ПД без причины и после добил. Ходил с АК-74 в руках, не отыгрыв достал его. Включал молитву в микрофон через SoundPad. Log report generated 6 Aug, 19:04:58 #200650472 [6 Aug, 1:08:39] Ирвин Моррис (STEAM_0:0:636883400, Сержант полиции, Тазер) was hurt: 22HP in by Бахбулат Ассаев (STEAM_0:1:625725511, Гражданин, AK-74) with AK-74. Police online: 5 #200650473 [6 Aug, 1:08:39] Ирвин Моррис (STEAM_0:0:636883400, Сержант полиции, Тазер) was hurt: 22HP in by Бахбулат Ассаев (STEAM_0:1:625725511, Гражданин, AK-74) with AK-74. Police online: 5 #200650474 [6 Aug, 1:08:39] Ирвин Моррис (STEAM_0:0:636883400, Сержант полиции, Тазер) was hurt: 22HP in by Бахбулат Ассаев (STEAM_0:1:625725511, Гражданин, AK-74) with AK-74. Police online: 5 #200650475 [6 Aug, 1:08:39] Ирвин Моррис (STEAM_0:0:636883400, Сержант полиции, Тазер) (inventory) was knocked by Бахбулат Ассаев (STEAM_0:1:625725511, Гражданин, AK-74) with AK-74. Police online: 5 #200650481 [6 Aug, 1:08:40] Ирвин Моррис (STEAM_0:0:636883400, Сержант полиции, None) (knocked) was killed by Бахбулат Ассаев (STEAM_0:1:625725511, Гражданин, AK-74) with AK-74. Police online: 5 Participants: STEAM_0:0:636883400, STEAM_0:1:625725511 В связи с данными действиями, он получает бан на месяц (30 дней) за NonRP (Пришёл с другими людьми в ПД, ломились в двери + обыск тел без отыгровок) + FreeKill (Убийство и добив без весомой причины) + ChatAbuse (SoundPad) + НПЗ (Расстрел офицера в ПД) + Mehan (Взял АК-74 в руки без отыгровок) Сальваторе Маранзано (STEAM_0:1:757014000) Был в этой группе, достал UMP-45 в ПД, когда началась стрельба со стороны Бахбулата, пытался стреляться с офицерами. Обыскал тело без отыгровок. Log report generated 6 Aug, 19:29:12 #200650372 [6 Aug, 1:06:03] Сальваторе Маранзано (STEAM_0:1:757014000, Гражданин, Руки) picked up [1xUMP45] #200650482 [6 Aug, 1:08:40] Сальваторе Маранзано (STEAM_0:1:757014000, Гражданин, Руки) used [1xUMP45] from Сальваторе Маранзано (STEAM_0:1:757014000)'s Руки #200650516 [6 Aug, 1:09:17] Сальваторе Маранзано (STEAM_0:1:757014000, Гражданин, UMP45) searched Труп - Ирвин Моррис. Police online: 4 Participants: STEAM_0:1:757014000 За это он получает бан на 14 дней за NonRP(Обыск тел без отыгровок) + Mehan(Взял UMP45 в руки без отыгровок) + НПЗ(Криминал в ПД) Мухамед Альбашар (STEAM_0:0:935971779) Участвовал в походе. Получает бан на 2 дня за NonRP Джамал Сагдиев (STEAM_0:1:813406330) Обыскал тело без отыгровок, участвовал в походе. Log report generated 6 Aug, 19:39:52 #200650577 [6 Aug, 1:09:54] Джамал Сагдиев (STEAM_0:1:813406330, Гражданин, Руки) searched Труп - Сальваторе Маранзано. Police online: 4 #200650591 [6 Aug, 1:09:59] Джамал Сагдиев (STEAM_0:1:813406330, Гражданин, Руки) moved [600xДеньги]: [Труп - Брюки]➞[Джамал Сагдиев (STEAM_0:1:813406330)'s Брюки] Participants: STEAM_0:1:813406330 Получает бан на 4 дня за NonRP Джонни Лоурэнс (STEAM_0:0:435054981) Получил разряд тайзера, не отыграл это. Участвовал в походе. Log report generated 6 Aug, 19:45:51 #200649368 [6 Aug, 0:52:16] Рональд Кроуфорд (STEAM_0:0:238208356, Офицер DPD, Тазер) tazed Джонни Лоурэнс (STEAM_0:0:435054981, Городской работник, Руки) Participants: STEAM_0:0:238208356, STEAM_0:0:435054981 Получает бан на 4 дня за NonRP + PG Уильямс Бруно (STEAM_0:0:596523600) Участвовал в походе. Получает бан на 2 дня за NonRP Шон Фостер (STEAM_0:0:532225408) Участвовал в походе. Получает бан на 2 дня за NonRP Итог: одобрено! Бахбулат Ассаев (STEAM_0:1:625725511) - бан 30 дней за NonRP + FreeKill + ChatAbuse + НПЗ + Mehan Сальваторе Маранзано (STEAM_0:1:757014000) - бан 14 дней за NonRP + Mehan + НПЗ Мухамед Альбашар (STEAM_0:0:935971779) - бан 2 дня за NonRP Джамал Сагдиев (STEAM_0:1:813406330) - бан 4 дня за NonRP Джонни Лоурэнс (STEAM_0:0:435054981) - бан 4 дня за NonRP + PG Уильямс Бруно (STEAM_0:0:596523600) - бан 2 дня за NonRP Шон Фостер (STEAM_0:0:532225408) - бан 2 дня за NonRP