javascript - 如何让机器人在多个嵌入中发送 2000 多个字符
问题描述
我正在尝试制作一个歌词命令,让机器人查找给定歌曲的标题并提供歌词。但有些歌曲有超过 2000 个字符(如说唱神)。因此,如果歌词的长度超过 2000 个字符(如 Rythm bot),我想将我的歌词分成两部分并发送两个嵌入,我不知道该怎么做。给予的任何帮助将不胜感激。(discord.js 版本 12.3.1)。我的代码:
const { MessageEmbed} = require('discord.js')
const lyricsFinder = require('lyrics-finder')
module.exports = {
name: "lyrics",
category: "info",
description: "Provides you the lyrics of the song",
usage: `lyrics <song name>`,
aliases: ['l'],
run: async (client, message, args) => {
if (!args[0]) {
let embed = new MessageEmbed()
.setColor('RED')
.setTitle(':x: Song title not provided!')
return message.channel.send(embed)
}
let lyrics = await lyricsFinder(args.join(' ')) || "Not Found!";
let embed = new MessageEmbed()
.setColor('RANDOM')
.setDescription(lyrics)
message.channel.send(embed);
}
}
但由于有些歌曲有超过 2000 个字符,它给了我这个错误:
DiscordAPIError: Invalid Form Body
content: Must be 2000 or fewer in length.
at RequestHandler.execute (E:\my bots\HimalBeta\node_modules\discord.js\src\rest\RequestHandler.js:154:13)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at async RequestHandler.push (E:\my bots\HimalBeta\node_modules\discord.js\src\rest\RequestHandler.js:39:14) {
method: 'post',
path: '/channels/763632986158923789/messages',
code: 50035,
httpStatus: 400
}
解决方案
你可以使用类似的东西
var str = 'abcdefghijkl';
console.log(str.match(/.{1,3}/g));
拆分文本。将 3 更改为 2000 并设置str
为您的长字符串。然后只需遍历它们并将它们全部发送。(str.match(/.{1,3}/g)
将返回一个字符串数组)
推荐阅读
- java - AssertJ:递归否定 isEqualToComparingFieldByField
- mysql - 根据最早日期更新所有记录
- c# - 以编程方式创建没有源或目标的数据流任务
- javascript - WMS 图层未在所有缩放级别上正确渲染
- ruby-on-rails - root_url 返回空字符串
- laravel - Laravel 关系有很多不起作用
- amazon-web-services - 在ec2(中国的ec2)部署美国AWS beanstalk环境后,在aws china beanstalk环境下无法获取平台信息
- ios - LoginViewController 编写雪松规范
- python - 暂停python脚本等待按键
- python - Python Notebook 从本地调用 Endpoint Sagemaker