5

当我从按钮获得触发器时,我正在尝试使用 Telethon 发送电报消息。

当由 NewMessage 事件等事件触发时,我的 Telethon 方法可以正常工作,但是如何client.send_message(user, msg)使用其他触发器(即按下按钮,telethon 发送消息)发送消息()?

目前我得到的只是这些错误:

RuntimeError: There is no current event loop in thread 'Thread-1'.
RuntimeWarning: coroutine 'send_to' was never awaited

这是我的代码的简化版本:

    with client:
        client.start()
        while True:
            if (button):
                await client.send_message(int(chat),msg)
        client.run_until_disconnected()

编辑:

事后看来,我的实际原始问题过于简单化了。我没有使用按钮,而是语音命令,无论哪种方式,都是非电报触发器。在 Telegram 聊天组 @TelethonChat 的帮助下,答案是使用:

    import asyncio

    loop = asyncio.new_event_loop()

    async def send_to(chat, msg):
        await client.send_message(chat, msg)
    
    def mainfunc():
        if (trigger):
            loop.create_task(send_to(chat, msg))
4

1 回答 1

1

你需要使用事件来做到这一点。点击按钮的事件是events.CallbackQuery 链接在这里

示例代码如下:

from telethon import events
from telethon.tl.custom import Button

@client.on(events.CallbackQuery)
async def handler(event):
    await event.answer('You clicked {}!'.format(event.data))

client.send_message(chat, 'Pick one', buttons=[
    [Button.inline('Left'), Button.inline('Right')]]
])

您可以在此处找到更多示例:https ://telethon.readthedocs.io/en/latest/extra/examples/telegram-client.html

于 2019-02-28T02:10:27.997 回答