替换 Discord.JS 中的某些字符
Posted
技术标签:
【中文标题】替换 Discord.JS 中的某些字符【英文标题】:Replace certain character in Discord.JS 【发布时间】:2020-12-12 14:28:15 【问题描述】:现在,在你说之前已经发过这个之前,我有不同的情况。
说完这些,让我们继续这个问题。
我正在为一个朋友制作一个 Discord 机器人,该朋友为团队和类似的事情履行职责。
也请注意,我正在使用 Discord.JS 的 Sitepoint version,因为我是初学者。
我希望机器人在节目因某种原因被取消时向某个频道发送消息。例如,他们会发送如下内容:
afv!cancel Roblox went down.
或类似的东西。
但是每次发送消息,每个空格都会变成这样的逗号:
:x: The show has been cancelled because: "Roblox,went,down.". Sorry for that!
这是处理执行命令的 index.js 代码:
bot.on('message', msg =>
const args = msg.content.split(/ +/);
const command = args.shift().toLowerCase();
const prefix = command.startsWith("afv!");
if (prefix == true)
console.info(`Called command: $command`);
if (!bot.commands.has(command)) return;
msg.delete(1);
try
bot.commands.get(command).execute(msg, args, bot);
catch (error)
console.error(error);
msg.reply('there was an error trying to execute that command!');
;
还有cancelled.js
文件:
module.exports =
name: 'afv!cancel',
description: "in-case the show gets cancelled",
execute(msg, args, bot)
if (msg.member.roles.find(r => r.name === "Bot Perms"))
const reason = args.replace(/,/g, " ");
bot.channels.get('696135370987012240').send(':x: **The show has been cancelled** because: "' + args + '". *Sorry for that!*');
bot.user.setActivity("AFV! | afv!help", type: 'PLAYING' );
else
msg.reply('you are missing the role: Bot Perms!');
,
;
顺便说一句,在执行命令时,它会打印:
TypeError: args.replace is not a function
感谢阅读! :)
【问题讨论】:
似乎您需要使您的数据结构符合它想要的方式。你总是可以转换成十六进制 【参考方案1】:据我所知,这里
const reason = args.replace(/,/g, " ");
bot.channels.get('696135370987012240').send(':x: **The show has been cancelled** because: "' + args + '". *Sorry for that!*');
您正在提出const
原因,其中您尝试将其作为字符串处理并用空格替换所有逗号。不幸的是,即使它可以显示在一个字符串中并且看起来是一个,但实际上它是一个数组,所以replace()
无法处理它。为了能够使用replace()
,您需要先将数组转换为实际字符串:
const reason = args.join().replace(/,/g, " ");
完成此操作后,您将不会看到这个讨厌的“不是函数”错误,并且您可以轻松地使用 reason
来显示您的消息:
bot.channels.get('696135370987012240').send(':x: **The show has been cancelled** because: "' + reason + '". *Sorry for that!*');
【讨论】:
我实际上知道这一点,但是当我调用函数 replace() 时,它会显示args.replace is not a function
。很抱歉没有解决这个问题!
args
实际上是什么?它是一个字符串吗?大批?对象?
查看 index.js
啊,是的,当然。好的,这就是它的样子:args
是一个单词数组。作为一个数组,它没有replace()
方法。当您将它与字符串连接时,它显示为一个,但实际上不是。因此,要对其执行任何字符串操作,您需要先使用join()
方法 - 然后替换。总结一下 - 将这个const reason = args.replace(/,/g, " ");
更改为const reason = args.join().replace(/,/g, " ");
,然后在您的消息中使用reason
。我还在上面编辑了我的答案以使其更清楚:)
谢谢!我稍后会试试这个!以上是关于替换 Discord.JS 中的某些字符的主要内容,如果未能解决你的问题,请参考以下文章
Discord.js 将数组中的 ID 替换为与该 ID 匹配的用户的昵称?
我的 Heroku Discord 机器人离线 - discord.js
Discord.js 机器人的代码响应错误“TypeError:”