役職パネルのこれまでと今。

注意:この記事は役職パネルのヘルプではありません。

こんにちは。ケシゴモンです。 今回は役職パネルが作られた経緯と、役職パネルの今を書いていこうと思います。

そもそも作った経緯

そもそもなぜ役職パネルが開発されたかと言うと、自分が雑談フォーラムでSKYLINEというサーバー専用BOTを開発していました。 で、サーバーにはいろいろなネタ役職があって、それらの役職はユーザーがスタッフに「この役職ください!」みたいに言ってスタッフが手動で付与していたんですね。

でもこの作業って自動化できませんか?ということであらかじめ定義した役職はユーザーの操作で自動で付与できるような機能を開発していました。

役職パネル、パブリック化(2019年2月ぐらい?)

そうしたら、他のサーバー管理者からもこの機能欲しい!欲しいという需要があったんですね。 なので、パブリック化をしたら導入サーバー数がすごい伸びました。

当時の雑談フォーラムが人や規模が大きいサーバーであったということも関係していたのでしょうが、素直に嬉しかったですね。

ケシゴモンのギルド、作成(2020年5月ぐらい?)

そして、役職パネルのサポートも雑談フォーラムで行っていたのですが、よくある質問に自力で一々回答するのはコストになります。

ところが、雑談フォーラムは私がオーナーではないので、工夫は難しく・・・ そして自分のサーバーを立てるに至ったのです。

v2移行期

この時期になってラズパイをぶっ壊してしまい・・・v2への移行を強いた時期がありました。 なんでV2への移行が強いられたかと言うと、v2はHerokuで動いていたからです。

まぁすぐ駄目になったんでラズパイ買ってどうにかしたんですけどね()

この頃から旧役職パネルは新規導入を停止などしてました。

役職パネルの今

今現在、役職パネルは13000サーバーに導入されています(記事執筆時点)。こんなにサーバー数行って大丈夫か?ありがとうございます! 現在役職パネルで取り組んでいることは「役職パネルのTypescript化、スラッシュコマンド化」です。 理由としては、

  • Discord.pyが開発を終了してしまったから
  • Slashコマンドへの対応をしなければならない

という2点です。こちらに全力で取り組みます。

役職パネルBOTv2 コマンドリファレンス(&招待リンク・サポートサーバー)

役職パネルv2のコマンドヘルプ。(今回真面目に作ろうと思うんだけど・・・)
ヘルプページ一覧に戻る場合はこちら
kesigomon.hatenablog.jp

招待リンク

v2は新規導入を終了しました。
以降はv3をお使いください。
https://rolepanelv3docmaster.gatsbyjs.io/

サポートサーバー

役職パネルのサポートは、「ケシゴモンのギルド」でやっています。
「役職パネル質問室」でどうぞ。
discord.gg


引数に取れる(役職)について

役職の引数は、以下のものが取れます。

  • 役職のID
  • 役職のメンション
  • 役職の名前

なお、役職のIDは、roleコマンドで取得できます。

コマンド一覧
Prefixは「!rp2」または「!rolepanel2」です

add

!rp2 add (役職...) --tag (タグ) --channel (チャンネル) --emoji (絵文字) --create

役職パネルに役職を追加します。
使用できるのは「役職の管理」を持つ人です。

引数一覧

役職...

スペースで区切って複数入力が可能です。
ただし絵文字引数を取っている場合、この引数は1つしか取れません。
自分の一番上の役職よりも下の役職のみ引数に取ることができます。
(ただし、サーバーの所有者はすべての役職を引数に取れます)

-t --tag (タグ)

タグを使うと、役職パネルのタイトルにタグが追加され、別なパネルをつくることができます。(デフォルトは「デフォルト」)

-c --channel (チャンネル)

役職パネルを作るチャンネルを指定できます。

--emoji (絵文字)

リアクションの絵文字指定ができます。
この引数を取っている場合、役職引数は1つしか取れません。

--create

この引数があった場合、役職を作成してからパネルに追加します。

--color (色)

パネルを新しく作った場合、色を指定できます。

!rp2 add 役職A
!rp2 add 自由カテゴリ閲覧 --tag 重要な役職
!rp2 add 役職B --color 0xff0000

remove

!rp2 remove (役職...) --tag (タグ) --channel (チャンネル) --delete

役職パネルから役職を削除します。

引数一覧

役職...

スペースで区切って複数入力が可能です。
自分の一番上の役職よりも下の役職のみ引数に取ることができます。
(ただし、サーバーの所有者はすべての役職を引数に取れます)

-t --tag (タグ)

タグを指定した場合、そのタグのパネルにある役職のみを削除します。

-c --channel (チャンネル)

削除対象とするチャンネルを指定できます。

--delete

この引数があった場合、パネルから削除したあとに役職を削除します。

!rp2 remove 役職A
!rp2 remove 自由カテゴリ閲覧 --tag 重要な役職

autoremove

!rp2 autoremove

もう存在しない役職の行を削除します。

edit

!rp2 edit (メッセージID) --tag (タグ) --color (色) --channel (チャンネル)

パネルを編集します。

引数一覧

メッセージID

編集するパネルのメッセージIDを指定してください。

-t --tag (タグ)

タグを別なものに変更します。

--color (色)

色を別なものにします

--channel (チャンネル)

編集するパネルのチャンネルを指定してください。

!rp2 edit 764708913688870913 --tag メイン役職
!rp2 edit --color 0x00ff00
!rp2 edit 761196624277798953 --tag 色系役職 --color 0x0000ff --channel 706069471843975228

role

!rp2 role (ページ=1)

役職一覧をIDとともに(上から順番に)表示します
役職が多い場合、ページ指定すると更に下の役職も見れます。

引数一覧

ページ

役職一覧のページ指定で、デフォルトは1です。

!rp2 role
!rp2 role 2

find

!rp2 find タグ ページ --channel (チャンネル)

パネルを検索して見つかった場合、そのメッセージIDを返します。
メッセージIDを指定するコマンドに使えます

引数一覧

タグ

検索したいパネルのタグを指定してください。

ページ

検索したいパネルのページを指定してください。

チャンネル

検索したいパネルのチャンネルを指定できます。
指定しなかった場合、コマンドを打ったチャンネルと同じになります。

refresh

!rp2 refresh (メッセージID...) --channel (チャンネル)

リアクションをつけ直します。
remove等でリアクションがぐちゃぐちゃになったときにどうぞ。

引数一覧

メッセージID

スペースで区切って複数入力が可能です。
リアクションをつけ直すパネルのメッセージIDを指定してください。

チャンネル

リアクションをつけ直すパネルのあるチャンネルを指定できます。
指定しなかった場合、コマンドを打ったチャンネルと同じになります。

sort

!rp2 sort (メッセージID...) --channel (チャンネル)

アルファベットの絵文字を、アルファベット順に直すことができます。

引数一覧

メッセージID

スペースで区切って複数入力が可能です。
直すパネルのメッセージIDを指定してください。

チャンネル

直すパネルのあるチャンネルを指定できます。
指定しなかった場合、コマンドを打ったチャンネルと同じになります。

copy

!rp2 copy (メッセージID...) --from (複製元チャンネル) --channel (複製先チャンネル)

パネルを複製できます。

引数一覧

メッセージID

スペースで区切って複数入力が可能です。
複製元パネルのメッセージIDを指定してください。

複製元チャンネル

複製元のパネルのあるチャンネルを指定できます。
指定しなかった場合、コマンドを打ったチャンネルと同じになります。

複製先チャンネル

複製先のパネルのあるチャンネルを指定できます。
指定しなかった場合、コマンドを打ったチャンネルと同じになります。

reset

!rp2 reset (メッセージID...) --channel (チャンネル)

autoremove、sort、refreshを一気に行います。
以下の順番で行われます。
→存在しない役職の行を削除(autoremove)
→アルファベットの絵文字はアルファベット順に編集(sort)
→リアクションの付け直し(refresh)

引数一覧

メッセージID

スペースで区切って複数入力が可能です。
直すパネルのメッセージIDを指定してください。

チャンネル

直すパネルのあるチャンネルを指定できます。
指定しなかった場合、コマンドを打ったチャンネルと同じになります。

役職パネルのヘルプページ一覧

コマンドの使い方がわからない?招待リンクがほしい?

kesigomon.hatenablog.jp

なにか問題が起こった?

kesigomon.hatenablog.jp

え?古めかしい役職パネルのコマンドリファレンスを見たい?

kesigomon.hatenablog.jp

役職パネルBOTのよくある質問

よくある(というかあった)質問集
ヘルプページ一覧に戻る場合はこちら(招待リンクとかはこっち)
kesigomon.hatenablog.jp

この質問集のコマンド例は「役職パネルv2」に準拠しています。
「役職パネル」(v2ではない)の場合はコマンドの使い方が異なる場合があるので注意してください。

「役職パネル」(v2ではない)が動かない

「役職パネル」はサポートを終了しているため、対応はできません。

「役職パネルv2」に「役職パネル」のデータを移行できますか?

はい。移行できます。
パネルのあるチャンネルで、!rp2 hikitugi と打ってみてください。

「役職の付与に失敗しました。BOTの一番上よりも高い役職をつけようとしてるかも?」と表示された

「サーバー設定」→「ロール」
その後、役職パネルBOTについている一番上の役職が、つけたい役職よりも上になっているか確認してください
X こんな感じだと付与できません
https://cdn.discordapp.com/attachments/555660656926523402/610863624201961489/2019-08-14.png
O こんな感じだと付与できます。
https://cdn.discordapp.com/attachments/555660656926523402/610863668992671756/2019-08-14_1.png
移動する場合、PC or Androidなら、そのままドラッグ&ドロップ or スライドで移動すればできるはずです
iOSなら、「編集」をタップすると移動できるようになります

パネルを複数作りたい・パネルを分けたい

タグを別なものにすれば別なパネルが生成される。

!rp2 add 赤色 -t 色系役職
!rp2 add 自由カテゴリ閲覧役職 -t 重要な役職

BOTの招待リンクが真っ白

もしかして:使ってるブラウザはMicrosoft Edge
別なブラウザ(Google Chrome, Firefoxなど)入れて、それでアクセスしてみてください

上手く役職が適用されない。

役職IDで指定すればほぼ確実に通るのでそちらでどうぞ。

!rp2 add 0000000000
(0の部分は取得した役職IDに置き換えること)

役職IDを取得する方法

開発者モードをオンにして取得する方法

まずはこれを参考に、開発者モードをオンにする。
https://support.discordapp.com/hc/ja/articles/207260127-Discord%E3%81%AE%E5%A4%96%E8%A6%B3-%E3%83%86%E3%83%BC%E3%83%9E%E3%82%92%E5%A4%89%E3%81%88%E3%82%8B%E3%81%AB%E3%81%AF-support.discordapp.com
そうしたら、該当サーバーの「サーバー設定」→「ロール」
その後で、ロール名を右クリック→「IDをコピー」
これでIDをコピーできる。

roleコマンドを使う方法

!rp2 role

と打てば、役職とIDが表示される。

BadArgument(不正な引数)エラーです。が表示された場合

Role XXX not found.

役職が見つからないようです。役職名のミスなどがないか確認してください。
もし、うまく行かないのであれば、役職メンションか役職IDで試してみてください。

Channel XXX not found.

チャンネルが見つからないようです。チャンネル名のミスなどがないか確認してください。
もし、うまく行かないのであれば、チャンネルメンションかチャンネルIDで試してみてください。

v2でなにが変わったの?

コマンドが大きく変わりました。
・複数の役職を一気に追加することが可能に
・つける際に押すリアクションを自由に変えられるように
・パネルの色を好きな色にすることができるように

v2にはregenerateコマンドがないんですか?

ないです。ただし、resetコマンドでregenerateと同じようなことが出来ます。

オープンソースですか?

いいえ、オープンソースではありません。公開予定も今のところはありません。

なぜかページが1ページ目になる

既知のバグだったので修正しました。
新しくaddされたものに関しては正しいページ数で表示されるはずです!

なぜかパネルの役職がdeleted-roleになるんだけど!(他人からそう見えている場合も含む)

Discord側のバグです。
もし正常に役職を付けられているのであれば役職パネル側の問題ではありません。

ここまでやっても解決しなかった

サポートサーバーへどうぞ
discord.gg

寄付したい

えっ、マジ?
Kesigomon#4752 にDMでアマギフを送ってください!
ありがとうございます!

SKYLINEのコマンドとか機能とか

SK}YLINEのコマンドとか、機能をまとめてみる

sk!cedit (チャンネル権限編集システム)

# チャンネル指定省略可能(デフォルトはコマンドを打ったチャンネル)
sk!cedit (channel)

チャンネルの権限をGUIライクで編集できるシステム。
主に雑談板、及び個人チャンネルの権限の編集に使える。

チャンネルの権限の追加設定で使ったユーザーの『権限の管理』が「/」になっていれば使用可能。
自分で作ったチャンネルには基本的にこの設定がされている。

sk!ticket (雑フォ運営への相談)

sk!ticket (member...)

# 使用例(単発使用)
sk!ticket

# 使用例(他の人も招待する)
sk!ticket Kesigomon dainspc Otoko

運営と、引数に指定したメンバー以外には見えないチャンネルをチケットカテゴリに作る。
基本的に1人1チャンネルまで。

sk!ticket invite (見れる人追加)

sk!ticket invite [member...]

# 使用例
sk!ticket invite ダイスケ わど

自分がチケットコマンドで作ったチャンネルでのみ使用可能。
見れる人を増やす。

sk!ticket leave (自分が作ったチケットチャンネル削除 or 見えないようにする)

sk!ticket leave

チケットカテゴリでのみ利用可能。

  • 自分が作ったチャンネル

削除確認後、チャンネルを削除する。

  • それ以外

そのチャンネルを見れないようにする。

discord.pyでいろいろなオブジェクトを取得する

discord.pyでいろいろなオブジェクトを取得する方法。
執筆中です。なんかあればコメントで。

チャンネル

全部共通(カテゴリ、テキスト、ボイス、DM)

ID指定

Client.get_channelメソッドを使う。
https://discordpy.readthedocs.io/ja/latest/api.html#discord.Client.get_channel
ready後ではない or BOTがチャンネルを見れない場合はNoneを返すのでそこは注意。

async def on_ready():
    # IDは、該当するチャンネルのIDに置き換えること。
    ch = client.get_channel(ID)
    await ch.send("BOTが起動しました!")

Messageableなチャンネル(テキスト、DM)

Message などのchannel属性

多分一番使う方法。

async def on_message(message):
    ch = message.channel
    print(f"{ch.name}からメッセージが来ました!")

ギルド(サーバー)

ID指定

Client.get_guildメソッドを使う。
https://discordpy.readthedocs.io/ja/latest/api.html#discord.Client.get_guild
ready後ではない or BOTがギルドにいない場合はNoneを返すのでそこは注意。

async def on_ready():
    # IDは、該当するギルドのIDに置き換えること。
    guild = client.get_guild(ID)
    print(f"{guild.name}のメンバー数は{guild.member_count}です!")

Message などのguild属性

よく使う気がする。

async def on_message():
    guild = message.guild
    print(f"{guild.name}からメッセージが来ました!")

User またはMember

違い

Userはギルドとは関係ない情報のみ。(役職の情報等なし)
Memberはギルドに関係があり、同じユーザーでも所属しているギルドごとにMemberオブジェクトが存在する。
(もちろん、役職の情報などもある)

ちなみにUserとMemberでの比較は可能。
元が同じなら(たとえギルドが別であろうと)同じとして判定される。
https://discordpy.readthedocs.io/ja/latest/api.html#discord.Member

User

ID指定

Client.get_userメソッドを使う。
https://discordpy.readthedocs.io/ja/latest/api.html#discord.Client.get_user
ready後ではない or BOTがチャンネルを見れない場合はNoneを返すのでそこは注意。

async def on_ready():
    # IDは、該当するユーザーのIDに置き換えること。
    user = client.get_user(ID)
    # DMを送る
    await user.send("BOTが起動したよ!")

Member

ID指定

Guild.get_memberメソッドを使う。
https://discordpy.readthedocs.io/ja/latest/api.html#discord.Guild
ギルドに関係しているので、必ずギルドの情報が必要になる。ID1つだけでできるわけでないので注意。
Guildオブジェクトの取得は前述の通り。

async def on_ready():
    # IDは、該当するギルドのIDに置き換えること。
    guild = client.get_guild(guild_ID)
    # IDは、該当するメンバーのIDに置き換えること。
    member = guild.get_member(member_ID)
    # DMを送る
    await member.send(f"君の表示名は{member.display_name}だね!")

もし、私がゼノンザードの大会を開いたら

カードの制限について

【アタック時】または【召喚時】にダメージを与えるカード(または、ダメージを与える効果をプレイヤーに与えるもの)

リボルバーコンドル』『「五幻獣」麒麟』『九神龍「闘」アラバスター』『「オリジンズ02」アロンダイ』など。
これらの効果は防ぐことができず、ダメージエンドを引き起こしてしまうため禁止します。

ダメージを与えるマジック

ディメンジョナルクラック

このカードの効果は防ぐことができないので禁止します。

ハウリングボイス(投入可能)

デッキへの投入は可能です。
「相手のBP500以下のミニオン1体をレスト状態でベースに移動させる。」効果を必ず選択してください。
「相手のプレイヤーに1ダメージを与える。」効果は使用しないでください。

ブロックを制限するカード(潜入含む)

「このミニオンは(〇〇なミニオンには)ブロックされない。」効果をもつカードは禁止します。
「相手のミニオン1体を選択する。(そのミニオンをアクティブにして、)このターン中、そのミニオンは必ずブロックする。」という効果をもつカード(ゼクスシュバンツ、カノーネン・ティーゲルなど)は使用してもOKです。青デッキ使いとドラゴンデッキ使いの皆さんごめんなさい

「運命の図柄を描く者」ラケシス

ラケシスの効果を「戦術」として組んでしまうとどうしても「圧倒」になってしまいがちになるため。

エンリコ

LOでのゲームエンドを防ぐため禁止します。