2017-08-14 2 views
0

J'ai créé un bot de télégramme en utilisant la bibliothèque C# et Telegram.Bot. Je l'ai fait "inline" dans BotFather et j'ai défini inlinefeedback sur "enabled". Le problème est lorsqu'un utilisateur choisit une option de réponse inline, l'événement InlineResultChosen ne se déclenche pas, le message envoie en chat mais personne ne le voit sauf l'expéditeur lui-même. Il y a aussi des horloges dans la boîte de message (ou point d'exclamation rouge dans la version mobile). J'utilise des messages vocaux en ligne, et ils peuvent être écoutés par l'expéditeur.Télégramme bot InlineResultChosen not firing

Voici mon code:

internal class Program 
{ 
    private static readonly List<InlineQueryResult> _queryResults 
     = new List<InlineQueryResult>(); 

    private static void Main(string[] args) 
    { 
     var key = "..."; 

     var sounds = new Dictionary<string, string>(); 
     sounds.Add("Sound one", "https://omg.lol/1.wav"); 
     sounds.Add("Sound two", "https://omg.lol/2.wav"); 

     foreach (var sound in sounds) 
     { 
      var voice = new InlineQueryResultVoice(); 
      voice.Url = sound.Value; 
      voice.Title = sound.Key; 
      voice.Id = sound.Key; 
      _queryResults.Add(voice); 
     } 

     BackgroundWorker bw = new BackgroundWorker(); 
     bw.DoWork += ProcessBot; 

     if (bw.IsBusy == false) 
     { 
      bw.RunWorkerAsync(key); 
     } 

     Console.ReadLine(); 
    } 

    private static void ProcessBot(object sender, DoWorkEventArgs e) 
    { 
     try 
     { 
      var key = e.Argument as string; 
      var bot = new TelegramBotClient(key); 

      bot.OnInlineQuery += AnswerInlineQuery; 
      bot.OnInlineResultChosen += InlineResultChosen; 
      bot.OnReceiveError += ErrorRecieved; 
      bot.OnReceiveGeneralError += GeneralErrorReceived; 

      bot.StartReceiving(); 

      Console.ReadLine(); 

      bot.StopReceiving(); 
     } 
     catch (Telegram.Bot.Exceptions.ApiRequestException ex) 
     { 
      Console.WriteLine(ex.Message); 
      Console.ReadLine(); 
     } 
    } 

    private static void GeneralErrorReceived(object sender, ReceiveGeneralErrorEventArgs e) 
    { 
     Console.WriteLine("Error catched: " + e.Exception.Message); 
    } 

    private static void ErrorRecieved(object sender, ReceiveErrorEventArgs e) 
    { 
     Console.WriteLine("Error catched: " + e.ApiRequestException.Message); 
    } 

    private static void InlineResultChosen(object sender, ChosenInlineResultEventArgs e) 
    { 
     var result = e.ChosenInlineResult; 

     Console.WriteLine($"Sent a voice message by {result.From.Username}"); 
    } 

    private static async void AnswerInlineQuery(
     object sender, 
     InlineQueryEventArgs queryEventArgs) 
    { 
     var bot = sender as TelegramBotClient; 
     var query = queryEventArgs.InlineQuery; 

     await bot.AnswerInlineQueryAsync(
      query.Id, 
      _queryResults.ToArray(), 
      0); 
    } 
} 

Répondre

1

J'ai trouvé la solution. C'était mon échec: les messages vocaux étaient dans un mauvais format. D'abord je l'ai changé en .OGG comme décrit dans la documentation des développeurs Telegram. Mais dans ce cas, le son ne fonctionne pas sur MacOS et iOS! J'ai changé tous mes sons au format .MP3 et maintenant ils travaillent à la fois sur PC et Mac. Un seul problème maintenant: il semble que cela ne fonctionne pas sur Windows Phone 8.