Нетехническое объяснение того, что я пытаюсь сделать:
У меня есть бот, который отправляет пользователю изображение, когда пользователь нажимает кнопку «Готово», он отправляет ему следующее изображение и так далее, пока не останется больше изображений.
Проблема:
Единственный способ прослушать эту кнопку с помощью API, который я использую, - использовать этот метод:
private static async void BotOnCallbackQueryReceived(object sender, CallbackQueryEventArgs callbackQueryEventArgs) {
var callbackQuery = callbackQueryEventArgs.CallbackQuery;
try {
await Task.Run(() => {
Bot.AnswerCallbackQueryAsync(callbackQuery.Id, "Answer has been submitted");
string data = callbackQuery.Data.ToLower();
if (data.Equals("notfound")){
//TODO He couldn't find the item
}
else if (data.Equals("done")) {
}
});
}
}
И, конечно же, подпишитесь на него через:
Bot.OnCallbackQuery += BotOnCallbackQueryReceived;
Для отправки изображения и меню у меня есть цикл for, который охватывает List<Item>
(Item
- это POCO).
await Task.Run(() => {
// - Which buttons to send. MenuItem's constructor is (ButtonText, Callbackdata)
List<MenuItem> menuItems = new List<MenuItem>();
menuItems.Add(new MenuItem("Done", "done"));
menuItems.Add(new MenuItem("Not found", "notFound"));
//telegramLineItemObjects is a List<Item>
foreach (Item item in telegramLineItemObjects) {
string message = $"<b>Shelf Number:</b> {item.ShelfNumber}\n<b>Sku:</b> {item.Sku}\n<b>Barcode:</b> {item.Barcode}\n<b>Description:</b> {item.Description}\n<b>Quantity:</b> {item.Quantity}\n";
//sendImage(Image URL, message, message parse mode)
telegram.sendImage(item.Picture, message, ParseMode.HTML);
Message sentMenu = telegram.sendMenu(message, menuItems);
}
}
Я хочу приостановить цикл for
, дождаться вызова BotOnCallBackQueryReceived
и возобновить цикл for.
Для этого мне нужен способ прослушивания, когда вызывается BotOnCallBackQueryReceived
. Как мне это сделать?