2017-08-14 150 views
0

我用C#和Telegram.Bot库制作了一个电报机器人。我已经在BotFather中“内联”并将inlinefeedback设置为“启用”。Telegram bot InlineResultChosen not firing

问题是当用户从内联答案中选择一个选项时,InlineResultChosen事件没有开火,消息正在发送到聊天,但没有人看到它,除了发件人本身。也有消息框中的时钟(或移动版本中的红色感叹号)。我正在使用内联语音消息,并且可以由发件人收听。

这里是我的代码:

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); 
    } 
} 

回答

1

我找到了解决办法。这是我的失败:语音信息格式错误。首先我将它改为.OGG,就像Telegram开发者文档中所描述的那样。但在这种情况下,声音在MacOS和iOS上不起作用!我已将所有声音改为.MP3格式,现在它们都可以在PC和Mac上使用。现在只有一个问题:它似乎不适用于Windows Phone 8.