0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ゼミ週報の esa 記事未投稿者を Discord で晒しあげてみた

Posted at
Page 1 of 17

はじめに

本記事は LoGeek のサークル内 LT 会の登壇資料としても使用します.
技術部分だけ読みたい方は,概要まで読み飛ばしてください.


自己紹介

名前

渡邊陽翔(わたなべはると)

あだ名:wata_haru(わたはる)

所属

好きなこと

  • アニメ
    • 最近見たアニメ
      • よふかしのうた
      • 炎炎ノ消防隊
      • かぐや様は告らせたい
      • 東京喰種
      • 【推しの子】
      • 鬼滅の刃
  • ゲーム
    • 最近やったゲーム
      • ゼルダの伝説 ティアーズ オブ ザ キングダム
        • 1年半くらいやってるけど全然クリアできない
    • 最近あんまやってないけどハマってたゲーム
      • VALORANT
      • Minceraft

経緯

私が所属しているゼミでは,毎週週報ミーティングを行います.
その前までに,esa で週報記事を投稿する必要があります.


前期が始まってしばらく経ったときに,指導教員から以下のように週報ケツ叩き係を命じられました.

週報ケツ叩き係の依頼文「週報ケツ叩き係を命じます.毎週,週報書いてないやつのケツを叩いてください」「ドSになります」


このような形で,ゼミの Discord 内で週報を書いていない人たちにメンションを飛ばします.

週報ケツ叩き係の仕事「現在,週報を書いていない人たちです.ミーティング時刻までに記入してください」以下に未記入の人たちへのメンションが続く

たいていときには,私自身もケツ叩きの対象になります.


しかしながら,私には S の素質がありませんでした.


前期の間,毎週ケツ叩きをしていましたが,楽しんで叩くことができずに面倒くさくなってしまいました.

そこで今回,このケツ叩きを自動化するに至りました.


いや,実は自動化できそうだなっていう考え自体は,ケツ叩き係をお願いされた数日後にはもうあったんですけどね.ずっとやるやる言ってやらずにいました...


概要

今回作成したツールは,以下の挙動をする Python コードを GitHub Actions で定期実行するものです.

  1. esa API v1 を使用して,esa に投稿された記事の一覧から投稿者のスクリーンネームを取得
  2. あらかじめ作成しておいた esa のスクリーンネームと Discord のユーザー ID との対応表をもとに,スクリーンネームをメンション形式に変換
  3. Discord の Webhook を利用して,対象メンバーにメンションを飛ばすメッセージを投稿

今回実装したコードはこちらから確認できます.


そもそも esa とは

「まずは気軽に生煮えの情報をチーム内で共有しながら何度も更新し、みんなで徐々に育ていく」という発想で作られた情報共有ツールです.
書き途中(WIP)から仲間と共有して徐々にドキュメントを育て,最終的には適したカテゴリーごとに整理することができます.

esa.png
引用:esa 公式サイト


記事取得〜 Discord 内でのメンション処理

esa API から記事情報を取得する

https://api.esa.io/v1/teams/[team]/posts へアクセスし,GET リクエストを送信します.

返却される記事の一覧の例(esa API の公式ページから引用)
{
  "posts": [
    {
      "number": 1,
      "name": "hi!",
      "full_name": "日報/2015/05/09/hi! #api #dev",
      "wip": true,
      "body_md": "# Getting Started",
      "body_html": "<h1 id=\"1-0-0\" name=\"1-0-0\">\n<a class=\"anchor\" href=\"#1-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"Getting Started\"> &gt; Getting Started</span></a>Getting Started</h1>\n",
      "created_at": "2015-05-09T11:54:50+09:00",
      "message": "Add Getting Started section",
      "url": "https://docs.esa.io/posts/1",
      "updated_at": "2015-05-09T11:54:51+09:00",
      "tags": [
        "api",
        "dev"
      ],
      "category": "日報/2015/05/09",
      "revision_number": 1,
      "created_by": {
        "myself": true,
        "name": "Atsuo Fukaya",
        "screen_name": "fukayatsu",
        "icon": "http://img.esa.io/uploads/production/users/1/icon/thumb_m_402685a258cf2a33c1d6c13a89adec92.png"
      },
      "updated_by": {
        "myself": true,
        "name": "Atsuo Fukaya",
        "screen_name": "fukayatsu",
        "icon": "http://img.esa.io/uploads/production/users/1/icon/thumb_m_402685a258cf2a33c1d6c13a89adec92.png"
      }
    }
  ],
  "prev_page": null,
  "next_page": null,
  "total_count": 1,
  "page": 1,
  "per_page": 20,
  "max_per_page": 100
}

これの created_by 要素の screen_name を取得します.


ユーザーマップ

esa のスクリーンネームと Discord のユーザー ID との対応データ

json
{
    "wata_haru": "<@1234567890123456789>"
}

Discord へのメッセージ投稿

DiscordのWebhook URL へアクセスし,POST リクエストを送信する.

https://discord.com/api/webhooks/1234567890123456789/...

GitHub Actions を利用した定期実行

GitHub Actoins とは

GitHub が提供しているワークフローを自動化する機能


結果

未投稿者あり

週報ケツ叩き_未投稿者あり.png

全員投稿済み

週報ケツ叩き_全員投稿済み.png

0
0
0

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?