Listing 4 baut dieses Grundgerüst zu einem funktionsfähigen Skript aus, das sich quasi als Anrufbeantworter betätigt: Nachrichten Ihrer Kontakte quittiert es mit der Antwort, dass Sie gerade beschäftigt sind und sich später noch einmal melden. Dazu verwendet es das Ereignis on_msg_receive von Tg (Zeilen 3 bis 14). Alle anderen Funktionen bleiben leer, so wie in Listing 3.
Listing 4
our_id = 0
function on_msg_receive (msg)
if msg.out then
return
end
if msg.text == nil then
return
end
if msg.unread == 0 then
return
end
send_msg(msg.from.print_name, "Bin gerade beschäftigt, melde mich später.")
end
[...]
Weil der Kommandozeilenclient auch die von Ihnen verschickten Nachrichten anzeigt, gilt es, diese zu ignorieren (Zeilen 4 bis 6): Anderenfalls produzieren Sie eine Endlosschleife, in der Tg auf jede von Ihnen verschickte Nachricht mit einer weiteren reagiert, die wiederum selbst eine automatische Antwort auslöst, und so weiter.
Erhalten Sie eine leere Nachricht ohne jeglichen Text, können Sie davon ausgehen, dass es sich dabei um ein Versehen handelt. Solche Nachrichten ignorieren Sie (Zeilen 7 bis 9). Sinngemäß dasselbe gilt für Nachrichten, die Sie bereits gelesen haben (Zeilen 10 bis 12).
Trifft keines der drei Ausschlusskriterien zu, dann versendet die Funktion in Zeile 14 den Antworttext. Dazu benötigt sie als Parameter den Namen desjenigen, der Ihnen die Nachricht hat zukommen lassen (msg.from.print_name) sowie den zu versendenden Text ("Bin gerade**...").
Wie ein entsprechender Nachrichtenaustausch aussehen kann, zeigt Abbildung 3. Eine Reihe weiterer Vorlagen und Anregungen zum Erstellen eigener Skripte bietet die im Quellcode-Archiv von Tg enthaltene Datei test.lua.
Fazit
Ein für Smartphones gedachtes Messaging-System auf der Kommandozeile eines RasPis laufen zu lassen, erscheint auf den ersten Blick etwas widersinnig – bis man auf die vielfältigen Möglichkeiten stößt, die die ereignisgesteuerten Lua-Skripte bieten. So ließe sich Tg beispielsweise nutzen, um nachrichtengesteuert Prozesse auf dem Mini-Rechner anzustoßen beziehungsweise zu beenden oder sogar über die GPIO-Schnittstelle externe Geräte zu kontrollieren.
Infos
- Telegram: https://telegram.org
- Telegram für Linux: https://github.com/vysheng/tg
- Lua: http://www.lua.org






