Package: hcclient
hcclientA cross-platform terminal client forhack.chatIntroductionFeaturesPrerequisitesInstallationUsageStylingLaTeX SimplificationConfigurationNotificationsUpdatable MessagesHooksContributingIntroduction"hack.chat is a minimal, distraction-free, accountless, logless, disappearing chat service which is easily deployable as your own service."-hack.chathcclient is a configurable and feature-rich cross-platform terminal client for connecting tohack.chat[!IMPORTANT]
This client is written to be compatible with the official live instance. Compatibility with your own self-hosted instance or other alternate instances is not guaranteed.FeaturesSome of the features hcclient has to offer:Cross-platform:Tested to work on Windows, Linux, macOS and Android. SeePrerequisitesfor more information.Suggestions:Starting your message with@or/will bring up a menu with a list of online users or commands. Cycle through them with arrow keys or continue typing to filter the suggestions even more. Suggestion aggressiveness can be set with--suggest-aggr.Markdown:Messages are parsed as markdown, with support for bold, italics, strikethrough, code blocks, backticks, links and spec compliant escaping. SeeStylingfor more information.Syntax highlighting:Code blocks in messages are highlighted with user specified languages or language guessing.LaTeX simplification:LaTeX expressions are parsed and converted to sympy expressions, which are more readable. SeeLaTeX Simplificationfor more information.Configuration:Generate and load YAML/JSON configuration files with no editing required. Change configuration options from within the client with commands, modifying behaviour and colors without having to restart. SeeConfigurationfor more information.Desktop notifications:Receive notifications whenever someone mentions you or sends you a whisper. Android notifications are supported when running onTermux. SeeNotificationsfor more information.Aliases:Set aliases for messages and phrases you send often, because why wouldn't you?Whisper locking:Lock the client with a command to send only whispers, preventing accidental information leaks.Ignore list:Message blocking using tripcodes and connection hashes.Proxy support:Connect through SOCKS4, SOCKS5 or HTTP proxies. Tested to work with Tor.PrerequisitesPython >= 3.10PipAn xterm-256color terminal emulator that supports ANSI escape sequencesNotification support requires different dependencies on different platforms, seeNotificationsfor more information.InstallationCross-platform installation:# Install the PyPI packagepipinstallhcclient# Run hcclienthcclient--helpFor LaTeX support, installhcclient[latex]instead.On Arch Linux (and most Arch-based distributions), install theAUR packagewith makepkg or an AUR helper.This will install an isolated environment with all dependencies in/opt/hcclient.Alternatively, install the LaTeX enabledAUR package.Usage$ hcclient --help

usage: hcclient [-h] [-v] [--gen-config] [--defaults] [--colors]
                [--themes] [-c CHANNEL] [-n NICKNAME] [-p PASSWORD]
                [-w ADDRESS] [-l FILE] [--no-config] [--no-parse]
                [--clear] [--is-mod] [--no-unicode]
                [--highlight-theme THEME] [--no-markdown] [--no-notify]
                [--prompt-string STRING] [--timestamp-format FORMAT]
                [--suggest-aggr 0-3] [--proxy TYPE:HOST:PORT]

terminal client for hack.chat

commands:
  -h, --help                        display this help message
  -v, --version                     display version information
  --gen-config                      generate config file
  --defaults                        display default config values
  --colors                          display valid color values
  --themes                          display valid highlight themes

required arguments:
  -c CHANNEL, --channel CHANNEL     set channel to join
  -n NICKNAME, --nickname NICKNAME  set nickname to use

optional arguments:
  -p PASSWORD, --password PASSWORD  specify tripcode password
  -w ADDRESS, --websocket ADDRESS   specify alternate websocket
  -l FILE, --load-config FILE       specify config file to load
  --no-config                       ignore global config file
  --no-hooks                        ignore global hooks
  --no-parse                        log received packets as JSON
  --clear                           clear console before joining
  --is-mod                          enable moderator commands
  --no-unicode                      disable unicode UI elements
  --sheriff-badges                  show stars beside mods/admins
  --highlight-theme THEME           set highlight theme
  --no-markdown                     disable markdown formatting
  --no-linkify                      disable linkifying of urls
  --backticks-bg 0-255              set backticks background color
  --latex                           enable LaTeX simplifying
  --no-notify                       disable desktop notifications
  --prompt-string STRING            set custom prompt string
  --timestamp-format FORMAT         set timestamp format
  --suggest-aggr 0-3                set suggestion aggressiveness
  --proxy TYPE:HOST:PORT            specify proxy to use
  --ssl-no-verify                   disable SSL cert verificationStylingThe default color scheme can be overidden with a configuration file. SeeConfigurationfor more information.A list of valid colors can be viewed with--colors.Syntax highlighting and markdown are enabled by default. They can be disabled with--no-markdownor with theno_markdownoption.The markdown implementation supports:Bold:**bold**Italics:*italics*Bold-italics:***bold-italics***Strikethrough:~~strikethrough~~Code blocks:(With syntax highlighting and language guessing)```<lang>
<code>
```Backticks:`backticks`Links:[link](https://example.com)![image](https://example.com/image.png<https://example.com><mailto:user@example.comhttps://example.comexample.comEscaping:\*escaped*(Spec compliant)Highlight themes can be listed with--themesand set with--highlight-themeor with thehighlight_themeoptionThe default theme ismonokai.LaTeX SimplificationLaTeX simplification is disabled by default. It can be enabled with--latexor with thelatexoption.When enabled, LaTeX expressions will be parsed and converted to sympy expressions, which are more readable.Expressions must be enclosed in$or$$for inline and block expressions respectively.For example, the following LaTeX expression:$\frac{1}{2}$Will be simplified and displayed as:|latex: 1/2|Conversion is done usinglatex2sympy2.Not all LaTeX expressions are supported of course, but it's good enough for most use cases.ConfigurationA configuration file can be generated with the provided arguments using--gen-configand loaded using--load-config. For example:hcclient --gen-configThe above command will createconfig.ymlwith default options in the working directory, which can then be loaded with:hcclient -c mychannel -n mynick --load-config <path_to_config.yml>Generated configuration files are in YAML format by default.Alternatively, a JSON configuration file can be generated by running--gen-configagain in the same directory. Both formats can be loaded the same way.Override defaults when generating the configuration file by specifying options:hcclient --no-notify --proxy socks5:127.0.0.1:9050 --gen-confighcclient searches forconfig.ymlorconfig.jsonin the following directories by default:Windows:%APPDATA%/hcclientOther platforms:$HOME/.config/hcclient[!NOTE]
The configuration file does not affectchannelandnickname, which have to be specified as flags every time.You can also configure hcclient while it's running, without having to restart it. For example:> /configset no_notify trueThe changes will be applied live and lost once you exit the client, but you can save it to the configuration file with/saveConfiguration options can be listed with/configdumpNotificationsDesktop notifications are enabled by default. They can be disabled with--no-notifyor with theno_notifyoptionhcclient doesn't have a built-in audio file for sound alerts, so you'll have to provide your own.Place a wave file namedtone.wavin the default config directory and it will be played when a notification is sent.Default config directory location:Windows:%APPDATA%/hcclientOther platforms:$HOME/.config/hcclientOn Linux, libnotify and aplay are required for notifications to work.On Android, notifications are supported when running onTermux.Install theTermux:APIapp and termux-api package and notifications will just work.Updatable Messageshack.chat has support for updatable messages, which allows editing previously sent messages on the official web client. This is usually used by bots to display streamed/delayed output.Since hcclient is a terminal client, editing messages that have been previously printed isn't possible.However,updateMessageevents are still handled, just differently.When an updatable message is received, it will be printed as per normal but with an unique identifier. For example:23:06|jEuh/s| [⧗ 84263] [user] hiHere,84263is the message identifier.As the sender continues to update and edit the message, hcclient will track the changes in memory.Once the sender sends thecompletestatus, the message will be printed again with the same identifier and all changes applied:23:06|jEuh/s| [⧗ 84263] [user] hi
...
...
...
23:08|jEuh/s| [✓ 84263] [user] hi guys!It's displayed as a new message, but it's actually the previous message, edited.If nocompletestatus is received in 3 minutes, the message will expire. All changes applied so far will be printed like normal, but with the✗icon instead.[!NOTE]
Ifno_unicodeis enabled, the⧗,✓and✗icons will be replaced withUpdatable.ID:,Completed.ID:andExpired.ID:respectively.HooksYou can tweak hcclient's behaviour by placing hooks in the default hooks directory:Windows:%APPDATA%/hcclient/hooksOther platforms:$HOME/.config/hcclient/hooksHooks are python scripts that are run on startup.A hook should have aHookInfoclass and ahook()function.TheHookInfoclass should have the following attributes:name: The name of the hook.description: (Optional) A description of the hook.version: The version of the hook, must be a valid version string.compat: (Optional) A version specifier for the client version the hook is compatible with. See thePackaging User Guidefor more information.Any other attributes you want to add, hcclient will ignore them.Thehook()function should take a single argument, which is the client instance.You can modify, add or remove the instance's attributes and methods to change its behaviour.Example hooks can be foundhere.[!WARNING]
Hook support is experimental. hcclient is not stable and the API is subject to change, hooks may not work after an update.ContributingAll contributions are welcome! :DPlease readCONTRIBUTING.mdbefore submitting a pull request.Credits to everyonehere