{-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} module Simplex.Chat.Help ( chatWelcome, chatHelpInfo, filesHelpInfo, groupsHelpInfo, contactsHelpInfo, myAddressHelpInfo, incognitoHelpInfo, messagesHelpInfo, remoteHelpInfo, markdownInfo, settingsInfo, databaseHelpInfo, ) where import Data.List (intersperse) import Data.Text (Text) import qualified Data.Text as T import Simplex.Chat.Markdown import Simplex.Chat.Styled import Simplex.Chat.Types (LocalProfile (..), User (..)) import System.Console.ANSI.Types highlight :: Text -> Markdown highlight :: Text -> Markdown highlight = Format -> Text -> Markdown markdown (Color -> Format colored Color Cyan) green :: Text -> Markdown green :: Text -> Markdown green = Format -> Text -> Markdown markdown (Color -> Format colored Color Green) indent :: Markdown indent :: Markdown indent = Markdown " " listHighlight :: [Text] -> Markdown listHighlight :: [Text] -> Markdown listHighlight = [Markdown] -> Markdown forall a. Monoid a => [a] -> a mconcat ([Markdown] -> Markdown) -> ([Text] -> [Markdown]) -> [Text] -> Markdown forall b c a. (b -> c) -> (a -> b) -> a -> c . Markdown -> [Markdown] -> [Markdown] forall a. a -> [a] -> [a] intersperse Markdown ", " ([Markdown] -> [Markdown]) -> ([Text] -> [Markdown]) -> [Text] -> [Markdown] forall b c a. (b -> c) -> (a -> b) -> a -> c . (Text -> Markdown) -> [Text] -> [Markdown] forall a b. (a -> b) -> [a] -> [b] map Text -> Markdown highlight chatWelcome :: User -> [StyledString] chatWelcome :: User -> [StyledString] chatWelcome User user = (Markdown -> StyledString) -> [Markdown] -> [StyledString] forall a b. (a -> b) -> [a] -> [b] map Markdown -> StyledString styleMarkdown [ Markdown " __ __", Markdown " ___ ___ __ __ ___ _ ___" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown "\\ \\ / /" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " ___ _ _ _ _____", Markdown " / __|_ _| \\/ | _ \\ | | __ " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown "\\ V /" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " / __| || | /_\\_ _|", Markdown " \\__ \\| || |\\/| | _/ |__| _|" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " / . \\" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown "| (__| __ |/ _ \\| |", Markdown " |___/___|_| |_|_| |____|___" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown "/_/ \\_\\" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown "\\___|_||_/_/ \\_\\_|", Markdown "", Markdown "Welcome " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown green Text userName Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown "!", Markdown "Thank you for installing SimpleX Chat!", Markdown "", Markdown "Connect to SimpleX Chat developers for any questions - just type " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/simplex", Markdown "", Markdown "Follow our updates:", Markdown "> Reddit: https://www.reddit.com/r/SimpleXChat/", Markdown "> Twitter: https://twitter.com/SimpleXChat", Markdown "", Markdown "Type " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/help" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " for usage info, " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/welcome" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " to show this message" ] where User {profile :: User -> LocalProfile profile = LocalProfile {Text displayName :: Text displayName :: LocalProfile -> Text displayName, Text fullName :: Text fullName :: LocalProfile -> Text fullName}} = User user userName :: Text userName = if Text -> Bool T.null Text fullName then Text displayName else Text fullName chatHelpInfo :: [StyledString] chatHelpInfo :: [StyledString] chatHelpInfo = (Markdown -> StyledString) -> [Markdown] -> [StyledString] forall a b. (a -> b) -> [a] -> [b] map Markdown -> StyledString styleMarkdown [ Text -> Markdown highlight Text "Using SimpleX Chat", Markdown "Follow these steps to set up a connection:", Markdown "", Text -> Markdown green Text "Step 1: " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/connect" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - Alice adds a contact.", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown "Alice should send the one-time invitation printed by the /connect command", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown "to her contact, Bob, out-of-band, via any trusted channel.", Markdown "", Text -> Markdown green Text "Step 2: " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/connect <invitation>" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - Bob accepts the invitation.", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown "Bob should use the invitation he received out-of-band.", Markdown "", Text -> Markdown green Text "Step 3: " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown "Bob and Alice are notified that the connection is set up,", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown "both can now send messages:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "@bob Hello, Bob!" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - Alice messages Bob (assuming Bob has display name 'bob').", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "@alice Hey, Alice!" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - Bob replies to Alice.", Markdown "", Text -> Markdown green Text "Send file: " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/file bob ./photo.jpg", Markdown "", Text -> Markdown green Text "Create group: " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/group team", Markdown "", Text -> Markdown green Text "Create your address: " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/address", Markdown "", Text -> Markdown green Text "Other commands:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/help <topic> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - help on: " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> [Text] -> Markdown listHighlight [Text "groups", Text "contacts", Text "messages", Text "files", Text "address", Text "incognito", Text "remote", Text "settings", Text "db"], Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/profile " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - show / update user profile", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/delete <contact>" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - delete contact and all messages with them", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/chats " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - most recent chats", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/markdown " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - supported markdown syntax", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/version " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - SimpleX Chat version", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/quit " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - quit chat", Markdown "", Markdown "The commands may be abbreviated: " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> [Text] -> Markdown listHighlight [Text "/c", Text "/f", Text "/g", Text "/p", Text "/ad"] Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown ", etc." ] filesHelpInfo :: [StyledString] filesHelpInfo :: [StyledString] filesHelpInfo = (Markdown -> StyledString) -> [Markdown] -> [StyledString] forall a b. (a -> b) -> [a] -> [b] map Markdown -> StyledString styleMarkdown [ Text -> Markdown green Text "File transfer commands:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/file @<contact> <file_path> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - send file to contact", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/file #<group> <file_path> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - send file to group", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/image <name> [<file_path>] " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - send file as image to @contact or #group", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/freceive <file_id> [<file_path>] " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - accept to receive file", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/fforward <name> [<file_id>] " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - forward received file to @contact or #group", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/fcancel <file_id> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - cancel sending / receiving file", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/fstatus <file_id> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - show file transfer status", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/imgf @<contact> <file_id> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - forward received image to contact", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/imgf #<group> <file_id> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - forward received image to group", Markdown "", Markdown "The commands may be abbreviated: " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> [Text] -> Markdown listHighlight [Text "/f", Text "/img", Text "/fr", Text "/ff", Text "/fc", Text "/fs"] ] groupsHelpInfo :: [StyledString] groupsHelpInfo :: [StyledString] groupsHelpInfo = (Markdown -> StyledString) -> [Markdown] -> [StyledString] forall a b. (a -> b) -> [a] -> [b] map Markdown -> StyledString styleMarkdown [ Text -> Markdown green Text "Group commands:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/group <group> [<description>] " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - create group", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/add <group> <contact> [<role>] " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - add contact to group, roles: " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "owner" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown ", " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "admin" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " (default), " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "member", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/join <group> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - accept group invitation", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/members <group> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - list group members", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/remove <group> <member> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - remove member from group", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/leave <group> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - leave group", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/clear #<group> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - clear all messages in the group locally", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/delete #<group> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - delete group and all messages", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/gp <group> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - view group profile", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/gp <group> <name> [<description>] " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - update group profile names", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set welcome <group> <welcome> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - set group welcome message", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/delete welcome <group> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - delete group welcome message", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/show welcome <group> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - show group welcome message", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/groups " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - list groups", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "#<group> <message> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - send message to group", Markdown "", Text -> Markdown green Text "Public group links:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/create link #<group> [role] " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - create public group link (with optional role, default: member)", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set link role #<group> role " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - change role assigned to the users joining via the link (member/observer)", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/show link #<group> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - show public group link and initial member role", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/delete link #<group> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - delete link to join the group (does NOT delete any members)", Markdown "", Text -> Markdown green Text "Mute group messages:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/mute #<group> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - do not show contact's messages", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/unmute #<group> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - show contact's messages", Markdown "", Text -> Markdown green Text "Group member connection and security:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/code #<group> <member> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - show member's security code", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/verify #<group> <member> <code> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - verify member's security code", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/verify #<group> <member> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - clear security code verification", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/info #<group> <member> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - info about member connection", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/switch #<group> <member> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - switch receiving messages to another SMP relay", Markdown "", Text -> Markdown green Text "Group chat preferences:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set voice #<group> on/off " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - enable/disable voice messages", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set files #<group> on/off " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - enable/disable files and media (other than voice)", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set history #<group> on/off " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - enable/disable sending recent history to new members", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set delete #<group> on/off " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - enable/disable full message deletion", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set direct #<group> on/off " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - enable/disable direct messages to other members", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set disappear #<group> on <time> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - enable disappearing messages with <time>:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text " " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " 30s, 5min, 1h, 8h, day, week, month", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set disappear #<group> off " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - disable disappearing messages", Markdown "", Markdown "The commands may be abbreviated: " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> [Text] -> Markdown listHighlight [Text "/g", Text "/a", Text "/j", Text "/rm", Text "/l", Text "/d", Text "/ms", Text "/gs"] ] contactsHelpInfo :: [StyledString] contactsHelpInfo :: [StyledString] contactsHelpInfo = (Markdown -> StyledString) -> [Markdown] -> [StyledString] forall a b. (a -> b) -> [a] -> [b] map Markdown -> StyledString styleMarkdown [ Text -> Markdown green Text "Contact commands:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/contacts " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - list contacts", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/clear @<name> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - clear all messages with the contact locally", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/delete @<name> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - delete contact and all messages", Markdown "", Text -> Markdown green Text "Mute contact messages:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/mute @<name> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - do not show contact's messages", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/unmute @<name> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - show contact's messages", Markdown "", Text -> Markdown green Text "Contact connection and security:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/code @<name> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - show contact's security code", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/verify @<name> <code> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - verify contact's security code", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/verify @<name> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - clear security code verification", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/info @<name> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - info about contact connection", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/switch @<name> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - switch receiving messages to another SMP relay", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/pq @<name> on/off " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - [BETA] toggle quantum resistant / standard e2e encryption for a contact", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " (both have to enable for quantum resistance)", Markdown "", Text -> Markdown green Text "Contact chat preferences:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set voice @<name> yes/no/always " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - allow/prohibit voice messages with the contact", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set voice @<name> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - reset voice messages to user's default", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set delete @<name> yes/no/always " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - allow/prohibit full message deletion", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set delete @<name> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - reset full deletion to user's default", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set disappear @<name> yes <time> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - enable disappearing messages with <time>:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text " " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " 30s, 5min, 1h, 8h, day, week, month", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set disappear @<name> yes " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - enable disappearing messages with offered time", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set disappear @<name> no " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - disable disappearing messages", Markdown "", Markdown "The commands may be abbreviated: " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> [Text] -> Markdown listHighlight [Text "/d", Text "/i"] ] myAddressHelpInfo :: [StyledString] myAddressHelpInfo :: [StyledString] myAddressHelpInfo = (Markdown -> StyledString) -> [Markdown] -> [StyledString] forall a b. (a -> b) -> [a] -> [b] map Markdown -> StyledString styleMarkdown [ Text -> Markdown green Text "Your contact address commands:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/address " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - create your address", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/profile_address on/off " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - share address with your contacts (it will be added to your profile)", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/delete_address " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - delete your address (accepted contacts will remain connected)", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/show_address " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - show your address", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/accept <name> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - accept contact request", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/reject <name> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - reject contact request", Markdown "", Markdown "Please note: you can receive spam contact requests, but it's safe to delete the address!", Markdown "", Markdown "The commands may be abbreviated: " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> [Text] -> Markdown listHighlight [Text "/ad", Text "/da", Text "/sa", Text "/ac", Text "/rc"] ] incognitoHelpInfo :: [StyledString] incognitoHelpInfo :: [StyledString] incognitoHelpInfo = (Markdown -> StyledString) -> [Markdown] -> [StyledString] forall a b. (a -> b) -> [a] -> [b] map Markdown -> StyledString styleMarkdown [ Format -> Text -> Markdown markdown (Color -> Format colored Color Red) Text "/incognito" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " command is deprecated, use commands below instead.", Markdown "", Markdown "Incognito mode protects the privacy of your main profile — you can choose to create a new random profile for each new contact.", Markdown "It allows having many anonymous connections without any shared data between them in a single chat profile.", Markdown "When you share an incognito profile with somebody, this profile will be used for the groups they invite you to.", Markdown "", Text -> Markdown green Text "Incognito commands:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/connect incognito " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - create new invitation link using incognito profile", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/connect incognito <invitation> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - accept invitation using incognito profile", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/accept incognito <name> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - accept contact request using incognito profile", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/simplex incognito " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - connect to SimpleX Chat developers using incognito profile", Markdown "", Markdown "The commands may be abbreviated: " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> [Text] -> Markdown listHighlight [Text "/c i", Text "/c i <invitation>", Text "/ac i <name>"], Markdown "To find the profile used for an incognito connection, use " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/info <contact>" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown "." ] messagesHelpInfo :: [StyledString] messagesHelpInfo :: [StyledString] messagesHelpInfo = (Markdown -> StyledString) -> [Markdown] -> [StyledString] forall a b. (a -> b) -> [a] -> [b] map Markdown -> StyledString styleMarkdown [ Text -> Markdown green Text "Show recent chats", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/chats [N] " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - the most recent N conversations (20 by default)", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/chats all " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - all conversations", Markdown "", Text -> Markdown green Text "Show recent messages", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/tail @alice [N] " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - the last N messages with alice (10 by default)", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/tail #team [N] " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - the last N messages in the group team", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/tail [N] " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - the last N messages in all chats", Markdown "", Text -> Markdown green Text "Search for messages", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/search @alice [N] <text>" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - the last N messages with alice containing <text> (10 by default)", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/search #team [N] <text> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - the last N messages in the group team containing <text>", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/search [N] <text> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - the last N messages in all chats containing <text>", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/?" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " can be used instead of /search", Markdown "", Text -> Markdown green Text "Sending replies to messages", Markdown "To quote a message that starts with \"hi\":", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "> @alice (hi) <msg> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - to reply to alice's most recent message", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text ">> @alice (hi) <msg> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - to quote user's most recent message to alice", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "> #team (hi) <msg> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - to quote most recent message in the group from any member", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "> #team @alice (hi) <msg>" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - to quote alice's most recent message in the group #team", Markdown "", Text -> Markdown green Text "Deleting sent messages (for everyone)", Markdown "To delete a message that starts with \"hi\":", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "\\ @alice hi " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - to delete your message to alice", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "\\ #team hi " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - to delete your message in the group #team", Markdown "", Text -> Markdown green Text "Editing sent messages", Markdown "To edit your last message press up arrow, edit (keep the initial ! symbol) and press enter.", Markdown "To edit your most recent message that starts with \"hi\":", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "! @alice (hi) <new msg> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - to edit your message to alice", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "! #team (hi) <new msg> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - to edit your message in the group #team" ] remoteHelpInfo :: [StyledString] remoteHelpInfo :: [StyledString] remoteHelpInfo = (Markdown -> StyledString) -> [Markdown] -> [StyledString] forall a b. (a -> b) -> [a] -> [b] map Markdown -> StyledString styleMarkdown [ Text -> Markdown green Text "Remote control", Markdown "You can use CLI as a remote controller for a mobile app or as a remote host for a desktop app (or another CLI).", Markdown "For example, you can run CLI on a server and use it from a desktop computer, connecting via SSH port forwarding.", Markdown "", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/set device name <name> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - set CLI name for remote connections", Markdown "", Text -> Markdown green Text "Using as remote controller", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/start remote host new " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - pair and connect a new remote host", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/start remote host <id> [multicast=on] " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - start connection with a known (paired) remote host", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/stop remote host new " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - cancel pairing with a new remote host", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/stop remote host <id> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - stop connection with connected remote host", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/switch remote host local " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - switch to using local database", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/switch remote host <id> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - switch to connected remote host", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/list remote hosts " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - list known remote hosts", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/delete remote host <id> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - delete (unpair) known remote hosts - also deletes all host files from controller", Markdown "", Text -> Markdown green Text "Using as remote host", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/connect remote ctrl <session_address> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - connect to remote controller via the adress from /start remote host", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/stop remote ctrl " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - stop connection with remote controller", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/find remote ctrl " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - find known remote controller on the local network (it should be started with multicast=on)", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/list remote ctrls " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - list known remote controllers", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/delete remote ctrl <id> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - delete known remote controller" ] markdownInfo :: [StyledString] markdownInfo :: [StyledString] markdownInfo = (Markdown -> StyledString) -> [Markdown] -> [StyledString] forall a b. (a -> b) -> [a] -> [b] map Markdown -> StyledString styleMarkdown [ Text -> Markdown green Text "Markdown:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "*bold* " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Format -> Text -> Markdown markdown Format Bold Text "bold text", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "_italic_ " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Format -> Text -> Markdown markdown Format Italic Text "italic text" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " (shown as underlined)", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "~strikethrough~" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Format -> Text -> Markdown markdown Format StrikeThrough Text "strikethrough text" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " (shown as inverse)", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "`code snippet` " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Format -> Text -> Markdown markdown Format Snippet Text "a + b // no *markdown* here", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "!1 text! " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Format -> Text -> Markdown markdown (Color -> Format colored Color Red) Text "red text" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " (1-6: red, green, blue, yellow, cyan, magenta)", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "#secret# " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Format -> Text -> Markdown markdown Format Secret Text "secret text" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " (can be copy-pasted)" ] settingsInfo :: [StyledString] settingsInfo :: [StyledString] settingsInfo = (Markdown -> StyledString) -> [Markdown] -> [StyledString] forall a b. (a -> b) -> [a] -> [b] map Markdown -> StyledString styleMarkdown [ Text -> Markdown green Text "Chat settings:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/pq on/off " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - [BETA] toggle quantum resistant / standard e2e encryption for the new contacts", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/network " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - show / set network access options", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/smp " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - show / set configured SMP servers", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/xftp " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - show / set configured XFTP servers", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/info <contact> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - information about contact connection", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/info #<group> <member> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - information about member connection", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/(un)mute <contact> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - (un)mute contact, the last messages can be printed with /tail command", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/(un)mute #<group> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - (un)mute group", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/get stats " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - get usage statistics", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/reset stats " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - reset usage statistics" ] databaseHelpInfo :: [StyledString] databaseHelpInfo :: [StyledString] databaseHelpInfo = (Markdown -> StyledString) -> [Markdown] -> [StyledString] forall a b. (a -> b) -> [a] -> [b] map Markdown -> StyledString styleMarkdown [ Text -> Markdown green Text "Database export:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/db export " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - create database export file that can be imported in mobile apps", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/files_folder <path> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - set files folder path to include app files in the exported archive", Markdown "", Text -> Markdown green Text "Database encryption:", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/db encrypt <key> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - encrypt chat database with key/passphrase", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/db key <current> <new>" Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - change the key of the encrypted app database", Markdown indent Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Text -> Markdown highlight Text "/db decrypt <key> " Markdown -> Markdown -> Markdown forall a. Semigroup a => a -> a -> a <> Markdown " - decrypt chat database" ]