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

如何在DiscordJS机器人中实现随机事实指令?

解决Discord机器人;fact指令随机事实Embed回复及API替代方案

替代无密钥API推荐

以下是无需API密钥、可直接调用的随机事实API:

  • 通用随机事实API:返回各类冷知识,响应格式为{"fact": "具体事实内容"},无调用限制
  • 无用冷知识API:专注于趣味无用事实,支持纯文本或JSON格式返回
  • 猫主题事实API:如果允许特定领域内容,返回关于猫的随机趣味事实,适合轻松场景

api ninjas调用失败排查

你尝试api ninjas未成功,大概率是以下原因:

  1. 未在请求头中添加X-Api-Key字段,免费版需先在平台获取密钥后配置
  2. 请求端点错误,正确路径为https://api.api-ninjas.com/v1/facts,需附带limit=1参数获取单条事实
  3. 免费版配额耗尽,api ninjas免费版每月限制请求次数,可登录后台查看剩余额度

Discord机器人代码实现(Discord.js v14)

依赖安装

npm install discord.js node-fetch

核心代码

const { Client, EmbedBuilder, GatewayIntentBits } = require('discord.js');
const fetch = require('node-fetch');

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

// 替换为你选择的API地址
const FACT_API = 'https://api.example-facts.com/random';

client.on('messageCreate', async (message) => {
  if (message.content !== ';fact') return;

  try {
    const res = await fetch(FACT_API);
    const data = await res.json();
    const fact = data.fact || '无法获取事实内容,请稍后重试';

    const factEmbed = new EmbedBuilder()
      .setColor('#2ecc71')
      .setTitle('随机冷知识')
      .setDescription(fact)
      .setFooter({ text: '来源:随机事实API' });

    await message.channel.send({ embeds: [factEmbed] });
  } catch (err) {
    console.error('API请求失败:', err);
    await message.channel.send('获取随机事实时出错,请检查API配置');
  }
});

client.login('你的机器人令牌');

注意事项

  • 必须在Discord开发者后台开启Message Content Intent权限,否则机器人无法读取消息内容
  • 不同API的返回结构可能不同,需根据实际响应调整data.fact的取值逻辑
  • 部分免费API有请求频率限制,避免短时间内重复调用导致被限流

内容的提问来源于stack exchange,提问作者7x-Ash5

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:05:21