如何使用discord.js实现用户在top.gg投票后机器人发送私信?
实现top.gg投票后自动私信用户的完整方案(discord.js v12)
首先修正你初始代码的语法问题:const Discord = require(discord.js); 缺少字符串引号,要改为const Discord = require('discord.js');
前置准备
你需要提前安装所有需要的依赖包,执行命令:npm install discord.js@12 @top-gg/sdk express
同时提前准备好三个参数:
- 你的Discord机器人登录令牌
- top.gg机器人管理页生成的API令牌
- 自定义的top.gg Webhook验证密钥(和top.gg后台填的保持一致即可)
完整实现代码
const Discord = require('discord.js'); const client = new Discord.Client(); const Topgg = require("@top-gg/sdk"); const express = require('express'); const app = express(); // 替换为你自己的实际参数 const TOPGG_API_TOKEN = '你的top.gg API令牌'; const TOPGG_WEBHOOK_SECRET = '你自定义的webhook验证密钥'; const BOT_TOKEN = '你的Discord机器人登录令牌'; const LISTEN_PORT = 3000; // 监听端口可自行修改 // 初始化top.gg webhook监听器 const voteWebhook = new Topgg.Webhook(TOPGG_WEBHOOK_SECRET); // 处理top.gg推送的投票事件 app.post('/topgg-vote', voteWebhook.listener(async (voteData) => { try { // 拉取投票用户的Discord用户对象 const voter = await client.users.fetch(voteData.user); if (!voter) return; // 发送感谢私信,内容可自行修改 await voter.send(`感谢你为机器人投票!你可以每天投票一次,投票后可解锁专属使用权益哦😊`); console.log(`已向投票用户 ${voter.tag} 发送感谢私信`); } catch (error) { console.log(`向用户${voteData.user}发送私信失败:${error.message}`); } })); // 启动webhook监听服务 app.listen(LISTEN_PORT, () => { console.log(`Top.gg投票监听服务已启动,端口:${LISTEN_PORT}`); }); // 机器人上线事件 client.on('ready', () => { console.log(`机器人已登录:${client.user.tag}`); // 可选:每30分钟向top.gg同步一次机器人的服务器数量 const topggApi = new Topgg.Api(TOPGG_API_TOKEN); setInterval(() => { topggApi.postStats({ serverCount: client.guilds.cache.size }); }, 1800000); }); // 登录机器人 client.login(BOT_TOKEN);
后续配置说明
- 你需要到top.gg机器人管理后台的Webhook配置页,填写你的服务公网地址:
http://你的公网IP:端口/topgg-vote,同时填入和代码一致的Webhook密钥 - 若用户关闭了服务器私信权限、或者拉黑了机器人,会触发发送失败的捕获逻辑,不会导致机器人崩溃
- 运行环境的Node.js版本需要高于12.0.0,否则会出现兼容性问题
内容的提问来源于stack exchange,提问作者Maulana Ali
相关产品推荐
相关产品推荐

