Files
2022-05-05 19:29:25 +03:00

77 lines
2.1 KiB
C#

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<Param>
{
private readonly IBotInstance _bot;
private readonly ILogger<StickerSet> _logger;
public Parser(IBotInstance bot, ILogger<StickerSet> 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.GetStickerSetAsync(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.GetStickerSetAsync(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;
}
}
}