python - 如果用户在具有特定角色时离开服务器,则禁止用户 discord.py
问题描述
我想这样做,如果用户在拥有Muted
or[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")
*这只是一个只有被禁止角色的尝试。
用户没有被禁止,也没有错误或任何可以帮助我解决问题的东西。
解决方案
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)
推荐阅读
- go - 为什么我的追加函数将切片的每个成员都更改为要添加的新项目?
- python - PyWin32 能否让用户“过多”地访问 Win32 API?
- javascript - 在 for 循环中声明变量
- python - tf.estimator - 如何在每个时期后打印测试集的准确性?
- c# - 如何在 C# 中的一行中填充现有数组?
- java - 无效的方法声明 - 需要返回类型
- prolog - 为什么在尝试从列表中删除双打时出现存在错误?
- r - R studio 直方图错误:stat_bin() 不得与任何美学一起使用
- r - 如何将抖动的绘图点保持在 facet_grid 的边界上
- powershell - 带有文件参数的 Windows 静默安装