Telegram Messenger - Nachrichten per Shellskript verarbeiten

  • Hier die längst überfällige Anleitung um Telegram Nachrichten mit einem Shellskript zu verarbeiten.


    Das Interessanteste dabei ist bestimmt wie die Nachricht (per Luaskript) an das Shellskript weitergereicht
    wird und wie das Shellskript antwortet. ;)
    Das letztere hab ich <--hier--> schon versucht zu erklären deshalb halt ich mich hier kurz.
    Ausserdem zeige ich zum Schluss noch kurz wie ich den Telegram Client über die /etc/rc.local automatisch starte.


    Voraussetzung:
    Der Telegram Client wurde eingerichtet und funktioniert soweit. - Ihr habt also schon einen Kontakt
    hinzugefügt und erste Nachrichten verschickt. -> Installation/Erste Schritte
    Den privaten Schlüssel des Telegram Servers habe ich wie <-hier-> ganz am Anfang beschrieben ins
    Verzeichnis /etc/telegram-cli kopiert, falls ihr euch wundert wieso ich den nicht mit angegeben muss. :)
    "Installiert" ist der Client bei mir direkt im Heimverzeichnis (/home/pi/tg).


    Ausserdem wird damit das Shellskript antworten kann das Programm netcat benötigt (sudo apt-get install netcat-traditional).



    -------------------------------
    1. Das Luaskript


    Um die Nachrichten an das Shellskript weiter zu geben wird zuerst eine Kopie der test.lua so angepasst das
    es alle Nachrichten die von einem bestimmten Benutzer kommen an das Shellskript weiterreicht.


    Zusätzlich markiert das Luaskript auch noch alle angekommenden Nachrichten als gelesen. (Auf dem Smartphone
    wird ein gelesen Haken angezeigt)


    Also wird als erstes eine Kopie der test.lua erstellt...

    Code
    cp /home/pi/tg/test.lua /home/pi/tg/fwd.lua


    ...und dann die Funktion on_msg_receive darin mit der unten gezeigten ersetzt.


    Angepasst werden muss der Name des Benutzers von welchem Nachrichten akzeptiert werden sollen (hier 'Joh'),
    sowie gegebenenfalls der Pfad zum Skript das auf die Nachrichten reagieren soll (hier '/home/pi/tg/msg-parser.sh').


    /home/pi/tg/fwd.lua



    "weitergereicht" bedeutet in diesem Fall das mit jeder ankommenden Nachricht das Skript 'msg-parser.sh'
    mit der angekommenen Nachricht als Parameter aufgerufen wird.


    Ausserdem wird das Skripte durch das & Zeichen als eigenständiger Prozess gestartet, es wird also nicht
    gewartet bis das Shellskript wieder beendet wurde (was je nach auszuführendem Befehl etwas dauern könnte).
    Das heißt es können mehrere Nachrichten/Befehle gleichzeitig verarbeitet/ausgeführt werden.



    -------------------------------
    2. le Shellskript


    Dazu hab ich im gleichen Verzeichnis in dem auch die fwd.lua liegt ein Shellskript mit dem Namen 'msg-parser.sh' angelegt.
    Das Skript ist sehr einfach gehalten und unterstützt nur eine Hand voll Befehle, kann aber recht einfach erweitert werden.


    Das Skript kann natürlich auch ein beliebiges anderes Skript oder Programm sein.


    Angepasst werden muss der Kontakt Name des Empfängers der Antworten (hier Joh),
    sowie gegebenenfalls der Port auf welchem der Telegram Client auf Befehle lauscht (hier 54321).


    /home/pi/tg/msg-parser.sh


    Unterstütze Befehle:
    'ping' - Antwortet mit 'Pong'
    'uptime' - Schickt die Ausgabe vom Befehl 'uptime' zurück
    'screenshot' - Schickt einen mit scrot gemachten screenshot zurück (dauert ca. 5 Sekunden)
    'gpio high' - Setzt den gpio 6 auf high
    'gpio low' - Setzt den gpio 6 auf low
    'gpio toggle' - Wechelt den Zustand von gpio 6
    'gpio read' - Schickt den Zustand von gpio 6 zurück (0 oder 1)


    Damit nicht nur die Befehle 'ping' und 'uptime' funkionieren muss für 'screenshot' 'scrot' installiert sein(sudo apt-get install scrot) und für das setzten und lesen der GPIO Pins wiringPi.
    (Ihr könnt (und sollt) das ja umbauen wie ihr es braucht ;) )


    Da die Nachricht in Kleinbuchstaben umgewandelt wird können die Befehle beim testen groß oder klein geschrieben
    werden. (Praktisch da auf dem Smartphone immer mit einem Grossbuchstabe begonnen wird)


    Wie das mit dem Antworten funktioniert hab ich <-hier->(Variante 2 - Über eine Port Verbindung) schon kurz beschrieben.



    -------------------------------
    3. Telegram Client automatisch starten


    Da der Telegram Client ja am besten ständig im Hintergrund laufen und auch beim Systemstart mitstarten
    sollte, zeig noch kurz wie ich das über die /etc/rc.local gemacht habe:
    Falls ihr eine anderen Weg gewählt habt könnt ihr natürlich auch diesen verwenden. Am besten wäre wohl
    wenn man den Client wie <--hier--> beschrieben wird startet. (hab ich aber noch nicht getestet)


    Angepasst werden müssen der Pfad zu telegram-cli, der Pfad zum Luaskript sowie der Benutzer unter welchem der Telegram Client laufen soll (hier pi).


    /etc/rc.local

    Code
    ########################################
    # Telegram Client starten
    ########################################
    su pi -c "/home/pi/tg/telegram-cli -s /home/pi/tg/fwd.lua -d -D -E -R -P 54321 -W" &
    ########################################


    Das wichtigste dabei ist es einen Port zu öffnen (-P 54321). Da das ja dem Shellskript ermöglicht zu antworten.


    Mehr Infos zu den einzelnen Parametern bekommt man mit 'telegram-cli -h'



    -------------------------------
    Falls was nicht klappt oder unklar ist bitte gleich bescheid geben.



    -------------------------------
    Quellen:
    http://www.forum-raspberrypi.d…erry?pid=125883#pid125883
    https://github.com/vysheng/tg



    Viel Spass beim testen und erweitern,
    -- Joh

    DON'T PANIC!

    Edited once, last by joh.raspi ().

  • Guten Morgen @ all und ersteinmal ein Dickes Danke an joh.raspi für das tolle Tutorial.


    In der letzter Woche habe ich mich intensiver mit dem Telegram Client beschäftigt. Auf meinem pi (b+) mit wheezy läuft dieser soweit ganz gut. Was habe ich bereits geschafft?


    - automatischer Start per Cron bei jedem Reboot
    - automatische Text-Antwort auf commands (ich sende /ping und erhalte eine Antwort z.B. pong)


    Wo hänge ich aktuell?


    Um den Telegram-Dienst flexibiler nutzen zu können möchte ich mit den commands auch Skripte anstossen. Bedeutet also, wenn ich den Befehl /ip sende, möchte ich mir die aktuelle externe IP ermitteln und zusenden lassen. Das dazugehörige Skript ip-telegram.sh habe ich bereits erstellt und kann problemlos manuell gestartet werden. In diesem Skript wird die IP ermittelt und auch automatisch geschickt.


    Im nächsten Step habe ich diese Skript nun in das lua-skript eingearbeitet, welches ja automatisch auf die eingehenenden commands reagiert:


    Code
    if (msg.text=='/ip' or msg.text=='/Ip') then
    os.execute (string.format("/home/pi/skripte/tg/ip-telegram.sh \"%s\" &", msg.text))
    end


    Nach dem Starten von telegram-cli (es werden keine Fehlermeldungen ausgegeben) sende ich den command /ip per telegram und erhalte auch prompt die externe IP per Telegram zurückgeschickt. Problem dabei, nach dem Ausführen des Skriptes hängt sich telegram-cli auf. Erst nach einem Neustartet tut er wieder für ein einmaliges Ausführen des Skriptes seinen Dienst. Die anderen Text-commands können problemlos mehrfach hintereinander gesendet werden, nur bei den Skripten ist nach einem einmaligen Ausführen Schluss.


    In der Konsole von telegram-cli erhalte ich die folgende Ausgabe:



    Ich habe die Ausführung des Skriptes auch mit anderen Skripten getestet, welche aber alle zu dem gleichen Ergebnis führen. Wenn die Bash Skripte manuell gestartet werden funktionieren diese problemlos. Hat jemand eine Idee wie ich hier weiter komme?


    Grüße Micky
    Automatisch zusammengefügt:[hr]
    Ich glaube ich konnte es gerade selbst lösen... Wenn das Skript über folgenden Command ausgeführt wird, funktioniert auch das mehrmalige Ausführen:


    Code
    if (string.lower(msg.text) == '/ip') then
          local handle = io.popen(" /home/pi/skripte/tg/ip-telegram.sh")
          local res = handle:read("*a")
      handle:close()
      end


    Werde es beobachten und würde mich ggfs. nochmal melden. Vielleicht hilft dem ein oder anderen diese Info.


    LG Micky

    Edited once, last by Micky ().

  • Hallo...


    Ich wollte nun (nicht ganz 2 Jahre nach Erstellung dieses Tuts) dieses Mal durcharbeiten..
    Allerdings ist in dieser Zeit schon ne Menge passiert...
    (Raspian Jessie, ggf neue Telegram Version, etc..)


    Daher mal meine Frage in wie weit dieses tut noch "verwendbar" ist...


    LG..

  • Hi Joh.


    Vielen Dank für Deine Antwort..


    Bei deinem verlinkten Script Steig ich dann komplett aus...
    (Raspi Anfänger mit bis dato 0 Erfahrung in Python)
    Bei der "alten Variante" hab ich das noch halbwegs zusammen bekommen was der da treibt...


    Das neue Teil von dir ist ein Buch mit 7 siegeln...


    Könntest Du das evtl mal entsprechend mit Kommentaren versehen?
    Könnte evtl helfen in Python einzusteigen und die darin benutzten Befehle zu verstehen...


    Danke...
    Gruß..


    P.S. Wünsche frohe Weihnacht gehabt zu haben + guten Rutsch ins neue Jahr 2017...

  • Hi,
    hab gerade gemerkt dass ich das Beispiel falsch verstanden hatte. Das macht es nicht wirklich einfacher.
    Ich würd es also doch wie bisher machen.


    Was hast du denn genau vor?


    Ps: Danke, ebenfalls!

    DON'T PANIC!

  • Hi Joh...


    Ich möchte diverse 433,92MHz Funksteckdosen damit schalten...


    Mit den mitgelieferten Fernbedienungen kann man ja immer nur 4 Stück einzeln schalten... mit dem Raspi geht da deutlich mehr... ;))


    LG

  • Hallo Joh...


    Hab Dein Tut (hoffentlich) vollständig durchgearbeitet...
    Telegram startet fehlerfrei mit der fwd.lua
    Auch die msg_parser.sh ist vorhanden...


    Ich kann via Telegram Nachrichten versenden & empfangen...


    Nur antwortet der Raspi nicht auf meine Befehle...


    Woran kanns liegen??


    LG...

  • Gelöst...


    Deine Pfadangabe bezieht sich wohl auf eine ältere Version von Telegram


    nach überprüfen der Pfade der telegram-cli stellte ich dann fest, das diese wohl durch ein Update in den bin Unterordner gewandert sein muss...


    Allerdings startet Telegram nicht automatisch mit, wenn der Raspi hochfährt... (/etc/rc.local)


    Denke werde per crontab den Start von Telegram anstoßen...

  • Hallo...


    Habt dann inzwischen auch geschafft das der Raspi auf Anweisungen via Telegram anfängt meine Funksteckdosen an und aus zu knipsen...


    Code
    "!dose1 ein")
     echo "msg $empf Schalte dose1  ein.." | $cmd
     cd /home/pi/433Utils/RPi_utils/
     ./codesend 123456
     echo "msg $empf dose1 eingeschaltet.." | $cmd
    ;;


    Würde allerdings gern über einen hilfebefehl eine liste der unterstützten befehle vom Raspi abfragen wollen.. Da ich aber jeden Befehl in einer weile gelistet haben möchte, muss da jeweils am ende der Zeile ein Zeilenumbruch rein.. Wie stell ich das an?


    @ Joh: wie kann ich Dein Script auf einen weiteren Empfänger zulassen? Ich denke mal per OR im lua script, oder?
    Falls ja müsste Dein msg_parser.sh Script ja auch noch angepasst werden da dort ja am Anfang steht: $empf = Joh
    Soweit bin ich dann doch noch nicht...


    Ausserdem möchte ich das der Pi unberechtigten Personen eine Antwort zukommen lässt ("Du darfst nicht") und den Befehl den derjenige gesendet hat an mich weiterleitet... ("Du, Chef, Der typ hier <Name> hat mir diesen Befehl gegeben: <befehl>. Der darf aber nicht.. Hau ihn!!")


    Geht das auch irgendwie??


    LG Tiieto

    Edited once, last by Tiieto ().

  • Inzwischen hab ich nen Teil selbst lösen können...


    Im fwd.lua script habe ich eine weitere Person zugelassen:

    Code
    --------------------------------------------
     -- Nur Nachrichten vom Benutzer xyz  aktzeptieren
     if (msg.from.print_name == 'user1' or msg.from.print_name == 'user2') then


    allerdings gibt das nur mäßigen erfolg da noch keine Anpassungen im msg-parser.sh erfolgt sind... (Wüsste nicht wie)
    Das Ergebnis hieraus ist, das user2 zwar befehle senden kann, diese werden auch ausgeführt (die Funksteckdosen schalten), aber die eingestellten Rückmeldungen bleiben gänzlich aus...


    Bei genauem betrachten der fwd.lua (dieser Part hier:)


    Code
    os.execute (string.format("/home/pi/tg/msg-parser.sh \"%s\" &", msg.text))


    ist mir dann aufgefallen, das an die msg-parser.sh nur eine Variable übergeben wird.. Somit wird das schwierig für die msg-parser.sh zu ermitteln wer die Nachricht gesendet hat...
    Ist es evtl möglich dem msg-parser.sh script noch eine zweite Variable mit auf den weg zu geben? Dort würde ich dann den Absender des Befehls an die msg-parser.sh übergeben, was wiederum weitere Möglichkeiten eröffnet..
    Wie z.B. den shutdown befehl... User1 darf diesen Befehl geben, bei user2 wird er mit ner Meldung ("Das darfst Du nicht..") nicht ausgeführt..
    Und: man kann die fixe Variable $empf mit der übergebenen Variable des Absenders füllen, somit bekommt jeder der befehle gibt (und auch via lua script zugelassen ist) auch die Antwort auf seine befehle...


    Bei mir scheitert es jetzt aufgrund mangelndem wissen in lua & shellprogrammierung am lösungsweg.. :helpnew:


    Auf doof versucht im lua:

    Code
    os.execute (string.format("/home/pi/tg/msg-parser.sh \"%s\" &", msg.text &", msg.from.print_name))


    in der msg-parser.sh hörts dann aber auf... Keinen Plan wie ich da auch nur eine einzige übergebene Variable verarbeiten kann... =(


    Ich hoffe da findet sich jemand der mir das ggf erklären kann..?



    Gute N8...

  • Hi,


    Welcher Pfad hat sich denn geändert?


    Das mit den unterschiedlichen Benutzern würd ich wie folgt machen:


    Als erstes die fwd.lua so umbauen dass sie nicht nur die Nachricht sondern auch den Absender and das Shellskript übergibt:
    Dazu diesen Teil:

    Code
    --------------------------------------------
     -- Nur Nachrichten vom Benutzer Joh aktzeptieren
     --if (msg.from.print_name == 'Joh') then
       --os.execute (string.format("/home/joh/telegram_cli/tg/msg-parser.sh \"%s\" &", msg.text))
     --end
     --------------------------------------------


    durch diesen ersetzten:

    Code
    --------------------------------------------
     -- Skript im Hintergrund starten, Benutzername und Nachricht als Parameter übergeben
     os.execute (string.format("/home/joh/telegram_cli/tg/msg-parser.sh \"%s\" \"%s\" &", msg.from.print_name, msg.text))
     --------------------------------------------


    Und das Shellskript in etwa so anpassen:


    Somit kann "Joh" die Befehle "Ping" und "uptime" verwenden. Und "Marc", "Ping" und "date". Alles andere führt zu "Unbekannter Befehl!".
    Andere/unbekannte Benutzer bekommen direkt ein: "Benutzer: $user nicht autorisiert!" zurück.


    Ich hoffe das reicht dir um weiter zu kommen. Falls ich was genauer erklären soll einfach fragen.


    Ps: Das mit dem Autostart werd ich am Abend mal mit einem frischen System testen.

    DON'T PANIC!

    Edited once, last by joh.raspi ().

  • Der Pfad der sich wohl geändert hat ist der der telegram-cli...
    von:


    Code
    /home/pi/tg/telegram-cli


    nach:


    Code
    /home/pi/tg/bin/telegram-cli


    Gibts auch ne Möglichkeit die befehle die für beide User zulässig sind nur einmal ins script einarbeiten zu müssen?


    mal eben in php nen Lösungsansatz gebastelt der funktionieren sollte... (ungetestet)


    [code=php]if($user == user1)
    { befehl1;}


    elseif($user == user2)
    {befehl2;}


    elseif(($user == user1) or ($user == user2))
    { befehl3;
    befehl4;
    befehl5;
    [...]
    }


    elseif (($user != user1) or ($user != user2))
    { echo "Du darfst nicht!"; }


    [/php]


    Den rest bau ich jetzt gleich mal in meine scripte ein...


    LG
    Tiieto...

    Edited once, last by Tiieto ().

  • Also so:


    Code
    elif [[ $user == "user1" ] or [ $user == "user2" ]]; then
    case $msg in
     "!ping!)
       send_text "Pong!"
     ;;
     *)
       send_text "Keine Ahnung was Du von mir willst.."
     ;;
    esac


    oder so:


    Code
    elif [[ $user == "user1" ]] or [[ $user == "user2" ]]; then
    case $msg in
     "!ping!)
       send_text "Pong!"
     ;;
     *)
       send_text "Keine Ahnung was Du von mir willst.."
     ;;
    esac


    funktioniert das schonmal nicht...
    Da schmeisst er mir dann nen Syntaxfehler... - aber ich, keinen plan von der korrekten Syntax, komm da nicht weiter... :s


    Code
    /home/pi/tg/msg-parser.sh: Zeile 46: Syntaxfehler im bedingen Ausdruck.
    /home/pi/tg/msg-parser.sh: Zeile 46: Syntaxfehler beim unerwarteten Wort `]'
    /home/pi/tg/msg-parser.sh: Zeile 46: `elif [[ $user == "user1" ] or [ $user == "user" ]]; then'


    LG

  • Hi,


    Wenn du damit besser zu recht kommst kannst du das ganze auch in PHP machen:


    Allerdings ist das Skript sicher verbesserungsfähig. Beispielsweise ist der externe Aufruf von netcat (nc.traditional) unnötig und sollte besser mit PHP Boardmitteln erledigt werden. Kenn mich damit aber nicht so gut aus und hab deshalb einfach wie im Shellskript auch netcat verwendet um dem laufenden Telegram Client Befehle zu übergeben.


    [hr]

    Quote

    Gibts auch ne Möglichkeit die befehle die für beide User zulässig sind nur einmal ins script einarbeiten zu müssen?


    Ja, einfach in Funktionen auslagern.


    Quote

    Da schmeisst er mir dann nen Syntaxfehler...


    Die Bash kennt kein "or", da verwendet man "||"

    Code
    if [[ $user == "Joh" ]] || [[ $user == "Marc" ]]; then


    Und hier fehlt noch der abschließende Anführungsstrich

    Code
    "!ping!)


    Code
    "!ping!")

    DON'T PANIC!

  • Danke für die Anleitung!
    Aber jetzt habe ich zwei Probleme:
    1.
    Ich bekomme Telegram mit Skript nicht in den Autostart.
    Mittlerweile habe ich alles mir bekannte ausprobiert:
    - Eintrag in rc.local
    - Eintrag in cronetab
    - schreiben eines Skripts in init.d
    - starten eines Python-Skripts der den Befehl ausführt
    Doch nach eine reboot läuft Telegram nicht. Dabei ist sicher, dass (bei den Skriptvarianten) die Skripte ablaufen (zusätzlich Lämpchen leuchten lassen, nach dem Telegrambefehl), doch Telegram bleibt stumm.
    Wenn ich den Befehl manuell in das Terminal eingebe funktioniert alles.
    Verwendete Befehle:
    - screen -dmS TelegramCLI /home/pi/tg/bin/telegram-cli -W -s /home/pi/tg/test3.lua -k /home/pi/tg/tg-server.pub
    - /home/pi/tg/bin/telegram-cli -W -s /home/pi/tg/test3.lua -k /home/pi/tg/tg-server.pub
    Ich weiß hier nicht mehr weiter und wäre froh wenn das irgendwie funktionieren würde.


    2.
    Wenn der Raspi antwortet funktioniert das grundsätzlich, doch soll dieser mir auch log-Tabellen senden, wofür zur besseren Lesbarkeit Neuzeilen notwendig wären. Doch das mir bekannte "\n" funktioniert hier nicht. Gibt es hierfür eine Alternative, oder eine abgewandelte Syntax?


    Kann mir hier jemand weiterhelfen?

  • Hast Du mal versucht Telegram als deamon zu starten?


    Code
    /home/pi/tg/bin/telegram-cli -s /home/pi/tg/fwd.lua -d -P 54321
    #ggf Pfade anpassen!!!


    Das funktioniert bei mir (ausserhalb der Autostartfunktion) tadellos...
    Ich kann damit das Terminalfenster schließen & Telegram läuft weiter...



    Allerdings hab ich immer noch das Problem, das er meine gewünschte ODER Verknüpfung der User nicht ausführt...
    Inzwischen hab ich es geschafft, dass er mir keinen Syntaxfehler mehr raus schmeisst, aber ausführen tut er es auch nicht...


    die Funktion:


    schicke ich (User Joh) den Wortlaut "ping", kommt Pong zurück, schicke ich "!pingel" sollte eigentlich "Pongelpongelpong..!" zurück kommen, es kommt aber nur "Unbekannter Befehl!"


    Woran scheitert das??? :wallbash: Ich raffs einfach nicht... :heul:


    LG

    Edited once, last by Tiieto ().

  • Was meinst du genau mit "als Deamon starten"?
    Ich habe die oben genannten Aktionen alle ausprobiert mit jeweils den Befehlen
    - screen -dmS TelegramCLI /home/pi/tg/bin/telegram-cli -W -s /home/pi/tg/test3.lua -k /home/pi/tg/tg-server.pub
    - /home/pi/tg/bin/telegram-cli -W -s /home/pi/tg/test3.lua -k /home/pi/tg/tg-server.pub
    also mit und ohne screen. Und außer im Autostart funktioniert das auch alles. Ich kapier das einfach nicht.
    Vor Allem soll der Raspi als Standalone laufen und da möchte ich nicht nach jedem Neustart, der schon mal vorkommen kann, Telegram manuell starten.


    Bei deinem Problem kann ich dir leider nicht weiter helfen, da ich mich hier nicht wirklich gut auskenne.
    Ich leite die eingehenden Nachrichten alle an ein Pythonskript weiter das dann gewisse Aktionen ausführt und am Ende mir eine Antwort schreibt. Hier wäre eine derartige Unterscheidung kein Problem.


    LG

  • die startoption -d hinzufügen... schon startet Telegram als deamon...


    Ich setz mich die Tage hin und Versuch das alles mal in 2-3 Funktionen zu verbasteln und die dann userspezifisch aufzurufen...



    nicht auf die syntax achten, die ist mit Sicherheit müll.. dient nur dem übermitteln der Idee...


    Vielleicht hab ich ja Glück & das tut dann so wie es soll...


    LG...

    Edited once, last by Tiieto ().

  • Hi,


    Sorry, bin bis gestern nicht wirklich dazu gekommen das mit dem Autostart nochmal mit einem frischen "Jessie" zu testen.


    Also dass der Autostart über die /etc/rc.local jetzt zumindest so wie beschrieben nicht mehr klappt liegt scheinbar daran dass die /etc/rc.local bei Jessie früher ausgeführt als bei Wheezy. Noch bevor das Netzwerk bereit ist und das führt dazu dass sich der Telegram Client nach dem start direkt wieder beendet.


    Man müsste da jetzt anfangen zu tricksen aber es ist sicher am besten den Autostart gleich mit einer systemd Service Unit zu machen.
    Ist auch recht schnell erledigt und klappt hier im test genau wie es soll.
    Ich gehe jetzt davon aus dass ihr ein (aktuelles) Jessie verwendet.


    1. Neue Unit Datei unter /etc/systemd/system/ anlegen...

    Code
    sudo nano /etc/systemd/system/telegram-client.service


    ... und mit folgendem Inhalt füllen: (Unter [Service] Pfade und der Benutzer unter dem der Client laufen soll anpassen)


    2. Sicher gehen dass die Rechte der Unit richtig gesetzt sind:

    Code
    sudo chmod 664 /etc/systemd/system/telegram-client.service


    3. Bevor die Unit jetzt im System verankert wird testen ob sie überhaupt richtig startet:

    Code
    sudo systemctl start  telegram-client.service


    Code
    sudo systemctl -l status  telegram-client.service


    Sieht die Ausgabe in etwas so aus hat es geklappt:

    Code
    ● _telegram-client.service - Telegram Client Daemon
      Loaded: loaded (/etc/systemd/system/telegram-client.service; enabled)
      Active: active (running) since Mit 2017-01-11 06:11:23 UTC; 1s ago
    Main PID: 616 (telegram-cli)
      CGroup: /system.slice/__telegram-client.service
              └─616 /home/pi/tg/bin/telegram-cli -s /home/pi/tg/fwd.lua -d -D -E -R -P 54321 -W
    Jän 11 06:11:23 raspberrypi systemd[1]: Started Telegram Client Daemon.


    4. Passt soweit alles kann die Unit aktiviert werden:

    Code
    sudo systemctl enable telegram-client.service


    Abschließend ein Neustart und nochmal prüfen ob der Client auch wirklich läuft:

    Code
    sudo reboot


    Code
    sudo systemctl -l status  telegram-client.service


    Fertig.


    [hr]

    Quote


    schicke ich (User Joh) den Wortlaut "ping", kommt Pong zurück, schicke ich "!pingel" sollte eigentlich "Pongelpongelpong..!" zurück kommen, es kommt aber nur "Unbekannter Befehl!"


    Nee, das passt so. So hast du das programmiert. :)
    Die ganzen Bedinungen sind ja mit einem "else if" verbunden somit gwinnt immer die erste Bedinung.
    Im Falle von "Joh":

    Code
    if [[ $user == "Joh" ]]; then


    Alle anderen kommen gar nicht mehr zum zug:

    Code
    elif [[ $user == "Joh" ]] || [[ $user == "Marc" ]]; then

    DON'T PANIC!

    Edited once, last by joh.raspi ().