Discord.py中基于用户ID记录命令使用次数并写入JSON文件
实现Boop命令的触发次数记录功能
没问题,我帮你把记录用户被Boop次数的功能加上,直接把数据存在JSON文件里,每次触发命令都自动更新~
完整修改后的代码
import json import os from discord.ext import commands # 假设你的client已经初始化完成,比如: # client = commands.Bot(command_prefix='@') @client.command(pass_context=True) async def boop(ctx): mentions = ctx.message.mentions # 定义存储次数的JSON文件路径 count_file = "boop_counts.json" # 读取现有数据:如果文件不存在,初始化空字典 if os.path.exists(count_file): with open(count_file, 'r') as f: boop_counts = json.load(f) else: boop_counts = {} for user in mentions: # 用用户ID作为唯一标识,转成字符串避免JSON类型问题 user_id = str(user.id) # 更新次数:不存在就设为1,存在就加1 boop_counts[user_id] = boop_counts.get(user_id, 0) + 1 # 发送带次数的反馈消息 await client.say("{} has been Boop'ed! Total boops: {}".format(user, boop_counts[user_id])) # 把更新后的数据写回文件 with open(count_file, 'w') as f: json.dump(boop_counts, f, indent=4)
代码细节说明
- 模块导入:
json负责处理JSON文件的读写,os用来检查存储文件是否存在,避免首次运行时因文件不存在报错。 - 用户ID作为标识:相比用户名,用户ID是Discord用户的唯一永久标识,不会因为改名变化,用它作为存储键更可靠,转成字符串是为了统一JSON数据类型,避免后续读取时出现类型不匹配问题。
- 次数更新逻辑:用
dict.get()方法可以简洁处理“用户首次被Boop”的场景,默认值设为0,加1后就是首次触发的1次;如果用户已有记录,就直接在原有次数上加1。 - 文件写入:每次处理完所有提及用户后,把更新后的字典写回文件,
indent=4让JSON文件的格式更清晰易读,方便你手动查看数据。
这样每次有人用@boop命令提及用户时,就会自动记录并更新他们的Boop次数,数据会持久保存在JSON文件里~
内容的提问来源于stack exchange,提问作者MrPancakeDude
相关产品推荐
相关产品推荐

