1

我想监控一个 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()
4

1 回答 1

0

我想我有一个答案,但它并不好。在我发现的电视电报频道中玩耍并询问时,我发现:

  1. 例如,消息在隐藏时返回为“Nonetype”,也就是空 -> 无法作为组中的普通成员检索信息

  2. 频道中用户的重大误判是由于电报方面的数据不一致(我不太明白)以及“Nonetype”消息。一个解决方案是查看所有记录此类事件的管理日志。-> 不可能作为组中的普通成员

如果有人找到解决方案,请随时发表评论,我会将其标记为正确答案。

于 2019-01-05T21:44:01.483 回答