使用Telethon的Telegram组的成员计数

时间:2019-01-03 16:32:06

标签: python-3.x telethon

我想监视一个电报组(EOS),并查看其随着时间的发展。为此,我编写了一个小的Python / Telethon脚本,该脚本将所有消息与constructor data一起提取并将其写入MySQL数据库。

我的想法是将MessageActionChatAddUserMessageActionChatJoinedByLink相加,然后减去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()

1 个答案:

答案 0 :(得分:0)

我想我有一个答案,但这并不好。在玩转并在Telethon电报频道中询问时,我发现:

  1. 例如,隐藏消息时,它们以“ Nonetype”(即空)形式返回 ->无法以组中的普通成员身份检索信息

  2. 通道中用户的错误计算是由电报端(我不太了解)和“ Nonetype”消息上的数据不一致引起的。一种解决方案是将所有此类事件都记录下来的管理日志。 ->不能作为组的普通成员

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