discord.jsを使ったbot制作

かんたんです。やってみましょう。
環境構築
作業用のディレクトリで以下を実行します。npm init
の時になにやら色々聞かれますが、適宜判断してください。
touch ./app.js npm init npm i discord.js
APIで使うトークンなどの設定ファイルはプログラム本体に直接記述するのではなく、別ファイルにまとめて記述すべきです。
以下の内容を、./config.json
に記述してください。
{ "discord": { "token": "xxxxxxxxxxxxxxxx" } }
プログラムを記述
以下の内容を./app.js
に書いていきます。
内容はソース内のコメントを読んで理解してください。
const Discord = require('discord.js'); const conf = require('./config.json'); const client = new Discord.Client(); // ログを出力する関数 const putLog = async msg => { console.log('[ LOG ] [ ' + new Date().toLocaleString('ja') + ' ] : ' + msg); return }; // チャンネルへメッセージを送信する関数を返す const createSendMsg = channel => { return async msg => { try { await channel.send(msg); return } catch(err) { return Promise.reject('ERROR in sending message') } } }; // メッセージにリアクションを追加する関数を返す const createAddReact = msg => { // 引数は配列もしくは文字列 return async emoji => { try { if (Array.isArray(emoji)) { // emojiが配列だった場合 emoji.forEach(async i => await msg.react(i)); } else { // emojiが配列でなかった場合 ( async i => await msg.react(i) )(emoji); }; return } catch(err) { return Promise.reject('ERROR in adding reaction') } } }; // Discordに接続したらログを出力 client.on('ready', () => putLog('Connected to discord.')); // 新規メッセージ受信時 client.on('message', async msg => { // 送信元が(自分を含め)botだったら処理を中断(プログラムは実行され続ける) if (msg.author.bot) return // 先の関数にチャンネルを渡すことで、 // そのチャンネルへメッセージを送信する関数を作成する。 const sendMsg = createSendMsg(msg.channel); // 同じく、メッセージへリアクションをつける関数を作成する。 const addReact = createAddReact(msg); // メッセージの内容を解析 switch (true) { // 先頭が'BotHelp'である場合(大文字・小文字は区別しない) case /^BotHelp/i.test(msg.content) : // botのみが送信できる特別なメッセージ[ embed ]を送信する。 await sendMsg({embed: { color: 0x114514, title: 'ほげほげbot', url: 'https://example.com', description: '使い方の簡単な説明', fields: [ { name: '挨拶', value: '`おはよう`もしくは`こんにちは`もしくは`こんばんは`' }, { name: '現在時刻', value: '`卍時刻`' } ] }}); break // メッセージの先頭が'卍時刻'だった場合 case /^卍時刻/i.test(msg.content) : await sendMsg('只今の時刻は ' + new Date().toLocaleString('ja') + ' です!'); await addReact('⏰'); break // 先頭に'BotHelp'も'卍時刻'も無かった場合 default : switch (msg.content) { // メッセージが'おはよう'だった場合 case 'おはよう' : await sendMsg('おはよう!!'); break // 同じく'こんにちは'だった場合 case 'こんにちは' : await sendMsg('こんにちは〜'); break // 同じく'こんばんは'だった場合 case 'こんばんは' : await sendMsg('こんばんは。'); break }; }; }); // Discordへ接続 client.login(conf.discord.token);
実行
node ./app.js
エラーが出たら確実に貴方が悪いです。コードを見直しましょう。
サービスとして登録
Linuxであればrunitを使用してサービス化すると良いでしょう。
sudo apt install runit-systemd sudo mkdir /etc/sv/discord_bot echo -e '#!/bin/bash\nexec node /path/to/app.js' | sudo tee /etc/sv/hoge/run sudo chmod +x /etc/sv/hoge/run sudo ln -s /etc/sv/hoge /etc/service/hoge
また、runitで
・プロセス番号と稼働時間を確認するには
sudo sv s /etc/service/hoge
・再起動するには
sudo sv t /etc/service/hoge
・停止・無効化は
sudo sv d /etc/service/hoge
sudo rm /etc/service/hoge