如果用户在具有特定角色discord.py时离开服务器,则禁止该用户

2024-09-29 02:15:00 发布

您现在位置:Python中文网/ 问答频道 /正文

如果一个用户在拥有Muted[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")

*这只是一次尝试,仅限禁用角色

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


Tags: 代码用户服务器eventid角色asyncbot
2条回答

member.roles返回Role的列表

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

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

on_member_remove接收成员。不能有reason或上下文(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")

还请确保已启用成员意图。您可以通过转到here,然后选择Bot->;服务器成员意图

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

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

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

你的代码看起来不错

如果您使用的是Discord API v8(因为此API版本中的意图是强制性的),请检查您是否已在Discord Developer门户和bot代码中启用了Intents.members,如here in Discord.py docs所述

请参考,默认情况下,除memberspresence意图外,所有意图都已启用

在Discord开发者门户上,在应用程序的“Bot”部分启用此功能:enter image description here

相关问题 更多 >