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

如何实现Discord机器人自动发送前端用户提交的消息?

解决前端提交内容自动发送到Discord频道的问题

当前你的代码逻辑是把前端提交的内容存在变量里,只有Discord用户发「ping」时才触发回复,要改成前端提交就自动发消息,核心是在后端收到前端请求时直接调用Discord机器人的消息发送方法,不需要依赖Discord的消息监听事件。

步骤1:提前获取目标Discord频道实例

首先要让机器人在启动时找到你要发送消息的目标频道,需要用到频道ID(开启Discord开发者模式后右键频道可复制):

// 在Discord机器人初始化代码中添加
let targetChannel;

// 机器人就绪时获取频道
client.on('ready', () => {
  // 替换成你的目标频道ID
  const channelId = '123456789012345678';
  targetChannel = client.channels.cache.get(channelId);
  
  if (!targetChannel) {
    console.error('错误:找不到目标频道,请检查频道ID是否正确');
  }
  console.log('机器人已就绪,目标频道已获取');
});

步骤2:修改后端POST接口,直接触发消息发送

你的前端请求是发送到/post,但后端接口是/pass,先统一路径,然后在接口里调用机器人的send方法发送消息:

// 替换原来的app.post('/pass'...)
app.post('/post', async (req, res) => {
  const postContent = req.body.post;
  
  // 校验内容和频道状态
  if (!postContent.trim()) {
    return res.status(400).send('请输入有效内容');
  }
  if (!targetChannel) {
    return res.status(500).send('机器人未连接到目标频道');
  }

  try {
    // 直接发送到目标频道
    await targetChannel.send(postContent);
    res.status(200).send('消息已成功发送到Discord');
  } catch (error) {
    console.error('发送消息失败:', error);
    res.status(500).send('发送消息失败,请检查机器人权限');
  }
});

步骤3:移除无用的Discord消息监听逻辑

现在不需要通过「ping」触发消息了,可以删掉原来的messageCreate监听代码:

// 删掉这段代码,因为已经不需要了
// client.on('messageCreate', msg => {
//     if (msg.content === 'ping') {
//         msg.reply(`${post}`);
//      }
// })

步骤4:优化前端体验(可选)

给前端加个提交状态反馈,让用户知道发送结果:

function App() {
  const [input, setInput] = useState('')
  const [sendStatus, setSendStatus] = useState('')

  const handleSubmit = async () => {
    if (!input.trim()) {
      setSendStatus('请输入内容');
      return;
    }

    try {
      await axios.post('http://localhost:8080/post', { post: input });
      setSendStatus('消息已发送!');
      setInput(''); // 清空输入框
    } catch (err) {
      setSendStatus('发送失败,请稍后重试');
      console.error(err);
    }
  }

  return (
    <>
      <input 
        value={input}
        onChange={(e) => setInput(e.target.value)}
        placeholder="输入要发送到Discord的内容"
      />
      <button onClick={handleSubmit}>push me</button>
      {sendStatus && <p>{sendStatus}</p>}
    </>
  )
}

注意事项

  • 权限问题:确保你的Discord机器人在目标频道有「发送消息」的权限
  • 跨域问题:如果前端和后端端口不同,需要在Node后端配置CORS,比如使用cors包:
    const cors = require('cors');
    app.use(cors()); // 允许所有源,生产环境建议配置特定域名
    
  • 频道ID正确性:必须使用正确的频道ID,否则机器人找不到目标频道

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:01:01