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

Discord Bot可读取DM但无法在服务器分配角色的问题解决

问题分析与解决方案

核心问题

在私信(DM)场景下,message.guild的值是None——因为私信不属于任何服务器,所以你没法通过这个属性获取到目标的MIAO服务器,这就是代码失效的根本原因,必须手动指定目标服务器。

具体修改步骤

  1. 获取目标服务器实例
    优先用服务器ID(唯一且稳定)来获取,步骤:打开Discord开发者模式→右键MIAO服务器名称→复制ID。然后用bot.get_guild(服务器ID)获取服务器对象。
  2. 校验用户状态
    给用户加角色前,要确认用户已经加入了MIAO服务器,否则会触发报错,用guild.get_member(message.author.id)可以拿到用户在该服务器的成员实例。
  3. 修正角色分配逻辑
    基于获取到的目标服务器查找角色,再给对应的成员实例添加角色。

修改后的代码示例

async def on_message(message):
    # 检查是否是私信消息
    if isinstance(message.channel, discord.DMChannel):
        # 检查消息是否以@开头
        if message.content.startswith("@"):
            email = message.content
            # 检查邮箱是否在数据库中
            if email in email_database:
                # 替换成你的MIAO服务器ID(整数类型)
                target_guild_id = 123456789012345678
                target_guild = message.bot.get_guild(target_guild_id)
                
                if not target_guild:
                    await message.channel.send('找不到目标服务器,请检查ID是否正确!')
                    return
                
                # 获取用户在目标服务器的成员对象
                member = target_guild.get_member(message.author.id)
                if not member:
                    await message.channel.send('你还没加入MIAO服务器,没法给你分配角色!')
                    return
                
                # 获取Example角色
                role = discord.utils.get(target_guild.roles, name='Example')
                if not role:
                    await message.channel.send('目标服务器里没找到Example角色,请检查角色名称!')
                    return
                
                # 给用户添加角色
                await member.add_roles(role)
                await message.channel.send('邮箱验证通过!已为你分配Example角色!')
            else:
                await message.channel.send('邮箱不在数据库里!')

额外注意事项

  • 确保Bot在MIAO服务器拥有管理角色的权限,否则无法执行添加角色操作。
  • 服务器ID是整数,不要加引号包裹。
  • 如果你用的是discord.py v2.x版本,确保代码调用和版本兼容。

内容的提问来源于stack exchange,提问作者Leonardo Boiardi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:35:21