【问题标题】:Chat Messages Will Not Send With Filter聊天消息不会通过过滤器发送
【发布时间】:2022-01-21 17:04:22
【问题描述】:

我和我的朋友正在为我们学校的学生建造一个聊天室,供他们在空闲时间使用。我正在尝试添加一个过滤器,以便它保持 SFW。我对 JavaScript 非常陌生,所以当我添加过滤器时,您无法再在聊天中发送消息。但是,当我将过滤器脚本设置为注释并禁用它时,消息发送得很好。

过滤代码:

    var array = array.js
message.replace(array, "****");

消息代码:

        if (message && connected) {
  $inputMessage.val("");
  addChatMessage({
    username: username,
    message: message
  });

  socket.emit("new message", message);
}}

我的朋友负责消息传递代码,因为他在 JavaScript 方面的经验要丰富得多,但他很忙,现在无法添加它,所以我正在尝试。

【问题讨论】:

  • 能否提供minimal reproducible example,您的过滤代码看起来不完整
  • 当然,请给我一点时间来弄清楚@depperm
  • 你的代码字面意思是var array = array.js吗?如果是这样,您不能像那样将变量分配给脚本的内容。
  • @dave 嗯,我正在学习 js,我有点不知道如何将数组分配给变量所以这就是我想出的:/
  • 你可以内联脚本(所以你可以用var array = ['words', 'to', 'filter']代替var array = array.js),或者你可以在你的其他脚本之前包含array.js,内容类似于@987654328 @(假设这是在浏览器中运行),然后变量将在第二个脚本中可用。

标签: javascript filter chat


【解决方案1】:

假设您有一个要过滤的数组array,您可以将message 用空格分开,然后检查每个单词是否包含坏单词。

两种方法(仅供参考,两者都不是完美的。这两种解决方案都有很多边缘案例/漏洞:我推荐一个 js 包,它有更多的想法npm: bad-wordsnpm: censor-sensornpm: swearjar

两者都拆分消息message.split(' '),然后遍历每个单词以查看是否需要替换.map。第一个检查当前单词是否在array 中,第二个检查array 单词是否包含当前单词,如果是则替换为****

const array = ['badword', 'nsfw']

let message = 'my message is full of badwords which may be nsfw'

message = message.split(' ').map(word => array.includes(word.toLowerCase()) ? '*****' : word).join(' ')

console.log(message)

message = 'my message is full of badwords which may be nsfw'

message = message.split(' ').map(word => array.some(nsfword=>word.toLowerCase().includes(nsfword)) ? '*****' : word).join(' ')

console.log(message)

【讨论】:

  • 天哪,它成功了!太感谢了。现在我至少对 nsfw 的东西有了基本的防御
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多