LoginSignup
2
2

More than 5 years have passed since last update.

Minecraftサーバーのログインを検知してSlackを飛ばすBotを召喚する

Posted at

経緯

最近身内マイクラ鯖を立てまして結構みんな楽しんでやってくれているようなのですが、みんなで一緒にできないことが多いっぽいのです。
誰かがログインして通知をもらえたらみんな幸せなのではと思ったのでBotを召喚することにしました。

開発環境

  • DockerのArch Linux (動作環境: Ubuntu 18.04 Server)
  • Python 3.6.6

概要

  1. Minecraftからデータをn秒間隔で取得。

  2. SlackのWebhookを叩いて通知

  3. ここから簡単にWebhookURLを取得できます。

中身

import time
import json
import requests
import threading
from lib.slack import *



# Polling Motsunabe minecraft
def motsunabeMinecraft():
    preHowManyPlayer = 0
    prePlayers = []
    players = []
    while True:
        res = requests.get("https://api.mcsrvstat.us/1/example.com")
        data = res.json()
        howManyPlayer = data["players"]["online"]
        if howManyPlayer > 0:
            players = data["players"]["list"]

        if howManyPlayer > preHowManyPlayer:
            ## Someone has logined.
            diffSet = set(players) - set(prePlayers)
            loginUsers = list(diffSet)
            for loginUser in loginUsers:
                send_slack("マイクラ鯖へ{}がログインしました。".format(loginUser))

        if howManyPlayer < preHowManyPlayer:
            ## Someone has logouted.
            diffSet = set(prePlayers) - set(players)
            loginUsers = list(diffSet)
            for loginUser in loginUsers:
                send_slack("マイクラ鯖から{}がログアウトしました。".format(loginUser))

        print("Number of login players is {}".format(howManyPlayer))
        preHowManyPlayer = howManyPlayer
        prePlayers = players
        time.sleep(60)


if __name__ == "__main__":
    threading.Thread(target=motsunabeMinecraft).start()

    print("Connected..")

ちなみにThreadingをつかっているのは同時にDiscord.pyのログインBotを動かしているためです。単体で動かす場合は必要無いとおもわれ。

結果

キャプチャ.PNG

うるさくなりすぎてみんなミュートにするのでありました。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2