我使用python-电报-bot库用Python编写了一个bot,它将URL发送到bot是管理员的通道。
现在,我想让机器人读取,比方说,最后5条消息(我并不真正关心这个数字,因为我只需要在聊天中读取消息),并将它们存储在代码中以供进一步研究。
我已经让我的机器人和:
bot = telegram.Bot(token='mytoken')
bot.sendMessage(chat_id='@mychatid', text=entry.link)
但是我找不到一个bot.getLastMessage
或bot.getMessage
类的类进入python-电-bot库。
如果已经没有这样的书面类,我如何通过Telegram API来实现它,因为我在API实现方面还有点初学者呢?
谢谢。
发布于 2020-10-04 16:44:01
不幸的是,这在机器人中是不可能的。
在这里,您可以使用查找所有可用的方法 ( python-telegram-bot
在幕后调用),并且没有这样的方法可以根据需要获取消息。
最接近通过api的是getChat
(它将返回聊天中的pinned_message
)。
在这种情况下,您可以做的是将bot发送的消息存储起来,以及更新bot接收到的消息(通过设置处理程序),然后在某个存储区(数据库)中进行获取。
发布于 2022-08-07 18:51:35
你试过其他类型的电报API,电报[客户] API和TDLib吗?
使用电传图书馆可以方便地读取通道历史记录(请参阅电视文档)。
为此,我们需要一个api_id
和一个api_hash
。
要获得这些参数,我们需要登录到我们的电报核心并转到API开发工具区。有一个简单的表单需要填写,然后,我们可以收到我们的api_id
和api_hash
。请参阅电报关于如何获取API凭据的帮助文档。
下面是获取targetChannelId最后5条消息的示例代码
from telethon import TelegramClient
API_ID = 123456 # See above for how to get it
API_HASH = '123abc' # See above for how to get it
client = TelegramClient('my-client', API_ID, API_HASH)
async def main():
async for message in client.iter_messages('targetChannelId', limit=5):
print(message.id, message.text)
with client:
client.loop.run_until_complete(main())
当您第一次运行此代码时,它会询问您的电话号码或bot令牌。以+9912345...
格式输入您的电话号码,其中99
是您的国家代码,其余是您的电话号码。然后,它可能会发送一个登录代码到您的电报应用程序,输入它在控制台。
注意:机器人不能看到频道历史信息(至少在电传中是这样),但是用户(电话号码)可以看到。只有当机器人是administrators.之一时,它们才能侦听频道更新。
client.iter_messages()
接受可以使用的其他参数,如min_id
,因此只有在特定消息之后才能获得消息(例如,我们可以保存我们处理的最后一个消息id,下次将该id作为min_id
传递,因此只有在该消息之后才返回消息)。
https://stackoverflow.com/questions/64196443
复制相似问题