如何将Discord机器人的!say命令设置为仅所有者可用?
让!say命令仅限机器人所有者使用的解决方案
没问题!要让你的!say命令只有你(机器人所有者)能调用,有两种简单的实现方式,根据你的需求选择即可:
方法一:用内置装饰器快速搞定
discord.py提供了专门的@commands.is_owner()装饰器,能自动验证调用命令的用户是否是机器人的注册所有者,这是最省心的方式。
修改后的代码如下:
from discord.ext import commands @bot.command(pass_context=True) @commands.is_owner() # 就是这一行!加上就生效 async def say(ctx, *args): mesg = ' '.join(args) await bot.delete_message(ctx.message) await bot.say(mesg)
如果非所有者尝试用这个命令,机器人会自动返回权限不足的提示,不用你额外写判断逻辑。
方法二:手动指定允许的用户ID
如果你想给多个用户授权(比如你的管理员伙伴),可以手动检查调用者的ID是否在你的白名单里:
# 把这里换成你的用户ID,多个的话用逗号分隔,比如{123456, 987654} ALLOWED_USER_IDS = {1234567890} @bot.command(pass_context=True) async def say(ctx, *args): # 先检查用户ID是否在允许列表里 if ctx.message.author.id not in ALLOWED_USER_IDS: await bot.say("抱歉,你没有权限使用这个命令!") return # 原来的命令逻辑 mesg = ' '.join(args) await bot.delete_message(ctx.message) await bot.say(mesg)
这种方式灵活性更高,你可以随时添加或移除允许的用户ID。
小提醒:如果你的discord.py版本比较旧(比如v0.16.x及更早),
@commands.is_owner()可能需要配合await bot.is_owner(ctx.message.author)来做判断,或者直接用手动检查的方式更稳妥。
内容的提问来源于stack exchange,提问作者user9840885
相关产品推荐
相关产品推荐

