能否实现Discord单用户单次使用指令?求对应实现代码
实现Discord用户单次使用指令的方案
当然可以实现仅允许Discord用户单次使用的指令啦!核心逻辑其实很简单——只要记录下已经用过这个指令的用户ID,每次有人触发指令时先做个检查:如果是第一次用,就执行指令功能并把用户ID存起来;如果已经用过了,就提示无法重复使用。
核心实现思路
- 选个存储方式:小型机器人用JSON文件就足够方便,要是用户量较大,推荐用SQLite/PostgreSQL这类数据库来提升性能
- 指令触发流程:
- 用户发送指令后,机器人先读取已使用用户的记录
- 检查当前用户ID是否在记录里
- 不在记录里 → 执行指令的核心功能,然后把用户ID加入记录
- 已经在记录里 → 给用户发送无法重复使用的提示
具体代码实现(基于discord.py v2.x)
首先确保你已经安装了discord.py:
pip install discord.py
下面是完整的机器人代码,用JSON文件存储已使用用户:
import discord from discord.ext import commands import json import os # 初始化机器人,开启消息内容权限 intents = discord.Intents.default() intents.message_content = True bot = commands.Bot(command_prefix="!", intents=intents) # 存储已使用用户ID的文件 USED_USERS_PATH = "single_use_users.json" # 加载已使用用户列表 def load_used_users(): if os.path.exists(USED_USERS_PATH): with open(USED_USERS_PATH, "r", encoding="utf-8") as f: return set(json.load(f)) return set() # 保存已使用用户列表到文件 def save_used_users(users_set): with open(USED_USERS_PATH, "w", encoding="utf-8") as f: json.dump(list(users_set), f) # 全局变量存储已使用用户 used_users = load_used_users() @bot.event async def on_ready(): print(f"机器人已登录:{bot.user.name}(ID:{bot.user.id})") print("------------------------") @bot.command(name="one_time_reward") async def single_use_reward(ctx): # 检查用户是否已使用过指令 if ctx.author.id in used_users: await ctx.send(f"{ctx.author.mention} 抱歉,你已经领取过这个奖励啦,无法重复使用哦!") return # 这里是指令的核心功能,比如发送专属奖励内容 await ctx.send(f"{ctx.author.mention} 恭喜你领取到单次专属奖励!🎉") # 将用户ID加入已使用列表并保存 used_users.add(ctx.author.id) save_used_users(used_users) # 替换成你的机器人Token bot.run("YOUR_BOT_TOKEN")
额外说明
- 如果你的机器人用户较多,建议把JSON替换成SQLite数据库,避免频繁读写文件导致的性能问题。比如用
sqlite3模块创建一个used_users表,存储用户ID即可。 - 记得在Discord开发者门户的Bot设置里开启
Message Content Intent,否则机器人无法读取用户发送的指令。 - 要是需要重置所有用户的使用权限,直接删除
single_use_users.json文件就行。
内容的提问来源于stack exchange,提问作者SinKnight
相关产品推荐
相关产品推荐

