电报防广告机器人 telegram antispam bot 相关功能 查询群组内的全部成员 对比ChannelParticipantsBanned与ChannelParticipantBanned
上一篇中, 我们通过查询群组中最近的1000条发言, 得到活跃群成员的id列表.

如果我想对这个群里的成员特别厚道, 只要是目前在群里的, 我都不希望有可能被机器人打扰.
那么我需要得到群组内的全部成员.
用GPT开发.
不要忘了, 我们刚刚做过的查询群最近消息的项目. 为了方便自己阅读和学习, 把上个项目的全部代码复制粘贴, 再加上下面的要求. 发给GPT.
查询一个telegram群组中的全部成员输出格式为 yamltelegram账号的userid:uesrname: telegram账号的usernamefull_name: telegram账号的full name如6611601789:username: skypatchfull_name: 蛙 女这个群组可能是公开群组, 也可能是不公开群组
经过一些简单的调试. 代码正常运行了. 但是获得的用户包括了 exceptions 里的用户. 这不是我们想要的, 我们想要的用户列表应该还把这部分用户排除.
这一步折腾了比较久, GPT返回的结果有问题.
我同时使用 claude, gemini, chatgpt.
再结合 Telethon 的官方文档. 终于搞定了.
上传到 Github
运行效果
正在获取群组成员列表: FuckGFW-Newbie 翻墙新手村跳过Exceptions列表中的用户 ID: 816194782跳过Exceptions列表中的用户 ID: 6521155977...略--- 群组成员列表 ---6617181826:username: atefatmanfull_name: 子 肥7919966027:username: crazypeace_anti_bot_botfull_name: CZ_antibot_bot...略✅ 共获取 1216 名成员📄 已保存到文件: members_1517821953.yaml
========
后记
在 Telethon 中, ChannelParticipantBanned 与 ChannelParticipantsBanned 都有效的"东西".
可以import之后 使用
from telethon.tl.types import ChannelParticipantBanned, ChannelParticipantsBanned
ChannelParticipantsBanned
是一个 filter, 用于 client.iter_participants() 函数的参数
见官方文档
当 ChannelParticipantsBanned 作为 filter, 调用 client.iter_participants() 函数的结果 是 返回这样的用户:群组的 Permissions 里面的 Exceptions
ChannelParticipantBanned
是 user 的一个"属性"participant 的一个可能的取值, 用于判断该用户是否在这个列表里面:
群组的 Permissions 里面的 Exceptions (见上图)
用法是这样的:
isinstance(user.participant, ChannelParticipantBanned)

需要注意的是
这两个"东西"都叫 *****Banned. 但实际上, Exceptions的意思是, 优先于群组默认权限设置的一个设定.
比如, 我的群组里面, 默认用户权限是不让发 贴纸的. 但是, 可以在 Exceptions 里面设置某个用户可以发送贴纸. 你觉得这叫作"Banned"吗?
评论
发表评论