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

Telegram机器人列表追加问题:重复创建列表致无法累积用户名

解决Telegram机器人用户列表无法累积的问题

我来帮你搞定这个问题!你的核心问题是每次处理消息时都重新创建了一个空列表,所以之前的用户信息根本没被保存下来。咱们把列表移到函数外面,让它成为全局变量,这样就能持续累积用户名了。

修改后的完整代码

from telegram.ext import Updater, CommandHandler, Filters, MessageHandler
from telegram import MessageEntity, ParseMode, InputTextMessageContent

# 全局列表:用来累积所有发消息的用户名
user_list = []

updater = Updater("989165404:AAF8DEjyunwrb88-1G8w62cGItzXj1J618g")

def msg_filter(bot, update):
    global user_list  # 声明要使用全局的user_list变量
    username = update.message.from_user.first_name
    
    # 可选:如果不想重复添加同一用户,加上这个判断
    if username not in user_list:
        user_list.append(username)
    
    # 回复累积后的列表
    bot.send_message(chat_id=update.message.chat_id, text=f"当前用户列表:{user_list}")
    print(user_list)

updater.dispatcher.add_handler(MessageHandler(Filters.text, msg_filter))
updater.start_polling()

关键改动说明

  • 把列表移到全局作用域:原来的list = []在函数内部,每次调用msg_filter都会重新创建空列表,现在把user_list(避免和内置list重名)放在函数外,所有消息处理都复用同一个列表。
  • 声明全局变量:在函数里用global user_list告诉Python,我们要修改的是全局作用域的user_list,而不是创建一个局部变量。
  • 可选去重逻辑:如果希望同一个用户即使多次发消息也只记录一次,就保留if username not in user_list的判断;如果需要记录所有发送行为(包括重复发送的用户),直接去掉这个判断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:07:29