![](/img/trans.png)
[英]How to add user to group using Telethon (Telegram python library) InviteToChannelRequest
[英]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()
向您的 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.