LoginSignup
0
1

More than 1 year has passed since last update.

Discordbotを使って、テスト自動化に関するConnpassイベントを通知する

Last updated at Posted at 2022-03-04

今回はConnpassイベントを通知するDiscordbotを作成してみました。
Discordbotの作り方と簡単なコマンドを紹介しているので、bot作ってみたいという方は是非見てください。

なぜこのbotを作ろうと思ったのか

近年コロナ渦ということもあり、ソフトウェアテスト関連のオンラインイベントが増えてきました。
そのため、いろんなイベントに参加して情報収集を行いたいのですが、
毎度Connpassを開いて検索する行為がめんどくさくなってきました。

そんな時に、イベント通知botを作っている記事を見かけました。

この記事ではslackとawsを使って、イベントを通知しています。
私はslackbotの作り方もawsの使い方も詳しくなかったですが、
2021年の9月に開催したXP祭りにて、discordbotを作った経験があったので、
今回はそちらで作成しようと思いました。

Discordbot作成の準備

Discordbotを作るには以下の準備が必要です。

  1. Discordのbotを新規作成する
  2. 任意のサーバーに1で作ったbotを追加する
  3. botを作成するためのライブラリをインストールする

Discordのbotを新規作成する

Discordbotを作るための準備を紹介します。
無料でbotを作成することができます。

Discordbotを作るときは、Discordのアカウントが必要です。

  1. Discord Developer Portalにアクセスする

  2. 自分のDiscordアカウントでログインする

  3. 右上のCreate new applicationボタンを押下して、任意の名前でアプリケーションを作成する
    discordの作り方.png
    discordの作り方2.png

  4. addbotを押下して、任意の名前でbotを追加する
    discordの作り方3.png
    bot追加が成功すると、以下の画面が表示されます。
    discordの作り方4.png

任意のサーバーにbotを追加する

上記で登録したbotを導入したいサーバーに招待します。

  1. OAuthを開き、「URLGenerator」のタブに遷移
  2. 「Bot」を選択して下に出てくる「BOT PERMISSIONS」で招待リンクからのBot導入時に付与される権限を設定
  3. 権限が設定出来たら下の「GENERATED URL」に招待URLをコピー
  4. ブラウザにコピーしたURLを貼る
  5. Botを招待するサーバを選んで、参加させる

botを作成するためのライブラリをインストールする

botを作るためのライブラリをインストールします。
今回は、Discord.jsを使います。

環境 Version
node.js 16.14.0
discord.js 12.5.3
dotenv 16.0.0
Jest 27.5.1

node.jsのインストール方法はこちらの記事が詳しく書いています。

  1. 作成するフォルダを作る
  2. cmdで作成するフォルダまで移動し、以下のコマンドを実施する。
    1. npm init
    2. npm discord.js
    3. npm install dotenv
    4. npm install --save-dev Jest
  3. .envを作成し、そこにDiscordBotトークンを入力する
    DISCORD_TOKEN="bot TOKEN"(実際に入力する時、""はいらない)
  4. index.jsを作成する

これで、Discordbotを作る準備が整いました。

コードを書いてみる

ここから、ConnpassのイベントをDisocordに通知するコードを書いていきます。

ConnpassのAPIを叩いて、JSONデータを取得する

今回は、fetch関数を使用します。
使用したAPIは以下です。

sample.js
async function callApi(){
    let url='https://connpass.com/api/v1/event/?keyword=テスト自動化&Count=10&ym='+今月+'&ym='+来月 //ConnpassAPIに基づいて設定
    let encodeUrl = encodeURI(url);  //URLに日本語が含まれるため、エンコードする
    const res = await fetch(encodeUrl); //fetch関数を使って、JSONデータを取得
    const jData = await res.json();
//以下、省略

Disocordに通知する

取得したJSONから通知したい情報を選び、Discordに通知します。

【通知する情報】

  • イベントタイトル
  • 開催日時
  • イベントURL
sample.js

// 省略
    let max = 0;
     if(jData.results_available > 10){ //取得件数が10件未満の場合は、実際に取得した数を代入する
         max = 10;
     }else{
         max = jData.results_available
     }
     console.log(max);

     for (let i=0; i<max; i++){ //取得した件数もしくは10回繰り返し処理を行う
         let eventStart=jData.events[i].started_at;
         let eventStartDate = (eventStart.slice(0,10)).replace(/-/g,"");
         if(Number(eventStartDate)>Number(today)){ // イベント開催日付けが今日よりも前の場合は通知しない
             client.channels.cache.find(ch => ch.name === '一般').send("\n-----"); //通知するチャンネルを指定し、メッセージを送信
             client.channels.cache.find(ch => ch.name === '一般').send(jData.events[i].title); //イベントタイトル
             client.channels.cache.find(ch => ch.name === '一般').send(jData.events[i].started_at); //イベント開始日時
             client.channels.cache.find(ch => ch.name === '一般').send(jData.events[i].event_url); //イベントURL
        }
    }
}

Disocordbotが起動するタイミングで、通知処理を実行させる

Discordbotには、処理を実行するタイミングがいろいろあります。
今回は、botが起動したタイミングで通知処理を実施します。

sample.js

require('dotenv').config();
global.fetch = require('node-fetch');
const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [Intents.FLAGS.GUILDS] });

 client.on('ready', () => { //起動が正常に行えたら、{}の処理を実施する
     console.log(`Logged in as ${client.user.tag}!`);
     client.channels.cache.find(ch => ch.name === '一般').send("オンラインになりました。\nテスト自動化に関するイベントを通知します。");
     callApi(); //api取得&メッセージ通知を行う
 });

 client.login(process.env.DISCORD_TOKEN) //botトークンを指定

bot起動

以下のコマンドで、起動します

node index.js

実行結果

botを起動すると、以下のようにイベントが通知されます。
エビデンス.png

サンプルコードはGitHubに置いておきます。

今後やりたいこと

  • JSON取得と通知が同じ関数に入っているので、分けたい
  • 今は「テスト自動化」というキーワードだけで検索しているので、Discord側から検索ワードを変えるようにしたい
  • Discord側からも検索が行えるようにしたい
  • 今回は作ることしか専念してなかったため、Jestを使ってテストしてみたい
  • glitch、herokuやawsを使って、定期的に通知するbotにしたい

所感

今まで開発経験がなかったため、このようなbot作りは良い勉強になったと思います。
web開発と比べるとハードルは低いということとDiscord.js Japan User Groupで使い方がまとめられているので、始めやすいかなと思います。fizzbuzzbotからでも良いので試していただければと思います。意外と楽しいですよ^-^

参考資料

0
1
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
1