javascript - Discord.js 在嵌入链接中将 api 连接到不和谐机器人
问题描述
我一直在尝试编写一个机器人,该机器人将发布和嵌入链接,以根据用户输入的数字显示漫画、标签等的标题。我正在查看的 api 是This并且我想知道将它连接到我的不和谐机器人的最佳方式是什么?
client.on("message", (message) => {
if (!message.content.startsWith(prefix)) return;
if (message.content.startsWith(prefix)) {
let chosenNum = message.content.match(/\d+/)?.[0].slice(0);
if (chosenNum.length > 6) {
message.channel.send("**1-6 digits only**")
} else{
message.channel.send(`${chosenNum}`)
}
}
});
解决方案
您选择的包有一个非常简单的 API。您只需要nhentai.exists()
和nhentai.getDoujin()
方法。第一个您可以检查用户提交的 ID 是否存在,第二个您可以获取一个 JSON 对象,您可以使用它来填充您的嵌入。
看看下面的例子:
const { Client, MessageEmbed } = require('discord.js');
const nhentai = require('nhentai-js');
const client = new Client();
const prefix = '!';
client.on('message', async (message) => {
if (!message.content.startsWith(prefix)) return;
// create an args variable that slices off the prefix and splits it into an array
const args = message.content.slice(prefix.length).split(/ +/);
// create a command variable by taking the first element in the array
// and removing it from args
const command = args.shift().toLowerCase();
if (command === 'hen') {
const chosenNum = args[0]?.match(/\d+/)?.[0];
if (!chosenNum)
return message.channel.send('You need to provide a number');
if (chosenNum.length > 6)
return message.channel.send('**1-6 digits only**');
try {
if (!(await nhentai.exists(chosenNum)))
return message.channel.send(`No results found for "${chosenNum}".`);
// res is your JSON object, feel free to console.log its content
const res = await nhentai.getDoujin(chosenNum);
const embed = new MessageEmbed()
.setColor('#ed2553')
.setTitle(res.title)
.setImage(res.pages[0])
.setURL(res.link)
.addField('Pages', res.details.pages[0], true)
.addField('Uploaded', res.details.uploaded[0], true);
if (res.details.languages)
embed.addField('Languages', res.details.languages.join(', '), true);
if (res.details.characters)
embed.addField('Top characters', res.details.characters.slice(0, 3).join(', '), true);
if (res.details.tags)
embed.addField('Top tags', res.details.tags.slice(0, 3).join(', '), true);
return message.channel.send(embed);
} catch (err) {
console.log(err);
return message.channel.send('Oops, there was an error. Maybe try again?!');
}
}
});
推荐阅读
- angular - 在具有字符串值的提供者上使用 SpyOn
- reactjs - Redux 传奇没有在活动套接字上调度操作
- javascript - 根据字段内的返回结果更改字段的颜色
- javascript - 仅使用一个文本框获取四个值并将它们打印在不同的行上
- laravel - ErrorException 未定义变量 $data
- python - python plotly-dash Scatterpolar图中的单击事件
- python - 如何使用 OR-Tools 获得对偶问题,使用 solver.Add() 添加约束
- amazon-web-services - Elastic beanstalk 为单个实例动态创建和删除警报
- ruby-on-rails - 变形器方法在我的 Rails 项目中不起作用
- mysql - 将来自第三方 api 的传入数据插入到 aws mysql