【Pycord】ApplicationCommandで入力できるUI形式を画像イメージ付きで紹介する

948 語
5 分
【Pycord】ApplicationCommandで入力できるUI形式を画像イメージ付きで紹介する

はじまり#

リサちゃん avatar
リサちゃん
ふうう・・・、リファレンスを見ながら動作を確認するのってしんどいよね・・・
135ml avatar
135ml
確かに、UI絡みのものだったらすぐに一覧を見れたら助かるよな
リサちゃん avatar
リサちゃん
Pycordで入力できるUIをリストにしてほしいです!
135ml avatar
135ml
うっす。

PycordのApplicationCommand#

はい、ゲームを嗜む者であれば殆どの人が御用達である「Discord」。 そこでは、引数を取ってボットとやり取りできる機能があります。 それが「スラッシュコマンド」というものになります。

そして、PythonでDiscordのボットを動かすためのライブラリ「Pycord」にて、 そのスラッシュコマンドの引数を入力するための形式がいくつかあります。

Pycordのリファレンスのページはここですが・・・、

実際にどう動くのかは、文章だけじゃなかなか想像しにくいですよね。 それに、それを一つ一つどう動くのかを確認するのも骨が折れます。

そこで! 私めは、骨を折って、そのApplicationCommandで引数を入力できるUIを一覧にしてまとめました! まあ、実のところ、分からない箇所もあったのですが、一助になれば良いかなと思います。

引数入力のUI一覧#

先程貼ったリファレンス内にあるdiscord.Option.input_typeは、以下の値を取ります。

取り得るデータ型

  • Type[abc.GuildChannel]
  • Type[Thread]
  • Type[Member]
  • Type[User]
  • Type[Attachment]
  • Type[Role]
  • Type[abc.Mentionable]
  • SlashCommandOptionType
  • Type[ext.commands.Converter]
  • Type[enums.Enum], Type[Enum]

これから、こんな感じの関数を実行して確認していきます。 「タグ」という語句には何の意味もありません。僕のためのツールを作っている時に調べたコードなのでこうなっています。

intents = discord.Intents.default()
intents.message_content = True
bot = discord.Bot(intents=intents)
webclippings = bot.create_group(
name="webclippings"
, description="Manage web-clippings"
, guild_ids=guild_ids
, guild_only=True
)
@webclippings.command(name="search", description="入力したタグからシートに在る記事を探します", guild_ids=guild_ids)
async def search(
ctx: discord.ApplicationContext
# ↓ この行のstrだけを変えて調べていきます。 ↓
, tag_required: Option(str, name="タグ1", description=config_obj["statement_for_search_by_tag_1"])
# ↑ これだけ ↑
, condition: Option(str, name="検索条件", description=config_obj["statement_for_search_by_tag_2"], choices=["and", "or"])
, tag_2: Option(str, name="タグ2", description=config_obj["statement_for_search_by_tag_1"], required=False)
, tag_3: Option(str, name="タグ3", description=config_obj["statement_for_search_by_tag_1"], required=False)
, tag_4: Option(str, name="タグ4", description=config_obj["statement_for_search_by_tag_1"], required=False)
, tag_5: Option(str, name="タグ5", description=config_obj["statement_for_search_by_tag_1"], required=False)
, tag_6: Option(str, name="タグ6", description=config_obj["statement_for_search_by_tag_1"], required=False)
):
ctx.defer()
print(tag_required)
print(type(tag_required))
if __name__ == "__main__":
bot.run(config.BOT_TOKEN)

Type[abc.GuildChannel]#

まずは、引数にチャンネルを指定できる入力型です。 自分が参加している既存のチャンネル名から選択できます。

image

print された結果はこんな感じでした。

webclip2
<class 'discord.channel.TextChannel'>

Type[Thread]#

次に、スレッドを選択できるデータ型です。

image

特にスレッドを配置していないので、今回は選択できません。

image

Type[Member]#

これは、トークに参加しているメンバーの中から、引数に選択できます。

image

printされた結果はこんな感じ。

kinkinbeer135ml#5065
<class 'discord.member.Member'>

Type[User]#

これに関しても、挙動は Type[Member] と同じに見えます。

image

printされた結果はこんな感じ。Type[Member] と同じデータ型ですね。

Webclip あゆ#3192
<class 'discord.member.Member'>

Type[Attachment]#

これは、ファイルを添付できるデータ型です。

image

printされた結果はこんな感じ。CDNに上がった画像のURLが取得できます。

https://cdn.discordapp.com/ephemeral-attachments/XXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXX/discord_Member.png
<class 'discord.message.Attachment'>

Type[Role]#

ロールを引数に持ってこれます。

image

printされた結果はこんな感じ。

@everyone
<class 'discord.role.Role'>

Type[abc.Mentionable]#

メンバーとチャンネルを含めて、メンションできるものを引数に設定できます。

image

printされた結果はこんな感じ。

bot-searching-webclip
<class 'discord.role.Role'>

SlashCommandOptionType#

これは特に調べませんでした。

Type[ext.commands.Converter]#

特に選択肢などは出てこず。 適当に文字列を打ち込んでメッセージを送信すると、エラーになりました。

image

printされた結果はこんな感じ。よく分からなかったので飛ばします。

Application Command raised an exception: TypeError: Protocols cannot be instantiated

Type[enums.Enum], Type[Enum]#

こちらは列挙型ですね。 今回、列挙型を特に宣言せずにスクリプトを動かしたので、案の定エラーになりました。 printされた結果はこんな感じ。

IndexError: list index out of range

おしまい#

リサちゃん avatar
リサちゃん
ははあ、まあ大体どんな風に動くのかは分かったよ。
135ml avatar
135ml
色々な形で引数を持ってこれるから、色々な処理が展開できそうですね。

以上になります!

記事を共有

この記事が役に立ったなら、ぜひ他の人と共有してください!

【Pycord】ApplicationCommandで入力できるUI形式を画像イメージ付きで紹介する
https://endorphinbath.com/posts/pycord-application-command-images/
著者
kinkinbeer135ml
公開日
2023-02-15
ライセンス
CC BY-NC-SA 4.0
Profile Image of the Author
kinkinbeer135ml
SIerをやめて、プログラミングを勉強しています。※Amazonアソシエイトに参加しています。
お知らせ
私のブログへようこそ!これはサンプルのお知らせです。
音楽
カバー

音楽

再生中なし

0:00 0:00
歌詞なし
カテゴリ
タグ
サイト統計
記事
287
カテゴリー
8
タグ
93
総文字数
486,174
運用日数
0
最終活動
0 日前

目次