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

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

Решенные Гайды
3 3 520 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 Сообщений
    42 Показы
    DoggeD
    Log report generated 2 Oct, 20:58:28 [26 Sept, 15:03:10] Эдди Нил (STEAM_0:0:60371009, Сержант полиции)'s karma: 0 ➞ -2 Participants: STEAM_0:0:60371009 остальные пять кармы снялись за лутинг, их возврата не будет.
  • Карма за муника

    Перенесена Решенные Решенные заявки одобрено
    3
    2 Лайки
    3 Сообщений
    61 Показы
    NocturnTheSkyN
    118х Карма Вернул на аккаунт
  • угнали у мэрии

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    3
    0 Лайки
    3 Сообщений
    174 Показы
    Ronbon99R
    Взлом взломом, но мэрия все видит. Привет @Reyna! После разговора с тобой в игре и просмотром координат взлома я готов перейти к нарушению игрока “Антонио Басарали”. НПИЗК (24.3. Карта зелёных зон) — Зелёная зона - зона, в которой запрещено заниматься криминалом, автоугонам в местах, отдалённых от государственных зданий, скоплений игроков и точек спауна. В данном случае Антонио не по брезговал взламывать автомобиль на против мэрии. В качестве доказательств прикладываю скриншот. ВЕРДИКТ Игрок Антонио Басарали получит запрет игры за криминал на 2 недели. Главной причиной такого вердикта является большой опыт игрока игры на сервере. @Reyna Можешь написать заявку на возврат, что бы тебе вернули твои вещи.
  • Dobiv ot PD

    Закрыта Перенесена Решенные Решенные жалобы одобрено
    4
    1 Лайки
    4 Сообщений
    206 Показы
    D0n Bar0nD
    Привет, @ex-virgin! Внимательно ознакомившись с логами, я готов переходить к нарушению игроков с никами “Александр Андерсон” и “Вильям Дэвис”: FreeKill — исходя из правил, можно понять, что убийство - крайняя мера, выбив преступнику оружие, можно было сохранить его жизнь для последующих разбирательств. Если даже отходить от этого, то после обезоруживания, он не предоставлял никакой угрозы, в виду чего откидывание его в “стадию” и в последующем добивание в ней не имеет никакого смысла. Для подтверждения своих слов, приложу вырезки из логов, пройдемся по порядку: Выбивание оружия из рук Дезмонда другим офицером: Log report generated 15 Aug, 21:32:44 [14 Aug, 17:52:47] Вильям Дэвис (STEAM_0:0:74110096, Полицейский медик, Glock 17) knocked out Дезмонд Бенджамин (STEAM_0:1:196233843, Местный)'s [FiveseveN] Participants: STEAM_0:0:74110096, STEAM_0:1:196233843 Последующие добивание безоружного преступника в стадию и добивание в самой стадии: Log report generated 15 Aug, 21:33:21 [14 Aug, 17:52:55] Дезмонд Бенджамин (STEAM_0:1:196233843, Местный, Руки) (inventory) was knocked by Александр Андесон (STEAM_0:0:632894266, Полицейский медик, Glock 17) with Glock 17. Police online: 12 [14 Aug, 17:52:55] Дезмонд Бенджамин (STEAM_0:1:196233843, Местный, None) (knocked) was killed by Александр Андесон (STEAM_0:0:632894266, Полицейский медик, Glock 17) with Glock 17. Police online: 12 [14 Aug, 17:52:58] Дезмонд Бенджамин (STEAM_0:1:196233843, Местный, None) (knocked) was killed by Вильям Дэвис (STEAM_0:0:74110096, Полицейский медик, Glock 17) with Glock 17. Police online: 12 [14 Aug, 17:52:59] Дезмонд Бенджамин (STEAM_0:1:196233843, Местный, None) (knocked) was killed by Вильям Дэвис (STEAM_0:0:74110096, Полицейский медик, Glock 17) with Glock 17. Police online: 12 [14 Aug, 17:53:00] Дезмонд Бенджамин (STEAM_0:1:196233843, Местный, None) (knocked) was killed by Вильям Дэвис (STEAM_0:0:74110096, Полицейский медик, Glock 17) with Glock 17. Police online: 12 [14 Aug, 17:53:03] Дезмонд Бенджамин (STEAM_0:1:196233843, Местный, None) (inventory) died Participants: STEAM_0:1:196233843, STEAM_0:0:632894266, STEAM_0:0:74110096 ВЕРДИКТЫ: “Вильям Дэвис” - получит длительный WatchList за нарушение правила FK “Александр Андесон” - получит длительный WatchList за нарушение правила FK
  • Инструкция по написанию квенты

    Закрыта Решенные Гайды одобрено
    3
    12 Лайки
    3 Сообщений
    1k Показы
    kustikK
    Одобрено Замечательный гайд, затрагивающий главные сложности при написании квенты. Максимум не хватает абзаца про визуальное оформление квенты, ведь парочка хороших фотографий или нужная музыка на фоне может помочь читателю лучше понять персонажа.