discord.py中定义的变量是否对每个Discord服务器独立生效?
关于discord.py变量的服务器独立性问题解答
基础结论
默认情况下你直接定义的普通变量是机器人全局共享的,不会自动按Discord服务器隔离。
你举的Highscore变量就是典型场景:如果某一个服务器将该值设为29,后续机器人接入的所有服务器访问这个变量时,拿到的都会是29这个数值。
实现服务器独立存储的标准方案
你可以通过「服务器ID作为键的字典」结构实现不同服务器的数据隔离,每个服务器的ID(guild.id)是全局唯一的整数,天然适合做区分标识,参考实现代码如下:
# 初始化服务器独立数据存储结构 server_highscores = {} # 设置当前服务器的高分 @bot.command() async def sethighscore(ctx, score: int): current_guild_id = ctx.guild.id server_highscores[current_guild_id] = score await ctx.send(f"本服务器最高得分已更新为 {score}") # 查询当前服务器的高分 @bot.command() async def checkhighscore(ctx): current_score = server_highscores.get(ctx.guild.id, 0) await ctx.send(f"本服务器当前最高得分为:{current_score}")
补充说明
- 上述方案是内存级存储,机器人进程重启后所有存储的数据会清空,需要持久化存储的话可以搭配JSON文件、SQLite等本地存储方案实现。
- 如果你使用的是discord.py 2.0及以上版本,也可以用官方提供的相关上下文扩展工具简化服务器级数据的隔离操作。
内容的提问来源于stack exchange,提问作者EpicEfeathers
相关产品推荐
相关产品推荐

