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

Discord.py开发tempmute临时禁言命令报Unknown Role错误如何解决

报错原因排查

核心报错「Unknown Role」的根本原因

    1. 创建角色后未接收返回的角色对象
      你调用ctx.guild.create_role会返回新创建的角色实例,但代码中没有将返回值赋值给LMUTED变量,创建完成后LMUTED仍然是None,后续操作传入空值就会触发未知角色错误。
    1. 角色操作方法参数错误
      member.add_roles方法本身是给当前成员对象添加角色,不需要额外传入member作为第一个参数,多余参数会导致API解析异常,请求无效角色ID。
    1. 移除角色方法调用错误
      ctx对象没有remove_roles方法,移除成员角色需要调用member.remove_roles。
    1. 时间参数处理错误
      你用*time接收时间参数,得到的是元组类型,无法直接做数值计算,需要修正参数定义为数值类型。
修复方案

首先你需要先导入asyncio用于异步计时,修正后的完整代码如下:

import asyncio
import random
import discord
from discord.ext import commands

# 类内的命令代码
@commands.command()
@commands.has_permissions(ban_members=True)
async def tempmute(self, ctx, member: discord.Member = None, time: int = None):
    if not member:
        await ctx.send(embed=discord.Embed(title='Вы должны указать участника!', color=random.choice(colors)))
        return
    if not time:
        await ctx.send("请指定禁言时长(单位:分钟)")
        return
    # 查找禁言角色
    LMUTED = discord.utils.get(ctx.guild.roles, name='LMUTED')
    if not LMUTED:
        perms = discord.Permissions(send_messages=False)
        # 接收创建的角色对象
        LMUTED = await ctx.guild.create_role(
            name='LMUTED', 
            colour=discord.Colour(0x0000FF),
            permissions = perms
        )
        # 给所有文本频道设置禁言角色的权限,否则禁言不生效
        for channel in ctx.guild.text_channels:
            await channel.set_permissions(LMUTED, send_messages=False)
        await ctx.send(f'Я создал роль `{LMUTED.name}`!')
    # 修正add_roles参数
    await member.add_roles(LMUTED)
    await ctx.send(f'Я замьютил {member.mention} на {time}分钟!')
    # 异步等待对应时长
    await asyncio.sleep(time * 60)
    # 修正移除角色的调用方法
    await member.remove_roles(LMUTED)

额外注意事项

  • 确保机器人的角色位置高于LMUTED角色,否则无法给成员分配/移除该角色
  • 机器人需要拥有管理角色和管理频道权限,才能正常创建角色、修改频道权限
  • 长时计时建议用持久化存储(如数据库)记录禁言到期时间,避免机器人重启后到期自动解言失效

内容的提问来源于stack exchange,提问作者Forevor Base

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:45:04