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

如何在discord.js中实现统计用户发消息数的斜杠命令?

实现Discord斜杠命令统计用户消息数

首先,你需要给命令添加用户选项来指定统计目标(默认可为调用者自身),再通过遍历服务器文本频道统计目标用户的消息数量。以下是完整实现方案:

核心步骤

  • 给SlashCommandBuilder添加可选用户参数,支持指定统计对象
  • 在执行逻辑中获取目标用户,默认取命令调用者
  • 遍历服务器所有文本频道,获取消息并过滤计数
  • 处理权限不足等异常情况

完整代码

const { SlashCommandBuilder } = require("discord.js");

module.exports = {
    data: new SlashCommandBuilder()
        .setName("user")
        .setDescription("返回指定用户发送的消息数量")
        .addUserOption(option =>
            option.setName("target")
                .setDescription("要统计消息数的用户(默认是你自己)")
                .setRequired(false)),
    async execute(interaction) {
        // 获取目标用户,默认指向命令调用者
        const targetUser = interaction.options.getUser("target") || interaction.user;
        let messageCount = 0;

        // 筛选服务器内所有文本频道并遍历
        for (const channel of interaction.guild.channels.cache.filter(c => c.isTextBased())) {
            try {
                // 分批获取频道最近100条消息(避免API限制)
                const messages = await channel.messages.fetch({ limit: 100 });
                // 统计目标用户的消息数
                messageCount += messages.filter(msg => msg.author.id === targetUser.id).size;
            } catch (err) {
                console.log(`无法读取频道 ${channel.name} 的消息历史:${err.message}`);
            }
        }

        await interaction.reply(`${targetUser.tag} 累计发送了 ${messageCount} 条消息`);
    },
};

注意要点

  • 代码默认只统计每个频道最近100条消息,若需统计更早消息,需通过before参数循环分页获取
  • 确保机器人拥有ViewChannel和ReadMessageHistory频道权限
  • 大量获取消息可能触发Discord API速率限制,建议添加延迟或优化批量处理逻辑

内容的提问来源于stack exchange,提问作者Osemu Aimiosior

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:12:20