1. ISUPPORT/applyChannelModes: extend IRC MODE handler to support +i/-i,
+s/-s, +n/-n (routed through svc.SetChannelFlag), and +H/-H (hashcash
bits with parameter parsing). Add 'n' (no external messages) as a
proper DB-backed channel flag with is_no_external column (default: on).
Update IRC ISUPPORT to CHANMODES=,,H,imnst to match actual support.
2. QueryChannelMode: rewrite to return complete mode string including all
boolean flags (n, i, m, s, t) and parameterized modes (k, l, H),
matching the HTTP handler's buildChannelModeString logic. Simplify
buildChannelModeString to delegate to QueryChannelMode for consistency.
3. Service struct encapsulation: change exported fields (DB, Broker,
Config, Log) to unexported (db, broker, config, log). Add NewTestService
constructor for use by external test packages. Update ircserver
export_test.go to use the new constructor.
Closes#89
Adds a backward-compatible IRC wire protocol listener (RFC 1459/2812)
with a shared service layer used by both IRC and HTTP transports.
- TCP listener on configurable port (default :6667)
- Full IRC protocol: NICK, USER, JOIN, PART, PRIVMSG, MODE, TOPIC, etc.
- Shared service layer (internal/service/) for consistent code paths
- Tier 2 join restrictions (ban, invite-only, key, limit) in service layer
- Ban check on PRIVMSG in service layer
- SetChannelFlag handles +i and +s modes
- Command dispatch via map[string]cmdHandler pattern
- EXPOSE 6667 in Dockerfile
- Service layer unit tests
closes#89