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); }
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); }
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); }
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()); }