diff --git a/modules/ContentStore/Handler/Store.cs b/modules/ContentStore/Handler/Store.cs index d390f43..ef26225 100644 --- a/modules/ContentStore/Handler/Store.cs +++ b/modules/ContentStore/Handler/Store.cs @@ -106,38 +106,55 @@ public class Store : BotEventHandler return; } + try + { + await PerformPurchase(mediaService, messageId); + } + catch (Exception e) + { + answer = "Товар недоступен"; + await Bot.EditMessageTextAsync(Chat.Id, + messageId, + $"{From.ToHtml()} попытался купить \"{storeItem.Name}\", но товара в наличии не оказалось."); + await AnswerQuery(query.Id, answer); + return; + } + reputation = await _reputation.SetUserReputationAsync(Chat, From, reputation - storeItem.Price); await Bot.EditMessageTextAsync(Chat.Id, messageId, $"{From.ToHtml()} ({reputation}) купил \"{storeItem.Name}\".", ParseMode.Html); - - var randomMedia = await mediaService!.GetRandomMediaAsync(); - var file = randomMedia.File; - - switch (randomMedia.Type) - { - case InputMediaType.Photo: - await Bot.SendPhotoAsync(Chat.Id, file, - caption: randomMedia.Caption, - replyToMessageId: messageId, - parseMode: ParseMode.Html, - hasSpoiler: randomMedia.Nsfw - ); - break; - case InputMediaType.Video: - await Bot.SendVideoAsync(Chat.Id, file, - caption: randomMedia.Caption, - replyToMessageId: messageId, - parseMode: ParseMode.Html, - hasSpoiler: randomMedia.Nsfw - ); - break; - } } await AnswerQuery(query.Id, answer); } + + private async Task PerformPurchase(IRandomMediaService mediaService, int messageId) + { + var randomMedia = await mediaService!.GetRandomMediaAsync(); + var file = randomMedia.File; + + switch (randomMedia.Type) + { + case InputMediaType.Photo: + await Bot.SendPhotoAsync(Chat.Id, file, + caption: randomMedia.Caption, + replyToMessageId: messageId, + parseMode: ParseMode.Html, + hasSpoiler: randomMedia.Nsfw + ); + break; + case InputMediaType.Video: + await Bot.SendVideoAsync(Chat.Id, file, + caption: randomMedia.Caption, + replyToMessageId: messageId, + parseMode: ParseMode.Html, + hasSpoiler: randomMedia.Nsfw + ); + break; + } + } private bool TryGetMediaService(string name, out IRandomMediaService? mediaService) {