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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:01:45