はじめに
備忘録も兼ねて、discord.jsにてメッセージからUnicode絵文字を判別し、取得する方法を紹介します。
DiscordにおいてUnicode絵文字とは、各サーバーで登録されるカスタム絵文字以外の、初めから全てのユーザーができる絵文字のことです。
Discordでは絵文字にTwemojiを使用しており、それゆえにTwemojiと互換性があります。
そのため今回はTwemojiの絵文字判定処理に使用されているtwemoji-parserを用いたUnicode絵文字判定処理の方法を紹介します。
twemoji-parserはtwemoji同様、Twitter社によって管理されているライブラリなので、安心感があります。
事前準備
適当にプロジェクトを用意していただき、twemoji-parserをインストールしておきます。
npm install twemoji-parser
本題
今回はサンプルとして、message
イベントで受け取ったメッセージ内に含まれるUnicode絵文字を、リアクションとして返すだけのコードを紹介します。
コードとしてはシンプルなため、解説は省かせて頂きます。
const { Client } = require('discord.js');
// twemoji-parserから判定用の正規表現を取得(gオプション付き)
const twemojiRegex = require('twemoji-parser/dist/lib/regex').default;
const client = new Client();
client.on('message', message => {
// メッセージから正規表現でUnicode絵文字を取得
const mathEmojis = message.content.match(twemojiRegex);
for (const emoji of mathEmojis) {
// 取得したUnicode絵文字をリアクションで返す
message.react(emoji)
.catch(console.error);
}
});
client.login('Your bot token')
.catch(console.error);
注意点
twemoji-parserの正規表現にはgオプションが付いています。
ですから、使用目的によってはそのまま利用できないため、自前で正規表現を再生成する必要があります。
例えば、単にgオプションを外したい場合、このようにします。
const twemojiRegex = require('twemoji-parser/dist/lib/regex').default;
const onceRegex = new RegExp(twemojiRegex, '');
あとがき
メッセージ内のUnicode絵文字を判別し取得する処理は、自前で書こうと思うとなかなかの至難の技です。
twemoij-parserを使用すればUnicode絵文字の複雑な組み合わせも、しっかり1文字と判定されるため、複雑なことを考えずに済みます。
また、これを応用すればスプレッド構文でも実現できなかった、実態に即したUnicodeのパースも行えそうです。