我正在尝试使命令在 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 放在一起,诸如此类
答案 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
。
最后,elif
和 member is None
的代码完全相同,使用不同的 members is not None
,考虑只用 userid
创建一个变量或创建一个函数而不是复制该代码块。