首页 > 解决方案 > 如果用户在具有特定角色时离开服务器,则禁止用户 discord.py

问题描述

我想这样做,如果用户在拥有Mutedor[Banned]角色时离开服务器,他们将被永久禁止。

这是我尝试过的代码:

@bot.event
async def on_member_remove(ctx, member, reason=None):
    role="[Banned]"
    guild = ctx.guild
    if role in member.roles:
        await guild.ban(discord.Object(id=member.id), reason="Leaved the server when soft banned")

*这只是一个只有被禁止角色的尝试。

用户没有被禁止,也没有错误或任何可以帮助我解决问题的东西。

标签: pythondiscorddiscord.py

解决方案


member.roles返回一个角色列表

您需要获取 Role 对象,您可以使用的一种方法是:

role = discord.utils.find(lambda r: r.name == '[Banned]', member.guild.roles)

on_member_remove接受成员。你不能有reason或 Context( ctx)

@bot.event
async def on_member_remove(member):
    role = discord.utils.find(lambda r: r.name == '[Banned]', member.guild.roles)
    guild = member.guild
    if role in member.roles:
        await guild.ban(discord.Object(id=member.id), reason="Leaved the server when soft banned")

还请确保您启用了成员意图。您可以通过转到此处然后选择Bot-> SERVER MEMBERS INTENT来执行此操作

您需要使用以下方法在代码中启用意图:

intents = discord.Intents.default()
intents.members = True

bot = commands.Bot(command_prefix=".", intents=intents)

推荐阅读