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
terminate
がtrue
のリストフィルタは、メッセージが自分の条件に一致した場合、次以降のリストフィルタでの判断を行わず、自分の判断までで読み上げ対象かどうかを決定します。terminate
がfalse
のリストフィルタは、メッセージが自分の条件に一致した場合でも、次以降のリストフィルタでの判断を行います。自分の判断が次以降のリストフィルタによって覆される可能性があります。
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"
]
}
]
}
上記の設定は以下のように処理されます。
- ユーザーIDが
123456789123456789
のBotが、Discordにメッセージを投稿する。 - ListFilterプラグインの処理が始まる。
- 1つ目の
bot_filter
リストフィルタで、bot
がブラックリストに入っているため、このメッセージは「読み上げ対象外」としてマークされる。 - 1つ目の
bot_filter
リストフィルタはterminate
がfalse
なので、次のallow_my_bot
リストフィルタに処理が移る。 - 2つ目の
allow_my_bot
リストフィルタで、U123456789123456789
がホワイトリストに入っているため、このメッセージは「読み上げ対象」としてマークされる。 - リストフィルタが終了するので、このメッセージは最終的に「読み上げ対象」として処理される。
より高度なフィルタ
より複雑な条件を使用したい場合は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
: 入室時にメッセージを送信するかをtrue
かfalse
で指定します。デフォルトはtrue
です。default_welcome
: 入室時メッセージを指定します。デフォルトは空です。- 空の場合、システムのデフォルトメッセージ(
${announce} ${nickname}が参加しました。
)が使用されます。 - メッセージの特殊書式については特殊書式を参照してください。
- 空の場合、システムのデフォルトメッセージ(
use_bye
: 退室時にメッセージを送信するかをtrue
かfalse
で指定します。デフォルトは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_type
にchannels
を指定した場合にのみ使用されます。デフォルトは空です。summarize
: 2人以上が同時に入室もしくは退室した際に、メッセージをまとめるかどうかをtrue
かfalse
で指定します。デフォルトはtrue
です。default_name_welcome
:summarize
でまとめを行う際に、入室時メッセージの中の1人分の名前として使用する文字列を指定します。デフォルトは空です。- 空の場合、システムのデフォルトメッセージ(
${nickname}さん
)が使用されます。 - メッセージの特殊書式については特殊書式を参照してください。
- 空の場合、システムのデフォルトメッセージ(
default_name_bye
:summarize
でまとめを行う際に、退室時メッセージの中の1人分の名前として使用する文字列を指定します。デフォルトは空です。- 空の場合、システムのデフォルトメッセージ(
${nickname}さん
)が使用されます。 - メッセージの特殊書式については特殊書式を参照してください。
- 空の場合、システムのデフォルトメッセージ(
separators
:summarize
でまとめを行う際に、複数人の名前を並べる際に使用する文字列を配列で指定します。- デフォルトは
["、"]
です。この場合、山田さん、田中さん、鈴木さんが入室しました。
のようになります。 - 2つ以上の文字列を指定した場合、後ろから順に使われます。足りない分は1つ目の文字列が使われます。
["、", "、そして"]
の場合、山田さん、田中さん、高橋さん、木村さん、そして鈴木さん
のようになります。["、", "に", "、そして"]
の場合、山田さん、田中さん、高橋さんに木村さん、そして鈴木さん
のようになります。
- 空の配列を指定した場合、
[""]
となります。山田さん田中さん高橋さん木村さん鈴木さん
のようになります。
- デフォルトは
id_text_pairs
: 後述のユーザーメッセージ設定を配列で指定します。
ユーザーメッセージ設定
- 入退室したユーザーごとに異なる入退室メッセージを使用する場合に設定します。
Nursery.BasicPlugins.WelcomeScheduler.json
のid_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
でまとめを行う際に、このユーザーをまとめるかをtrue
かfalse
で指定します。デフォルトは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が現在入室しているボイスチャンネルと読み上げ対象にしているテキストチャンネルの一覧を表示するコマンド・プラグインです。