Externe Kommunikation (Mod?)

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

Externe Kommunikation (Mod?)

by Tobias_MD » Sat May 19, 2018 15:18

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: 4151
Joined: Thu Oct 03, 2013 07:48
Location: Switzerland
GitHub: SmallJoker

Re: Externe Kommunikation (Mod?)

by Krock » Sat May 19, 2018 15:30

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.
Mod Search Engine - Mods by Krock - DuckDuckGo mod search bang: !mtmod <keyword here>
 

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

Re: Externe Kommunikation (Mod?)

by TalkLounge » Sun May 20, 2018 10:56

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: 1658
Joined: Wed Sep 17, 2014 11:21
Location: Germany
In-game: Linuxdirk

Re: Externe Kommunikation (Mod?)

by Linuxdirk » Sun May 20, 2018 11:05

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: 718
Joined: Wed Jun 24, 2015 18:45
Location: Raxacoricofallapatorius
In-game: orwell

Re: Externe Kommunikation (Mod?)

by orwell » Mon May 28, 2018 15:13

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...
 


Return to Deutsch



Who is online

Users browsing this forum: No registered users and 1 guest