当前位置: 首页 > 知识库问答 >
问题:

替换不和谐中的某些字符。JS

苗承
2023-03-14

现在,在你说之前,我有一个不同的情况。

说完了,让我们继续这个问题。

我正在为一个朋友制作一个不和谐机器人,为这个团体做一些事情。

还有,我正在使用Discord的Sitepoint版本。因为我是初学者。

我希望机器人在节目因某种原因取消时向某个频道发送消息。例如,他们会发送如下内容:

afv!取消罗布罗克斯倒下了

或者类似的东西。

但是每次它发送信息时,每个空格都变成这样的逗号:

:x:节目被取消了,因为:“罗布罗克斯,走了,倒下了。”。对不起

这是索引。处理执行命令的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!');
    };

取消了。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。替换不是一项功能

谢谢阅读!:)


共有1个答案

安泰平
2023-03-14

从这里我可以看到

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, " ");

这样,你就不会看到这个讨厌的“不是函数”错误,你可以很容易地使用原因来显示你的消息:

bot.channels.get('696135370987012240').send(':x: **The show has been cancelled** because: "' + reason + '". *Sorry for that!*');
 类似资料:
  • 问题内容: 如何用另一部分替换字符串的特定部分? 输入字符串: 如何用其他方式更改字符串中的全部? 我认为我需要一个循环,但是我不确定如何使用它。 问题答案: 或者更精确地回答您的问题:

  • 我正在寻找创建正则表达式的帮助,以便我可以用锚标签替换文本。文本来自SQL字段(VarChar(max)),格式如下: 在上面的文本中,我需要将1994年以后的所有章节替换为锚标签。例如,98、553、568和300都将被替换。下面的代码查找1994年的整个文本,例如c.98,但是我不确定如何替换该文本中的“98”。

  • 问题内容: 给定以下字符串 这是所需的输出:( 每个长号,无论长度如何,都应替换为姓氏) 这里的问题是,可能有很多可变长度(最大长度可以<20)… 我尝试了 多种 方法,并采用了以下方法。 有没有办法有效地做到这一点..任何建议将是最欢迎的 问题答案: 首先删除多个下划线,然后进行替换。 这是一种方法:

  • 问题内容: 在表的一个特定字段中将进行文本搜索和替换的是哪种MySQL查询? 即搜索并替换为具有值的字段的记录变为。 问题答案: 更改并匹配您的表名和相关字段: 替换(字符串函数) INSTR(字符串函数)

  • 问题内容: 我有一个以字符串形式传递的句子,我正在对单词“ and”进行替换,我想用“”替换它。而且它不是用空格替换“和”一词。以下是我的逻辑示例。而当我调试此逻辑时,逻辑确实落入了句子。 这里有我想念的东西吗? 问题答案: 而当我调试此逻辑时,逻辑确实落入了句子。 是的,然后你放弃返回值。 Java中的字符串是不可变的-当你调用时,它不会更改现有字符串的内容-它会返回经过修改的新字符串。所以你要