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

如何让Discord机器人识别服务器角色并为用户添加指定角色?

Discord机器人添加BagChaser角色失败解决方案

问题描述

作为编程新手,我正在开发Discord服务器机器人,需求是给发送包含gm或good morning消息的用户分配名为BagChaser的角色。目前机器人能正常读取消息并回复,但无法成功添加角色。尝试过两种调用方式(注释行和最后一行),还试图给addRole函数参数设置默认值为BagChaser,均无效。角色已在服务器创建,但不知道如何让代码识别它。

原代码

@client.event
async def on_ready():
    print(f'We have logged in as {client.user}')


async def addRole(user : discord.Member, role : discord.Role = BagChaser):

    if role in user.roles:
        return
    else: await user.add_roles(role)

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    msg = message.content.lower()

    words_list = ['gm', 'good morning']

    if any(word in msg for word in words_list):
        # await addRole(message.author, BagChaser)
        await message.channel.send(f'Lets get this bag, {message.author}')
        await message.author.add_roles(BagChaser)

问题根源及解决步骤

1. 未正确获取角色对象

代码中直接使用BagChaser是未定义的变量,Discord.py无法识别这个字符串,必须先从服务器中获取对应的角色对象。

2. 机器人权限不足

机器人需要拥有管理角色的权限,且自身角色位置要高于BagChaser角色(否则无法给用户添加该角色)。

修改后的代码示例

import discord
from discord.ext import commands

# 假设你已经初始化了client,比如:
# client = commands.Bot(command_prefix='!', intents=discord.Intents.all())

@client.event
async def on_ready():
    print(f'We have logged in as {client.user}')

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    msg = message.content.lower()
    words_list = ['gm', 'good morning']

    if any(word in msg for word in words_list):
        # 获取消息所在的服务器
        guild = message.guild
        # 通过角色名称获取角色对象
        bag_chaser_role = discord.utils.get(guild.roles, name="BagChaser")
        
        if not bag_chaser_role:
            await message.channel.send("未找到BagChaser角色,请检查角色名称是否正确")
            return
        
        # 检查用户是否已拥有该角色
        if bag_chaser_role in message.author.roles:
            await message.channel.send(f"{message.author.mention} 你已经拥有BagChaser角色啦!")
            return
        
        # 添加角色
        await message.author.add_roles(bag_chaser_role)
        await message.channel.send(f'Lets get this bag, {message.author.mention}!')

额外配置步骤

  • 打开Discord服务器设置,进入「角色」页面,找到机器人的角色,开启「管理角色」权限。
  • 将机器人的角色拖动到BagChaser角色的上方,确保机器人角色优先级更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:25:19