锁定命令 discord.py

Posted

技术标签:

【中文标题】锁定命令 discord.py【英文标题】:Lock command discord.py 【发布时间】:2021-11-10 12:04:53 【问题描述】:

我发出了一个锁定命令,但是当fl.lock #general test 用于#general 频道时,它不会锁定通用频道,但当fl.lock #general test 用于#staff-chat 频道时,它会锁定#general 频道

因此,当 lock 命令中提到该频道并且在同一频道中使用该频道时,我的机器人不会锁定频道

代码

  @commands.command(case_insensitive = True)
  @commands.has_any_role(885434191783788564, 856071314740740096, 856061783722426378, 856465667296985108)
  async def lock(self, ctx, channel: discord.TextChannel, *, reason=None): 
    channel = channel or ctx.channel
    overwrite = channel.overwrites_for(ctx.guild.default_role)
    if overwrite.send_messages == True:
      overwrite.send_messages = False
      await channel.set_permissions(ctx.guild.default_role, overwrite=overwrite)
      em_reason = discord.Embed(title="**Channel locked**", description=f":lock: reason",color=discord.Color.red())
      embed = discord.Embed(description = f"<a:fl_check:874522235879186483> Locked channel <#channel.id>",color=discord.Color.green())
      await ctx.send(embed=em_reason)
      await ctx.send(embed=embed)
    elif overwrite.send_messages == False:
      em = discord.Embed(description="<a:fl_no:874522273984442420> That channel is already locked.", color=discord.Color.red())
      await ctx.send(embed=em)```

【问题讨论】:

【参考方案1】:

我认为channel = channel or ctx.channel 是这里的问题。

您应该直接检查channel 参数是否为None,而不是使用ctx.channel

@commands.command(case_insensitive = True)
  @commands.has_any_role(885434191783788564, 856071314740740096, 856061783722426378, 856465667296985108)
  async def lock(self, ctx, channel: discord.TextChannel=None, *, reason=None): 
    if channel is None:
       channel = ctx.channel
    overwrite = channel.overwrites_for(ctx.guild.default_role)
    if overwrite.send_messages == True:
      overwrite.send_messages = False
      await channel.set_permissions(ctx.guild.default_role, overwrite=overwrite)
      em_reason = discord.Embed(title="**Channel locked**", description=f":lock: reason",color=discord.Color.red())
      embed = discord.Embed(description = f"<a:fl_check:874522235879186483> Locked channel <#channel.id>",color=discord.Color.green())
      await ctx.send(embed=em_reason)
      await ctx.send(embed=embed)
    elif overwrite.send_messages == False:
      em = discord.Embed(description="<a:fl_no:874522273984442420> That channel is already locked.", color=discord.Color.red())
      await ctx.send(embed=em)

【讨论】:

没用控制台也没有任何错误

以上是关于锁定命令 discord.py的主要内容,如果未能解决你的问题,请参考以下文章

2020-06-30 passwd命令锁定用户和接收命令行标准输入设置密码

为啥usermod命令锁定了用户还可以登录

db2数据库里面的一张表被锁定,怎么解锁

锁定/解锁 Windows 站时运行命令/脚本?

linux 锁定重要文件 更改重要命令

当同时按下大写锁定和命令键时,keylayout 文件中有啥修饰符?