CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Bot Telegram Java, un " java.lang.NullPointerException " quand j'utilise onUpdateReceived()

Redro
Redro
Niveau 1
04 novembre 2019 à 22:22:15

Bonjour
Je n'ai pas l'habitude de poser mes questions sur des forums, mais la je m'en remet à vous :svp: !
Alors je m'explique !

Je viens d'apprendre les bases pour programmer un bot Telegram en Java et je perçois un problème lorsque mon bot veut traiter un message reçus d'un canal Telegram (où le bot est bien sur en administrateur).
Lorsque le bot reçois un message et que je veut le traiter, ce message d'erreur apparaît:


PM org.telegram.telegrambots.logging.BotLogger severe
GRAVE: BOTSESSION
java.lang.NullPointerException
	at telegrambotexample.Bot.onUpdateReceived(Bot.java:67)
	at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:274)

Le code est ainsi:


public void onUpdateReceived(Update update) {

    String message_recup = update.getMessage().getText();

J'en déduis donc que update est vide (null) mais ça ne devrait pas :-(
Et que l'information GRAVE: BOTSESSION ... montre qu'il y a un problème de session mais normalement mon robot n'est pas lancé autre part.

J'ai déjà fais des testes en privé, ou dans un groupe tous marche parfaitement, mais dans un canal ça ne fonctionne pas.

Idée de piste ?:
-Est-ce que mon robot que j'ai crée avec BotFather sur télégramme n'a pas les bon paramètre (j'ai essaye avec mode privacy activé et désactiver rien ne change) ?
-Est-ce que un bot Telegram ne fonctionne pas avec les canaux ?

Pouvez vous m'aider ? :svp:
Merci infiniment !

godrik
godrik
Niveau 30
05 novembre 2019 à 01:20:12

Il faudrait commencer par savoir qu'est ce qui est null, est ce que c'est update? ou update.getMessage()? Puet etre toutes les update ne sont pas forcement un message?

Redro
Redro
Niveau 1
05 novembre 2019 à 07:41:21

Bonjour Merci
Oui c'est vrai il serait possible que tout les update ne sont pas des messages mais cette erreur survient quand j’écris un message dans mon canal que j'ai crée pour faire des test.

Pour filtrer tout cela j'ai pu utiliser:
if (update.hasMessage() && update.getMessage().hasText()) {

Et à chaque message que j’écris dans mon canal on ne rentre pas dans le if().

godrik
godrik
Niveau 30
05 novembre 2019 à 15:23:39

tu sais qu'il y a qqch qui est null. cherche quelle variable c'est et met un message dans ton log. ca te mettra sur la piste.

Redro
Redro
Niveau 1
05 novembre 2019 à 17:14:24

La ligne qui est null à chaque update est:
String message_recup = update.getMessage().getText();

J'ai testé en mettant:
String message_recup = "TEST";
et cela fonctionne directement.

c'est donc update.getMessage().getText(); qui est null.

Je pense vraiment que le problème vient du bot et des canaux.
Est-ce qu'il y a des paramètre spécifique du coté du canal ou du robot à avoir ? :-(

Redro
Redro
Niveau 1
05 novembre 2019 à 17:28:37

Lorsque je fait:
System.out.println(update.toString());
J'obtient :noel: :

Update{updateId=291128087, message=null, inlineQuery=null, chosenInlineQuery=null, callbackQuery=null, editedMessage=null, channelPost=Message{messageId=49, from=null, date=1572970926, chat=Chat{id=-1001154511462, type='channel', title='test channel bot', firstName='null', lastName='null', userName='testchannelbot12', allMembersAreAdministrators=null}, forwardFrom=null, forwardFromChat=null, forwardDate=null, text='ici mon message', entities=null, audio=null, document=null, photo=null, sticker=null, video=null, contact=null, location=null, venue=null, pinnedMessage=null, newChatMember=null, leftChatMember=null, newChatTitle='null', newChatPhoto=null, deleteChatPhoto=null, groupchatCreated=null, replyToMessage=null, voice=null, caption='null', superGroupCreated=null, channelChatCreated=null, migrateToChatId=null, migrateFromChatId=null, editDate=null, game=null, forwardFromMessageId=null}, editedChannelPost=null}

On peut remarque que la ligne text='ici mon message',
C'est bien ce que j'ai écrit mais je ne peut pas le récupérer ? Existerait t'il une autre méthode que .getText(); ?

godrik
godrik
Niveau 30
05 novembre 2019 à 20:04:43

Regarde la structure de ton objet et tu vera que tu essaye de recuperer le text au mauvais endroit.
Tu fais Update.getMessage() et ca, ca renvoie null pour cet objet.
le champs text est dans channelPost. donc j'imagine que c'est update.getChannelPost().getText() que tu veux.
Tu devrais verifier si le champs est null explicitement quand tu l'accede.

Redro
Redro
Niveau 1
05 novembre 2019 à 21:39:34

Exactement System.out.println(update.getChannelPost().getText());
Renvoie exactement ce que j’écris dans le canal.

Il y a donc une différence à retenir entre:
-récupérer un message d'un groupe avec update.getMessage().getText()
-et récupérer un message d'un canal avec update.getChannelPost().getText()

Merci beaucoup! :merci:

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment