# Commands The copy that matters is not this file: `!pomoc` prints the same list **in the group**, in Polish, one line of description per command. That version is built from the command registry at run time and cannot drift, because `CommandRegistry.register` takes the description as a required argument and `help_command.render_help` prints any command its `GROUPS` table forgot to file anyway, under no heading. This file is the trigger reference — every spelling that resolves, which `!pomoc` deliberately does not print. | Command | Aliases | |---|---| | cat | `!kot` `!koty` `!kots` `!cat` `!cats` `!meow` `!miau` + styled variants | | dog | `!pies` `!psy` `!dog` `!dogs` `!woof` `!szczek` + styled variants | | gecko | `!gekon` `!gekony` `!geko` `!gecko` `!geckon` `!geckos` | | pope | `!papież` `!papiez` `!papieze` `!papieża` `!papa` `!pope` `!popes` `!pontifex` + styled variants | | stats_today | `!staty` `!statystyki` `!stats` `!dziś` `!dzis` | | stats_yesterday | `!wczoraj` `!yesterday` | | stats_week | `!tydzień` `!tydzien` `!week` | | stats_month | `!miesiąc` `!miesiac` `!month` | | stats_year | `!rok` `!year` | | stats_records | `!rekordy` `!rekord` `!records` | | stats_crown | `!korona` `!crown` | | stats_weekdays | `!dni` `!days` | | stats_me | `!ja` `!moje` `!mnie` | | help | `!pomoc` `!pomocy` `!help` `!komendy` `!commands` | Aliases live in `signal_bot/aliases.json`, not in source, because they are data: adding one should never mean touching Python. ## Why `!pomoc` shows the first alias and not a trigger `Command.triggers` is a `frozenset` of **folded skeletons** — `folding.py` runs NFKC, strips diacritics and maps Cyrillic/Greek/small-caps/leet lookalikes onto ASCII, so that `!gecko` typed on a Russian keyboard still resolves. Everything that makes those triggers robust also makes them unprintable: the set has no order, `!papież` survives only as `!papiez`, and the styled variants come out as zalgo. So `Command.primary` holds the first *raw* trigger instead, which `aliases.json` lists as the canonical Polish spelling for every command. Two consequences worth remembering, both from `folding.py`: - A command name can never contain a digit — `fold` maps `0134578` onto letters, so `!7dni` would resolve as `!tdni`. - The styled Unicode aliases in the table above are redundant now; folding covers them. They are kept because removing an alias can only take something away.