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