繁体   English   中英

如何使用 Telethon 库向 Telegram 机器人添加菜单

[英]How to Add a Menu to a Telegram Bot Using Telethon Library

我创建了一个简单的电报机器人,它将接受用户的输入并执行一些操作并将结果返回给用户。

但是,我想添加一个菜单,其中基于菜单选项将调用特定的 function 并将结果返回给用户。 每个操作需要 0 到 60 秒,并且该机器人由多个用户使用。

我有一些担忧。 首先,如何确保机器人将在菜单选择之前存储输入的值。 其次,由于该操作需要N秒,我如何确保每个用户都将获得其搜索的值而不是获得另一个用户的结果? 到目前为止,这是我的代码:

!/usr/bin/env python3.8
api_id = 12345
api_hash = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
bot_token = 'XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
############################### Bot ############################################
from telethon.sync import TelegramClient, events,Button
from telethon import functions, types
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
def first_function(value):
    #DO SOME OPERATION
    return


def second_function(value):
    #DO SOME OPERATION
    return



bot = TelegramClient('bot', api_id, api_hash).start(bot_token=bot_token)
with bot:   
    @bot.on(events.NewMessage)
    async def handler(event):    
        value=event.message.message
        sender_id=event.message.peer_id.user_id
        username = await bot.get_entity(sender_id)
        #if menu option is 1
            # first_function(value)
        #else menu option is 2
        #second_function(value)

        await bot.send_message(username, value)        
    bot.run_until_disconnected()

你应该在这里查看文档

在文档中,您还可以参考示例。 你应该寻找的例子在这里

添加按钮的简短示例:

from telethon import Button
btns = [[Button.inline(“option 1”, data=“option1”), Button.inline(“Option 2”, data=“option2”)]
await client.send_message(…, buttons=btns)

向您的 Telegram 机器人添加菜单。
这是添加菜单代码:

menu_keyboard = InlineKeyboardMarkup([[
        InlineKeyboardButton("Option 1", callback_data='1'),
        InlineKeyboardButton("Option 2", callback_data='2')
    ]])

进行回调:

async def callback_query_handler(event):
    callback_query = event.data
    if callback_query == '1':
        await first_function(value)
    elif callback_query == '2':
        await second_function(value)

Function send_message() 写:

await bot.send_message(username, "Please select an option from the menu:", reply_markup=menu_keyboard)

在您的代码中添加两个函数:

def first_function(value):
    #DO SOME OPERATION
    return


def second_function(value):
    #DO SOME OPERATION
    return



bot = TelegramClient('bot', api_id, api_hash).start(bot_token=bot_token)
with bot:   
    @bot.on(events.NewMessage)
    async def handler(event):    
        value=event.message.message
        sender_id=event.message.peer_id.user_id
        username = await bot.get_entity(sender_id)
        menu_keyboard = InlineKeyboardMarkup(
            [[InlineKeyboardButton("Option 1", callback_data='1'),
              InlineKeyboardButton("Option 2", callback_data='2')]]
        )
        await bot.send_message(username, "Please select an option from the menu:", reply_markup=menu_keyboard)
        @bot.on(events.CallbackQuery)
        async def callback_query_handler(event):
            callback_query = event.data
            if callback_query == '1':
                await first_function(value)
            elif callback_query == '2':
                await second_function(value)
    bot.run_until_disconnected()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM