basicplugins_ja - noonworks/Nursery GitHub Wiki

標準プラグイン

標準プラグインは、Nurseryの基本的な機能を提供するプラグインです。BasicPlugins.dllにまとめられています。

以下の解説はアルファベット順です。(プラグインの実行される順序ではありません。)また、@nursery-botの部分は各自のBot名に読み替えてください。

AddNameFilterプラグイン

メッセージを読み上げる際に、メッセージの前に発言者の名前を追加するフィルタ・プラグインです。

  • 発言者がニックネームを設定していた場合はニックネームが使われます。ニックネーム設定がなかった場合はユーザー名が使われます。
  • このプラグインを無効化すると、メッセージだけが読み上げられます。
  • 後述するignore_prefixを使うことで、個別のメッセージにおいて名前を読み上げられないようにすることができます。

設定ファイル

Nursery.BasicPlugins.AddNameFilter.jsonに設定を記述します。

{
  "ignore_prefix": "--"
}
  • ignore_prefix : 名前を無視するためのプレフィックス。標準は--です。

Discordに投稿する際に、メッセージの先頭にignore_prefixで指定した文字列をつけると、名前が読み上げられません。以下の例では「こんにちは。」だけが読み上げられ、発言者の名前は読み上げられません。

--こんにちは。

AddTextChannelCommandプラグイン

@nursery-bot addchannel

Nurseryの読み上げ対象テキストチャンネルに、コマンドを送信したチャンネルを加えるコマンド・プラグインです。

AnnouncementFilterプラグイン

Botにアナウンスをさせるためのフィルタ・プラグインです。

  • 通常、NurseryのBotは自分自身の発言を音読しません。
  • しかし、メッセージに目印となるキーワードを追加することで、Botが自分自身の発言を読み上げるように設定できます。
  • 目印には【アナウンス】と【読み上げ】の2種類が存在します。

【アナウンス】

  • 【アナウンス】を含む発言は、その発言はNurseryのBot自身の発言であっても読み上げられます。
  • 【アナウンス】の部分も読み上げられます。以下の例では「アナウンス 山田さんが入室しました」と読み上げられます。
    【アナウンス】 山田さんが入室しました。
    

【読み上げ】

  • 【読み上げ】を含む発言は、その発言はNurseryのBot自身の発言であっても読み上げられます。
  • 【読み上げ】の部分は読み上げられません。以下の例では「山田さんが入室しました」と読み上げられます。
    【読み上げ】 山田さんが入室しました。
    

目印の変更

  • 【アナウンス】および【読み上げ】の目印は、翻訳ファイルで変更可能です。
  • 翻訳ファイルで変更される可能性を考慮して、プラグインやユーザー定義関数では【アナウンス】【読み上げ】の文字列をそのまま使用することは避けてください。使用方法はそれぞれのドキュメントを確認してください。

AttachmentFilterプラグイン

添付ファイルがある場合に、メッセージの後ろに「〇個の添付ファイル」を追加するフィルタ・プラグインです。

BlankFilterプラグイン

空白のメッセージを無視するフィルタ・プラグインです。

  • メッセージが改行やスペースだけの場合や、他のプラグインの処理結果によって読み上げる文字がなくなったりした場合に使われます。

ChannelFilterプラグイン

読み上げ対象ではないチャンネルのメッセージを無視するフィルタ・プラグインです。

DiscordEmojiFilterプラグイン

Discord絵文字を読み上げ用に変換するフィルタ・プラグインです。

  • Discord絵文字は<:emoji_name:0000000000>のような形式のテキストで表され、そのまま読み上げると絵文字IDの数字が読み上げられてしいます。それをemoji_nameに変換するためのフィルタです。

DiscordEmojiIdCommandプラグイン

@nursery-bot emojiid :id_wo_shiritai_discord_no_emoji:

Discord絵文字のIDを表示するコマンド・プラグインです。Discord絵文字のIDを知りたいとき(音声のパターンに使いたいときなど)に使用します。

DiscordRoleIdCommandプラグイン

@nursery-bot roleid

Discord上で自分の所属している役割(Roles)のIDを表示するコマンド・プラグインです。役割のIDを知りたいとき(フィルタに設定したいときなど)に使用します。

HelpCommandプラグイン

@nursery-bot help
@nursery-bot help-command
@nursery-bot help-filter

ヘルプを表示するコマンド・プラグインです。help-commandでコマンド・プラグインのヘルプ一覧を、help-filterでフィルタ・プラグインのヘルプ一覧を表示します。

IgnoreSelfFilterプラグイン

Bot自身のメッセージを無視するフィルタ・プラグインです。

JoinCommandプラグイン

@nursery-bot come
@nursery-bot connect
@nursery-bot here
@nursery-bot join

NurseryのBotをボイスチャンネルに入室させるコマンド・プラグインです。

  • Botは「コマンドを送信した人が現在接続しているボイスチャンネル」に入室します。
  • 同時に「コマンドが送信されたテキストチャンネル」を読み上げ対象テキストチャンネルに追加します。

JoinedFilterプラグイン

NurseryのBotがどのボイスチャンネルにも入室していないときに、メッセージを無視するフィルタ・プラグインです。

LeaveCommandプラグイン

@nursery-bot bye
@nursery-bot disconnect
@nursery-bot kick
@nursery-bot leave

NurseryのBotをボイスチャンネルから退室させるコマンド・プラグインです。同時に読み上げ対象テキストチャンネルもリセットされます。

ListFilterプラグイン(上級者向け)

設定ファイルに記述した規則に応じて、メッセージを無視するフィルタ・プラグインです。

標準では、(Nursery以外も含んだ)Botの発言、Bot宛てのメンションを無視する設定がされています。

設定ファイル

Nursery.BasicPlugins.ListFilter.jsonに設定を記述します。

{
  "filters": [
    {
      "name": "bot_filter",
      "type": "blacklist",
      "terminate": "true",
      "values": [
        "bot",
        "Mbot"
      ]
    }
  ]
}
  • filters : 「リストフィルタ設定」を配列で記述します。

filtersに指定された「リストフィルタ設定」は、上から順番に「条件に一致するか」が判断されます。リストフィルタのタイプや条件に応じて、メッセージが 読み上げ対象 になるか 読み上げ対象外 になるかを決定します。

リストフィルタ設定

    {
      "name": "bot_filter",
      "type": "blacklist",
      "terminate": "true",
      "values": [
        "bot",
        "Mbot"
      ]
    }
  • name : リストフィルタの名前を文字列で指定します。他のフィルタと重複しない、任意の名前。
  • type : "blacklist" もしくは "whitelist" を指定します。(詳細は後述)
  • terminate : "true" もしくは "false" を指定します。(詳細は後述)
  • values : リストフィルタ用の文字列を指定します。(詳細は後述)

type

  • blacklistはブラックリストです。リストフィルタ設定に一致したメッセージを 読み上げ対象外 とします。
  • whitelistはホワイトリストです。リストフィルタ設定に一致したメッセージを 読み上げ対象 とします。

terminate

  • terminatetrue のリストフィルタは、メッセージが自分の条件に一致した場合、次以降のリストフィルタでの判断を行わず、自分の判断までで読み上げ対象かどうかを決定します。
  • terminatefalse のリストフィルタは、メッセージが自分の条件に一致した場合でも、次以降のリストフィルタでの判断を行います。自分の判断が次以降のリストフィルタによって覆される可能性があります。

values

valuesには、ユーザーIDや役割ID、チャンネルIDを使って条件が設定できます。

  • U123456789 : IDが123456789のユーザーが送信したメッセージに一致します。
  • R123456789 : IDが123456789の役割に属するユーザーが送信したメッセージに一致します。
  • bot : Bot(Nursery以外も含む。Discord上で「BOT」アイコンがついたアカウント)が送信したメッセージに一致します。
  • Mu123456789 : IDが123456789のユーザー宛のメンションに一致します。
  • Mr123456789 : IDが123456789の役割に属するユーザー宛のメンションに一致します。
  • Mbot : Bot宛のメンションに一致します。
  • U123456789C9876543210 : IDが123456789のユーザーが、IDが9876543210のチャンネルに送信したメッセージに一致します。
  • R123456789C9876543210 : IDが123456789の役割に属するユーザーが、IDが9876543210のチャンネルに送信したメッセージに一致します。
  • botC9876543210 : Botが、IDが9876543210のチャンネルに送信したメッセージに一致します。

設定例:一部のBotのみ、読み上げ対象にする

{
  "filters": [
    {
      "name": "bot_filter",
      "type": "blacklist",
      "terminate": "false",
      "values": [
        "bot",
        "Mbot"
      ]
    },
    {
      "name": "allow_my_bot",
      "type": "whitelist",
      "terminate": "false",
      "values": [
        "U345678901234567891",
        "U123456789123456789",
        "U234567892345678911"
      ]
    }
  ]
}

上記の設定は以下のように処理されます。

  1. ユーザーIDが 123456789123456789 のBotが、Discordにメッセージを投稿する。
  2. ListFilterプラグインの処理が始まる。
  3. 1つ目のbot_filterリストフィルタで、botがブラックリストに入っているため、このメッセージは「読み上げ対象外」としてマークされる。
  4. 1つ目のbot_filterリストフィルタはterminatefalseなので、次のallow_my_botリストフィルタに処理が移る。
  5. 2つ目のallow_my_botリストフィルタで、U123456789123456789がホワイトリストに入っているため、このメッセージは「読み上げ対象」としてマークされる。
  6. リストフィルタが終了するので、このメッセージは最終的に「読み上げ対象」として処理される。

より高度なフィルタ

より複雑な条件を使用したい場合はUserDefinedFilterプラグインの使用を検討してください。

LongMessageFilterプラグイン

長いメッセージを省略したり、スピードを速めて読み上げるフィルタ・プラグインです。

設定ファイル

Nursery.BasicPlugins.LongMessageFilter.jsonに設定を記述します。

{
  "speedup_length": 100,
  "speed": 150,
  "omit_length": 100
}
  • speedup_length : 文字列の長さ。ここに指定した長さ以上のメッセージは、読み上げスピードが変更されます。標準は100です。
  • speed : 読み上げの速さ。文字数がspeedup_lengthを超えたときに使われる速度を指定します。標準は150(1.5倍速)です。
  • omit_length : 文字列の長さ。ここに指定した長さ以上のメッセージは、省略され「(以下略)」とされます。標準は100です。

MentionFilterプラグイン

メンション(@username の部分)を読み上げ用に変換するフィルタ・プラグインです。

  • メンションは<@!0000000000>のような形式のテキストで表され、そのまま読み上げるとユーザーIDの数字が読み上げられてしいます。それをユーザー名に変換するためのフィルタです。
  • ユーザーがニックネームを設定していた場合はニックネームが使われます。ニックネーム設定がなかった場合はユーザー名が使われます。

RemoveTextChannelCommandプラグイン

@nursery-bot removechannel

Nurseryの読み上げ対象テキストチャンネルから、コマンドを送信したチャンネルを除外するコマンド・プラグインです。

UnknownMentionFilterプラグイン

NurseryのBot宛のメンション(@nursery-bot のついたメッセージ)のうち、コマンドとして理解できなかったものにエラーメッセージを返すフィルタ・プラグインです。

UrlFilterプラグイン

URLを読み上げ用に短く変換するフィルタ・プラグインです。

WelcomeSchedulerプラグイン

ボイスチャンネルへのユーザーの入室・退室を感知し、メッセージを表示するスケジューラ・プラグインです。

設定ファイル

Nursery.BasicPlugins.WelcomeScheduler.jsonに設定を記述します。

{
  "use_welcome": true,
  "default_welcome": "",
  "use_bye": true,
  "default_bye": "",
  "debounce_tick": 15,
  "send_to_type": "default",
  "send_to": [],
  "summarize": true,
  "default_name_welcome": "",
  "default_name_bye": "",
  "separators": [],
  "id_text_pairs": []
}
  • use_welcome : 入室時にメッセージを送信するかをtruefalseで指定します。デフォルトはtrueです。
  • default_welcome : 入室時メッセージを指定します。デフォルトは空です。
    • 空の場合、システムのデフォルトメッセージ(${announce} ${nickname}が参加しました。)が使用されます。
    • メッセージの特殊書式については特殊書式を参照してください。
  • use_bye : 退室時にメッセージを送信するかをtruefalseで指定します。デフォルトはtrueです。
  • default_bye : 退室時メッセージを指定します。デフォルトは空です。
    • 空の場合、システムのデフォルトメッセージ(${announce} ${nickname}が退室しました。)が使用されます。
    • メッセージの特殊書式については特殊書式を参照してください。
  • debounce_tick : 最後に入退室があってから何Tick後にメッセージを送信するか指定します。デフォルトは15です。
    • TickとはNurseryのタイマーの起動間隔で、約100ミリ秒です。デフォルトの15Tickは約1.5秒です。
    • プラグインは、入退室があった際にすぐさまメッセージを送信せず、ここに指定されたTickの間、待機します。
      • 待機中に新たな入退室があった場合、そこからさらに指定されたTickだけ待機します。
      • 待機中に新たな入退室がなかった場合、待機開始時から現在までの入退室をまとめてメッセージ送信します。
    • これにより、短時間に大勢が入退室した場合に大量のメッセージが流れることを防止します。
  • send_to_type : メッセージ送信先のテキストチャンネルを指定します。ただし、複数のテキストチャンネルにメッセージを送信するよう指定した場合でも、読み上げが行われるのは1つだけです。使用できる値は以下の通りです。
    • "default" : 既定のテキストチャンネル(デフォルト)
    • "all" : AddTextChannelCommandプラグインで追加されたテキストチャンネルも含むすべてのテキストチャンネル
    • "channels" : send_toで指定されたテキストチャンネル
  • send_to : メッセージ送信先のテキストチャンネルのIDを、文字列の配列で指定します。send_to_typechannelsを指定した場合にのみ使用されます。デフォルトは空です。
  • summarize : 2人以上が同時に入室もしくは退室した際に、メッセージをまとめるかどうかをtruefalseで指定します。デフォルトはtrueです。
  • default_name_welcome : summarizeでまとめを行う際に、入室時メッセージの中の1人分の名前として使用する文字列を指定します。デフォルトは空です。
    • 空の場合、システムのデフォルトメッセージ(${nickname}さん)が使用されます。
    • メッセージの特殊書式については特殊書式を参照してください。
  • default_name_bye : summarizeでまとめを行う際に、退室時メッセージの中の1人分の名前として使用する文字列を指定します。デフォルトは空です。
    • 空の場合、システムのデフォルトメッセージ(${nickname}さん)が使用されます。
    • メッセージの特殊書式については特殊書式を参照してください。
  • separators : summarizeでまとめを行う際に、複数人の名前を並べる際に使用する文字列を配列で指定します。
    • デフォルトは["、"]です。この場合、山田さん、田中さん、鈴木さんが入室しました。のようになります。
    • 2つ以上の文字列を指定した場合、後ろから順に使われます。足りない分は1つ目の文字列が使われます。
      • ["、", "、そして"]の場合、山田さん、田中さん、高橋さん、木村さん、そして鈴木さんのようになります。
      • ["、", "に", "、そして"]の場合、山田さん、田中さん、高橋さんに木村さん、そして鈴木さんのようになります。
    • 空の配列を指定した場合、[""]となります。
      • 山田さん田中さん高橋さん木村さん鈴木さんのようになります。
  • id_text_pairs : 後述のユーザーメッセージ設定を配列で指定します。

ユーザーメッセージ設定

  • 入退室したユーザーごとに異なる入退室メッセージを使用する場合に設定します。
  • Nursery.BasicPlugins.WelcomeScheduler.jsonid_text_pairsに配列で指定します。
  • もしくは、プラグインのdllと同じフォルダ(標準ではpluginsフォルダ)の中にNursery.BasicPlugins.WelcomeSchedulerというフォルダを作り、その中に任意のJSONファイルとして保存します。(例:plugins\Nursery.BasicPlugins.WelcomeScheduler\tanaka.json
  • Nursery.BasicPlugins.WelcomeScheduler.jsonと任意のJSONファイルに同じユーザーの設定があった場合、JSONファイルが優先されます。
{
  "user_id": "",
  "welcome": "",
  "bye": "",
  "summarize": true,
  "name_welcome": "",
  "name_bye": ""
}
  • user_id : ユーザーのIDを文字列で指定します。
  • welcome : このユーザー固有の入室時メッセージを指定します。デフォルトは空です。
    • 空の場合、このユーザーの入退室メッセージは送信されません。
    • メッセージの特殊書式については特殊書式を参照してください。
  • bye : このユーザー固有の退室時メッセージを指定します。デフォルトは空です。
    • 空の場合、このユーザーの入退室メッセージは送信されません。
    • メッセージの特殊書式については特殊書式を参照してください。
  • summarize : summarizeでまとめを行う際に、このユーザーをまとめるかをtruefalseで指定します。デフォルトはtrueです。
    • trueの場合、このユーザーの分もまとめて1つの入退室メッセージになります。
    • falseの場合、このユーザーの入退室メッセージはまとめられず、個別のメッセージになります。
  • name_welcome : summarizeでまとめを行う際に、入室時メッセージの中の1人分の名前として使用するこのユーザー固有の文字列を指定します。デフォルトは空です。
    • 空の場合、このユーザーの名前は表示されません。
    • メッセージの特殊書式については特殊書式を参照してください。
  • name_bye : summarizeでまとめを行う際に、退室時メッセージの中の1人分の名前として使用するこのユーザー固有の文字列を指定します。デフォルトは空です。
    • 空の場合、このユーザーの名前は表示されません。
    • メッセージの特殊書式については特殊書式を参照してください。

ユーザーメッセージ設定サンプル

ユーザーID280698477212860417のユーザー(ニックネーム:ヌン)へのあたりが強いサンプルです。

{
  "user_id": "280698477212860417",
  "welcome": "${announce} ${nickname}の野郎が来やがった。",
  "bye": "${announce} やった、${nickname}が出て行ったぞ。 se clap",
  "summarize": true,
  "name_welcome": "${nickname}とかいうやつ",
  "name_bye": "なんか${nickname}って知らない人"
}

この例は以下のようなメッセージになります。

1人の入室時: 【アナウンス】 ヌンの野郎が来やがった。
1人の退室時: 【アナウンス】 やった、ヌンが出て行ったぞ。 se clap
複数人の入室時: 【アナウンス】 田中さん、鈴木さん、ヌンとかいうやつ、山田さんが入室しました。
複数人の退室時: 【アナウンス】 田中さん、鈴木さん、なんかヌンって知らない人、山田さんが退室しました。

ユーザーID280698477212860417のユーザー(ニックネーム:ヌン)の入退室を知らせないサンプルです。

{
  "user_id": "280698477212860417",
  "welcome": "",
  "bye": "",
  "summarize": true,
  "name_welcome": "",
  "name_bye": ""
}

この例は以下のようなメッセージになります。

1人の入室時:
1人の退室時:
複数人の入室時: 【アナウンス】 田中さん、鈴木さん、山田さんが入室しました。
複数人の退室時: 【アナウンス】 田中さん、鈴木さん、山田さんが退室しました。

WhereCommandプラグイン

@nursery-bot where

NurseryのBotが現在入室しているボイスチャンネルと読み上げ対象にしているテキストチャンネルの一覧を表示するコマンド・プラグインです。