using System; using System.Linq; using BotFramework; using BotFramework.Abstractions; using Microsoft.Extensions.Logging; using Telegram.Bot; using Telegram.Bot.Types; using TgStickerSet = Telegram.Bot.Types.StickerSet; namespace West.TelegramBot.ChatManagement.ParamParser; public class StickerSet { public class Param { public TgStickerSet Set { get; set; } public bool IsValid { get; set; } = false; } public class Parser : IRawParameterParser { private readonly IBotInstance _bot; private readonly ILogger _logger; public Parser(IBotInstance bot, ILogger logger) { _bot = bot; _logger = logger; } public Param DefaultInstance() { return new Param(); } public bool TryGetValueByRawUpdate(Update update, out Param result) { result = DefaultInstance(); var bot = _bot.BotClient; var message = update?.Message; var sticker = message?.ReplyToMessage?.Sticker; if (sticker is { SetName: { } }) { result.Set = bot.GetStickerSet(sticker.SetName).GetAwaiter().GetResult(); result.IsValid = true; return true; } var messageText = message?.Text; if (messageText != null) { var setName = messageText.Split(' ').Skip(1).ToList(); if (setName.Any()) { try { result.Set = bot.GetStickerSet(setName.First()) .GetAwaiter() .GetResult(); result.IsValid = true; return true; } catch (Exception e) { _logger.LogError("Got error while fetching sticker set: {ErrorMessage}", e.Message); return true; } } } return false; } } }