替换 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:”

Discord.js 我发出警告命令,使用 FS 写入文件

Node.js + Discord.js:无法读取未定义的属性“类”

**已解决** discord.js guildMemberAdd() 未向对象添加正确的值