私はC#とTelegram.Botライブラリを使って電報ボットを作った。私はBotFatherで "インライン"にして、inlinefeedbackを "enabled"に設定しました。電報ボットInlineResultChosen発砲しない
問題は、Inline answer、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);
}
}