コード例 #1
0
    public async Task Handle(Message message)
    {
        await SendTypingNotification(message);

        var chatConfig = await _chatConfigurationService.GetConfigurationByChatId(message.Chat.Id);

        var messageBuilder = new StringBuilder();

        if (chatConfig.IsBotStopped)
        {
            if (!await IsUserAdmin(message))
            {
                messageBuilder.AppendLine("Only admins can use this command.");
            }
            else
            {
                chatConfig.IsBotStopped = false;
                await _chatConfigurationService.Update(chatConfig);

                messageBuilder.AppendLine("Bot started");
            }
        }
        else
        {
            messageBuilder.AppendLine("Bot is already started");
        }

        await Client.SendTextMessageAsync(message.Chat.Id, messageBuilder.ToString());

        await NotifyIfBotIsNotAdmin(message);
    }
コード例 #2
0
        public async Task Handle(Message message)
        {
            await SendTypingNotification(message);

            var chatConfig = await _chatConfigurationService.GetConfigurationByChatId(message.Chat.Id);

            var messageBuilder = new StringBuilder();

            messageBuilder.AppendLine("Algorithms Available:");
            messageBuilder.AppendLine(GetAvailableOptions(chatConfig.GrammarAlgorithm));
            messageBuilder.AppendLine("Supported Languages:");
            messageBuilder.AppendLine(GetAvailableOptions(chatConfig.SelectedLanguage));

            var showCorrectionDetailsIcon = chatConfig.HideCorrectionDetails ? "❌" : "✅";

            messageBuilder.AppendLine($"Show correction details {showCorrectionDetailsIcon}").AppendLine();
            messageBuilder.AppendLine("Strictness level:").AppendLine($"{chatConfig.CorrectionStrictnessLevel.GetDescription()} ✅").AppendLine();

            messageBuilder.AppendLine($"Whitelist Words:").AppendLine($"Type {TelegramBotCommands.WhiteList} to see Whitelist words configured.").AppendLine();

            if (chatConfig.IsBotStopped)
            {
                messageBuilder.AppendLine($"The bot is currently stopped. Type {TelegramBotCommands.Start} to activate the Bot.");
            }

            await Client.SendTextMessageAsync(message.Chat.Id, messageBuilder.ToString());

            await NotifyIfBotIsNotAdmin(message);
        }
コード例 #3
0
        public async Task Handle(Message message)
        {
            await SendTypingNotification(message);

            var chatConfig = await _chatConfigurationService.GetConfigurationByChatId(message.Chat.Id);

            if (chatConfig.WhiteListWords?.Any() == true)
            {
                var messageBuilder = new StringBuilder();
                messageBuilder.AppendLine("Whitelist Words:\n");

                foreach (var word in chatConfig.WhiteListWords)
                {
                    messageBuilder.AppendLine($"- {word}");
                }

                await Client.SendTextMessageAsync(message.Chat.Id, messageBuilder.ToString());

                return;
            }

            await Client.SendTextMessageAsync(message.Chat.Id, $"You don't have Whitelist words configured. Use {TelegramBotCommands.AddWhiteList} to add words to the WhiteList.");

            await NotifyIfBotIsNotAdmin(message);
        }
コード例 #4
0
        private async Task <ChatConfiguration> GetChatConfiguration(long chatId)
        {
            var chatConfig = await _chatConfigurationService.GetConfigurationByChatId(chatId);

            if (chatConfig != null)
            {
                return(chatConfig);
            }

            var chatConfiguration = new ChatConfiguration
            {
                ChatId           = chatId,
                GrammarAlgorithm = Defaults.DefaultAlgorithm,
                SelectedLanguage = SupportedLanguages.Auto
            };

            await _chatConfigurationService.AddConfiguration(chatConfiguration);

            return(chatConfiguration);
        }
コード例 #5
0
        public async Task Handle(Message message)
        {
            await SendTypingNotification(message);

            if (!await IsUserAdmin(message))
            {
                await Client.SendTextMessageAsync(message.Chat.Id, "Only admins can use this command.", replyToMessageId : message.MessageId);

                return;
            }

            var chatConfig = await _chatConfigurationService.GetConfigurationByChatId(message.Chat.Id);

            chatConfig.IsBotStopped = true;

            await _chatConfigurationService.Update(chatConfig);

            await Client.SendTextMessageAsync(message.Chat.Id, "Bot stopped");
        }
コード例 #6
0
    public async Task HandleCallBackQuery(CallbackQuery callbackQuery)
    {
        var message = callbackQuery.Message;

        if (!await IsUserAdmin(_client, callbackQuery.Message, callbackQuery.From))
        {
            var userMention = $"[{callbackQuery.From.FirstName} {callbackQuery.From.LastName}](tg://user?id={callbackQuery.From.Id})";

            await _client.SendTextMessageAsync(message.Chat.Id, $"{userMention} Only admins can use this command.", ParseMode.Markdown);

            return;
        }

        var chatConfig = await _chatConfigurationService.GetConfigurationByChatId(message.Chat.Id);

        var enumTypeString = callbackQuery.Data.Split(".")[0];

        if (enumTypeString == nameof(SupportedLanguages))
        {
            var languageSelectedString = callbackQuery.Data.Split(".")[1];

            var languageSelected = Enum.GetValues(typeof(SupportedLanguages)).Cast <SupportedLanguages>().First(v => v.ToString() == languageSelectedString);

            chatConfig.SelectedLanguage = languageSelected;

            await _client.SendTextMessageAsync(message.Chat.Id, $"Language updated: {languageSelected.GetDescription()}");
        }
        else
        {
            var algorithmSelectedString = callbackQuery.Data.Split(".")[1];

            var algorithmSelected = Enum.GetValues(typeof(GrammarAlgorithms)).Cast <GrammarAlgorithms>().First(v => v.ToString() == algorithmSelectedString);

            chatConfig.GrammarAlgorithm = algorithmSelected;

            await _client.SendTextMessageAsync(message.Chat.Id, $"Algorithm updated: {algorithmSelected.GetDescription()}");
        }

        await _chatConfigurationService.Update(chatConfig);

        // Fire and forget
        _ = _client.DeleteMessageAsync(callbackQuery.Message.Chat.Id, callbackQuery.Message.MessageId);
    }
コード例 #7
0
        public async Task Handle(Message message)
        {
            await SendTypingNotification(message);

            var messageBuilder = new StringBuilder();

            if (!await IsUserAdmin(message))
            {
                messageBuilder.AppendLine("Only admins can use this command.");
                await Client.SendTextMessageAsync(message.Chat.Id, messageBuilder.ToString(), replyToMessageId : message.MessageId);

                return;
            }

            var parameters = message.Text.Split(" ");

            if (parameters.Length == 1)
            {
                await ShowOptions <SupportedLanguages>(message, "Choose Language");
            }
            else
            {
                bool parsedOk = int.TryParse(parameters[1], out int language);

                if (parsedOk && language.IsAssignableToEnum <SupportedLanguages>())
                {
                    var chatConfig = await _chatConfigurationService.GetConfigurationByChatId(message.Chat.Id);

                    chatConfig.SelectedLanguage = (SupportedLanguages)language;

                    await _chatConfigurationService.Update(chatConfig);

                    await Client.SendTextMessageAsync(message.Chat.Id, "Language updated.");
                }
                else
                {
                    await Client.SendTextMessageAsync(message.Chat.Id, $"Invalid parameter. Type {TelegramBotCommands.Language} <language_number> to set a language.");
                }
            }

            await NotifyIfBotIsNotAdmin(message);
        }
コード例 #8
0
        public async Task Handle(Message message)
        {
            await SendTypingNotification(message);

            var messageBuilder = new StringBuilder();

            if (!await IsUserAdmin(message))
            {
                messageBuilder.AppendLine("Only admins can use this command.");
                await Client.SendTextMessageAsync(message.Chat.Id, messageBuilder.ToString(), replyToMessageId : message.MessageId);

                return;
            }

            var parameters = message.Text.Split(" ");

            if (parameters.Length == 1)
            {
                await ShowOptions <GrammarAlgorithms>(message, "Choose Algorithm");
            }
            else
            {
                bool parsedOk = int.TryParse(parameters[1], out int algorithm);

                if (parsedOk && algorithm.IsAssignableToEnum <GrammarAlgorithms>())
                {
                    var chatConfig = await _chatConfigurationService.GetConfigurationByChatId(message.Chat.Id);

                    chatConfig.GrammarAlgorithm = (GrammarAlgorithms)algorithm;

                    await _chatConfigurationService.Update(chatConfig);

                    await Client.SendTextMessageAsync(message.Chat.Id, "Algorithm updated.");
                }
                else
                {
                    await Client.SendTextMessageAsync(message.Chat.Id, $"Invalid parameter. Type {TelegramBotCommands.SetAlgorithm} <algorithm_numer> to set an algorithm.");
                }
            }

            await NotifyIfBotIsNotAdmin(message);
        }
コード例 #9
0
        public async Task Handle(Message message)
        {
            await SendTypingNotification(message);

            if (!await IsUserAdmin(message))
            {
                await Client.SendTextMessageAsync(message.Chat.Id, "Only admins can use this command.", replyToMessageId : message.MessageId);

                return;
            }

            var chatConfig = await _chatConfigurationService.GetConfigurationByChatId(message.Chat.Id);

            chatConfig.HideCorrectionDetails = false;

            await _chatConfigurationService.Update(chatConfig);

            await Client.SendTextMessageAsync(message.Chat.Id, "Show correction details ✅");

            await NotifyIfBotIsNotAdmin(message);
        }
コード例 #10
0
    public async Task Handle(Message message)
    {
        await SendTypingNotification(message);

        if (!await IsUserAdmin(message))
        {
            await Client.SendTextMessageAsync(message.Chat.Id, "Only admins can use this command.", replyToMessageId : message.MessageId);

            return;
        }

        var chatConfig = await _chatConfigurationService.GetConfigurationByChatId(message.Chat.Id);

        chatConfig.CorrectionStrictnessLevel = CorrectionStrictnessLevels.Intolerant;

        await _chatConfigurationService.Update(chatConfig);

        await Client.SendTextMessageAsync(message.Chat.Id, "Intolerant ✅");

        await NotifyIfBotIsNotAdmin(message);
    }
コード例 #11
0
        public async Task Handle(Message message)
        {
            await SendTypingNotification(message);

            if (!await IsUserAdmin(message))
            {
                await Client.SendTextMessageAsync(message.Chat.Id, "Only admins can use this command.", replyToMessageId : message.MessageId);

                return;
            }

            var parameters = message.Text.Split(" ");

            if (parameters.Length == 1)
            {
                await Client.SendTextMessageAsync(message.Chat.Id, $"Parameter not received. Type {TelegramBotCommands.AddWhiteList} <word> to add a Whitelist word.");
            }
            else
            {
                var chatConfig = await _chatConfigurationService.GetConfigurationByChatId(message.Chat.Id);

                var word = parameters[1].Trim();

                if (chatConfig.WhiteListWords.Contains(word, new CaseInsensitiveEqualityComparer()))
                {
                    await Client.SendTextMessageAsync(message.Chat.Id, $"The word '{word}' is already on the WhiteList");

                    return;
                }

                chatConfig.WhiteListWords.Add(word);

                await _chatConfigurationService.Update(chatConfig);

                await Client.SendTextMessageAsync(message.Chat.Id, $"Word '{word}' added to the WhiteList.");
            }

            await NotifyIfBotIsNotAdmin(message);
        }