#使うもの
$ npm i weather-js
weather-js
$ npm i discordjs/discord.js
masterブランチのDiscord.js
#コードたち
const args = message.content.slice(/*ここにプレフィックス*/).trim().split(/ +/g);
weather.find({search: args[0], degreeType: 'C'}, function(err, result) {
if (err) message.channel.send(err);
if (result.length === 0) {
message.channel.send('**場所を取得できませんでした**')
return;
}
var current = result[0].current;
switch(current.skytext){
case "Mostly Sunny":
var skytext = "ほぼ晴れ";
break;
case "Cloudy" :
var skytext = "曇り";
break;
case "Partly Cloudy":
var skytext = "晴れのち曇り";
break;
case "Sunny":
var skytext = "晴れ";
break;
case "Clear" :
var skytext = "雲1つない快晴";
break;
case "Mostly Clear":
var skytext = "ほぼ快晴";
break;
case "Mostly Cloudy":
var skytext = "ほぼ曇り";
break;
case "Partly Sunny":
var skytext = "所により晴れ";
break;
case "Light Rain":
var skytext = "小雨";
break;
default:
var skytext = current.skytext;
break
}
const embed = new Discord.MessageEmbed()
.setDescription('**' + skytext + '**')
.setAuthor(`${current.date}の${current.observationpoint}の天気`)
.setThumbnail(current.imageUrl)
.setColor(Color)
.addField('温度',`${current.temperature}℃`, true)
.addField('体感温度', `${current.feelslike}℃`, true)
.addField('風',current.winddisplay, true)
.addField('湿度', `${current.humidity}%`, true);
message.channel.send(embed);
});
#動作
#説明
weather.findのところはweather-jsの機能で、天気を探しているやつ。
searchのところは検索する場所(地名),DegreeTypeはCとFのやつ。Cをお勧めする
if(err)からswitchの場所までは地名を検索できないまたはエラーが出た時の動作。
switchはそのままweather-jsから引っ張ると英語なので翻訳した。
翻訳しなくていいなら、switchのところをぜーんぶ消してembedのsetDescriptionをcurrent.skytextに変える。
#最後に
天気を取得するとき、APIの仕様変更やいろいろのせいで泥沼にハマってしまったので、記事を作ってみました。
実は、これ初めての記事なので悪い部分があれば指摘をお願いします。
もしこの記事を見てDiscord.jsに興味が沸いたら、
Discord.js全般のコミュニティがあるのでそこでさらに詳しい情報が得られると思います。
#参考にしたサイト
Discord.jsのライブラリ
weather-jsのnpmのサイト