0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Discordのチャンネルごとの個人の発言数をカウントする【discord.py】【GCP】

Last updated at Posted at 2024-02-16

コミュニティー活動を可視化する「コミュニティーバンド」

2/10-11QiitaHackathonに参加しました。
私たちは中規模のコミュニティーは時間が経つとメンバーのモチベーションが下がり、運営もそれをうまく把握できないという課題に対して、コミュニティー内のメンバーの活動を可視化して、「運営側がメンバーの活動を把握できる」「メンバーは自分の活動がコミュニティーのポイントにつながり貢献している気持ちになれる」が売りであるコミュニティーバンドというプロダクトを作りました。その中のDiscordでの発言数管理を簡単にスプレッドシートで行う方法をお示しします。
image.png

上のシステム構成が示すように、各SNSでの発言やQiita記事投稿、イベント参加などをポイント化して集計していきます。※API連携やレーダーチャート作成のところはチームの他の方担当なのでこの記事では割愛します。
image.png

コミュニティー内で切磋琢磨

私たちのコミュニティー(プロトアウトコミュニティーはさらに6つのコミュニティーに分かれていますが、コミュニティーバンドを使えば、コミュニティー全体としてどれだけの活動ができたかも分かりやすいので達成目標が立てやすいし、コミュニティー対抗で凌ぎを削るなんてこともできます。
image.png

Discordからスプレッドシートへ

今回ハッカソンでLINEでの発言部分をLINE MessagingAPI-GoogleAppsScript-スプレッドシートで実装したため、Discordでの発言もスプレッドシートで管理しました。

下記のコードで特定のスプレッドシートのsheetに

発言の日時、発言者ID、チャンネルID、チャンネル名

が新しい行に追加されます。
他に欲しい項目があれば

sheet.append_row([message.created_at.isoformat(), message.author.id, message.channel.name])

のところをカスタマイズしてください。
公式APIドキュメントを参考にするか、ChatGPTにぽんっと投げたらいい感じに答えてくれるかもしれません。
合計については、スプレッドシート内で関数を使って計算するもあり、発言ごとにチャンネルやuseridごとにカウントアップするもありです。

必要なもの

下記のコードの中でご自身で変更していただく変数について説明します。
スプレッドシートを使う場合はGCP(GoogleCloudPlatform)でいくつか手続きが必要です。
▶︎DiscordBotのトークン:こちらの記事が参考になります。
▶︎サービスアカウントを作成し、GCPで鍵を発行。スプレッドシートの共有にアドレスを登録する。
▶︎Sheets, Drive APIの有効化
新しくプロジェクトを作成し下記に従ってください。
image.png
image.png

前準備として(Macなら)
pip install discord、pip install gspreadを済ませておいてください。

count.py:

import discord
import gspread
from oauth2client.service_account import ServiceAccountCredentials

# 全てのIntentsを有効にする
intents = discord.Intents.default()
intents.members = True  

# Intentsを指定してClientを作成
client = discord.Client(intents=intents)
TOKEN = 'DiscordBotのトークン'

@client.event
async def on_ready():
    print(f'We have logged in as {client.user}')


# Googleスプレッドシートの設定
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('鍵を保存したjsonファイルパス', scope)
client_gs = gspread.authorize(creds)

# Discord ボットの設定
intents = discord.Intents.default()
intents.messages = True
client = discord.Client(intents=intents)

    # スプレッドシートにアクセス
    sheet = client_gs.open('スプレッドシートの名前').worksheet('sheet名')
    sheet.append_row([message.created_at.isoformat(), message.author.id, message.channel.name]

python count.pyを実行した上で、何かDiscordチャンネルで発言してみてください。
スプレッドシートに入力されるはずです。
うまくいかないなどあればコメントいただけると幸いです!

LINEとスプレッドシートはGASで

コミュニティーが使用しているLINEグループにコミュニティーバンドを追加することにより、その中の発言数をカウントします。
こちらについては別記事で書きます。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?