kokoirc 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +227 -0
  2. package/docs/commands/alias.md +42 -0
  3. package/docs/commands/ban.md +26 -0
  4. package/docs/commands/close.md +25 -0
  5. package/docs/commands/connect.md +26 -0
  6. package/docs/commands/deop.md +24 -0
  7. package/docs/commands/devoice.md +24 -0
  8. package/docs/commands/disconnect.md +26 -0
  9. package/docs/commands/help.md +28 -0
  10. package/docs/commands/ignore.md +47 -0
  11. package/docs/commands/items.md +95 -0
  12. package/docs/commands/join.md +25 -0
  13. package/docs/commands/kb.md +26 -0
  14. package/docs/commands/kick.md +25 -0
  15. package/docs/commands/log.md +82 -0
  16. package/docs/commands/me.md +24 -0
  17. package/docs/commands/mode.md +29 -0
  18. package/docs/commands/msg.md +26 -0
  19. package/docs/commands/nick.md +24 -0
  20. package/docs/commands/notice.md +24 -0
  21. package/docs/commands/op.md +24 -0
  22. package/docs/commands/part.md +25 -0
  23. package/docs/commands/quit.md +24 -0
  24. package/docs/commands/reload.md +19 -0
  25. package/docs/commands/script.md +126 -0
  26. package/docs/commands/server.md +61 -0
  27. package/docs/commands/set.md +37 -0
  28. package/docs/commands/topic.md +24 -0
  29. package/docs/commands/unalias.md +22 -0
  30. package/docs/commands/unban.md +25 -0
  31. package/docs/commands/unignore.md +25 -0
  32. package/docs/commands/voice.md +25 -0
  33. package/docs/commands/whois.md +24 -0
  34. package/docs/commands/wii.md +23 -0
  35. package/package.json +38 -0
  36. package/src/app/App.tsx +205 -0
  37. package/src/core/commands/docs.ts +183 -0
  38. package/src/core/commands/execution.ts +114 -0
  39. package/src/core/commands/help-formatter.ts +185 -0
  40. package/src/core/commands/helpers.ts +168 -0
  41. package/src/core/commands/index.ts +7 -0
  42. package/src/core/commands/parser.ts +33 -0
  43. package/src/core/commands/registry.ts +1394 -0
  44. package/src/core/commands/types.ts +19 -0
  45. package/src/core/config/defaults.ts +66 -0
  46. package/src/core/config/loader.ts +209 -0
  47. package/src/core/constants.ts +20 -0
  48. package/src/core/init.ts +32 -0
  49. package/src/core/irc/antiflood.ts +244 -0
  50. package/src/core/irc/client.ts +145 -0
  51. package/src/core/irc/events.ts +1031 -0
  52. package/src/core/irc/formatting.ts +132 -0
  53. package/src/core/irc/ignore.ts +84 -0
  54. package/src/core/irc/index.ts +2 -0
  55. package/src/core/irc/netsplit.ts +292 -0
  56. package/src/core/scripts/api.ts +240 -0
  57. package/src/core/scripts/event-bus.ts +82 -0
  58. package/src/core/scripts/index.ts +26 -0
  59. package/src/core/scripts/manager.ts +154 -0
  60. package/src/core/scripts/types.ts +256 -0
  61. package/src/core/state/selectors.ts +39 -0
  62. package/src/core/state/sorting.ts +30 -0
  63. package/src/core/state/store.ts +242 -0
  64. package/src/core/storage/crypto.ts +78 -0
  65. package/src/core/storage/db.ts +107 -0
  66. package/src/core/storage/index.ts +80 -0
  67. package/src/core/storage/query.ts +204 -0
  68. package/src/core/storage/types.ts +37 -0
  69. package/src/core/storage/writer.ts +130 -0
  70. package/src/core/theme/index.ts +3 -0
  71. package/src/core/theme/loader.ts +45 -0
  72. package/src/core/theme/parser.ts +518 -0
  73. package/src/core/theme/renderer.tsx +25 -0
  74. package/src/index.tsx +17 -0
  75. package/src/types/config.ts +126 -0
  76. package/src/types/index.ts +107 -0
  77. package/src/types/irc-framework.d.ts +569 -0
  78. package/src/types/theme.ts +37 -0
  79. package/src/ui/ErrorBoundary.tsx +42 -0
  80. package/src/ui/chat/ChatView.tsx +39 -0
  81. package/src/ui/chat/MessageLine.tsx +92 -0
  82. package/src/ui/hooks/useStatusbarColors.ts +23 -0
  83. package/src/ui/input/CommandInput.tsx +273 -0
  84. package/src/ui/layout/AppLayout.tsx +126 -0
  85. package/src/ui/layout/TopicBar.tsx +46 -0
  86. package/src/ui/sidebar/BufferList.tsx +55 -0
  87. package/src/ui/sidebar/NickList.tsx +96 -0
  88. package/src/ui/splash/SplashScreen.tsx +100 -0
  89. package/src/ui/statusbar/StatusLine.tsx +205 -0
  90. package/themes/.gitkeep +0 -0
  91. package/themes/default.theme +57 -0
  92. package/tsconfig.json +19 -0
package/README.md ADDED
@@ -0,0 +1,227 @@
1
+ # kokoIRC
2
+
3
+ A modern terminal IRC client built with [OpenTUI](https://github.com/anomalyco/opentui), React, and Bun. Inspired by irssi, designed for the future.
4
+
5
+ ```
6
+ ┌─ Buffers ─┬─────────────────────────────────────────┬─ Users ──┐
7
+ │ IRCnet │ 12:34:05 <kofany> hey everyone │ @kofany │
8
+ │ #chat │ 12:34:08 <alice> welcome back! │ +alice │
9
+ │ #dev │ 12:34:12 * kofany waves │ bob │
10
+ │ #music │ 12:34:15 <bob> what's new? │ charlie │
11
+ │ │ │ │
12
+ │ ├──────────────────────────────────────────┤ │
13
+ │ │ [IRCnet❱ /msg alice check this out │ │
14
+ │ ├──────────────────────────────────────────┤ │
15
+ │ │ 12:34 | kofany(+i) | #chat(+nt) | lag:2 │ │
16
+ └───────────┴──────────────────────────────────────────┴──────────┘
17
+ ```
18
+
19
+ ## Features
20
+
21
+ - **Full IRC protocol** — channels, queries, CTCP, SASL, TLS, channel modes, ban lists
22
+ - **irssi-style navigation** — `Esc+1-9` window switching, `/commands`, aliases
23
+ - **Mouse support** — click buffers/nicks, drag to resize sidepanels
24
+ - **Netsplit detection** — batches join/part floods into single events
25
+ - **Flood protection** — blocks CTCP and nick-change spam from botnets
26
+ - **Persistent logging** — SQLite with optional AES-256-GCM encryption, FTS5 full-text search
27
+ - **Theming** — irssi-compatible format strings with 24-bit color, custom abstracts
28
+ - **Scripting** — TypeScript scripts with event bus, custom commands, IRC access
29
+ - **Single binary** — compiles to a standalone executable with `bun build --compile`
30
+
31
+ ## Requirements
32
+
33
+ - [Bun](https://bun.sh) v1.2+
34
+ - A terminal with 256-color or truecolor support
35
+
36
+ ## Install
37
+
38
+ ```bash
39
+ git clone https://github.com/kofany/OpenIRC.git
40
+ cd OpenIRC
41
+ bun install
42
+ ```
43
+
44
+ ## Usage
45
+
46
+ ```bash
47
+ # Run directly
48
+ bun run src/index.tsx
49
+
50
+ # Or build a standalone binary
51
+ bun run build
52
+ ./openirc
53
+ ```
54
+
55
+ ## Configuration
56
+
57
+ Config lives at `~/.kokoirc/config.toml`. Created on first run with defaults.
58
+
59
+ ```toml
60
+ [general]
61
+ nick = "mynick"
62
+ username = "mynick"
63
+ realname = "kokoIRC user"
64
+ theme = "default"
65
+ flood_protection = true
66
+
67
+ [display]
68
+ nick_column_width = 8
69
+ scrollback_lines = 2000
70
+
71
+ [servers.libera]
72
+ label = "Libera"
73
+ address = "irc.libera.chat"
74
+ port = 6697
75
+ tls = true
76
+ autoconnect = true
77
+ channels = ["#kokoirc"]
78
+ # sasl_user = "mynick"
79
+ # sasl_pass = "hunter2"
80
+
81
+ [logging]
82
+ enabled = true
83
+ encrypt = false # AES-256-GCM (key auto-generated in ~/.kokoirc/.env)
84
+ retention_days = 0 # 0 = keep forever
85
+ exclude_types = [] # filter: "event", "notice", "ctcp", etc.
86
+
87
+ [aliases]
88
+ wc = "/close"
89
+ j = "/join"
90
+ ```
91
+
92
+ ## Commands
93
+
94
+ 33 built-in commands. Type `/help` for the full list, `/help <command>` for details.
95
+
96
+ | Category | Commands |
97
+ |----------|----------|
98
+ | Connection | `/connect`, `/disconnect`, `/quit`, `/server` |
99
+ | Channel | `/join`, `/part`, `/close`, `/topic`, `/list` |
100
+ | Messaging | `/msg`, `/me`, `/notice`, `/action`, `/slap` |
101
+ | Moderation | `/kick`, `/ban`, `/unban`, `/kb`, `/mode` |
102
+ | Nick/Ops | `/nick`, `/op`, `/deop`, `/voice`, `/devoice` |
103
+ | User | `/whois`, `/wii`, `/ignore`, `/unignore` |
104
+ | Config | `/set`, `/alias`, `/unalias`, `/reload` |
105
+ | Logging | `/log status`, `/log search <query>` |
106
+ | Scripts | `/script load`, `/script unload`, `/script list` |
107
+
108
+ ## Keyboard Shortcuts
109
+
110
+ | Key | Action |
111
+ |-----|--------|
112
+ | `Esc+1-9` | Switch to window 1-9 |
113
+ | `Esc+0` | Switch to window 10 |
114
+ | `Esc+Left/Right` | Previous/next window |
115
+ | `Page Up/Down` | Scroll chat history |
116
+ | `Tab` | Nick completion |
117
+ | `Ctrl+Q` | Quit |
118
+
119
+ ## Theming
120
+
121
+ Themes use TOML with an irssi-inspired format string language. Place custom themes in `~/.kokoirc/themes/` and set `theme = "mytheme"` in config.
122
+
123
+ ```toml
124
+ [meta]
125
+ name = "Nightfall"
126
+ description = "Modern dark theme with subtle accents"
127
+
128
+ [colors]
129
+ accent = "#7aa2f7"
130
+ fg = "#a9b1d6"
131
+
132
+ [abstracts]
133
+ timestamp = "%Z6e738d$*%N"
134
+ msgnick = "%Z565f89$0$1%Z7aa2f7>%N%| "
135
+ action = "%Ze0af68* $*%N"
136
+
137
+ [formats.messages]
138
+ pubmsg = "{msgnick $2 $0}$1"
139
+ action = "{action $0} $1"
140
+ ```
141
+
142
+ Format codes: `%r` red, `%g` green, `%ZRRGGBB` hex color, `%_` bold, `%u` underline, `$0 $1 $2` positional args, `{abstract $args}` template references.
143
+
144
+ ## Scripting
145
+
146
+ Scripts are TypeScript files loaded from `~/.kokoirc/scripts/`. See `examples/scripts/` for samples.
147
+
148
+ ```typescript
149
+ import type { KokoAPI } from "kokoirc-client/api"
150
+
151
+ export default function slap(api: KokoAPI) {
152
+ api.command("slap", ({ args, buffer }) => {
153
+ const target = args[0] ?? "everyone"
154
+ api.irc.action(buffer.connectionId, buffer.name,
155
+ `slaps ${target} around a bit with a large trout`)
156
+ })
157
+ }
158
+ ```
159
+
160
+ Scripts can register commands, listen to IRC events, send messages, and interact with the store:
161
+
162
+ ```typescript
163
+ export default function highlights(api: KokoAPI) {
164
+ api.on("irc.privmsg", (event) => {
165
+ if (event.message.highlight) {
166
+ api.ui.addLocalEvent(event.bufferId,
167
+ `Highlight from ${event.nick}: ${event.text}`)
168
+ }
169
+ })
170
+ }
171
+ ```
172
+
173
+ Configure autoloading in `config.toml`:
174
+
175
+ ```toml
176
+ [scripts]
177
+ autoload = ["slap", "spam-filter"]
178
+ ```
179
+
180
+ ## Logging
181
+
182
+ Messages are stored in `~/.kokoirc/logs.db` (SQLite WAL mode). The log system supports:
183
+
184
+ - **Batched writes** — flushes at 50 messages or every second
185
+ - **Full-text search** — FTS5 index for instant `/log search` results
186
+ - **Optional encryption** — AES-256-GCM per message, key auto-generated
187
+ - **Read markers** — per-client unread tracking (ready for web frontend)
188
+ - **Retention** — auto-purge messages older than N days
189
+
190
+ ## Architecture
191
+
192
+ ```
193
+ src/
194
+ ├── index.tsx # Entry point — creates OpenTUI renderer
195
+ ├── app/
196
+ │ └── App.tsx # Lifecycle: config → storage → theme → connect
197
+ ├── core/
198
+ │ ├── irc/ # IRC client, event binding, middlewares
199
+ │ ├── state/ # Zustand store (UI-agnostic)
200
+ │ ├── commands/ # Command registry and parser
201
+ │ ├── config/ # TOML loader, defaults, merge logic
202
+ │ ├── storage/ # SQLite logging, encryption, queries
203
+ │ ├── scripts/ # Script loader, API, event bus
204
+ │ └── theme/ # Format string parser, theme loader
205
+ ├── ui/ # React components (no IRC imports)
206
+ │ ├── AppLayout.tsx # 3-column layout with resizable panels
207
+ │ ├── ChatView.tsx # Message scrollback
208
+ │ ├── BufferList.tsx # Left sidebar
209
+ │ ├── NickList.tsx # Right sidebar
210
+ │ ├── CommandInput.tsx # Input line with prompt
211
+ │ └── StatusLine.tsx # Status bar
212
+ └── types/ # TypeScript definitions
213
+ ```
214
+
215
+ The UI layer never imports from `core/irc/` — all communication goes through the Zustand store. This keeps the architecture clean and makes it possible to drive the same store from a web frontend.
216
+
217
+ ## Development
218
+
219
+ ```bash
220
+ bun run dev # Start with --watch (auto-reload on file changes)
221
+ bun test # Run test suite
222
+ bun run build # Compile to standalone binary
223
+ ```
224
+
225
+ ## License
226
+
227
+ MIT
@@ -0,0 +1,42 @@
1
+ ---
2
+ category: Configuration
3
+ description: Define, list, or remove user aliases
4
+ ---
5
+
6
+ # /alias
7
+
8
+ ## Syntax
9
+
10
+ /alias [[-]name] [body]
11
+
12
+ ## Description
13
+
14
+ Define custom command aliases. Aliases expand before execution and support
15
+ template variables and command chaining with semicolons.
16
+
17
+ With no arguments, lists all defined aliases.
18
+ With just a name, shows that alias's body.
19
+ With `-name`, removes the alias.
20
+ With name and body, defines or replaces the alias.
21
+
22
+ Template variables:
23
+ - `$0`-`$9` — positional arguments
24
+ - `$*` — all arguments
25
+ - `$C` — current channel name
26
+ - `$N` — current nick
27
+ - `$S` — current server label
28
+ - `$T` — current buffer name
29
+
30
+ Cannot override built-in commands.
31
+
32
+ ## Examples
33
+
34
+ /alias
35
+ /alias ns /msg NickServ $*
36
+ /alias cs /msg ChanServ $*
37
+ /alias j /join $0; /msg $0 hello everyone
38
+ /alias -ns
39
+
40
+ ## See Also
41
+
42
+ /unalias
@@ -0,0 +1,26 @@
1
+ ---
2
+ category: Moderation
3
+ description: Ban a user or hostmask
4
+ ---
5
+
6
+ # /ban
7
+
8
+ ## Syntax
9
+
10
+ /ban <nick|mask>
11
+
12
+ ## Description
13
+
14
+ Ban a user or hostmask from the current channel. If a plain nick is
15
+ given, it's converted to `nick!*@*`. If the argument contains `!` or `@`,
16
+ it's used as a literal hostmask.
17
+
18
+ ## Examples
19
+
20
+ /ban troll
21
+ /ban *!*@bad.host.com
22
+ /ban *!*ident@*.isp.net
23
+
24
+ ## See Also
25
+
26
+ /unban, /kick, /kb, /mode
@@ -0,0 +1,25 @@
1
+ ---
2
+ category: Channel
3
+ description: Close current buffer
4
+ ---
5
+
6
+ # /close
7
+
8
+ ## Syntax
9
+
10
+ /close [reason]
11
+
12
+ ## Description
13
+
14
+ Close the current buffer. For channels, parts the channel with an
15
+ optional reason. For query windows, closes the window. Server buffers
16
+ cannot be closed.
17
+
18
+ ## Examples
19
+
20
+ /close
21
+ /close Window closed
22
+
23
+ ## See Also
24
+
25
+ /part, /quit
@@ -0,0 +1,26 @@
1
+ ---
2
+ category: Connection
3
+ description: Connect to a server by id, label, or address
4
+ ---
5
+
6
+ # /connect
7
+
8
+ ## Syntax
9
+
10
+ /connect <server-id|label|address>[:<port>] [-tls] [-bind=<ip>]
11
+
12
+ ## Description
13
+
14
+ Connect to an IRC server. Accepts a configured server ID, label, or a
15
+ raw address for ad-hoc connections. If the server is already configured,
16
+ flags override its settings for this connection only.
17
+
18
+ ## Examples
19
+
20
+ /connect libera
21
+ /connect irc.libera.chat:6697 -tls
22
+ /connect mynet -bind=192.168.1.100
23
+
24
+ ## See Also
25
+
26
+ /server, /disconnect, /quit
@@ -0,0 +1,24 @@
1
+ ---
2
+ category: Moderation
3
+ description: Remove operator status
4
+ ---
5
+
6
+ # /deop
7
+
8
+ ## Syntax
9
+
10
+ /deop <nick> [nick2 ...]
11
+
12
+ ## Description
13
+
14
+ Remove channel operator status (-o) from one or more users in the current
15
+ channel. You must be a channel operator to use this command.
16
+
17
+ ## Examples
18
+
19
+ /deop troublemaker
20
+ /deop user1 user2
21
+
22
+ ## See Also
23
+
24
+ /op, /devoice, /mode
@@ -0,0 +1,24 @@
1
+ ---
2
+ category: Moderation
3
+ description: Remove voice status
4
+ ---
5
+
6
+ # /devoice
7
+
8
+ ## Syntax
9
+
10
+ /devoice <nick> [nick2 ...]
11
+
12
+ ## Description
13
+
14
+ Remove voice status (-v) from one or more users in the current channel.
15
+ You must be a channel operator to use this command.
16
+
17
+ ## Examples
18
+
19
+ /devoice user1
20
+ /devoice user1 user2
21
+
22
+ ## See Also
23
+
24
+ /voice, /deop, /mode
@@ -0,0 +1,26 @@
1
+ ---
2
+ category: Connection
3
+ description: Disconnect from a server
4
+ ---
5
+
6
+ # /disconnect
7
+
8
+ ## Syntax
9
+
10
+ /disconnect [server-id|label] [message]
11
+
12
+ ## Description
13
+
14
+ Disconnect from an IRC server. With no arguments, disconnects from the
15
+ server associated with the current buffer. Optionally specify a server
16
+ by ID or label, and a quit message.
17
+
18
+ ## Examples
19
+
20
+ /disconnect
21
+ /disconnect libera
22
+ /disconnect libera Goodbye!
23
+
24
+ ## See Also
25
+
26
+ /connect, /quit, /server
@@ -0,0 +1,28 @@
1
+ ---
2
+ category: Info
3
+ description: Show help for commands
4
+ ---
5
+
6
+ # /help
7
+
8
+ ## Syntax
9
+
10
+ /help [command] [subcommand]
11
+
12
+ ## Description
13
+
14
+ Show help for commands. With no arguments, lists all commands grouped
15
+ by category. With a command name, shows detailed usage, subcommands,
16
+ and examples. With a command and subcommand, shows help for that
17
+ specific subcommand.
18
+
19
+ ## Examples
20
+
21
+ /help
22
+ /help server
23
+ /help server add
24
+ /help items format
25
+
26
+ ## See Also
27
+
28
+ /set
@@ -0,0 +1,47 @@
1
+ ---
2
+ category: Moderation
3
+ description: Add an ignore rule
4
+ ---
5
+
6
+ # /ignore
7
+
8
+ ## Syntax
9
+
10
+ /ignore [mask] [levels...] [-channels #a,#b]
11
+
12
+ ## Description
13
+
14
+ Add an ignore rule to suppress messages and events from matching
15
+ users. Without arguments, lists current ignore rules.
16
+
17
+ A bare nick pattern (e.g., `troll`) matches the nick only.
18
+ A pattern containing `!` (e.g., `*!*@bad.host`) matches the
19
+ full `nick!user@host` mask with wildcard support (`*`, `?`).
20
+
21
+ ## Levels
22
+
23
+ MSGS Private messages
24
+ PUBLIC Channel messages
25
+ NOTICES Notices
26
+ ACTIONS CTCP ACTIONs (/me)
27
+ JOINS Join events
28
+ PARTS Part events
29
+ QUITS Quit events
30
+ NICKS Nick change events
31
+ KICKS Kick events
32
+ CTCPS CTCP requests and responses
33
+ ALL All of the above
34
+
35
+ If no levels are specified, ALL is assumed.
36
+
37
+ ## Examples
38
+
39
+ /ignore
40
+ /ignore troll
41
+ /ignore *!*@bad.host.com
42
+ /ignore spammer PUBLIC NOTICES
43
+ /ignore bot CTCPS -channels #help,#support
44
+
45
+ ## See Also
46
+
47
+ /unignore
@@ -0,0 +1,95 @@
1
+ ---
2
+ category: Statusbar
3
+ description: Manage statusbar items and formats
4
+ ---
5
+
6
+ # /items
7
+
8
+ ## Syntax
9
+
10
+ /items [list|add|remove|move|format|separator|available|reset] [args...]
11
+
12
+ ## Description
13
+
14
+ Manage the statusbar layout. Add, remove, reorder items and customize
15
+ their format strings. Use `/items available` to see all possible items
16
+ and their format variables.
17
+
18
+ ## Subcommands
19
+
20
+ ### list
21
+
22
+ Show current statusbar items with their positions and formats.
23
+
24
+ /items list
25
+
26
+ This is the default when no subcommand is given.
27
+
28
+ ### add
29
+
30
+ Add an item to the statusbar.
31
+
32
+ /items add <item>
33
+
34
+ ### remove
35
+
36
+ Remove an item from the statusbar.
37
+
38
+ /items remove <item>
39
+
40
+ Aliases: del
41
+
42
+ ### move
43
+
44
+ Move an item to a new position.
45
+
46
+ /items move <item> <position>
47
+
48
+ Position is 1-based.
49
+
50
+ ### format
51
+
52
+ View or set the format string for an item.
53
+
54
+ /items format <item> [format_string]
55
+
56
+ Format variables: `$win`, `$activity`, `$nick`, `$modes`, `$name`, `$lag`, `$time`.
57
+
58
+ Aliases: fmt
59
+
60
+ ### separator
61
+
62
+ View or set the separator string between items.
63
+
64
+ /items separator [string]
65
+
66
+ Aliases: sep
67
+
68
+ ### available
69
+
70
+ List all available statusbar items and their default formats.
71
+
72
+ /items available
73
+
74
+ Shows which items are currently active and which are unused.
75
+
76
+ ### reset
77
+
78
+ Reset statusbar to default items, formats, and separator.
79
+
80
+ /items reset
81
+
82
+ ## Examples
83
+
84
+ /items list
85
+ /items add clock
86
+ /items remove lag
87
+ /items move clock 1
88
+ /items format window_name [$win] $name
89
+ /items separator |
90
+ /items available
91
+ /items reset
92
+
93
+ ## See Also
94
+
95
+ /set
@@ -0,0 +1,25 @@
1
+ ---
2
+ category: Channel
3
+ description: Join a channel
4
+ ---
5
+
6
+ # /join
7
+
8
+ ## Syntax
9
+
10
+ /join <channel> [key]
11
+
12
+ ## Description
13
+
14
+ Join an IRC channel. A `#` prefix is auto-added if missing.
15
+ Optionally provide a channel key for key-protected channels.
16
+
17
+ ## Examples
18
+
19
+ /join #linux
20
+ /join linux
21
+ /join #secret mysecretkey
22
+
23
+ ## See Also
24
+
25
+ /part, /close
@@ -0,0 +1,26 @@
1
+ ---
2
+ category: Moderation
3
+ description: Kickban a user (kick then ban *!*ident@host)
4
+ ---
5
+
6
+ # /kb
7
+
8
+ ## Syntax
9
+
10
+ /kb <nick> [reason]
11
+
12
+ ## Description
13
+
14
+ Kick and ban a user from the current channel. Looks up the user's
15
+ ident and host via USERHOST to create a proper `*!*ident@host` ban mask,
16
+ then kicks with the given reason. Falls back to `nick!*@*` if the
17
+ lookup times out after 5 seconds.
18
+
19
+ ## Examples
20
+
21
+ /kb troll
22
+ /kb spammer Enough is enough
23
+
24
+ ## See Also
25
+
26
+ /kick, /ban, /unban, /mode
@@ -0,0 +1,25 @@
1
+ ---
2
+ category: Moderation
3
+ description: Kick a user from the channel
4
+ ---
5
+
6
+ # /kick
7
+
8
+ ## Syntax
9
+
10
+ /kick <nick> [reason]
11
+
12
+ ## Description
13
+
14
+ Kick a user from the current channel. If no reason is given, the
15
+ user's nick is used as the reason. You must be a channel operator
16
+ to use this command.
17
+
18
+ ## Examples
19
+
20
+ /kick troll
21
+ /kick spammer Stop spamming
22
+
23
+ ## See Also
24
+
25
+ /ban, /kb, /mode