Example #1
0
        private async void BotOnMessageReceivedAsync(object sender, MessageEventArgs messageEventArgs)
        {
            var message = messageEventArgs.Message;

            if (message == null)
            {
                return;
            }

            var username = message.Chat.Username;

            await asyncLock.AcquireLockAsync(username);

            var handlersToExecute = handlers
                                    .Select(handler => (handler.GetScore(message, botClient), handler))
                                    .Where(pair => pair.Item1 > 0)
                                    .OrderByDescending(pair => pair.Item1)
                                    .Take(4)
                                    .ToArray();

            if (handlersToExecute.Length == 0)
            {
                await botClient.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : "I can't understand you :(\nPlease, use /help.",
                    replyMarkup : new ReplyKeyboardRemove()
                    );

                asyncLock.Release(username);
                return;
            }

            if (handlersToExecute.Length == 1)
            {
                await handlersToExecute.First().handler.ExecuteAsync(message, botClient);

                asyncLock.Release(username);
                return;
            }

            repository.CreateOrUpdate(username, message);

            await SendInlineKeyboard(message, handlersToExecute
                                     .Select(pair => pair.handler)
                                     .ToArray());
        }