Example #1
0
        private async void Handle(Message message)
        {
            if (message.From != null)
            {
                Console.WriteLine(string.Format("{0} {1}: {2}", DateTime.Now, message.From.Username, message.Text));
            }

            var account = _accounts.GetById(message.From.Id);

            if (account != null && account.Status != Status.Ok)
            {
                await _registrationProcess.HandleCurrentStep(account, message);

                return;
            }

            if (account != null && account.TelegramName != (message.From.Username ?? string.Empty))
            {
                account.TelegramName = message.From.Username ?? string.Empty;
                _accounts.Update(account);
            }

            if (message.NewChatMember != null && account == null)
            {
                await _client.SendMessage(new SendMessageQuery()
                {
                    ChatId           = message.Chat.Id,
                    ReplyToMessageId = message.MessageId,
                    Text             = Messages.GetWelcomeMessage(message.NewChatMember)
                });

                return;
            }

            if (string.IsNullOrEmpty(message.Text))
            {
                return;
            }

            message.Text = message.Text.ToLower();

            if (message.Chat.Type != "private" && !message.Text.Contains("@clankbot"))
            {
                return;
            }

            message.Text = message.Text.Replace("@clankbot", "");

            var command = _commands.FirstOrDefault(c => c.IsApplicable(message));

            if (command != null)
            {
                if (command.IsPrivateOnly() && message.Chat.Type != "private")
                {
                    await _client.SendMessage(new SendMessageQuery()
                    {
                        ChatId           = message.Chat.Id,
                        ReplyToMessageId = message.MessageId,
                        Text             = Messages.PrivateOnlyCommand
                    });

                    return;
                }
                await command.Handle(message);
            }
        }