我想监视一个电报组(EOS),并查看其随着时间的发展。为此,我编写了一个小的Python / Telethon脚本,该脚本将所有消息与constructor data一起提取并将其写入MySQL数据库。
我的想法是将MessageActionChatAddUser
和MessageActionChatJoinedByLink
相加,然后减去MessageActionChatDeleteUser
。
但是我错过了大约。总共有1万名用户,而且仅出现了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()
答案 0 :(得分:0)
我想我有一个答案,但这并不好。在玩转并在Telethon电报频道中询问时,我发现:
例如,隐藏消息时,它们以“ Nonetype”(即空)形式返回 ->无法以组中的普通成员身份检索信息
通道中用户的错误计算是由电报端(我不太了解)和“ Nonetype”消息上的数据不一致引起的。一种解决方案是将所有此类事件都记录下来的管理日志。 ->不能作为组的普通成员
如果有人找到解决方案,请随时发表评论,我会将其标记为正确答案。