|
@@ -22,47 +22,53 @@ namespace CardCollector.Commands.ChosenInlineResult
|
|
|
public abstract class ChosenInlineResult : UpdateModel
|
|
|
{
|
|
|
/* Результат запроса (id выбранного пользователем элемента) */
|
|
|
- protected readonly string InlineResult = "";
|
|
|
-
|
|
|
+ protected readonly string InlineResult;
|
|
|
+
|
|
|
+ /* Команда запроса */
|
|
|
+ protected readonly string InlineQuery;
|
|
|
+
|
|
|
/* Список команд */
|
|
|
protected static readonly List<ChosenInlineResult> List = new()
|
|
|
{
|
|
|
/* Этот объект должен быть всегда в начале списка, так как он должен быть вызван
|
|
|
вперед других, если в коде включен режим бесконечных стикеров */
|
|
|
new GetUnlimitedStickerAndExecuteCommand(),
|
|
|
-
|
|
|
+
|
|
|
// Обработка результата при отправке стикера
|
|
|
new SendStickerResult(),
|
|
|
new SendPrivateSticker(),
|
|
|
// Обработка результата при выборе продавца
|
|
|
new SelectTraderResult(),
|
|
|
-
|
|
|
+
|
|
|
new SelectStickerInlineResult(),
|
|
|
};
|
|
|
-
|
|
|
+
|
|
|
/* Метод, создающий объекты команд исходя из полученного обновления */
|
|
|
public static async Task<UpdateModel> Factory(Update update)
|
|
|
{
|
|
|
- // Текст команды
|
|
|
- var command = update.ChosenInlineResult!.ResultId;
|
|
|
-
|
|
|
// Объект пользователя
|
|
|
var user = await UserDao.GetUser(update.ChosenInlineResult!.From);
|
|
|
|
|
|
+ // Если пользователь заблокирован игонрируем
|
|
|
+ if (user.IsBlocked) return new IgnoreUpdate();
|
|
|
+
|
|
|
// Возвращаем объект, если команда совпала
|
|
|
- foreach (var item in List.Where(item => item.IsMatches(command)))
|
|
|
- if(Activator.CreateInstance(item.GetType(), user, update) is ChosenInlineResult executor)
|
|
|
- if (executor.IsMatches(command)) return executor;
|
|
|
-
|
|
|
- // Возвращаем команда не найдена, если код дошел до сюда
|
|
|
- return new CommandNotFound(user, update, command);
|
|
|
+ return List.FirstOrDefault(item => item.IsMatches(user, update)) is { } executor
|
|
|
+ ? (UpdateModel) Activator.CreateInstance(executor.GetType(), user, update)
|
|
|
+ : new CommandNotFound(user, update, update.ChosenInlineResult.ResultId);
|
|
|
}
|
|
|
|
|
|
- protected ChosenInlineResult(UserEntity user, Update update) : base(user, update)
|
|
|
+ protected internal override bool IsMatches(UserEntity user, Update update)
|
|
|
{
|
|
|
- InlineResult = update.ChosenInlineResult!.ResultId;
|
|
|
+ var query = update.ChosenInlineResult!.ResultId.Split("=")[0];
|
|
|
+ return CommandText == query;
|
|
|
}
|
|
|
|
|
|
protected ChosenInlineResult() { }
|
|
|
+ protected ChosenInlineResult(UserEntity user, Update update) : base(user, update)
|
|
|
+ {
|
|
|
+ InlineResult = update.ChosenInlineResult!.ResultId;
|
|
|
+ InlineQuery = update.ChosenInlineResult.Query;
|
|
|
+ }
|
|
|
}
|
|
|
}
|