ポケモンGOで会社の近くに出現したポケモンをSlack通知させた話
ietty社内でも人気のポケモンGOですが、会社の近くにレアポケモンが出現していないかポケビジョンばかり見て仕事にならなくなってしまったので、レアポケモンが出現した時にSlackにメンション付きで通知するようにしました。
とりあえず準備
Slack BOTはHubotで開発し、サーバには無料で使えるHerokuを使います。
HubotはNode.jsで開発ができるので、ポケモンGOのAPI取得部分はjavascriptでポケモンGOのAPIを扱えるPokemon-GO-node-apiを使います。
github.com
※npmに公開されているのでnpm install pokemon-go-node-api
で簡単にインストールできます。
ソースコード
module.exports = (robot) -> PokemonGO = require('pokemon-go-node-api') # JSON(pokemon-go-node-apiの中にあるpokemon.jsonを日本語化したもの pokemonJson = require('./pokemon.json') # 通知先チャンネル @pokemonUser = room: '#hogehoge' # ポケモン捜索先の位置情報 location = { type: 'coords', coords: { latitude: 35.64780246266644, longitude: 139.7102701663971, altitude: 10 } } # 認証用情報(登録時のgmailのアカウントを入れてください) username = 'hogehoge@gmail.com' password = '12345678' provider = 'google' # レアポケモンが出た時に飛ばすメンション @pokemonMention = '@hogehoge' # 重複して出さないように配列でチェック duplicateChackArray = []; # APIにリコネクトがないので接続切れを起こさないように10秒に1回ログインして情報を収集する setInterval(() => io = new PokemonGO.Pokeio() io.init(username, password, location, provider, (err) => if err console.log(err) console.log('1[i] Current location: ' + io.playerInfo.locationName) console.log('1[i] lat/long/alt: : ' + io.playerInfo.latitude + ' ' + io.playerInfo.longitude + ' ' + io.playerInfo.altitude) io.GetProfile((err, profile) => if err console.log(err) console.log('1[i] Username: ' + profile.username) io.Heartbeat((err, hb) => if (err) console.log(err) for val in hb.cells if val.NearbyPokemon for item in val.NearbyPokemon pokemon = pokemonJson.pokemon[parseInt(item.PokedexNumber)-1] if duplicateChackArray.indexOf(item.EncounterId.toString()) == -1 duplicateChackArray.push(item.EncounterId.toString()) # ポケモンのレアリティによってメンションを飛ばすか判定 if pokemon.egg == '10 km' || pokemon.egg == 'Not in Eggs' mention = @pokemonMention else mention = '' robot.send @pokemonUser, mention + '\n' + pokemon.name + '(' + pokemon.egg + ') を ' + item.DistanceMeters.toString() + ' メートル圏内に発見!\n' + pokemon.img ) ) ) , 10000)
できたもの
ポケモンの名前の横に出ている◯kmはどの卵から出るポケモンかを表示しています。 その数値からレアリティを判定して、10kmの卵のポケモンと卵から出ないポケモンだけ自分にメンションを飛ばすようにしました。
メンションが飛んできたらポケビジョンで位置を確認してダッシュで捕まえに行きましょう!