🎸

Discordに表形式のデータを綺麗に送信したい

2024/10/17に公開

はじめに

私が属しているコミュニティでは,コミュニケーションツールとして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関数にはheaderbodyのような引数として,リスト型でデータを渡すことができ,表形式の文字列として返してくれます.

最後のtext変数は,outputをmarkdown形式におけるコードブロックとして囲んだことを意味する文字列を格納しています.これをDiscordに送信することで綺麗な表形式のデータとして表示することができます.

今回扱っていませんが,数種類のスタイルを選択することもできます.
簡単なサンプルはこちらから確認できます.

参考

GitHubで編集を提案

Discussion