You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telegram Bot移除群组已注销账号方案求助

解决Telegram Bot获取群成员并移除已注销账号的问题

Telegram Bot API确实移除了旧的无参数get_chat_members方法,现在需要通过分页请求来获取所有群成员。以下是针对你代码的修改方案:

核心修改点

  • 用分页循环调用context.bot.get_chat_members,每次获取固定数量的成员(最大限制为200)
  • 合并重复定义的remove函数,同时实现计数和踢人逻辑
  • 增强已注销账号的判断逻辑,避免遗漏

修改后的完整代码

from telegram import Update
from telegram.ext import Updater, CommandHandler, CallbackContext
from telegram.ext.jobqueue import Days

# 初始化Bot
updater = Updater(token="bot_token", use_context=True)
dispatcher = updater.dispatcher

# /start命令处理器
def start(update: Update, context: CallbackContext):
    context.bot.send_message(
        chat_id=update.effective_chat.id,
        text="Hello! I am RDA_bot, a bot that removes deleted accounts from a Telegram group."
    )

# /remove命令处理器(合并计数与踢人逻辑)
def remove(update: Update, context: CallbackContext):
    chat_id = update.effective_chat.id if update else context.job.context.id
    deleted_accounts = 0
    offset = 0
    limit = 200  # Telegram API单次最大返回成员数

    while True:
        try:
            # 分页获取群成员
            members = context.bot.get_chat_members(chat_id=chat_id, offset=offset, limit=limit)
            if not members:
                break  # 没有更多成员,退出循环

            # 遍历成员并处理已注销账号
            for member in members:
                user = member.user
                # 判断账号是否已注销:is_deleted标记 + 辅助判断
                if user.is_deleted or (user.first_name == "Deleted Account" and not user.username):
                    context.bot.kick_chat_member(chat_id=chat_id, user_id=user.id, until_date=0)
                    deleted_accounts += 1

            offset += limit  # 更新偏移量,获取下一页
        except Exception as e:
            print(f"获取成员时出错: {e}")
            break

    # 发送结果通知(仅在手动调用时发送)
    if update:
        context.bot.send_message(
            chat_id=chat_id,
            text=f"已移除 {deleted_accounts} 个已注销账号"
        )

# 定时任务:每天自动执行一次移除操作
job_queue = updater.job_queue
job_queue.run_repeating(
    lambda context: remove(None, context),
    interval=Days(1),
    first=0,
    context={"chat_id": "你的群组ID"}  # 替换为目标群组ID
)

# 注册命令处理器
dispatcher.add_handler(CommandHandler("start", start))
dispatcher.add_handler(CommandHandler("remove", remove))

# 启动Bot
updater.start_polling()
updater.idle()

关键说明

  1. 分页获取成员:通过offset和limit参数循环请求,直到返回的成员列表为空,确保获取到所有群成员。
  2. 注销账号判断:除了依赖user.is_deleted,额外检查用户名是否为空且昵称是"Deleted Account",提升判断准确性。
  3. 定时任务适配:为定时任务补充群组ID参数,避免因缺少update对象导致无法获取聊天ID。
  4. 异常处理:添加异常捕获,避免因API限制或网络问题导致程序崩溃。

内容的提问来源于stack exchange,提问作者Daisha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:20:47