Discord.js 如何实现reportissue命令将用户上报问题发送至管理员或指定频道
上报功能实现方案
这个功能可以直接实现,核心逻辑是捕获用户输入的上报内容,自动推送到预设的接收渠道,以下是完整修改后的代码及说明:
原代码问题修正
原有配置中要求触发指令的用户拥有ADMINISTRATOR(管理员)权限,会导致普通用户无法使用上报功能,需要先移除该权限限制。
完整可运行代码
module.exports = { name: "reportissue", description: "上报你遇到的机器人使用问题", permissions: { channel: ["VIEW_CHANNEL", "SEND_MESSAGES", "EMBED_LINKS"], // 移除member权限限制,允许所有用户触发上报 member: [], }, aliases: ["report", "issue"], run: async (client, message, args, { GuildDB }) => { // 1. 校验用户是否输入了上报内容 const reportContent = args.join(' ').trim(); if (!reportContent) { return message.reply('请输入你要上报的问题内容,格式为 `#report 具体问题`'); } // 2. 配置接收上报的渠道,二选一即可 // 方案A:推送到指定服务器频道,把下面的ID替换为你自己的接收频道ID const receiveChannel = await client.channels.fetch('你的接收上报频道ID'); // 方案B:直接推送给管理员私信,把下面的ID替换为管理员的用户ID // const receiveChannel = await client.users.fetch('你的管理员用户ID'); // 3. 构造上报消息(嵌入消息格式更清晰) const reportEmbed = { color: 0xff0000, title: '新的用户问题上报', fields: [ { name: '上报用户', value: `${message.author.tag} (ID: ${message.author.id})`, inline: true }, { name: '所属服务器', value: `${message.guild.name} (ID: ${message.guild.id})`, inline: true }, { name: '上报时间', value: new Date().toLocaleString('zh-CN'), inline: false }, { name: '问题内容', value: reportContent, inline: false } ] }; // 4. 发送上报内容 await receiveChannel.send({ embeds: [reportEmbed] }); // 5. 给用户反馈上报结果 await message.reply('你的问题已经成功上报给管理员,我们会尽快处理~'); } }
注意事项
- 替换代码中的ID前,需要先开启Discord的开发者模式才能复制频道/用户ID
- 如果需要匿名上报,删除上报消息里的
上报用户字段即可 - 要确保机器人拥有接收频道的「发送消息」「发送嵌入消息」权限,或可以向管理员发送私信的权限
内容的提问来源于stack exchange,提问作者foreverlost
相关产品推荐
相关产品推荐

