首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Discord.py如何在用户被禁止时发送特定的离开消息,而不是常规的离开消息

Discord.py如何在用户被禁止时发送特定的离开消息,而不是常规的离开消息
EN

Stack Overflow用户
提问于 2021-06-01 19:01:21
回答 1查看 1.1K关注 0票数 1

我已经在齿轮箱里设置了一个基本的留言。根据用户是被禁止/踢掉还是自愿离开,我如何发送不同的信息?

我已经尽可能多地查看了一下,而且由于on_member_remove事件只提供了成员对象,所以如果不使用非常不可靠的审计日志,我就无法找到如何做到这一点。

当我的机器人禁止一个成员检查时,我试着找出一个变量,但是我找不到一个合理的方法去检查,而且当一个成员被一个工作人员手动禁止的时候,它显然不会起作用。

下面是基本的离开侦听器:

代码语言:javascript
复制
@commands.Cog.listener()
async def on_member_remove(self, member):
    chan = self.bot.get_channel(805991434330570793)
    await chan.send(f"{member.display_name}#{member.tag} just left the server.")

还有一些伪描述我想要的东西:

代码语言:javascript
复制
@commands.Cog.listener()
async def on_member_remove(self, member):
    chan = self.bot.get_channel(805991434330570793)
    methods = ["banned", "kicked"]
    if member.leave_method in methods:
        await chan.send(f"{member.display_name}#{member.tag} was just banned from the server.")
    else:
        await chan.send(f"{member.display_name}#{member.tag} just left the server.")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-01 19:45:34

如果您的bot具有ban_members权限,您可以使用guild.fetch_ban检查该成员是否被禁止,否则将引发discord.NotFound

代码语言:javascript
复制
@commands.Cog.listener()
async def on_member_remove(self, member):
    channel = self.bot.get_channel(805991434330570793)
    try:
        banned = await member.guild.fetch_ban(member)
    except discord.NotFound:
        banned = False
    if banned:
        await channel.send(f"{member} was just banned from the server.")
    else:
        await channel.send(f"{member} just left the server.")

也有一个单独的监听器只针对bans,on_member_ban,它要求启用Intents.bans。对于kick来说,检查审计日志将是我所知道的唯一方法,尽管正如您提到的那样,它可能有点不可靠。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67794611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档