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
相关产品推荐
相关产品推荐

