如何使用discord.py通过命令修改Discord机器人的命令前缀
问题原因
你当前的代码无法正常修改机器人前缀,核心问题如下:
- 函数内重新实例化
commands.Bot属于错误操作:这行代码只会创建一个全新的未启动的机器人对象,完全不会修改当前正在运行的、响应你命令的原有机器人实例的配置 - 单独定义的
command_prefix变量不会被框架识别:discord.py只会读取机器人实例自带的command_prefix属性,你自行赋值的普通变量没有实际作用 - 空参数判断写法冗余:不需要将类型转为字符串比对,直接使用
if arg is None即可,符合Python编码规范,运行效率也更高
修正代码(单服务器全局统一前缀场景)
@client.command() async def change_prefix(ctx, arg=None): if arg is None: await ctx.send("Please insert an argument...") return # 直接修改运行中实例的前缀属性即可立即生效 client.command_prefix = str(arg) embed = discord.Embed(title = "Prefix set!", description = f"The bot prefix has been set to {arg}", color = discord.Color.red()) now = datetime.now() current_time = now.strftime("%H:%M") embed.set_footer(text=f"Requested by {ctx.author} at {current_time}") await ctx.send(embed=embed)
如果需要实现多服务器各自设置不同前缀,或者需要重启后前缀配置不丢失,你需要使用可调用的前缀配置逻辑,搭配字典、JSON文件或数据库存储各服务器的前缀配置即可。
内容的提问来源于stack exchange,提问作者OffableGamer870
相关产品推荐
相关产品推荐

