如何实现Chrome扩展发送信息给Discord bot并转发给指定用户?
该需求完全可实现,整体实现逻辑为:Chrome扩展采集到价格数据后,通过HTTP请求将数据发送给Discord Bot侧的轻量接口,Bot收到数据后调用Discord API向指定用户推送私信。
Discord Bot 侧代码修改
首先执行npm install express cors安装HTTP服务所需依赖,完整可运行代码如下:
const discord = require('discord.js'); const express = require('express'); const cors = require('cors'); // 配置项,按实际情况替换 const BOT_TOKEN = 'xxx'; // 你的Bot token const TARGET_USER_ID = '1234567890'; // 接收私信的用户Discord ID,开启Discord开发者模式后右键头像可复制 const API_SECRET = 'your_custom_secret_key'; // 自定义接口校验密钥,防止恶意调用 const PORT = 3000; // 服务监听端口 const bot = new discord.Client({ intents: [ discord.Intents.FLAGS.GUILDS, discord.Intents.FLAGS.GUILD_MESSAGES, discord.Intents.FLAGS.DIRECT_MESSAGES ] }); const app = express(); // 跨域配置,测试阶段可使用*通配,上线建议替换为你的Chrome扩展地址:chrome-extension://<你的扩展ID> app.use(cors({ origin: '*' })); app.use(express.json()); // 接收Chrome扩展数据的接口 app.post('/send-price', async (req, res) => { // 校验请求合法性 if (req.headers['x-api-secret'] !== API_SECRET) { return res.status(403).json({ msg: '非法请求' }); } const { productName, price, url } = req.body; if (!productName || !price) { return res.status(400).json({ msg: '参数缺失' }); } try { // 获取目标用户并发送私信 const user = await bot.users.fetch(TARGET_USER_ID); await user.send(`价格监控提醒: 商品名称:${productName} 当前价格:${price} 商品链接:${url || '无'}`); res.status(200).json({ msg: '发送成功' }); } catch (err) { console.error('发送私信失败:', err); res.status(500).json({ msg: '发送失败', error: err.message }); } }); bot.login(BOT_TOKEN); bot.on('ready', () => { console.log('Bot started'); // Bot登录成功后再启动HTTP服务 app.listen(PORT, () => { console.log(`接口服务已启动,监听端口${PORT}`); }); });
Chrome 扩展侧修改
- 首先修改
manifest.json配置,增加网络访问权限(以V3版本manifest为例):
{ "manifest_version": 3, "name": "价格监控扩展", "version": "1.0", "host_permissions": [ "https://your-bot-domain.com/*" // 替换为你Bot服务的公网域名 ], // 其他原有配置保持不变 }
- 修改原有输出逻辑,把原来打印到console、输出到div的逻辑替换为HTTP请求:
// 示例:采集到价格数据后调用接口推送 const monitorResult = { productName: '你监控的商品名称', price: '¥199', url: 'https://xxx.com/goods/123' }; fetch('https://your-bot-domain.com/send-price', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-secret': 'your_custom_secret_key' // 和Bot侧配置的密钥保持一致 }, body: JSON.stringify(monitorResult) }).then(res => res.json()) .then(data => console.log('推送结果:', data)) .catch(err => console.error('推送失败:', err));
注意事项
- Bot服务需要部署到公网可访问的服务器,Chrome扩展无法直接访问本地运行的服务
- 接收私信的用户必须和Bot在同一个Discord服务器,否则Bot无法发起私信
- 上线前请将CORS的允许源修改为你的Chrome扩展对应的
chrome-extension://<扩展ID>地址,避免接口被恶意调用
内容的提问来源于stack exchange,提问作者exec85
相关产品推荐
相关产品推荐

