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
Externe Kommunikation (Mod?)
- Krock
- Developer
- Posts: 4649
- Joined: Thu Oct 03, 2013 07:48
- GitHub: SmallJoker
- Location: Switzerland
- Contact:
Re: Externe Kommunikation (Mod?)
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.
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>
- TalkLounge
- Member
- Posts: 324
- Joined: Sun Mar 26, 2017 12:42
- GitHub: TalkLounge
- In-game: TalkLounge
- Location: Germany
Re: Externe Kommunikation (Mod?)
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):
Beispiel 2:
Ich habe ein Anticheat. Sobald ein Spieler gebannt wird, bekomme ich ebenfalls eine Mail(Lua):
Beispiel 3:
Habe mir ein Script geschrieben, womit ich in den IngameChat schreiben kann und alle IngameChat Nachrichten dann im Terminal auftauchen:
Lua:
Bash:
In Planung habe ich noch einen Chat mit einem Webserver. Das sollte aber auch recht einfach gehen, indem ich via Lua:
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.
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
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')
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)
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)
Subgames Server: Sky World Subgames German Survival Server: Wildes Land 2 E-Mail: talklounge@yahoo.de
- Linuxdirk
- Member
- Posts: 3217
- Joined: Wed Sep 17, 2014 11:21
- In-game: Linuxdirk
- Location: Germany
- Contact:
Re: Externe Kommunikation (Mod?)
Oder noch besser gegen missbräuchliche Nutzung absichern.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.
Und wenn Minetest-Server und Webserver auf demselben Host laufen, die PHP-Datei außerhalb des öffentlichen Verzeichnisses des Webservers ablegen.
- 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?)
Es gibt auch einen IRC-Mod, der den Ingame-Chat mit einem IRC-Channel koppelt.
Who is online
Users browsing this forum: No registered users and 4 guests