【问题标题】:guild argument in discord.pydiscord.py 中的公会参数
【发布时间】:2021-11-12 14:40:24
【问题描述】:

这是我的代码,很明显,出了点问题……我不知道在定义命令时将公会参数放在哪里,但看起来我没有把它放在正确的位置

async def unban(guild, ctx, *, member):
  banned_users = await ctx.guild.bans()
  member_name, member_discriminator = member.split('#')

  for ban_entry in banned_users:
    user = ban_entry.user
    if(user.name, user.discriminator) == (member_name, member_discriminator):
      await ctx.guild.unban(user)
      await ctx.send(f'Unbanned **{user}** !')
      await user.send(f"You have been unbanned from **{guild.name}")
      return```

【问题讨论】:

  • 为什么要将guild 设为必需参数?这在这里没有任何意义。此外,您的user.send 部分将无法工作,因为用户和机器人在禁令后不再共享服务器。

标签: python discord.py disco


【解决方案1】:

所以你实际上可以在这篇文章async def unban(guild, ctx, *, member): 中取出公会要求,然后将其变为async def unban(ctx,*,member: discord.Member):

你需要放 member: discord.Member 而不仅仅是 member!

然后把 ctx 放在{guild.name} 前面,这样看起来像{ctx.guild.name}

那么它应该看起来像这样!

@client.command()
async def unban( ctx, *, member:discord.Member):
  banned_users = await ctx.guild.bans()
  member_name, member_discriminator = member.split('#')

  for ban_entry in banned_users:
    user = ban_entry.user
    if(user.name, user.discriminator) == (member_name, member_discriminator):
      await ctx.guild.unban(user)
      await ctx.send(f'Unbanned **{member}** !')
      await member.send(f"You have been unbanned from **{ctx.guild.name}")
      return

【讨论】:

  • 既然这是一个解禁命令,在这种情况下使用discord.Member是否合适?由于用户已经被禁止并且不再共享公会,因此没有discord.Member 实例。我建议在这种情况下通过传递用户 ID 来使用 discord.Object,并通过将其作为参数传递来调用 guild.unban()。您还可以处理该部分以检查该成员是否被禁止,因为如果未使用ctx.guild.bans 未找到/禁止该成员,则会引发discord.NotFound
  • 哦,你完全正确,你实际上不需要调用成员参数,因为用户实际上并不在服务器中。
猜你喜欢
  • 2022-07-07
  • 2021-01-29
  • 2021-03-11
  • 2021-12-17
  • 1970-01-01
  • 2021-02-03
  • 2021-09-05
  • 2021-02-02
  • 1970-01-01
相关资源
最近更新 更多