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
相关产品推荐
相关产品推荐

