hilight.js

2018年2月2日金曜日

discordのbotにカスタム絵文字を使わせる

前提

ここでのdiscord botは、javascriptでdiscord.jsを使用して作成。
javascriptもdiscord botもさわり初めて2〜3日なので、その程度の知識。

botでカスタム絵文字が使えない

discordのbotに絵文字を使わせる場合、標準の絵文字だと

:boom:

とか書くだけで


のように表示される。
しかし、これがカスタム絵文字になると :custom_test: と書いても

のようにそのまま表示されてしまった。

解決策

ここを参考に解決。英語が読める場合は、参照サイトの方が詳しく書いてます。

テキストチャットをする際は、カスタム絵文字も :custom_test: と書くと表示されていたけど、実はこれは省略された形らしく、botにカスタム絵文字を使わせる場合は本来の書き方をしないといけないらしい。

本来の形は以下の通り

<:custom_test:012345678910111213>

数字部分はカスタム絵文字に割り振られたID(値は適当)。
これをこのまま書いても表示されるようになるが、このIDがdiscord内のどこに表記されているかわからなかったので、"<:custom_test:012345678910111213>"という文字列を取得するようにした。

以下、botにメンションを送ったら、botがカスタム絵文字を表示するコード。

"use strict"
 
const Discord = require("discord.js");
const client = new Discord.Client();
const token = "xxxxxxxxxx"; // botのトークンに置き換える
 
client.on("ready", () => {
    console.log("im ready test bot");
});
 
 
client.on("message", (message) =>
{
    if ( message.isMentioned(client.user) )
    {
        // emojisコレクションから"custom_test"という名前のカスタム絵文字を検索
        // "name"は名前を検索するってことか?
        const emoji = client.emojis.find( "name", "custom_test" );
 
        // emojiオブジェクトのtoString()メソッドで"<:custom_test:012345678910111213>"が取得できる
        message.channel.send( emoji.toString() );
    }
 
});
 
client.login(token);

結果

絵文字が見つからなかった場合、emojiにはnullが入ってるので、実際に使う場合はちゃんとnullチェックしないといけない。


余談

参考にしたサイト だと

  const emoji = client.emojis.find( "name", "custom_test" );
  message.channel.send( '${emoji}' );

でいけるみたいに書いてたが、うちの環境ではそのまま ${emoji} と表示されてしまい、解決できなかったのでtoString()を使った。

5 件のコメント:

  1. 一年以上前の投稿にコメントをして申し訳ないですが、「余談」の部分で「${emoji}」と表示されたのはシングルクォーテーションで囲っていたからだと思います。
    ` ←で囲めば参考にしたサイトと同じような結果になるかと思われます。

    返信削除
  2. このコメントは投稿者によって削除されました。

    返信削除
  3. ディスコに絵文字を発言する直前の編集画面で、絵文字の前にバックスラッシュを入れるとIDが取得できますよ。

    返信削除