Discordに表形式のデータを綺麗に送信したい
はじめに
私が属しているコミュニティでは,コミュニケーションツールとしてDiscordを利用しています.
そのDiscord内にPythonで作成したBotを導入しており,そのBotは
- ボイスチャンネルの滞在時間をランキング形式で通知
- リアクシション数をランキング形式で通知
ということを行なっています.
ランキングは順位,ユーザー名,結果,前日比の項目からなる表形式のデータです.
現状そのBotが出力するランキング結果の形式が無骨であると感じるため,表形式のデータをDiscordで綺麗に表示する方法を探していました.
DiscordではMarkdown形式でメッセージを装飾できる機能があるのですが,Markdownの表には対応していません.(参考)
そこで,他に何か良い方法がないか調べたところ,table2ascii
というPythonライブラリを見つけました.
どのように解決されたのか
table2ascii
は,リスト形式でデータを受け取り,それを綺麗な表形式の文字列に変換してくれるライブラリです.
このライブラリによって出力された文字列をコードブロック
としてDiscordに送信することで,綺麗な表形式のデータを表示することができました.
以下がBeforeとAfterの比較です.
Before
After
table2asciiの簡単な使い方の説明
table2ascii
を使用する簡単なサンプルは以下です.
まずインストールを行います. (PyPI)
pip install table2ascii
サンプルのpythonコードは以下です.
from table2ascii import table2ascii
output = table2ascii(
header=["Rank", "Username", "Reactions", "Change"],
body=[["1", "user1", "40", "3"], ["2", "user2", "20", "2"]],
)
text = f"```\n{output}\n```"
table2ascii
関数にはheader
とbody
のような引数として,リスト型でデータを渡すことができ,表形式の文字列として返してくれます.
最後のtext変数は,output
をmarkdown形式におけるコードブロックとして囲んだことを意味する文字列を格納しています.これをDiscordに送信することで綺麗な表形式のデータとして表示することができます.
今回扱っていませんが,数種類のスタイルを選択することもできます.
簡単なサンプルはこちらから確認できます.
Discussion