discord.py : 在发布禁令之前,我如何检查用户是否在服务器中?

discord.py : How can I check to see if a user is in the server or not before issuing a ban?

我正在努力做到这一点,如果我的一位版主去禁止某个用户,如果他们在对他们采取行动之前离开,我的机器人会告诉他们该用户是否不再在服务器中。这是我的禁令命令的开始:

@client.command()
@commands.has_any_role("Head Honcho", "Discord Moderator")
async def ban(ctx, member : discord.Member, *, reason=None):
    if member is None:
        return await ctx.send("This member could not be found, or you did not provide an ID.")

    if reason is None:
        return await ctx.send("Please provide a reason for banning this user.")

    if user not in ctx.guild.members:
        return await ctx.send("This user is not in the server.")

    if ctx.channel.id == 805651955841236993:
        reaction_emote = ("<:Checkmark:820467149554319410>")
        await ctx.message.add_reaction(reaction_emote)

我遇到的问题是这里的这一点:

if user not in ctx.guild.members:
        return await ctx.send("This user is not in the server.")

我正在尝试的一切似乎都不起作用。任何帮助将不胜感激!

您可以检查会员是否不在 this

等频道中
if guild.get_member(ID_OF_MEMBER) == None:

您的代码实际上不需要检查,因为您在定义函数参数时将参数 member 转换为 discord.Member 对象。成员对象将始终在公会中,因此您不必担心获得无效用户。现在,如果您想捕获异常,可以使用 on_command_error 事件。

@client.event
async def on_command_error(ctx, error):
    if isinstance(error, commands.errors.MemberNotFound):
        return await ctx.send("This user is not in the server.")

我有自己的方法。

@client.command() # Ban command
@commands.has_permissions(manage_roles=True, kick_members=True, ban_members=True)
async def ban(ctx, member: discord.Member, *, reason=None):
    if member in ctx.guild.members():
        await ctx.channel.send(f"{member.mention} is  not a server member!")
    
    else:
        # Do Stuff

这将检查服务器中的成员。

谢谢 :D