如何使python机器人单击电报bot中的按钮

时间:2019-07-30 09:32:30

标签: python telegram telethon

我想让机器人点击Telegram。问题是我对如何使用代码单击它感到困惑,我尝试了一下,但是仍然失败,机器人没有点击,应该发布什么数据,以便机器人点击电报机器人。我需要你的帮助。这是我的源代码:

from telethon import TelegramClient, events, sync
from telethon.tl.functions.messages import GetHistoryRequest, GetBotCallbackAnswerRequest

api_id = 974119
api_hash = 'a483ea002564cdaa0499a08126abe4a3'
client = TelegramClient('session_name', api_id, api_hash)
client.start()
channel_username = 'GOOGLE'
channel_entity = client.get_entity(channel_username)
posts = client(GetHistoryRequest(
    peer=channel_entity,
    limit=1,
    offset_date=None,
    offset_id=0,
    max_id=0,
    min_id=0,
    add_offset=0,
    hash=0))
messageId = posts.messages[0].id

client(GetBotCallbackAnswerRequest(
    channel_username,
    messageId,
    data=posts.messages[0].reply_markup.rows[0].buttons[0]))

client.disconnect()

必须单击的按钮是KeyboardButtonUrl或?转到网站:

reply_markup=ReplyInlineMarkup(
        rows=[
            KeyboardButtonRow(
                buttons=[
                    KeyboardButtonUrl(
                        text='? Go to website',
                        url='https://www.google.com'
                    ),
                ]
            ),
            KeyboardButtonRow(
                buttons=[
                    KeyboardButtonCallback(
                        text='? Report',
                        data=b'{"name":"ReportClick","id":"120326622"}'
                    ),
                    KeyboardButtonCallback(
                        text='⏩ Skip',
                        data=b'{"name":"SkipClick","id":"120326622"}'
                    ),
                ]
            ),
        ]
    ),

2 个答案:

答案 0 :(得分:0)

在这种情况下,您不应该使用client.get_entity()

您应该使用client.get_messages(),而不是GetHistoryRequest

您应该使用message.click(),而不是GetBotCallbackAnswerRequest

因此您的代码应为:

from telethon import TelegramClient, sync

api_id = ...
api_hash = ...
client = TelegramClient('session_name', api_id, api_hash)

messages = client.get_messages('GOOGLE')
messages[0].click()

这足以单击频道中最后一条消息的第一个按钮。

答案 1 :(得分:0)

sender = await event.get_sender()
messages = await client.get_messages(sender.username)
await messages[0].click(0)

这将单击消息中的第一个按钮。您还可以点击(行,列),使用诸如click(text ='?')之类的文本,甚至直接点击数据(data = b'payload')。