-
Notifications
You must be signed in to change notification settings - Fork 0
API UO Messenger de
Русский · English · Українська · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
ClassicUO • Runtime API
Erzeugt ein Objekt für Textnachrichten über Telegram, Discord oder Viber. Ein Skript kann das Ende einer Sammlung melden oder eine Stoppanfrage eines erlaubten Absenders prüfen. Die Erzeugung meldet keinen Bot an und sendet nichts.
UO.Messenger(provider:String) -> Object
-
provider— String: "telegram", "discord" oder "viber", unabhängig von Groß-/Kleinschreibung. Andere Werte erzeugen einen Fehler.
Messenger-Object. Nachrichten-, Absender- und Chat-IDs sind immer String; nicht mit CInt/CDbl umwandeln.
-
Provider() → String;Connected() → 1/0(True/False): Anbieter und letzter Authentifizierungszustand, keine Garantie einer aktuell funktionierenden Internetverbindung. -
Connect(token) → Unitauthentifiziert den Bot.ConnectFromFile(path) → Unitliest eine UTF-8-Token-Datei bis 1024 Byte; relative Pfade beziehen sich auf den aktuellen Skriptordner. Vor erneutem Verbinden Disconnect aufrufen. -
Disconnect() → Unitbeendet lokalen Empfang und löscht Token/Cursor; erneutes Verbinden ist möglich.Dispose() → Unitschließt das Objekt endgültig. -
SendMessage(text, recipient) → String: ID der angenommenen Nachricht. recipient ist eine Telegram-Chat-ID, Discord-Kanal-ID oder Viber-Abonnenten-ID als String. Textlänge 1..4096/2000/7000; Viber-JSON außerdem höchstens 30000 Byte. Discord-Erwähnungen von everyone/Rollen sind deaktiviert. -
WatchChannel(channelId) → Unit: nur Discord, merkt die aktuelle letzte Nachricht und liest spätere.WatchChannel(channelId, afterMessageId) → Unit: liest nach dieser String-ID; "0" umfasst den Verlauf. Höchstens 32 Kanäle. -
Receive(timeoutSeconds) → Array;Receive()verwendet 0. Bereich 0..20 Sekunden; leeres Array bei keinem verfügbaren Text. Telegram nutzt Long Polling, Discord fragt Kanäle ab, Viber liest die Warteschlange. Eine Netzwerkanfrage kann bis zu 30 Sekunden dauern. - MessengerMessage:
Id(),SenderId(),SenderName(),ChatId(),Text()→ String. Telegram-Kanalbeiträge können ohne SenderId sein. Anhänge, nichttextuelle Ereignisse und Discord-Botnachrichten werden ausgelassen. -
RetryAfter() → Integer: verbleibende Wartezeit nach einer Dienstbegrenzung. Vorher erfolgen keine weiteren HTTP-Anfragen. Fehlgeschlagene Sendungen werden nicht automatisch wiederholt; sie könnten bereits zugestellt sein. -
StartReceiver(localPort, publicHttpsUrl) → Integer: Viber, Port 1..65535; gibt den lokalen Port zurück. Die öffentliche HTTPS-URL muss auf /viber/ enden und POST bereits an 127.0.0.1:Port/viber/ weiterleiten, mit unverändertem Inhalt und Signaturheader. Registriert den Webhook. - Bot-Token erforderlich. Ein vorhandener Telegram-Webhook wird abgelehnt, nicht gelöscht. Discord benötigt Kanalrechte zum Lesen/Senden und MESSAGE_CONTENT; Viber sendet an Abonnenten.
- Cursor werden nach vollständiger Stapeldekodierung übernommen. Telegram/Discord: bis 100 Datensätze je Anfrage; Receive erneut aufrufen. Viber: HMAC-SHA256, 100 Nachrichten in der Warteschlange, Duplikatprüfung der letzten 2048 IDs; Überlauf liefert HTTP 503. Der Proxy muss Content-Length verwenden; chunked wird lokal abgelehnt.
- Token landen weder in Profilen noch Fehlermeldungen oder der Connect-Argumenthistorie. ConnectFromFile vermeidet zudem eine vom Debugger sichtbare Skriptvariable. Token-Dateien nicht veröffentlichen.
- In einer Prozedur erzeugen; höchstens 32 aktive Objekte. Using/Dispose sowie Ende, Fehler und Stop geben Ressourcen frei. Der entfernte Viber-Webhook bleibt erhalten. Empfangener Text wird niemals als Code ausgeführt; das Skript prüft erlaubte Absender.
CreateMessenger erzeugt ohne Netzwerkzugriff und bindet Ressourcen an diesen Skriptlauf.
CreateMessenger erzeugt ohne Netzwerkzugriff und bindet Ressourcen an diesen Skriptlauf.
Messenger-Object. Nachrichten-, Absender- und Chat-IDs sind immer String; nicht mit CInt/CDbl umwandeln.
Projektquelle: external/InjectionScript/src/InjectionScript/Runtime/InjectionRuntime.cs; Funktion CreateMessenger.
RequestAsync erstellt dienstspezifische JSON-Daten und Header, prüft Status, begrenzt Antworten auf 2 MiB und Anfragen auf 30 Sekunden; Skriptabbruch unterbricht das Warten.
Fehler sind mit Try/Catch behandelbar; Stop bleibt ein Abbruch. Ein Sendefehler beweist keine Nichtzustellung.
Projektquelle: external/InjectionScript/src/InjectionScript/Runtime/Messaging/MessengerClient.cs; Funktion RequestAsync.
Accept prüft Viber-Signatur und UTF-8 und reiht Text ein. Receive liefert ihn an das Skript; kein Skriptcallback läuft im Netzwerkthread.
Fehler sind mit Try/Catch behandelbar; Stop bleibt ein Abbruch. Ein Sendefehler beweist keine Nichtzustellung.
Projektquelle: external/InjectionScript/src/InjectionScript/Runtime/Messaging/ViberReceiver.cs; Funktion Accept.
Ressourcen werden beim Ende der Einstiegsprozedur, bei Fehler und Stop geschlossen.
# Telegram: Arbeit beendet
#
# Erzeugt ein Objekt für Textnachrichten über Telegram, Discord oder Viber. Ein Skript kann das
# Ende einer Sammlung melden oder eine Stoppanfrage eines erlaubten Absenders prüfen. Die
# Erzeugung meldet keinen Bot an und sendet nichts.
#
# Messenger-Object. Nachrichten-, Absender- und Chat-IDs sind immer String; nicht mit CInt/CDbl
# umwandeln.
SUB Main()
# telegram-token.txt neben das Skript legen und 12345678 durch die Chat-ID ersetzen. Eine
# Nachricht wird gesendet; Ergebnis ist deren String-ID, keine Lesebestätigung.
# Einen eigenen Bot konfigurieren. Beispiele wurden mit lokalen Testantworten ohne reale
# Empfänger ausgeführt.
Dim bot = UO.Messenger("telegram")
Using bot
bot.ConnectFromFile("telegram-token.txt")
Dim messageId = bot.SendMessage("Harvest finished", "12345678")
Return messageId
End Using
END SUBErläuterung der Parameter und Ausführung:
- telegram-token.txt neben das Skript legen und 12345678 durch die Chat-ID ersetzen. Eine Nachricht wird gesendet; Ergebnis ist deren String-ID, keine Lesebestätigung.
- Einen eigenen Bot konfigurieren. Beispiele wurden mit lokalen Testantworten ohne reale Empfänger ausgeführt.
# Discord: Stoppanfrage prüfen
#
# Erzeugt ein Objekt für Textnachrichten über Telegram, Discord oder Viber. Ein Skript kann das
# Ende einer Sammlung melden oder eine Stoppanfrage eines erlaubten Absenders prüfen. Die
# Erzeugung meldet keinen Bot an und sendet nichts.
#
# Messenger-Object. Nachrichten-, Absender- und Chat-IDs sind immer String; nicht mit CInt/CDbl
# umwandeln.
SUB Main()
# Kanal und erlaubte Absender-ID ersetzen. True bedeutet, dass stop von diesem Absender
# empfangen wurde. Das Beispiel stoppt keine Bewegung; Ergebnis im eigenen Arbeitszyklus
# verwenden.
# Einen eigenen Bot konfigurieren. Beispiele wurden mit lokalen Testantworten ohne reale
# Empfänger ausgeführt.
Dim bot = UO.Messenger("discord")
Using bot
bot.ConnectFromFile("discord-token.txt")
bot.WatchChannel("123456789012345678")
Dim messages = bot.Receive(5)
For Each message In messages
If message.SenderId() = "987654321098765432" AndAlso LCase(Trim(message.Text())) = "stop" Then
Return True
End If
Next
Return False
End Using
END SUBErläuterung der Parameter und Ausführung:
- Kanal und erlaubte Absender-ID ersetzen. True bedeutet, dass stop von diesem Absender empfangen wurde. Das Beispiel stoppt keine Bewegung; Ergebnis im eigenen Arbeitszyklus verwenden.
- Einen eigenen Bot konfigurieren. Beispiele wurden mit lokalen Testantworten ohne reale Empfänger ausgeführt.
# Viber: signierten Text empfangen
#
# Erzeugt ein Objekt für Textnachrichten über Telegram, Discord oder Viber. Ein Skript kann das
# Ende einer Sammlung melden oder eine Stoppanfrage eines erlaubten Absenders prüfen. Die
# Erzeugung meldet keinen Bot an und sendet nichts.
#
# Messenger-Object. Nachrichten-, Absender- und Chat-IDs sind immer String; nicht mit CInt/CDbl
# umwandeln.
SUB Main()
# Neben dem Skript: viber-token.txt und viber-settings.json mit
# {"port":8787,"publicUrl":"https://YOUR-HOST/viber/"}. HTTPS-Weiterleitung einrichten und
# trusted-subscriber-id ersetzen. Ergebnis: Text oder leerer String.
# Einen eigenen Bot konfigurieren. Beispiele wurden mit lokalen Testantworten ohne reale
# Empfänger ausgeführt.
Dim settings = JsonLoad("viber-settings.json")
Dim bot = UO.Messenger("viber")
Using bot
bot.ConnectFromFile("viber-token.txt")
bot.StartReceiver(settings["port"], settings["publicUrl"])
Dim messages = bot.Receive(5)
For Each message In messages
If message.SenderId() = "trusted-subscriber-id" Then
Return message.Text()
End If
Next
Return ""
End Using
END SUBErläuterung der Parameter und Ausführung:
- Neben dem Skript: viber-token.txt und viber-settings.json mit {"port":8787,"publicUrl":"https://YOUR-HOST/viber/"}. HTTPS-Weiterleitung einrichten und trusted-subscriber-id ersetzen. Ergebnis: Text oder leerer String.
- Einen eigenen Bot konfigurieren. Beispiele wurden mit lokalen Testantworten ohne reale Empfänger ausgeführt.
ClassicUO
Bad Newbie & Basic IDE
Найти в справочнике
Клиент и скрипты
Каталоги значений
Разработка и помощь