German jTelegramBot

Blueforcer

Active Member
Licensed User
@DonManfred
Dann starte ich doch mal hier :)
Ich habe versucht selbst eine Klasse zu bauen die einfach die offizielle Telegram API per POST/GET verwendet. Geht auch, aber wenn man alle funktionen umsetzen will wirds heftig :)
Von wrapper schreiben habe ich leider gar keine Ahnung, daher finde ich es Mega das du dich dessen annimmst. Wenn du schon was zum Testen hast würde ich mich freuen dein Betatester zu sein:)

Edit: Ich sehe gerade das in der JTelegramBot lib schon 3 Jahre nichts mehr gemacht wurde..

Gruß
Stephan
 
Last edited:

DonManfred

Expert
Licensed User
daher finde ich es Mega das du dich dessen annimmst.
na, ich spiele nur damit rum bisher... Keine Ahnung ob da was marktreifes draus entsteht.

Aber hier mal was zum spielen. Anbei ein Beispiel.

Die Lib und alle zugehörigen jars kannst Du hier Download von Dropbox hier downloaden.

Bitte beachte, dass ich heute morgen mit dem Wrap erst begonne habe. Beachte bitte auch, dass ich nul Ahnung habe was da aktuell noch alles fehlt.
Aber meine bisherigen versuche irgendwas mit nem Keyboard oder Buttons zu machen schlugen bisher fehl..

Aber manches geht auch bereits ;-)


B4X:
    jtb.sendMessage(jtb.byId(from.Id),"[jTelegramBot Thread](https://www.b4x.com/android/forum/threads/jtelegrambot.103778/#post-650611)","MARKDOWN",False,False,message.MessageId,replbld.forceReply)
 

Attachments

DonManfred

Expert
Licensed User
B4X:
    jtb.sendLocation(jtb.byId(from.Id),50.8337006,6.441118,False,message.MessageId,replbld.sendCustomKeyboard3(r1.build))
    jtb.sendDocument(jtb.byId(from.Id),jtb.MediaByFile(File.DirApp,"jtbex.zip"),"DocumentCaption",False,message.MessageId,replbld.forceReply)
    jtb.sendPhoto(jtb.byId(from.Id),jtb.MediaByFile(File.DirApp,"donmanfred.png"),"DocumentCaption",False,message.MessageId,replbld.forceReply)
 

DonManfred

Expert
Licensed User
Edit: Ich sehe gerade das in der JTelegramBot lib schon 3 Jahre nichts mehr gemacht wurde..
Ja, die ursprünglichen jar files von Github sind auch abgesemmelt weil ein paar jsonfelder dazu gekommen sind in den jahren.

Als ich jedoch die Sourcen angepasst habe und den Objekten die fehlenden Properties beigebracht habe hat es dann recht schnell funktioniert.

Ich habe versucht raus zu finden ob die Api sich in Bezug auf "Keyboards" und "Buttons" sic irgendwie verändert hat. Konnte aber nichts finden.
Von daher denke ich eigentlich, dass es funktionieren müsste. Grundsätzlich geht die Nachrich ja raus.
Ich denke der Aufbau der Keyboarddaten ist aktuell noch falsch. Hier kannst Du gerne Investieren und versuchen rauszufinden wie das geht. Das ist das was mich an der ganzen Sache hier überhaupt interessiert....
 

DonManfred

Expert
Licensed User
Na, ich komme der Sache schon ein bisschen näher, wenngleich ich die Buttons bisher noch in java zusammenbaue.


Nach klicken des Buttons



aber man möchte ja nochmal :D





COOOOOOL


B4X:
Sub Process_Globals
    Public glmap As Map
End Sub

Sub AppStart (Form1 As Form, Args() As String)
    glmap.Initialize
End Sub

Sub JTB_onCallbackQueryReceived(api As Object, id As Int, query As Object)
    Log($"JTB_onCallbackQueryReceived( ${id}, ${query}"$)
    Dim cbquery As CallbackQuery = query
    Log($"CallbackQuery.ChatInstance = ${cbquery.ChatInstance}"$)
    Log($"CallbackQuery.Data = ${cbquery.Data}"$)
    Log($"CallbackQuery.From = ${cbquery.From}"$)
    Dim from As User = cbquery.From
    Log($"FromFirstName: ${from.FirstName}"$)
    Log($"FromLastName: ${from.LastName}"$)
    Log($"FromUserName: ${from.Username}"$)
    Log($"FromID: ${from.Id}"$)

    Log($"CallbackQuery.Id = ${cbquery.Id}"$)
    Log($"CallbackQuery.Inline_message_id = ${cbquery.Inline_message_id}"$)
    Log($"CallbackQuery.Message = ${cbquery.Message}"$)
    Dim msg As Message = cbquery.Message
    bld.Initialize(api)
    

    If glmap.ContainsKey(msg.MessageId) Then
        jtb.sendMessage(jtb.byId(from.Id),$"Danke ${from.Username} für´s drücken von Button ${cbquery.Data} :-)"$,"MARKDOWN",False,False,msg.MessageId,replbld.hideCustomKeyboard)
    
        jtb.answerCallbackQuery(cbquery.Id,$"Danke für´s drücken des Buttons :D
    du hast gedrückt: ${cbquery.Data}"$,True) ' Sorgt für die Alertbox beim client
        glmap.Remove(msg.MessageId)
    Else
        jtb.sendMessage(jtb.byId(from.Id),$"Danke ${from.Username} für´s drücken von Button ${cbquery.Data} aber Du darfst nur einmal einen Button drücken..."$,"MARKDOWN",False,False,msg.MessageId,replbld.hideCustomKeyboard)
        jtb.answerCallbackQuery(cbquery.Id,$"Nur einmal möglich"$,False)
    End If

End Sub
Der Code, der die Buttons zeigt
B4X:
    Dim mark As InlineKeyboardMarkup
    mark.initialize(jtb.CreateDummyKeyboard)
    
    Dim buttons As Message = jtb.sendMessage(jtb.byId(from.Id),"Klick den Button!","MARKDOWN",False,False,message.MessageId,mark)
    glmap.Put(buttons.MessageId,buttons) ' packt die Message in die globale Map wo sie beim auswerten bei einer CallbackQuery gesucht wird.

Warum ich die Buttons aber nicht wieder ausblenden kann weiss ich noch nicht.

Aber schon echt cool bisher ;-)
 

Blueforcer

Active Member
Licensed User
Super!
Ich habe versucht deine Lib zum laufen zu bekommen. Habe noch die Core lib benötigt. aber wenn ich die aus dem Github repo nehme sagt er mir das die version nciht stimmt. Könntest du deine Zip noch vervollständigen?
 
Top