我如何使用 discord.py 使此命令仅在多个频道中工作

时间:2021-04-06 13:52:50

标签: python json discord discord.py

我正在尝试使命令在 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: 部分是我正在尝试使用的部分。我之前问过一个类似的问题,但只使用一个频道,所以请帮助我。提前谢谢你,是的,我已经尝试将 ID 放在一起,诸如此类

1 个答案:

答案 0 :(得分:0)

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

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: ... 使用 elif,则无需使用 if-statements。如果输入了上面的 return 之一,函数 if/elif,所以无论如何都无法到达下面的 return

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