javascript - 有没有办法在 Discord.js 中使 channel 只显示表情?

标签 javascript node.js discord.js

我正在寻找一种方法来将一个文本 channel 限制为仅使用表情。因此,如果消息包含文本,它会立即被机器人删除。

代码逻辑示例:

if (message.isEmoteOnly()) {
  console.log('Emote-only message detected');
} else {
  message.delete();
  message.channel.send('Your message has been deleted! This channel is in emote-only mode.');
}

最佳答案

检查文本是否采用表情符号格式的一种简单、更优雅、更少利用的方法是使用 Regular Expression。 .

/:[^:\s]+:|<:[^:\s]+:[0-9]+>|<a:[^:\s]+:[0-9]+>/g

要查看实际效果并了解每个标记的作用,请查看 here .我强烈建议在阅读下面的解释之前这样做。

一开始看起来有点困惑,所以分解一下它为什么有效......

  • :[^:\s]+:
    “正常”表情符号的格式是 :name: 。周边:匹配冒号 while [^:\s]+匹配中间的字符。 : (这表示模板结束)和换行符(这算作中间的字符不会形成表情符号)被排除在外。

  • <:[^:\s]+:[0-9]+>
    自定义表情符号的格式为 <:name:id> 。周边<:>匹配模板的开头和结尾。 [^:\s]+匹配名称。名称和 ID 之间的冒号按字面匹配。 [0-9]+匹配里面的数字。 我没有使用 \d用于数字,因为可以匹配分类为此类的其他 Unicode 字符。

  • <a:[^:\s]+:[0-9]+>
    动画表情符号的格式是 <a:name:id> <>匹配模板的开头和结尾。 a:从字面上匹配自己。 [^:\s]+匹配名称。 :在名称和 ID 之间进行字面匹配。 [0-9]+匹配 ID。

现在,将它实现到您的代码中......

// Replace all emojis to leave just the text, if any.
const text = message.content.replace(/:[^:\s]+:|<:[^:\s]+:[0-9]+>|<a:[^:\s]+:[0-9]+>/g, '');

// Check if 'text' is not blank to see if there are characters which are not used in emojis.
if (text) {
  message.delete()
    .catch(console.error);
}

如果您只想在消息中使用一个 表情符号,您可以定义字符串的开头和结尾,并删除全局修饰符。

/^(:[^:\s]+:|<:[^:\s]+:[0-9]+>|<a:[^:\s]+:[0-9]+>)$/

这将确保这是消息中的唯一内容。

编辑:

要在表情符号之间留出空格,您只需在 text 中替换它们即可删除表情符号后。在下面的示例中,\s还包括换行符(如果这不是所需的结果,请将其替换为空格)。

const text = message.content.replace(/:[^:\s]+:|<:[^:\s]+:[0-9]+>|<a:[^:\s]+:[0-9]+>/g, '').replace(/\s+/g, '');

在下面进行测试。

const str = ':smile: <a:parrot:1234> <:parrot:1234>';

const text = str.replace(/:[^:\s]+:|<:[^:\s]+:[0-9]+>|<a:[^:\s]+:[0-9]+>/g, '').replace(/\s+/g, '');

if (text) console.log('Not allowed.');
else console.log('Allowed.');

关于javascript - 有没有办法在 Discord.js 中使 channel 只显示表情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56766490/

相关文章:

javascript - 访问div内没有id的iframe(div有id)

javascript - Phoenix 的 Socket.js 何时触发 onConnError 与 onError 回调?

javascript - 需要 discordjs 时出错 - 找不到模块 'node:events'

javascript - 你如何在 discord.js 中制作嵌入页面

javascript - 按钮仅在您开始输入时出现

javascript - 仅在 iframe 中导航

node.js - 无法读取 Layer.session 中未定义的属性 'connect.sid' - ExpressJS session

javascript - Linux NodeJS 全局 NPM 包 ":No such file or directory"

javascript - 从 HTML 获取付款金额以在 Node.js 文件中收费

node.js - 尝试安装 Windows 构建工具时出错