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

如何开发自动处理Webhook数字的Discord排序机器人?

Discord机器人自动处理Webhook数字并排序发送方案

原代码的核心问题

  • 你当前监听的是普通用户消息的message事件,但要处理Webhook发送的内容,得先识别Webhook来源的消息
  • 代码需要手动输入sort命令触发,不符合你要的自动化需求
  • 缺少数字有效性校验,容易因为非数字内容导致排序出错
  • 依赖@频道指定目标,自动化场景应该固定目标频道ID

修正后的实现方案

以下代码基于Discord.js v12(和你现有代码兼容),如果使用v14+版本,后续会补充适配说明。

步骤1:配置基础参数

提前配置目标频道ID、可选的特定Webhook ID,方便后续维护。

步骤2:监听消息并识别Webhook

通过msg.webhookID判断是否为Webhook发送的消息,提取其中的数字。

步骤3:数字提取与排序

用正则提取所有数字,转成数值类型后排序,避免字符串排序的逻辑错误。

步骤4:自动发送到指定频道

直接向预设的目标频道发送排序结果。

修正后的完整代码:

const Discord = require('discord.js');
const client = new Discord.Client();
const token = '<你的机器人令牌>';
// 替换成你的目标频道ID
const TARGET_CHANNEL_ID = '123456789012345678';
// 可选:如果只处理特定Webhook的消息,填入对应Webhook ID
const TARGET_WEBHOOK_ID = '可选的Webhook ID';

client.on('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`);
    // 提前获取目标频道,避免每次消息都重复查找
    client.targetChannel = client.channels.cache.get(TARGET_CHANNEL_ID);
    if (!client.targetChannel) {
        console.error('目标频道不存在,请检查频道ID是否正确');
    }
});

client.on('message', msg => {
    // 跳过非Webhook消息,或只处理指定Webhook的消息
    if (!msg.webhookID || (TARGET_WEBHOOK_ID && msg.webhookID !== TARGET_WEBHOOK_ID)) {
        return;
    }

    // 提取消息中所有数字(支持正负整数、小数)
    const numberMatches = msg.content.match(/[-+]?\d*\.?\d+/g);
    if (!numberMatches || numberMatches.length === 0) {
        console.log('未从Webhook消息中提取到数字');
        return;
    }

    // 转成数值类型并排序
    const numbers = numberMatches.map(num => parseFloat(num));
    const sortedNumbers = numbers.sort((a, b) => a - b);

    // 发送到目标频道
    if (client.targetChannel) {
        const output = sortedNumbers.join('\n');
        client.targetChannel.send(`Webhook发送的数字已排序:\n${output}`);
    }
});

client.login(token);

关键细节说明

  • Webhook识别:msg.webhookID存在则说明是Webhook发送的消息,若只需处理特定Webhook,保留TARGET_WEBHOOK_ID的判断即可
  • 数字提取:正则/[-+]?\d*\.?\d+/g可覆盖正负整数、小数的提取需求
  • 排序逻辑:先转成数值类型再排序,避免出现10 < 2的字符串排序错误
  • 频道缓存:在ready事件中提前获取目标频道,既提升效率也能提前检查频道是否存在

适配Discord.js v14+的说明

如果使用v14+版本,语法有以下变化:

  1. 客户端初始化需要传入权限意图
  2. 事件名改为messageCreate
  3. webhookID改为驼峰命名webhookId

适配后的初始化代码:

const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
    intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMessages,
        GatewayIntentBits.MessageContent
    ]
});

内容的提问来源于stack exchange,提问作者meow meow meoow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:27:22