如何从电报频道或群组中自动删除/踢出成员?



我有电报频道/组,我手动添加成员,并在一/二/三个月后手动删除/踢用户。有没有办法自动完成此任务,我的意思是我们可以自动或通过调度从频道/组中删除/踢出用户吗?

任何示例 python 代码都将有助于理解。谢谢。。。!

您可以使用kick_chat_member在预定义的时间内禁止用户加入组。如果成功删除用户,该函数将返回True

# kick a user from a group
m = context.bot.kick_chat_member(
chat_id="-1001572091573", 
user_id='123456789',
timeout=int(time.time() + 86400)) # expiry after 24h

您需要获取群聊的chat_id和要禁止的用户user_id:您可以通过拦截像new_chat_members这样的事件来做到这一点,当新用户添加到组时,它提供了所有信息

# handler to process new member event
updater.dispatcher.add_handler(
MessageHandler(Filters.status_update.new_chat_members, new_member))
def new_member(update, context):
logging.info(f"new_member : {update}")
chat_id = update.message.chat.id
user_id = update.message.from_user.id

机器人需要能够执行此类操作,因此请确保它是管理员或具有ban user权限。

调度

像这样的调度操作(显然)不在 Telegram BOT API 中,但这是应用程序/聊天机器人应该实现的逻辑。

您需要注意以下事项:

  • 获取chat_id(见上文)并将其保存以供以后使用
  • 保存成员加入群组时的ID(见上文)以及日期(以便能够确定他们加入群组的时间)

在 Python 中实现任务的一个好方法是使用高级 Python 调度程序

from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
scheduler.add_job(ban_members, 'interval', days=30) 
scheduler.start()
def ban_members():
# get users from DB
# establish who needs to be removed
# call kick_chat_member

由于官方电报机器人API文档,无法安排banChatMember。

您可以做的是在包含名为kick_date的字段的数据库中注册用户,并让 cron 作业运行脚本来检查他们的kick_date是否在当前时间之前,并使用banChatMember来禁止他们。


自从你的问题以来,我没有发布任何代码;

  1. 看起来好像您正在电报的API中寻找一种方法。
  2. 你还没有提到你想使用哪个Python Telegram机器人API。
  3. 为您的问题提供代码示例(忽略 1 和 2 原因),本身就是一个项目,因为它由不同的代码部分组成。我建议您将问题分为以下部分并搜索/询问它们:
  • 如何将当前成员存储在数据库中?
  • 如何在数据库中存储新成员?
  • 如何定期在 Python 上运行脚本?
  • 如何通过ID踢会员?

我将给你实现目标可以采取的步骤。

  1. 将成员添加到您的组后,您将从电报获得更新,包括字段new_chat_members

{
"update_id": 436022554,
"message": {
"message_id": 259,
"from": {
"id": <user_id>,
"is_bot": false,
"first_name": <user_first_name>,
"username": <user_username>,
"language_code": "en"
},
"chat": {
"id": <chat_id>,
"title": <chat_title>,
"type": "group",
"all_members_are_administrators": true
},
"date": 1633373553,
"new_chat_members": [
{
"id": <chat_member_id>,
"is_bot": false,
"first_name": <chat_member_first_name>,
"username": <chat_member_username>
}
]
}
}
  1. 您将循环访问new_chat_members并将它们与kick_at时间一起添加到数据库中。

  2. 编写一个脚本来从数据库中获取您的成员,并检查是否该踢他们了。(kick_at<now)并使用banChatMember。>

您可以使用python-telegram-bot, 还可以安排kick_chat_member
在此处阅读完整文档 https://python-telegram-bot.readthedocs.io

最新更新