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

Python Discord机器人调用add_roles时程序卡顿问题排查

Discord机器人add_roles方法卡顿排查

你的Python Discord机器人在执行await bot.add_roles(message.author, guild.get_role("<@&1014144691744276530>"))时出现卡顿,核心问题集中在以下几个方面:

  • guild变量未初始化:代码中直接调用guild.get_role(),但没有对guild进行赋值。正确的方式是从消息对象中获取服务器实例:guild = message.guild。如果guild为None,后续调用会引发异常,导致代码阻塞。

  • 角色ID格式错误:get_role()方法需要传入纯数字的角色ID,而你传入的是<@&1014144691744276530>这种@提及格式。应该直接使用数字ID,比如guild.get_role(1014144691744276530)。

  • 机器人权限不足:检查机器人是否拥有「管理角色」权限,且机器人自身的角色层级必须高于目标角色。否则Discord API会拒绝请求,导致代码卡在等待响应的步骤。

  • 角色对象不存在:如果传入的ID无效,get_role()会返回None,此时调用add_roles()会抛出异常,进而引发卡顿。建议先判断角色是否存在再执行添加操作。

修正后的代码示例

@bot.event
async def on_message(message):
    global warn
    if message.author == bot.user:
        return
    x = message.content
    if x.upper() == 'SPAM':
        if warn == 2:
            user = message.author
            if user is None:
                print("User not found")
                return
            # 获取当前服务器实例
            guild = message.guild
            if not guild:
                print("无法获取当前服务器信息")
                return
            # 使用纯数字ID获取角色
            target_role = guild.get_role(1014144691744276530)
            if not target_role:
                print("目标角色不存在")
                return
            await bot.add_roles(user, target_role)
            warn = 0
        # 发送角色提及
        await message.channel.send("<@&1014487310361968640>")
        warn += 1

内容的提问来源于stack exchange,提问作者Xavion Mirchandani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:33:28