Exemple #1
0
        public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            if (!(context.ActionArguments.Values.FirstOrDefault(x => x is Update) is Update update))
            {
                context.Result = new StatusCodeResult(401);
                return;
            }

            var extendedUpdate = userContextProvider.Set(update);
            var id             = extendedUpdate.Type == UpdateType.CallbackQuery
                ? extendedUpdate.CallbackQuery.From.Id
                : extendedUpdate.RealMessage.From.Id;

            telegramUserIdProvider.Set(id);
            var dbUser = await loaderProvider
                         .Get <int, TelegramUser>()
                         .GetOrLoadAsync(id);

            userContextProvider.SetDatabaseUser(dbUser);
            var result = await next();

            if (result.Exception != null)
            {
                await telegramUsersNotifier
                .SendAsync((client, user) => client
                           .SendTextMessageAsync(user.Id, result.Exception.ToString()),
                           TelegramUserStates.Dev);

                result.ExceptionHandled = true;
                result.HttpContext.Response.StatusCode = 200;
            }
        }