Discord Bot 管理员私信自动转发至服务器频道功能咨询
Discord Bot 私信转发功能实现方案
完全可以实现该需求,整体逻辑复杂度不高,核心分为权限校验、私信事件监听、消息转发三个模块,具体实现思路和示例如下:
核心实现思路
- 第一步:基础配置准备
首先在Discord Developer Portal创建Bot应用,开启Privileged Gateway Intents下的Message Content Intent和Direct Messages Intent权限,否则Bot无法读取私信内容、无法触发私信相关事件。提前记录好三个核心配置参数:目标服务器ID、消息转发的目标频道ID、Bot的访问令牌,新手测试阶段可以直接硬编码参数,生产环境建议写入环境变量避免泄露。 - 第二步:管理员权限校验
有两种常用校验方案,可根据需求选择:- 固定名单校验:提前录入所有需要放行的管理员用户ID,收到私信时直接比对发件人ID是否在白名单内,适合管理员人员固定的小型服务器,配置简单性能更高
- 动态权限校验:收到私信后实时拉取发件人在目标服务器的成员信息,校验该用户是否持有
Administrator权限,适合管理员经常变动的中大型服务器,无需手动更新白名单
- 第三步:私信监听与转发逻辑
给Bot绑定私信消息事件,收到消息后首先过滤Bot自身发送的消息避免循环触发,再走上述权限校验流程,校验通过后将消息内容、附件等信息转发到指定频道,可附带发送者用户名、ID、发送时间等信息方便追溯,也可配置给管理员回复确认消息告知转发成功。
最简实现示例(基于discord.py v2.x)
import discord from discord.ext import commands # 核心配置项,替换为自己的实际参数 TARGET_GUILD_ID = 1234567890 # 目标服务器ID TARGET_CHANNEL_ID = 123456789012345678 # 目标转发频道ID BOT_TOKEN = "YOUR_BOT_TOKEN" # Bot令牌 # 开启所需的网关意图 intents = discord.Intents.default() intents.message_content = True intents.dm_messages = True bot = commands.Bot(command_prefix="!", intents=intents) @bot.event async def on_message(message): # 过滤Bot自身发送的消息 if message.author == bot.user: return # 判断当前消息是否为私信 if isinstance(message.channel, discord.DMChannel): # 获取目标服务器实例 guild = bot.get_guild(TARGET_GUILD_ID) if not guild: return # 获取发件人在目标服务器的成员实例 member = guild.get_member(message.author.id) if not member: return # 校验是否为服务器管理员 if member.guild_permissions.administrator: target_channel = guild.get_channel(TARGET_CHANNEL_ID) if target_channel: # 构造转发内容 forward_text = f""" 收到管理员 {message.author.mention}(ID:`{message.author.id}`)的私信: {message.content} """ # 同步转发私信附件 attach_files = [await att.to_file() for att in message.attachments] await target_channel.send(forward_text, files=attach_files) # 可选:给发送私信的管理员回复确认 await message.channel.send("消息已成功转发至指定服务器频道") bot.run(BOT_TOKEN)
注意:首次使用前需要将Bot邀请进目标服务器,邀请时需要给Bot授予
查看服务器成员、发送消息、上传附件权限,否则会出现权限不足导致的运行报错。
内容的提问来源于stack exchange,提问作者Dmitriy
相关产品推荐
相关产品推荐

