7DaysToDieサーバーのステータス(ゲーム内時刻、及び接続プレイヤー数)を表示するDiscordボットです。
- 事前準備
- 7DaysToDieサーバにServer fixes(MOD)を導入する。
- Ubuntuにnode.jsをインストールする。(参考:Ubuntuに最新のNode.jsを難なくインストールする)
- Ubuntuにdiscord.jsをインストールする。(参考:discord.jsのインストール)
- Discord Botのアカウントを作成する。(参考:簡単なDiscord Botの作り方(初心者向け))
- 参考のglitchは使わないので読み飛ばしてOK
- Bot導入
- 下記index.jsの【】部分を書き換える。
- node.jsでindex.jsを実行する。(例:node ./index.js)
- systemdを使って管理すると便利です。
- 自分の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をここに書く】');