Externe Kommunikation (Mod?)

German
Post Reply
Tobias_MD
New member
Posts: 1
Joined: Sat May 19, 2018 14:52
In-game: Tobias_MD

Externe Kommunikation (Mod?)

by Tobias_MD » Post

Hallo zusammen,

ich bin ziemlich neu bei Minetest und probiere gerade etwas herum.
Insbesondere die Kommunikation mit/von Usern interessiert mich besonders.

Ich habe verstanden, dass die mail-Mod erlaubt, zwischen Usern auch offline zu kommunizieren.

Jetzt aber meine Frage:
Ist es irgendwie möglich, auch "nach außen" zu kommunizieren?
Also im Idealfall: Jemand betätigt einen Schalter ingame und der Server schickt eine echte Email an eine echte Email-Adresse. Oder ruft ein PHP-Skript auf. Ich denke an eine Art "Klingel", mit der jemand z.B. einen Admin rufen kann.

Gibt es so etwas bzw. geht das überhaupt? Kann mir jemand einen Tipp geben?

Viele Grüße,

Tobias

User avatar
Krock
Developer
Posts: 4649
Joined: Thu Oct 03, 2013 07:48
GitHub: SmallJoker
Location: Switzerland
Contact:

Re: Externe Kommunikation (Mod?)

by Krock » Post

Es ist selbstverständlich möglich, Programme oder Webseiten mit Mods aufzurufen. Aber auf jeden Fall bedingt dies den Zugriff auf die unsicheren (ausnutzbaren) Funktionen wie "os.execute" oder "minetest.request_http_api()".
Also in der minetest.conf Datei die Mod als vertrauenswürdig vermerken: https://github.com/minetest/minetest/bl ... mple#L1384

Der Rest ist dann die Programmierung der Mod, um entweder das Skript oder die Webseite aufzurufen. Bei letzterem ist auch diese Beispielsdefinition hilfreich.
Look, I programmed a bug for you. >> Mod Search Engine << - Mods by Krock - DuckDuckGo mod search bang: !mtmod <keyword here>

User avatar
TalkLounge
Member
Posts: 324
Joined: Sun Mar 26, 2017 12:42
GitHub: TalkLounge
In-game: TalkLounge
Location: Germany

Re: Externe Kommunikation (Mod?)

by TalkLounge » Post

Klar geht das. Nutze ich bereits selbst sehr oft. Funktioniert auch sehr zuverlässig.

Beispiel 1:
Habe mir ein Script geschrieben, was den Server automatisch wieder hochfährt, wenn er crasht. Dannach habe ich eine Zeile eingefügt, welche mir eine Mail schickt(Bash):

Code: Select all

echo "Server ist gerade abgeschmiert" | mail -s "Server: Wildes Land" talklounge@yahoo.de
Beispiel 2:
Ich habe ein Anticheat. Sobald ein Spieler gebannt wird, bekomme ich ebenfalls eine Mail(Lua):

Code: Select all

os.execute('echo "Siehe Titel" | mail -s "Wildes Land Autobann: '.. player:get_player_name() ..'" talklounge@yahoo.de')
Beispiel 3:
Habe mir ein Script geschrieben, womit ich in den IngameChat schreiben kann und alle IngameChat Nachrichten dann im Terminal auftauchen:

Lua:

Code: Select all

local terminaltimer = 0
local lastcount = 0

minetest.register_globalstep(function(dtime)
    terminaltimer = terminaltimer + dtime
    if terminaltimer < 1 then
      return
    end
    terminaltimer = 0
    local count = 0
    local lastline = ""
    for line in io.lines(minetest.get_modpath("serverfunctions") .. "/admin.txt") do
        count = count + 1
        lastline = line
    end
    if count <= lastcount or not string.find(lastline, "-_-") then
      return
    end
    lastcount = count
    count = 0
    for line in io.lines(minetest.get_modpath("serverfunctions") .. "/admin.txt") do
        count = count + 1
        if lastcount == count and string.find(line, "-_-") then
          minetest.chat_send_all("[Server]: ".. string.sub(line, 1, string.find(line, "-_-") - 3))
        end
    end
  end)


minetest.register_on_chat_message(function(name, message)
    local file = io.open(minetest.get_modpath("serverfunctions") .. "/ingame.txt", "a+")
    file:write("\n".. name ..": ".. message .."-_-")
    file:close()
  end)
Bash:

Code: Select all

#!/bin/bash

lastcount=0
start=false
lesedatei="/home/admin/.minetest/worlds/world/worldmods/serverfunctions/ingame.txt"
schreibdatei="/home/admin/.minetest/worlds/world/worldmods/serverfunctions/admin.txt"

while true
do
if ! $start ; then
start=true
lastcount=$(wc -l < $lesedatei)
lastcount=$((lastcount+1))
cat $lesedatei | while read line
do
echo ${line:0:-3}
done
startlastline=$(tail -1 $lesedatei | head -1)
echo ${startlastline:0:-3}
fi
count=$(wc -l < $lesedatei)
count=$((count+1))
lastline=$(sed -n "${count}p" < $lesedatei)
if [[ $count -gt $lastcount && "$lastline" == *"-_-"* ]]; then
lastcount=$count
echo ${lastline:0:-3} 
fi
read -t 0.1 message
if [ "$message" ]; then
echon="$message-_-"
echo -n $'\n'$echon >> $schreibdatei
#tail -n 1 "$schreibdatei" | wc -c | xargs -I {} truncate "$schreibdatei" -s -{}
fi
done

In Planung habe ich noch einen Chat mit einem Webserver. Das sollte aber auch recht einfach gehen, indem ich via Lua:

Code: Select all

minetest.register_on_chat_message(function(name, message)
    os.execute('wget http://talklounge.bplaced.net/MTChat.php?name='.. name ..'&message='.. message)
end)
Die PHP-Datei sollte man natürlich so benennen, dass kein anderer herausfindet, wie sie heißt, weil sonst jeder Chatmeldungen fälschen könnte. Von Browser in IngameChat gehts auch, indem man alle paar Sekunden eine Seite via wget öffnet und die neuen Chatmeldungen ausliest.
Subgames Server: Sky World Subgames German Survival Server: Wildes Land 2 E-Mail: talklounge@yahoo.de

User avatar
Linuxdirk
Member
Posts: 3217
Joined: Wed Sep 17, 2014 11:21
In-game: Linuxdirk
Location: Germany
Contact:

Re: Externe Kommunikation (Mod?)

by Linuxdirk » Post

TalkLounge wrote:Die PHP-Datei sollte man natürlich so benennen, dass kein anderer herausfindet, wie sie heißt, weil sonst jeder Chatmeldungen fälschen könnte.
Oder noch besser gegen missbräuchliche Nutzung absichern.

Und wenn Minetest-Server und Webserver auf demselben Host laufen, die PHP-Datei außerhalb des öffentlichen Verzeichnisses des Webservers ablegen.

User avatar
orwell
Member
Posts: 958
Joined: Wed Jun 24, 2015 18:45
GitHub: orwell96
IRC: orwell96_mt
In-game: orwell
Location: Raxacoricofallapatorius

Re: Externe Kommunikation (Mod?)

by orwell » Post

Es gibt auch einen IRC-Mod, der den Ingame-Chat mit einem IRC-Channel koppelt.
Lua is great!
List of my mods
I like singing. I like dancing. I like ... niyummm...

Post Reply

Who is online

Users browsing this forum: No registered users and 4 guests