Telegram-Wechsel nicht möglich

Also, nachdem ich ein bisschen herumgepfuscht habe, um die Berechtigungen der Datei zu ändern, damit ich sie über FTP-Transfer aktualisieren konnte, konnte ich die Benutzer-ID in

gladys-production.db

aktualisieren. Ich starte Gladys neu und aktualisiere damit das Token. Und hier wird es interessant: Ich versuche erneut, die Verbindung zu Telegram herzustellen, und zack, es funktioniert immer noch nicht! Ich überprüfe die ID erneut in der Datenbank und siehe da, wieder ein .0. Als ob es sich beim Generieren des Links hinzufügt. Also erstelle ich das GitHub-Issue. (Zumindest versuche ich es :blush: ) Danke

GitHub-Issue erstellt Fehler Benutzer mit telegram_user_id „xxxxxxxxxxx“ nicht gefunden

Mist! Das wird wohl debuggt werden müssen, aber das wird sehr kompliziert, weil es ein Bug ist, der nur mit deinem Konto aufgrund deiner Benutzerkennung auftritt…

Hast du Erfahrung mit Node.js-Entwicklung oder gar keine?

Wir verwenden diese Bibliothek in Gladys:

Es würde mich nicht wundern, wenn der Cast auf ihrer Seite beim Parsen der von der Telegram-API zurückgegebenen Daten erfolgt, also müssen wir einen Code-Snippet schreiben, der nur den Code der Bibliothek testet?

Ich kenne mich da nicht so gut aus, aber ich werde versuchen zu sehen, was ich zum Debuggen tun kann :slight_smile:

Okay, lass uns wissen, wenn du Hilfe brauchst :slight_smile:

Hallo!
Danke für diesen Thread, ich habe genau das gleiche Problem wie oben beschrieben… ich habe die gleichen Überprüfungen durchgeführt, und bingo! Mein Benutzername hat ebenfalls ein .0 am Ende :frowning:

Verrückt, das bestätigt das Problem! Danke für dein Feedback @Christophe_LOCHON :slight_smile:

Hast du irgendwelche technischen Fähigkeiten, um uns zu helfen, die Ursache des Problems zu finden? Das Problem ist, dass ich keinen Telegram-Account mit einer problematischen ID (die auf 0 endet) habe, sodass ich das Problem nicht bei mir reproduzieren kann.

Hallo @pierre-gilles! Abgesehen davon, dass ich Ihnen Logs bereitstellen kann, habe ich leider nur wenig Kenntnisse in den Bereichen der Programmierung…

Okay, dann warten wir mal auf die Rückkehr von @Mazshaka.

Das funktioniert :slight_smile: Ich habe auch versucht, alles neu zu erstellen, das Verhalten ist dasselbe.

Hallo,
Zuerst einmal vielen Dank an @Christophe_LOCHON, das bestätigt den Bug :slight_smile:
Ansonsten muss ich ehrlich sagen, dass ich beim Debuggen nicht wirklich weitergekommen bin, weil ich nicht genau weiß, wie ich vorgehen soll.
Wenn ich das richtig verstanden habe, wird beim Eingeben des API-Schlüssels in Gladys ein Aufruf an Telegram gemacht, der den Schlüssel parst, bestätigt, dass er gültig ist, und die zugehörige Benutzer-ID zurückgibt (oder ableitet).
Bei der Initialisierung wird diese Benutzer-ID in der Gladys-Datenbank gespeichert.
Sie wird anschließend verwendet, um die Verbindung zwischen Telegram und Gladys herzustellen.

Für mich gibt es zwei Probleme:
1/ Bei der Initialisierung wird die Benutzer-ID (oder zumindest gespeichert) mit einer .0 am Ende zurückgegeben
Man stellt auch fest, dass selbst wenn man in der Datenbank die .0 am Ende der ID löscht und einen erneuten Verbindungsversuch mit Telegram durchführt, die ID erneut mit einer .0 geändert wird.
Daher das Problem 2:
2/ Die Telegram-Benutzer-ID wird bei jedem Austausch gespeichert, anstatt einfach eine « Übereinstimmung » mit der in der Datenbank verfügbaren ID herzustellen…

Jetzt weiß ich nicht, wie ich diese Austausche « überwachen » soll, um all das zu bestätigen und herauszufinden, woher das Problem kommt.

@Mazshaka Eigentlich vermute ich, dass die Bibliothek, die wir verwenden, sich beim Parsen der Antwort der Telegram-API irrt, denn die Bibliothek gibt bereits eine JavaScript-„Number“ zurück.

Deshalb müsste man einen Test mit nur einem kleinen JavaScript-Snippet auf deinem Rechner mit dem Beispielcode der Bibliothek durchführen: GitHub - yagop/node-telegram-bot-api: Telegram Bot API for NodeJS · GitHub

Der Beispielcode ist der im README:

const TelegramBot = require('node-telegram-bot-api');

// ersetze den Wert unten mit dem Telegram-Token, den du von @BotFather erhältst
const token = 'YOUR_TELEGRAM_BOT_TOKEN';

// Erstelle einen Bot, der 'polling' verwendet, um neue Updates abzurufen
const bot = new TelegramBot(token, {polling: true});

// Höre auf jede Art von Nachricht. Es gibt verschiedene Arten von
// Nachrichten.
bot.on('message', (msg) => {
  const chatId = msg.chat.id;

  console.log(msg);
});

Du müsstest diesen Code-Snippet auf deinem Rechner ausführen und dann eine Nachricht an den Bot mit deinem Benutzer senden.

Andernfalls besteht die Möglichkeit, dass du mir deinen API-Schlüssel (privat, von einem Test-Bot, der für den Test erstellt wurde) schickst und ich den Test auf meinem Rechner durchführe, aber das bedeutet, dass du zum Zeitpunkt des Tests vor deinem Telefon sein musst, um eine Nachricht senden zu können :slight_smile:

Danke @pierre-gilles!
Jetzt ist es klarer. Ich schaue mir das am Wochenende an und halte dich auf dem Laufenden.
Im schlimmsten Fall können wir uns immer noch für Tests koordinieren, falls ich stecken bleibe.
Guten Tag

Betreff: Hallo,
Ich brauche ein bisschen Hilfe.
Ich weiß nicht, wo ich die .js-Datei ablegen soll.
Soweit ich weiß, verwendet Gladys URL-Routen, um auf die Datei zuzugreifen.
Daher weiß ich nicht, wo ich die Datei ablegen soll, um darauf zuzugreifen.
Oder kann ich sie über einen Befehl starten?
Aber da bin ich mir auch nicht sicher…
Also, wenn ihr mich da bitte führen könntet :innocent:
Danke!
Beste Grüße,
Lionel

Das hat eigentlich nichts mit Gladys zu tun, wovon ich da gesprochen habe :slight_smile:

Ich habe dir vorgeschlagen, die Bibliothek auf deinem Computer zu installieren und einen Test durchzuführen.

Danach brauchst du eine Node.js-Entwicklungsumgebung auf deinem Rechner. Wenn du das noch nie gemacht hast, ist der Schritt vielleicht etwas hoch.

Hallo @pierre-gilles,
Um vollständig zu sein, habe ich tatsächlich daran gedacht, das Raspberry Pi-Skript zu starten. Ich habe verstanden, dass es so nicht funktioniert. Dennoch habe ich Node.js auf der Instanz installiert, um npm-Befehle ausführen zu können. Aber ich weiß nicht, ob das nützlich und/oder ausreichend ist?
Ich gebe zu, dass ich ab diesem Punkt ohne eine intensivere Hilfe nicht weiterkommen würde… zum Beispiel Schritt für Schritt :sweat_smile:
Oder ein Link zu einem Tutorial?
Ansonsten kann ich dir immer noch meinen API-Schlüssel schicken, damit du es testen kannst.
Danke

Vielleicht ist es einfacher, wenn du mir folgendes schickst:

  • deine API-Schlüssel per PN
  • deine Telegram-ID
  • du schickst eine Nachricht an den Bot

Danke für die Nachricht! Ich habe alle Informationen auf meiner Seite erhalten.

Zum Glück liegt der Bug nicht bei der Lib, die eine korrekt formatierte chatId sendet, aber tatsächlich als Number.

Jetzt müssen wir auf Gladys-Seite ermitteln.

Falls jemand hier etwas Zeit hat und an dem Bug arbeiten möchte, hier ist das Issue mit den Informationen:

Hallo zusammen!

Ich habe heute Morgen an dem Bug gearbeitet. Ich habe die Ursache des Bugs auf der Seite von Gladys isoliert. Tatsächlich haben wir die ID als Number in JS erhalten, aber das Casting in einen String für die DB wurde automatisch von Sequelize durchgeführt, und ich denke, es dachte, unsere Number sei ein Float.

Indem wir das Casting selbst im Telegram-Service mit einem .toString() durchgeführt haben, ist der Bug nicht mehr vorhanden.

Ich habe eine ganze Batterie von Tests geschrieben, um sicherzustellen, dass das Problem nicht wieder auftritt.

Der Fix ist in diesem PR:

Danke an alle, die sich die Zeit genommen haben, mir die richtigen Informationen zu geben. Es ist ein quite lustiger Bug, weil er nur 10% der Nutzer betroffen hat, da das Casting diesen Wert nur als Float zu interpretieren scheint, wenn Ihre Telegram-ID auf eine 9 endet! Eine Chance von 1 zu 10 also :stuck_out_tongue:

Zur Information, ich habe den PR gemerged und einen Docker-Build auf dem Tag dev ( gladysassistant/gladys:dev ) durchgeführt.

Der Fix wird in der nächsten Gladys-Release veröffentlicht!