Discord用ステータスボット

7DaysToDieサーバーのステータス(ゲーム内時刻、及び接続プレイヤー数)を表示するDiscordボットです。

  • Bot導入
    1. 下記index.jsの【】部分を書き換える。
    2. node.jsでindex.jsを実行する。(例:node ./index.js)
      • systemdを使って管理すると便利です。
    3. 自分のDiscordサーバでBotがオンラインになっていればOK。
//index.js
//宣言
const Discord = require('discord.js');
const client = new Discord.Client();
const guild = new Discord.Guild(client);
var request = require('request');
var reqoption_gt ={
        url: 'http://【server fixesのwebマップのアドレスをここに書く】/api/executeconsolecommand?adminuser=【webpermissions.xmlの<token name>の値をここに書く】&admintoken=【webpermissions.xmlの<token token>の値をここに書く】&command=gt',
        method: 'GET',
        json: true
};
var reqoption_lp ={
        url: 'http://【server fixesのwebマップのアドレスをここに書く】/api/executeconsolecommand?adminuser=【webpermissions.xmlの<token name>の値をここに書く】&admintoken=【webpermissions.xmlの<token token>の値をここに書く】&command=lp',
        method: 'GET',
        json: true
};

var iPlayersNum = 0;

//イベント
client.on('ready', () => {	//起動後1回だけ実行される関数
	gt();
	lp();
	setInterval(intervalFunc, 30000);
});

//関数
function intervalFunc(){	//起動後30秒に1回実行される関数
	gt();
	lp();
}

function gt()
{
  request(reqoption_gt, function (error, response, body){	//HTTPのGETコマンドでwebマップ付属のAPIを叩いてゲーム内時刻を取得
          if (error != null)
          {
                client.guilds.cache.get("【DiscordのサーバIDをここに書く】").me.setNickname("サーバ停止中");
          }
          else
          {
                client.guilds.cache.get("【DiscordのサーバIDをここに書く】").me.setNickname(body.result);
          }
  })
}

function lp()
{
  request(reqoption_lp, function (error, response, body){	//HTTPのGETコマンドでwebマップ付属のAPIを叩いてプレイヤー一覧を取得
          if (error != null)
          {
		iPlayersNum = 0;
		client.user.setActivity("", "");
          }
          else
          {
		iPlayersNum = body.result.split("Total of ")[1].split(" in ")[0];
		client.user.setActivity("プレイヤー" + iPlayersNum + "人", { type: 'WATCHING' });      //PLAYING, STREAMING, LISTENING, WATCHING
          }
  })
}

client.login('【Discordのbotのtokenをここに書く】');