Telethon:使用 telethon 以参数启动时从机器人获得响应
Telethon: Get response from bot when started with parameter using telethon
我想要实现的目标是发送一个命令(例如 /price)并从机器人那里获得响应(价格统计),然后退出以节省资源。该消息只能按需接收,因为机器人仅在发送命令时响应。
到目前为止,我只通过发送命令成功完成了一半,但收到响应一直是一个令人头疼的问题。
到目前为止,这是我的尝试,我愿意接受任何建议,请就实现接收部分的最简单方法提出建议。非常感谢!
with TelegramClient('Anon', tg_API_ID, tg_API_Hash) as client:
client(functions.messages.StartBotRequest(bot = '@Bot', peer = '@myHandle', start_param = '/price'))
client.start()
session = os.environ.get('TG_SESSION', 'printer')
@client.on(events.NewMessage(chats = '@Bot'))
async def my_event_handler(event):
text = event.raw_text
print(text)
client.loop.run_until_complete(main())
如果有帮助,这里有一个很好的资源:https://tl.telethon.dev/methods/messages/index.html
在 Telethon V1 中,with client
也调用了 start
,因此再次添加它是多余的。
在启动机器人之前定义处理程序可能是个好主意,以防消息“中间”到达。
您可以从处理程序调用 disconnect
来断开客户端连接,并且 run_until_disconnected
的行为类似于 loop.run_until_complete
,但它运行事件循环直到断开连接发生。
假设导入了 telethon.sync
,以下应该有效:
text_found = None
with TelegramClient('Anon', tg_API_ID, tg_API_Hash) as client:
@client.on(events.NewMessage(chats = '@Bot'))
async def my_event_handler(event):
global text_found
text_found = event.raw_text
await client.disconnect()
client(functions.messages.StartBotRequest(bot = '@Bot', peer = '@myHandle', start_param = '/price'))
client.run_until_disconnected()
print(text_found)
如果 telethon.sync
不是 导入的,您必须使用 asyncio
、async
和 await
:
import asyncio
async def main():
text_found = None
async with TelegramClient('Anon', tg_API_ID, tg_API_Hash) as client:
@client.on(events.NewMessage(chats = '@Bot'))
async def my_event_handler(event):
nonlocal text_found
text_found = event.raw_text
await client.disconnect()
await client(functions.messages.StartBotRequest(bot = '@Bot', peer = '@myHandle', start_param = '/price'))
await client.run_until_disconnected()
return text_found
text_found = asyncio.run(main())
print(text_found)
我想要实现的目标是发送一个命令(例如 /price)并从机器人那里获得响应(价格统计),然后退出以节省资源。该消息只能按需接收,因为机器人仅在发送命令时响应。
到目前为止,我只通过发送命令成功完成了一半,但收到响应一直是一个令人头疼的问题。 到目前为止,这是我的尝试,我愿意接受任何建议,请就实现接收部分的最简单方法提出建议。非常感谢!
with TelegramClient('Anon', tg_API_ID, tg_API_Hash) as client:
client(functions.messages.StartBotRequest(bot = '@Bot', peer = '@myHandle', start_param = '/price'))
client.start()
session = os.environ.get('TG_SESSION', 'printer')
@client.on(events.NewMessage(chats = '@Bot'))
async def my_event_handler(event):
text = event.raw_text
print(text)
client.loop.run_until_complete(main())
如果有帮助,这里有一个很好的资源:https://tl.telethon.dev/methods/messages/index.html
在 Telethon V1 中,with client
也调用了 start
,因此再次添加它是多余的。
在启动机器人之前定义处理程序可能是个好主意,以防消息“中间”到达。
您可以从处理程序调用 disconnect
来断开客户端连接,并且 run_until_disconnected
的行为类似于 loop.run_until_complete
,但它运行事件循环直到断开连接发生。
假设导入了 telethon.sync
,以下应该有效:
text_found = None
with TelegramClient('Anon', tg_API_ID, tg_API_Hash) as client:
@client.on(events.NewMessage(chats = '@Bot'))
async def my_event_handler(event):
global text_found
text_found = event.raw_text
await client.disconnect()
client(functions.messages.StartBotRequest(bot = '@Bot', peer = '@myHandle', start_param = '/price'))
client.run_until_disconnected()
print(text_found)
如果 telethon.sync
不是 导入的,您必须使用 asyncio
、async
和 await
:
import asyncio
async def main():
text_found = None
async with TelegramClient('Anon', tg_API_ID, tg_API_Hash) as client:
@client.on(events.NewMessage(chats = '@Bot'))
async def my_event_handler(event):
nonlocal text_found
text_found = event.raw_text
await client.disconnect()
await client(functions.messages.StartBotRequest(bot = '@Bot', peer = '@myHandle', start_param = '/price'))
await client.run_until_disconnected()
return text_found
text_found = asyncio.run(main())
print(text_found)