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

如何让discord.py机器人仅在特定角色发消息时执行操作?是否可行?

实现Discord.py机器人监听特定角色消息并自动回复

这个需求完全可行,无需通过命令触发,只需利用discord.py的消息监听事件即可实现,具体步骤如下:

1. 初始化机器人并配置必要意图

首先需要开启消息内容与服务器成员意图,否则机器人无法读取消息或获取用户角色信息:

import discord
from discord.ext import commands

# 配置机器人所需的意图
intents = discord.Intents.default()
intents.message_content = True
intents.members = True

# 初始化机器人(命令前缀可自定义)
bot = commands.Bot(command_prefix="!", intents=intents)

注意:你需要在Discord开发者门户的机器人页面,开启"Message Content Intent"和"Server Members Intent"这两个特权意图。

2. 编写消息监听逻辑

通过on_message事件捕获所有消息,判断发送者是否拥有目标角色,是则自动发送回复:

@bot.event
async def on_message(message):
    # 忽略机器人自身发送的消息,避免循环触发
    if message.author.bot:
        return
    
    # 替换为你需要监听的角色ID
    target_role_id = 123456789012345678
    
    # 检查发送消息的用户是否持有目标角色
    has_target_role = any(role.id == target_role_id for role in message.author.roles)
    if has_target_role:
        # 自定义自动发送的消息内容
        await message.channel.send("检测到特定角色的消息,这是自动回复内容!")
    
    # 如果机器人还有其他命令功能,必须保留这一行,否则命令会失效
    await bot.process_commands(message)

额外提示

  • 获取角色ID:开启Discord开发者模式(用户设置→高级→开发者模式),右键目标角色选择"复制ID"即可。
  • 频道过滤:如果只需要监听特定频道的消息,可在事件开头添加判断:
    target_channel_id = 987654321098765432
    if message.channel.id != target_channel_id:
        return
    
  • 权限要求:确保机器人在对应服务器拥有"发送消息"和"读取消息历史"的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:10:04