Сделать минимального Telegram-бота на удивление просто. Прежде всего следует обратиться к боту [@BotFather](https://t.me/botfather) для регистрации нового бота и получения его токена аутентификации. (Токен бота — его уникальный идентификатор и одновременно «пароль» для получения доступа к боту. С его помощью вы сообщаете системе, каким ботом будет управлять ваш скрипт и одновременно подтверждаете, что бот принадлежит вам.)

Отмечу, что слово «бот» употребляется в немного разных смыслах. С точки зрения Telegram, бот — это учётная запись (как учётка пользователя — «адрес», на который ему можно отправлять сообщения). В этом смысле, успешно получив токен, вы уже «сделали бота» (поздравляю!). Но такой бот (как и учётная запись пользователя без самого пользователя-человека) не может производить никаких действий (это «квартира, в которой никто не живёт»). Чтобы реализовать какую-то функциональность, нужна программа (например, Python-скрипт), которая будет подключаться к Telegram с использованием специального API и выполнять действия (обрабатывать сообщения пользователей, генерировать собственные и т. п.). Такую программу тоже можно называть ботом, как вы это делаете (да и слово «пользователь» иногда обозначает учётную запись, а иногда человека). Путаницы обычно не возникает (значение понятно из контекста), просто имейте в виду этот терминологический нюанс.

Теперь стоит выбрать одну из Python-библиотек, облегчающих работу с API Telegram-бота. (В принципе, вы можете обойтись и без специальной библиотеки, обращаясь к API напрямую, но зачем же тратить драгоценное время на изобретение велосипеда?) Вариантов довольно много, вот список [с официального сайта](https://core.telegram.org/bots/samples).


> - **python-telegram-bot**. A wrapper you can't refuse.
> https://github.com/python-telegram-bot/python-telegram-bot
>
> - **pyTelegramBotAPI**. A simple, but extensible Python implementation for the Telegram Bot API.
> https://github.com/eternnoir/pyTelegramBotAPI
>
> - **AIOGram**. A pretty simple and fully asynchronous library for Telegram Bot API written with asyncio and aiohttp.
> https://github.com/aiogram/aiogram
>
> - **TGramBot**. A partially auto-generated and asynchronous Minimal Telegram Bot API framework.
> https://github.com/KeralaBots/TGramBot
>
> - **OrigamiBot**. A pythonic Telegram bot API library.
> https://github.com/cmd410/OrigamiBot
>
> - **pytgbot**. A module to access the Telegram Bot API.
> https://github.com/luckydonald/pytgbot
>
> - **teleflask**. A framework based on flask and pytgbot.
> https://github.com/luckydonald/teleflask

Предположим, вы выбрали OrigamiBot (а что? красивое название!). Теперь копируете их миниатюрный учебный пример из документации (для удобства привожу его ниже) в пустой Python-скрипт, запускаете — и празднуете создание вашего первого (функционирующего!) бота. (Не забудьте указать токен в качестве пораметра командной строки или в ответ на запрос скрипта.)


```python
from sys import argv
from time import sleep

from origamibot import OrigamiBot as Bot
from origamibot.listener import Listener


class BotsCommands:
    def __init__(self, bot: Bot):  # Can initialize however you like
        self.bot = bot

    def start(self, message):  # /start command
        self.bot.send_message(message.chat.id, "Hello user!\nThis is an example bot.")

    def echo(self, message, value: str):  # /echo [value: str] command
        self.bot.send_message(message.chat.id, value)

    def add(self, message, a: float, b: float):  # /add [a: float] [b: float]
        self.bot.send_message(message.chat.id, str(a + b))

    def _not_a_command(self):  # This method not considered a command
        print("I am not a command")


class MessageListener(Listener):  # Event listener must inherit Listener
    def __init__(self, bot):
        self.bot = bot
        self.m_count = 0

    def on_message(self, message):  # called on every message
        self.m_count += 1
        print(f"Total messages: {self.m_count}")

    def on_command_failure(self, message, err=None):  # When command fails
        if err is None:
            self.bot.send_message(message.chat.id, "Command failed to bind arguments!")
        else:
            self.bot.send_message(message.chat.id, "Error in command:\n{err}")


if __name__ == "__main__":
    token = argv[1] if len(argv) > 1 else input("Enter bot token: ")
    bot = Bot(token)  # Create instance of OrigamiBot class

    # Add an event listener
    bot.add_listener(MessageListener(bot))

    # Add a command holder
    bot.add_commands(BotsCommands(bot))

    # We can add as many command holders
    # and event listeners as we like

    bot.start()  # start bot's threads
    while True:
        sleep(1)
        # Can also do some useful work i main thread
        # Like autoposting to channels for example
```

Теперь (пока запущен скрипт) ваш бот умеет выполнять команды `/start` (приветствует), `/echo` (выводит сообщение) и `/add` (складывает два числа) — попробуйте! (На обычные сообщения скрипт не реагирует, только считает, сколько их пришло.) Дальше всё в ваших руках. (Если вы бегло просмотрели листинг, то уже догадываетесь, что и куда нужно добавлять).

Конечно, чтобы сделать что-то большее, чем «hello world» (или «попугая»), придётся, вероятно, почитать документацию. Но всё-таки иметь под рукой работающий скрипт в полсотни строк бывает очень полезно для начального знакомства и дальнейшего экспериментирования.

Впрочем, если вам достаточно получать сообщение, обрабатывать его каким-то образом (например, переводить на другой язык?) и возвращать пользователю результат, то этого примера вам достаточно, просто добавьте в метод `on_message` нужное вам преобразование. ;-)
การสร้างบอท Telegram แบบขั้นต่ำนั้นเป็นเรื่องง่ายอย่างน่าประหลาดใจ ก่อนอื่น คุณควรติดต่อบอท [@BotFather](https://t.me/botfather) เพื่อลงทะเบียนบอทใหม่และรับโทเค็นการตรวจสอบสิทธิ์ (โทเค็นบอทเป็นตัวระบุที่ไม่ซ้ำกันและในขณะเดียวกันก็เป็น “รหัสผ่าน” สำหรับการเข้าถึงบอท ด้วยความช่วยเหลือ คุณจะบอกระบบว่าสคริปต์ของคุณจะจัดการบอทตัวใด และในขณะเดียวกันก็ยืนยันว่าบอทเป็นของคุณ .) ฉันสังเกตว่าคำว่า "บอท" ใช้ในความหมายที่แตกต่างกันเล็กน้อย จากมุมมองของ Telegram บอทคือบัญชี (เช่นบัญชีผู้ใช้คือ "ที่อยู่" ที่สามารถส่งข้อความถึงเขาได้) ในแง่นี้ เมื่อได้รับโทเค็นสำเร็จแล้ว คุณได้ "สร้างบอท" แล้ว (ยินดีด้วย!) แต่บอทดังกล่าว (เช่นบัญชีผู้ใช้ที่ไม่มีผู้ใช้มนุษย์) ไม่สามารถดำเนินการใด ๆ ได้ (นี่คือ "อพาร์ตเมนต์ที่ไม่มีใครอาศัยอยู่") หากต้องการใช้ฟังก์ชันบางอย่าง คุณต้องมีโปรแกรม (เช่น สคริปต์ Python) ที่จะเชื่อมต่อกับ Telegram โดยใช้ API พิเศษ และดำเนินการต่างๆ (ประมวลผลข้อความผู้ใช้ สร้างของคุณเอง ฯลฯ) โปรแกรมดังกล่าวสามารถเรียกว่าบอทได้เช่นเดียวกับที่คุณทำ (และคำว่า "ผู้ใช้" บางครั้งหมายถึงบัญชีและบางครั้งก็เป็นบุคคล) มักจะไม่มีความสับสน (ความหมายชัดเจนจากบริบท) เพียงคำนึงถึงความแตกต่างทางคำศัพท์นี้ไว้ในใจ ตอนนี้คุณควรเลือกหนึ่งในไลบรารี Python ที่ช่วยให้ทำงานกับ Telegram bot API ได้ง่ายขึ้น (โดยหลักการแล้ว คุณสามารถทำได้โดยไม่ต้องใช้ไลบรารีพิเศษโดยการเข้าถึง API โดยตรง แต่ทำไมต้องเสียเวลาอันมีค่าไปกับการสร้างวงล้อใหม่?) มีตัวเลือกค่อนข้างน้อย นี่คือรายการ [จากเว็บไซต์อย่างเป็นทางการ](https://core .telegram.org/ bots/samples) > - **หลามโทรเลขบอท** กระดาษห่อที่คุณปฏิเสธไม่ได้ > https://github.com/python-telegram-bot/python-telegram-bot > > - **pyTelegramBotAPI** การใช้งาน Python ที่เรียบง่าย แต่ขยายได้สำหรับ Telegram Bot API > https://github.com/eternnoir/pyTelegramBotAPI > > - **AIOGram**. ไลบรารีที่ค่อนข้างเรียบง่ายและอะซิงโครนัสอย่างสมบูรณ์สำหรับ Telegram Bot API ที่เขียนด้วย asyncio และ aiohttp > https://github.com/aiogram/aiogram > > - **TGramBot**. เฟรมเวิร์ก Minimal Telegram Bot API ที่สร้างขึ้นอัตโนมัติบางส่วนและอะซิงโครนัส > https://github.com/KeralaBots/TGramBot > > - **OrigamiBot**. ไลบรารี API บอท pythonic Telegram > https://github.com/cmd410/OrigamiBot > > - **pytgbot**. โมดูลสำหรับเข้าถึง Telegram Bot API > https://github.com/luckydonald/pytgbot > > - **เทเลฟลาสค์**. เฟรมเวิร์กที่ใช้ flask และ pytgbot > https://github.com/luckydonald/teleflask สมมติว่าคุณเลือก OrigamiBot (อะไรนะ ชื่อน่ารัก!) ตอนนี้คุณคัดลอกตัวอย่างการฝึกอบรมเล็กๆ น้อยๆ จากเอกสารประกอบ (เพื่อความสะดวก ฉันนำเสนอด้านล่าง) ลงในสคริปต์ Python ที่ว่างเปล่า รัน และเฉลิมฉลองให้กับการสร้างบอตแรก (ใช้งานได้!) ของคุณ (อย่าลืมระบุโทเค็นเป็นพารามิเตอร์บรรทัดคำสั่งหรือตอบสนองต่อคำขอสคริปต์) ```python จาก sys นำเข้า argv จากเวลา นำเข้า sleep จาก origamibot นำเข้า OrigamiBot เป็น Bot จาก origamibot.listener นำเข้า Listener class BotsCommands: def __init__( self, bot: Bot): # สามารถเริ่มต้นได้ตามที่คุณต้องการ self.bot = bot def start(self, message): # /start command self.bot.send_message(message.chat.id, "Hello user!\nนี่คือ ตัวอย่าง bot .") def echo (self, message, value: str): # /echo [value: str] คำสั่ง self.bot.send_message (message.chat.id, value) def add (self, message, a: float , b : float): # /add [a: float] [b: float] self.bot.send_message(message.chat.id, str(a + b)) def _not_a_command(self): # วิธีนี้ไม่ถือเป็น คำสั่ง print ("ฉันไม่ใช่คำสั่ง") คลาส MessageListener(Listener): # Listener เหตุการณ์จะต้องสืบทอด Listener def __init__(self, bot): self.bot = bot self.m_count = 0 def on_message(self, message): # เรียกใช้ทุกข้อความ self.m_count += 1 พิมพ์ (f "ข้อความทั้งหมด: {self.m_count}") def on_command_failure (self, message, err=None): # เมื่อคำสั่งล้มเหลวหาก err เป็นไม่มี: self.bot.send_message (ข้อความ .chat.id, "คำสั่งล้มเหลวในการผูกอาร์กิวเมนต์!") else: self.bot.send_message(message.chat.id, "ข้อผิดพลาดในคำสั่ง:\n{err}") ถ้า __name__ == "__main__": token = argv[1] if len(argv) > 1 else input("Enter bot token: ") bot = Bot(token) # สร้างอินสแตนซ์ของคลาส OrigamiBot # เพิ่มตัวฟังเหตุการณ์ bot.add_listener(MessageListener(bot)) # เพิ่มผู้ถือคำสั่ง bot.add_commands(BotsCommands(bot)) # เราสามารถเพิ่มผู้ถือคำสั่งได้มากเท่าที่ต้องการ # และผู้ฟังเหตุการณ์ตามที่เราชอบ bot.start() # เริ่มเธรดของบอทในขณะที่ True: sleep(1) # ยังมีประโยชน์บางอย่างอีกด้วย ทำงานที่เธรดหลัก # เช่นเดียวกับการโพสต์อัตโนมัติไปยังช่องต่างๆ เช่น ``` ตอนนี้ (ในขณะที่สคริปต์กำลังทำงาน) บอทของคุณสามารถรันคำสั่ง `/start` (ทักทาย), `/echo` (แสดงข้อความ) และ `/add` (บวกสองตัว) - ลองเลย! (สคริปต์ไม่ตอบสนองต่อข้อความปกติ แต่จะนับเฉพาะจำนวนที่มาถึงเท่านั้น) จากนั้นทุกอย่างก็อยู่ในมือคุณ (หากคุณอ่านรายการแบบผ่านๆ คุณก็เดาได้เลยว่าจะต้องเพิ่มอะไรและที่ไหน) แน่นอนว่าหากต้องการทำอะไรมากกว่า "สวัสดีชาวโลก" (หรือ "นกแก้ว") คุณอาจต้องอ่านเอกสารประกอบ แต่ถึงกระนั้นการมีสคริปต์ที่ใช้งานได้ห้าสิบบรรทัดในมือก็มีประโยชน์มากสำหรับการทำความรู้จักครั้งแรกและการทดลองเพิ่มเติม อย่างไรก็ตาม หากคุณต้องการรับข้อความและประมวลผลด้วยวิธีใดวิธีหนึ่ง (เช่น แปลเป็นภาษาอื่น?) และส่งคืนผลลัพธ์ให้ผู้ใช้ ตัวอย่างนี้ก็เพียงพอแล้วสำหรับคุณ เพียงเพิ่มการแปลงที่คุณต้องการ วิธีการ `on_message` ;-)
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence