Featured image of post 利用Server酱实现Minecraft服务器日志微信提醒

利用Server酱实现Minecraft服务器日志微信提醒

在Minecraft服务器日常使用中,我们常常想要知道服务器上发生了什么,有谁进来了,有谁退出去了,或者是服务器自己是不是出了错误。在这篇博客中我将会简要介绍如何利用Server酱实现Minecraft服务器日志微信提醒。

API申请

首先我们需要前往Server酱官网注册账号以获得自己的SCKEY:

Screenshot_2020-04-22 首页 Server酱.png

可以直接使用Github登录,十分方便。登陆后选择微信推送,点击绑定。用自己的微信扫描二维码,关注公众号方糖,然后在扫描一次即可绑定,注意要回到网页点击检查结果并确认绑定

然后切换到发送消息栏,复制自己的SCKEY。

Docker服务器配置

对于使用Docker搭建服务器的用户来说,配置十分方便且不需要暂停服务器。

首先我们使用docker ps指令查找到Minecraft服务端容器名称,如图为mcserver

Screenshot_2020-04-22 首页 Server酱.png

然后新建一个Python脚本(没有Python环境?参考:Linux下搭建Python环境),输入以下内容并将对应内容改为自己的信息(去掉<>):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import threading
import time
import urllib.request
import urllib.parse
import os

last_msg = ""
def time_handler():
    msg = os.popen("docker logs --tail 1 <服务端容器名称>")
    msg = msg.read()
    print(msg[:-1])
    global last_msg
    if msg[-26:] != "Running AutoCompaction...\n" and msg != last_msg:
        urllib.request.urlopen("https://sc.ftqq.com/<你的SCKEY>.send?text=" + urllib.parse.quote(msg[27:-25])) # 其中 msg[27:-25] 是特别为玩家上线/下线提醒设置的,如果希望看到完整信息,请改为 msg
    else:
        print("Nothing to do")
    last_msg = msg
    global timer
    timer = threading.Timer(5, time_handler)
    timer.start()

time_handler()

然后在终端中输入nohup python3 <你的脚本名称>并运行即可。

全局服务器配置

如果你使用nohup运行服务器,那么直接使用以下代码即可:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import threading
import time
import urllib.request
import urllib.parse
import os

last_msg = ""
def time_handler():
    msg = os.popen("tail -n 1 nohup.out") # 如果你自定义了nohup输出地址,请修改
    msg = msg.read()
    print(msg[:-1])
    global last_msg
    if msg[-26:] != "Running AutoCompaction...\n" and msg != last_msg:
        urllib.request.urlopen("https://sc.ftqq.com/<你的SCKEY>.send?text=" + urllib.parse.quote(msg[27:-25])) # 其中 msg[27:-25] 是特别为玩家上线/下线提醒设置的,如果希望看到完整信息,请改为 msg
    else:
        print("Nothing to do")
    last_msg = msg
    global timer
    timer = threading.Timer(5, time_handler)
    timer.start()

time_handler()

如果你使用screen运行服务端,那么你需要先结束原来的服务端并用exit命令退出screen环境。然后运行screen -L -dmS mc建立自动日志screen环境。然后通过screen -r mc进入screen环境中手动启动服务器。

然后按Ctrl+A,D离开screen环境,用ls命令可以看到当前目录中出现了screenlog.0文件(也可能是screenlog.1如此类推),新建Python脚本(没有Python环境?参考:Linux下搭建Python环境),输入:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import threading
import time
import urllib.request
import urllib.parse

last_msg = ""
def time_handler():
    msg = open("screenlog.0") # 或者screenlog.1以此类推
    msg = msg.readlines()[-1]
    print(msg[:-1])
    global last_msg
    if msg[-26:] != "Running AutoCompaction...\n" and msg != last_msg:
        urllib.request.urlopen("https://sc.ftqq.com/<你的SCKEY>.send?text=" + urllib.parse.quote("[Sunny s World] " + msg[27:-25]))
    else:
        print("Nothing to do.")
    last_msg = msg
    global timer
    timer = threading.Timer(1, time_handler)
    timer.start()

time_handler()

然后在终端中输入nohup python3 <你的脚本名称>即可。

参考链接:

  1. https://sc.ftqq.com/
  2. https://blog.futrime.com/hacking/302.html
  3. https://blog.futrime.com/hacking/131.html
  4. https://docs.docker.com/
Built with Hugo
主题 StackJimmy 设计