【问题标题】:how do i make this command only work in multiple channels using discord.py如何使用 discord.py 使此命令仅在多个通道中工作
【发布时间】:2021-04-06 23:41:45
【问题描述】:

我正在尝试使命令在 2 个贸易渠道中工作,因为它是为了检查人们的担保以查看他们是否值得信赖。我当前的代码不起作用,但在这里

@client.command()
async def vouches(ctx, member : discord.User=None):
  if None == member:
  
    await open_vouches(ctx.author)
    user = ctx.author

    users = await get_vouch_data()

    vouches_given = users[str(user.id)]["vouches_given"]
    vouches_gotten = users[str(user.id)]["vouches_gotten"]

    embed = discord.Embed(title='Trade vouches!',color=0x1d9521)
    embed.add_field(name='Vouches Gotten✨',value=vouches_gotten, inline=False)    
    embed.add_field(name="Vouches Given????", value=vouches_given, inline=False)

    await ctx.reply(embed=embed)
  

  elif ctx.channel.id != 813832766248583199:
    await ctx.send("You can't vouch in this channel")
    return
  elif ctx.channel.id != 813832801220689931:
    await ctx.send("You can't vouch in this channel")
    return
    
  
  else:
    await open_vouches(member)

    users = await get_vouch_data()

    vouches_given = users[str(member.id)]["vouches_given"]
    vouches_gotten = users[str(member.id)]["vouches_gotten"]

    embed = discord.Embed(title=f'{member}\'s Trade vouches!',color=0x1d9521)
    embed.add_field(name='Vouches Gotten✨',value=vouches_gotten, inline=False)    
    embed.add_field(name="Vouches Given????", value=vouches_given, inline=False)

    await ctx.reply(embed=embed)
    print('[LOGS] bot was used for Vouches')

但是 elif: 部分是我想要使用的。我之前问过一个与此类似的问题,但只使用一个渠道,所以请帮助我。提前谢谢你,是的,我试过把身份证放在一起等等

【问题讨论】:

  • 到底是什么问题?说“它不起作用”对我们在这里帮助您没有多大帮助。有什么错误吗?有什么奇怪的行为吗?尝试调试打印以查看您到达的代码部分以及您没有到达的代码部分?
  • 好吧,它甚至没有尝试工作,因为它只是被忽略了,命令仍然继续
  • 你是如何使用命令的?
  • 我在做 =vouches,它会告诉一个人他们有多少担保以及他们提供了多少担保
  • 如果你这样做,那么member 总是None 因为你没有通过一个,它会进入你的第一个if,而不是下面的那个频道id 已检查。

标签: python json discord discord.py


【解决方案1】:

首先 - 您必须首先检查频道。在您提到的 cmets 中,您在测试时没有将成员作为参数传递,这意味着代码的那部分永远不会到达,因为 member 始终是 None 所以它进入第一个 if。

@client.command()
async def vouches(ctx, member : discord.User=None):
    allowed_channels = [813832766248583199, 813832801220689931]

    # Check channels FIRST
    if ctx.channel.id not in allowed_channels:
        return await ctx.send("You can't vouch in this channel")

另外,None-checks 应该使用 is,而不是 ==。

    elif member is None:
        ...

附言。这没有错误,但是如果上面的if-statements 使用returns,则不需要使用elif。如果输入了上述if/elif之一,则函数returns,因此无论如何都无法到达elif下面。

最后,member is None 和 members is not None 的代码使用不同的 userid 完全相同,请考虑使用 id 创建一个变量或创建一个函数而不是复制该代码块。

【讨论】:

    猜你喜欢
    • 2021-07-02
    • 1970-01-01
    • 2021-12-15
    • 2020-10-10
    • 2020-10-25
    • 2021-08-17
    • 2022-11-25
    • 2021-11-18
    • 2021-04-15
    相关资源
    最近更新 更多