如何实现Discord bot将频道内用户消息自动转发到其他频道
Discord Bot 跨频道原样同步消息实现方案
核心逻辑是监听平台的消息创建事件,过滤无效消息后将内容、附件等信息转发到预设目标频道,以下是可直接复用的实现方案:
前置权限配置
- 给Bot分配源频道的「查看频道」「读取消息历史」权限
- 给Bot分配目标频道的「发送消息」「发送附件」「嵌入链接」权限
- 去开发者后台开启Bot的「消息内容特权意图」,否则无法读取普通用户发送的消息文本
代码实现(以discord.py v2版本为例)
注意:必须过滤Bot自身发送的消息,否则会触发消息无限循环转发的刷屏bug
import discord from discord.ext import commands # 替换为你自己的频道ID SOURCE_CHANNEL_ID = 替换为源频道的数字ID TARGET_CHANNEL_ID = 替换为目标频道的数字ID intents = discord.Intents.default() intents.message_content = True bot = commands.Bot(command_prefix="!", intents=intents) @bot.event async def on_ready(): print(f"Bot登录成功,账号:{bot.user}") @bot.event async def on_message(message): # 跳过所有Bot发送的消息,避免循环 if message.author.bot: return # 只处理指定源频道的消息 if message.channel.id != SOURCE_CHANNEL_ID: return target_channel = bot.get_channel(TARGET_CHANNEL_ID) if not target_channel: return # 原样处理消息附带的图片、文件等附件 forward_files = [] for att in message.attachments: forward_files.append(await att.to_file()) # 如果需要完全纯内容转发,直接传message.content即可;下面示例是附带原发送者昵称的格式 forward_content = f"{message.author.display_name}:\n{message.content}" await target_channel.send(content=forward_content, files=forward_files) # 如果你的Bot有其他指令功能,保留这行,否则可以删掉 await bot.process_commands(message) bot.run("替换为你自己的Bot Token")
扩展说明
- 如果你用discord.js等其他SDK,逻辑完全一致:监听
messageCreate事件,做相同的过滤规则后调用目标频道的发送接口即可 - 如果需要同步消息的编辑、删除状态,额外监听消息编辑、消息删除事件,存一份「原消息ID-转发后消息ID」的映射表,找到目标频道对应的转发消息做修改/删除操作即可
- 如果需要支持多组频道的同步映射,把写死的ID换成配置文件或者数据库存储的映射关系即可
内容的提问来源于stack exchange,提问作者user19400795
相关产品推荐
相关产品推荐

