You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.py rewrite中如何检测用户是否已完成Membership Screening

discord.py 实现监听用户完成Membership Screening后执行操作的方案

核心逻辑说明

Discord的Membership Screening(入会筛选)的完成状态通过成员的pending属性标识:用户未完成筛选时pending = True,完成后自动变为False,状态变更时会触发on_member_update事件,我们可以通过监听这个事件实现需求。

前置要求

  • 使用discord.py 1.5及以上的rewrite版本,旧版本不支持pending属性
  • 必须在Discord开发者后台的机器人设置页开启Server Members Intent(服务器成员意图),同时代码中初始化Bot实例时显式开启成员意图
  • Bot拥有对应操作的权限(比如分配身份组需要管理角色权限,且Bot的角色排序高于要分配的角色)

代码示例

import discord
from discord.ext import commands

# 开启所需意图
intents = discord.Intents.default()
intents.members = True # 必须开启成员意图,否则无法接收成员更新事件

bot = commands.Bot(command_prefix='!', intents=intents)

@bot.event
async def on_ready():
    print(f'Bot已登录为 {bot.user}')

@bot.event
async def on_member_update(before: discord.Member, after: discord.Member):
    # 仅当成员从pending状态变为非pending状态时触发,即刚完成入会筛选
    if before.pending and not after.pending:
        # 此处编写你需要执行的操作,以下是分配身份组的示例
        # 替换为你服务器中对应身份组的ID
        target_role = after.guild.get_role(123456789012345678)
        if target_role:
            await after.add_roles(target_role)
            # 可选:发送欢迎消息
            # await after.send("恭喜你完成入会筛选,已为你分配成员身份组!")

bot.run('你的Bot Token')

常见问题说明

  • 如果事件没有触发,优先检查成员意图是否同时在开发者后台和代码中都已开启
  • 如果分配身份组失败,检查Bot的权限以及角色排序是否符合要求
  • 若需要针对不同服务器有不同的触发逻辑,可以在事件内通过after.guild.id判断服务器后执行对应操作

内容的提问来源于stack exchange,提问作者Jack Thorn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:06:08