Exemplo n.º 1
0
 public async Task ShowSettingsMenu(string chatId, SettingsKeyboardState state,
                                    SelectedOption option = default(SelectedOption), UserSettingsModel model = null, IEnumerable <LabelInfo> labels = null)
 {
     var keyboard = _settingsKeyboardFactory.CreateKeyboard(state, model, labels);
     var message  = SettingsMenuMessageBuilder(state, option, model);
     await _telegramMethods.SendMessage(chatId, message, ParseMode.Html, false, false, null, keyboard);
 }
Exemplo n.º 2
0
 public async Task UpdateSettingsMenu(string chatId, int messageId, SettingsKeyboardState state, SelectedOption option = default(SelectedOption),
                                      UserSettingsModel model = null, TempDataModel tempData = null, IEnumerable <LabelInfo> labels = null)
 {
     var keyboard = _settingsKeyboardFactory.CreateKeyboard(state, model, labels);
     var message  = SettingsMenuMessageBuilder(state, option, model, tempData?.LabelId);
     await
     _telegramMethods.EditMessageText(message, chatId, messageId.ToString(), null, ParseMode.Html, null, keyboard);
 }
Exemplo n.º 3
0
        public SettingsKeyboard CreateKeyboard(SettingsKeyboardState state, UserSettingsModel model = null, IEnumerable <LabelInfo> labels = null)
        {
            SettingsKeyboard keyboard;

            switch (state)
            {
            case SettingsKeyboardState.MainMenu:
                keyboard = new MainMenuKeyboard(model.MailNotification);
                break;

            case SettingsKeyboardState.EditLabelsMenu:
                keyboard = new EditLabelsKeyboard(labels);
                break;

            case SettingsKeyboardState.BlackListMenu:
                keyboard = new BlackListKeyboard(labels, model?.Blacklist.Select(b => new LabelInfo {
                    Name = b.Name, LabelId = b.LabelId
                }).ToList(), !model.UseWhitelist);
                break;

            case SettingsKeyboardState.WhiteListMenu:
                keyboard = new WhiteListKeyboard(labels, model?.Whitelist.Select(b => new LabelInfo {
                    Name = b.Name, LabelId = b.LabelId
                }).ToList(), model.UseWhitelist);
                break;

            case SettingsKeyboardState.LabelsMenu:
                keyboard = model.Access == UserAccess.FULL
                        ? new LabelsKeyboard(model.UseWhitelist)
                        : new NotifyLabelsKeyboard(model.UseWhitelist);
                break;

            case SettingsKeyboardState.IgnoreMenu:
                keyboard = new IgnoreKeyboard();
                break;

            case SettingsKeyboardState.AdditionalMenu:
                keyboard = new AdditionalMenuKeyboard(model);
                break;

            case SettingsKeyboardState.PermissionsMenu:
                keyboard = new PermissionsKeyboard(model);
                break;

            case SettingsKeyboardState.LabelActionsMenu:
                keyboard = new LabelActionsKeyboard();
                break;

            default:
                return(null);
            }

            keyboard.CreateInlineKeyboard();
            return(keyboard);
        }
Exemplo n.º 4
0
        private string SettingsMenuMessageBuilder(SettingsKeyboardState state, SelectedOption option = default(SelectedOption),
                                                  UserSettingsModel userSettings = null, string editableLableId = null)
        {
            if (userSettings == null && state.EqualsAny(
                    SettingsKeyboardState.LabelsMenu,
                    SettingsKeyboardState.IgnoreMenu,
                    SettingsKeyboardState.WhiteListMenu,
                    SettingsKeyboardState.BlackListMenu))
            {
                throw new InvalidOperationException($"{nameof(userSettings)} must be not null if {nameof(state)} equals {state}.");
            }

            StringBuilder message = new StringBuilder();

            switch (state)
            {
            case SettingsKeyboardState.MainMenu:
                switch (option)
                {
                case SelectedOption.Option9:         //about button
                    message.AppendLine($"<b>{_settings.BotName}</b>");
                    message.AppendLine();
                    message.AppendLine();
                    message.AppendLine($"Bot version: {_settings.BotVersion}");
                    message.AppendLine("Developed by Igor 'CoffeeJelly' Salzhenitsin");
                    message.AppendLine("Contact emails:");
                    message.AppendLine("<code>[email protected]</code>");
                    message.AppendLine("<code>[email protected]</code>");
                    message.AppendLine();
                    message.AppendLine();
                    message.AppendLine("2017");
                    break;

                default:
                    message.Append("<b>Main Settings Menu</b>");
                    break;
                }
                break;

            case SettingsKeyboardState.LabelsMenu:
                switch (option)
                {
                default:
                    message.AppendLine("<b>Labels Menu</b>");
                    message.AppendLine();
                    message.Append(!userSettings.UseWhitelist
                                ? "Choose <b>Whitelist</b> to specify the email labels that will be allowed. "
                                   + "Incoming email without at least one of the selected labels will not be displayed in the Telegram chat."
                                : "Choose <b>Blacklist</b> to specify the email labels that will be blocked."
                                   + "Incoming email with at least one of the selected labels will not be displayed in the Telegram chat.");
                    break;
                }
                break;

            case SettingsKeyboardState.EditLabelsMenu:
                message.AppendLine("<b>User Defined Editable Labels:</b>");
                message.AppendLine();
                break;

            case SettingsKeyboardState.WhiteListMenu:
                message.AppendLine("<b>Whitelist</b>");
                message.AppendLine();
                message.AppendLine(!userSettings.UseWhitelist
                        ? "If you want to use whitelist click \"Use whitelist mode\" button."
                        : "Click the button to add it to (or remove from) the whitelist.");
                break;

            case SettingsKeyboardState.BlackListMenu:
                message.AppendLine("<b>Blacklist</b>");
                message.AppendLine();
                message.AppendLine(userSettings.UseWhitelist
                        ? "If you want to use blacklist click \"Use blacklist mode\" button."
                        : "Click the button to add it to (or remove from) the blacklist.");
                break;

            case SettingsKeyboardState.IgnoreMenu:
                switch (option)
                {
                case SelectedOption.Option1:
                    message.AppendLine(userSettings.IgnoreList?.Count == 0
                                ? "Your ignore list is empty."
                                : $"You have {userSettings.IgnoreList?.Count} email(s) ignored:");
                    userSettings.IgnoreList?.IndexEach((email, i) =>
                    {
                        message.AppendLine($"{i + 1}. {email.Address}");
                    });
                    break;

                default:
                    message.AppendLine("<b>Ignore Control Menu</b>");
                    message.AppendLine();
                    message.AppendLine(
                        "To stop receiving notifications about new emails from a specific email address, " +
                        "add it to the ignore list.");
                    message.AppendLine("To add or remove an email from the ignore list, click the button and type the email address.");
                    message.AppendLine();
                    message.AppendLine($"{Emoji.INFO_SIGN} You can type the displayed sequence number to remove the email from the ignore list.");
                    break;
                }
                break;

            case SettingsKeyboardState.AdditionalMenu:
                message.Append("<b>Main Settings Menu</b>");
                break;

            case SettingsKeyboardState.PermissionsMenu:
                message.AppendLine("<b>Permissions Menu</b>");
                message.AppendLine();
                message.AppendLine("You can change or revoke the bot permissions to your Gmail account here.");
                break;

            case SettingsKeyboardState.LabelActionsMenu:
                message.AppendLine($"<b>Edit label with id {editableLableId}:</b>");
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(state), state, null);
            }

            return(message.ToString());
        }