我想监控一个 Telegram 组 ( EOS ),看看它是如何随着时间的推移而发展起来的。为此,我编写了一个小的 Python/Telethon 脚本,它获取所有消息以及构造函数数据并将其写入 MySQL 数据库。
我的想法是总结,MessageActionChatAddUser
然后MessageActionChatJoinedByLink
减去MessageActionChatDeleteUser
。
但是我错过了大约。总共有 10k 用户,而且只有 3 个用户MessageActionChatDeleteUser
,我非常怀疑在这么大的频道中。
MySQL 查询如下所示:
USE db_test;
SELECT COUNT(*)
FROM telegram_raw
WHERE srvNme = 'MessageActionChatDeleteUser';
我的 Python 脚本中评估从频道获取的消息的部分是:
if payload[cnt].__class__.__name__ == 'MessageService':
is_message = False
is_msg_srv = True
constr_id = payload[cnt].action.CONSTRUCTOR_ID
act_nme = payload[cnt].action.__class__.__name__
elif payload[cnt].__class__.__name__ == 'Message':
is_message = True
is_msg_srv = False
constr_id = 0
act_nme = ''
else:
is_message = False
is_msg_srv = False
constr_id = 0
act_nme = ''
编辑:进一步研究我的问题后,我发现有几条消息返回为空,这里是一个示例:
client = TelegramClient(username, api_id, api_hash)
client.start()
if not client.is_user_authorized():
client.send_code_request(phone)
try:
client.sign_in(phone, input('Enter the code: '))
except SessionPasswordNeededError:
client.sign_in(password=input('Password: '))
me = client.get_me()
print(me)
try:
enty = client.get_entity('t.me/EOSproject')
messages = client.get_messages(entity=enty, ids=37)
finally:
client.disconnect()