From 993f5b2eeaca585afb775f7a9097c1f7eeb19722 Mon Sep 17 00:00:00 2001 From: Jean Date: Tue, 14 Jul 2026 15:24:41 +0000 Subject: [PATCH] Rename the project to Echo (was fedserv) Rebrand the daemon and workspace: the binary is now `echo`, every crate is `echo-*` (`echo-api` and the module crates), Rust imports use `echo_*`, the gRPC proto is `proto/echo.proto` with package `echo.v1`, and the log filter, gossip peer-name default, and on-disk store default (`echo.db.jsonl`) follow. Docs updated throughout. No behaviour change; crate directories and the config schema are untouched. --- Cargo.lock | 308 ++++++++++---------- Cargo.toml | 34 +-- MODULES.md | 16 +- README.md | 14 +- api/Cargo.toml | 2 +- build.rs | 6 +- config.example.toml | 6 +- modules/botserv/Cargo.toml | 4 +- modules/botserv/src/assign.rs | 2 +- modules/botserv/src/badwords.rs | 2 +- modules/botserv/src/bot.rs | 2 +- modules/botserv/src/copy.rs | 2 +- modules/botserv/src/info.rs | 2 +- modules/botserv/src/kick.rs | 2 +- modules/botserv/src/lib.rs | 2 +- modules/botserv/src/say.rs | 2 +- modules/botserv/src/set.rs | 2 +- modules/botserv/src/trigger.rs | 2 +- modules/chanfix/Cargo.toml | 4 +- modules/chanfix/src/fix.rs | 2 +- modules/chanfix/src/lib.rs | 2 +- modules/chanfix/src/scores.rs | 2 +- modules/chanserv/Cargo.toml | 6 +- modules/chanserv/src/access.rs | 4 +- modules/chanserv/src/akick.rs | 4 +- modules/chanserv/src/ban.rs | 6 +- modules/chanserv/src/clone.rs | 4 +- modules/chanserv/src/enforce.rs | 6 +- modules/chanserv/src/entrymsg.rs | 4 +- modules/chanserv/src/flags.rs | 2 +- modules/chanserv/src/getkey.rs | 6 +- modules/chanserv/src/invite.rs | 6 +- modules/chanserv/src/kick.rs | 6 +- modules/chanserv/src/lib.rs | 8 +- modules/chanserv/src/list.rs | 4 +- modules/chanserv/src/mode.rs | 4 +- modules/chanserv/src/noexpire.rs | 2 +- modules/chanserv/src/op.rs | 6 +- modules/chanserv/src/seen.rs | 6 +- modules/chanserv/src/set.rs | 2 +- modules/chanserv/src/status.rs | 6 +- modules/chanserv/src/suspend.rs | 2 +- modules/chanserv/src/topic.rs | 4 +- modules/chanserv/src/unban.rs | 6 +- modules/chanserv/src/xop.rs | 4 +- modules/diceserv/Cargo.toml | 4 +- modules/diceserv/src/lib.rs | 2 +- modules/diceserv/src/roll.rs | 2 +- modules/example/Cargo.toml | 4 +- modules/example/src/lib.rs | 4 +- modules/groupserv/Cargo.toml | 4 +- modules/groupserv/src/add.rs | 2 +- modules/groupserv/src/del.rs | 2 +- modules/groupserv/src/drop.rs | 2 +- modules/groupserv/src/flags.rs | 2 +- modules/groupserv/src/info.rs | 2 +- modules/groupserv/src/lib.rs | 4 +- modules/groupserv/src/list.rs | 2 +- modules/groupserv/src/register.rs | 4 +- modules/helpserv/Cargo.toml | 4 +- modules/helpserv/src/cancel.rs | 2 +- modules/helpserv/src/close.rs | 2 +- modules/helpserv/src/lib.rs | 2 +- modules/helpserv/src/list.rs | 2 +- modules/helpserv/src/next.rs | 2 +- modules/helpserv/src/request.rs | 2 +- modules/helpserv/src/take.rs | 2 +- modules/helpserv/src/view.rs | 2 +- modules/hostserv/Cargo.toml | 4 +- modules/hostserv/src/approve.rs | 2 +- modules/hostserv/src/default.rs | 2 +- modules/hostserv/src/del.rs | 2 +- modules/hostserv/src/forbid.rs | 2 +- modules/hostserv/src/lib.rs | 2 +- modules/hostserv/src/list.rs | 2 +- modules/hostserv/src/off.rs | 2 +- modules/hostserv/src/offer.rs | 2 +- modules/hostserv/src/on.rs | 2 +- modules/hostserv/src/request.rs | 2 +- modules/hostserv/src/set.rs | 2 +- modules/hostserv/src/take.rs | 2 +- modules/hostserv/src/template.rs | 2 +- modules/hostserv/src/waiting.rs | 2 +- modules/infoserv/Cargo.toml | 4 +- modules/infoserv/src/del.rs | 2 +- modules/infoserv/src/lib.rs | 2 +- modules/infoserv/src/list.rs | 2 +- modules/infoserv/src/post.rs | 2 +- modules/memoserv/Cargo.toml | 4 +- modules/memoserv/src/del.rs | 2 +- modules/memoserv/src/lib.rs | 2 +- modules/memoserv/src/list.rs | 2 +- modules/memoserv/src/read.rs | 2 +- modules/memoserv/src/send.rs | 2 +- modules/nickserv/Cargo.toml | 6 +- modules/nickserv/src/ajoin.rs | 4 +- modules/nickserv/src/alist.rs | 4 +- modules/nickserv/src/cert.rs | 4 +- modules/nickserv/src/confirm.rs | 4 +- modules/nickserv/src/drop.rs | 6 +- modules/nickserv/src/ghost.rs | 6 +- modules/nickserv/src/glist.rs | 4 +- modules/nickserv/src/group.rs | 4 +- modules/nickserv/src/identify.rs | 4 +- modules/nickserv/src/info.rs | 4 +- modules/nickserv/src/lib.rs | 6 +- modules/nickserv/src/logout.rs | 2 +- modules/nickserv/src/noexpire.rs | 2 +- modules/nickserv/src/register.rs | 4 +- modules/nickserv/src/resetpass.rs | 6 +- modules/nickserv/src/set.rs | 4 +- modules/nickserv/src/suspend.rs | 2 +- modules/nickserv/src/ungroup.rs | 4 +- modules/operserv/Cargo.toml | 4 +- modules/operserv/src/chankill.rs | 2 +- modules/operserv/src/defcon.rs | 2 +- modules/operserv/src/global.rs | 2 +- modules/operserv/src/ignore.rs | 2 +- modules/operserv/src/info.rs | 2 +- modules/operserv/src/jupe.rs | 2 +- modules/operserv/src/kick.rs | 2 +- modules/operserv/src/kill.rs | 2 +- modules/operserv/src/lib.rs | 2 +- modules/operserv/src/logsearch.rs | 2 +- modules/operserv/src/mode.rs | 2 +- modules/operserv/src/oper.rs | 2 +- modules/operserv/src/session.rs | 2 +- modules/operserv/src/stats.rs | 2 +- modules/operserv/src/svs.rs | 2 +- modules/operserv/src/xline.rs | 2 +- modules/protocol/inspircd/Cargo.toml | 6 +- modules/protocol/inspircd/src/lib.rs | 4 +- modules/reportserv/Cargo.toml | 4 +- modules/reportserv/src/close.rs | 2 +- modules/reportserv/src/del.rs | 2 +- modules/reportserv/src/lib.rs | 2 +- modules/reportserv/src/list.rs | 2 +- modules/reportserv/src/report.rs | 2 +- modules/reportserv/src/view.rs | 2 +- modules/statserv/Cargo.toml | 4 +- modules/statserv/src/channel.rs | 2 +- modules/statserv/src/global.rs | 2 +- modules/statserv/src/lib.rs | 2 +- proto/{fedserv.proto => echo.proto} | 4 +- src/config.rs | 8 +- src/engine/db/mod.rs | 6 +- src/engine/db/network.rs | 6 +- src/engine/db/tests.rs | 6 +- src/engine/mod.rs | 6 +- src/engine/register.rs | 4 +- src/engine/service.rs | 4 +- src/engine/state.rs | 2 +- src/engine/tests.rs | 402 +++++++++++++-------------- src/gossip.rs | 14 +- src/grpc.rs | 12 +- src/jsonrpc.rs | 4 +- src/link.rs | 2 +- src/main.rs | 38 +-- src/proto.rs | 4 +- 159 files changed, 660 insertions(+), 660 deletions(-) rename proto/{fedserv.proto => echo.proto} (98%) diff --git a/Cargo.lock b/Cargo.lock index 0dccbc0..04eeee8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -288,6 +288,160 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +[[package]] +name = "echo" +version = "0.0.1" +dependencies = [ + "anyhow", + "argon2", + "axum", + "axum-server", + "base64", + "echo-api", + "echo-botserv", + "echo-chanfix", + "echo-chanserv", + "echo-diceserv", + "echo-example", + "echo-groupserv", + "echo-helpserv", + "echo-hostserv", + "echo-infoserv", + "echo-inspircd", + "echo-memoserv", + "echo-nickserv", + "echo-operserv", + "echo-reportserv", + "echo-statserv", + "hmac", + "pbkdf2", + "prost", + "regex", + "rustls-pemfile", + "serde", + "serde_json", + "sha2", + "subtle", + "tokio", + "tokio-rustls", + "tokio-stream", + "toml", + "tonic", + "tonic-build", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "echo-api" +version = "0.0.1" + +[[package]] +name = "echo-botserv" +version = "0.0.1" +dependencies = [ + "echo-api", +] + +[[package]] +name = "echo-chanfix" +version = "0.0.1" +dependencies = [ + "echo-api", +] + +[[package]] +name = "echo-chanserv" +version = "0.0.1" +dependencies = [ + "echo-api", +] + +[[package]] +name = "echo-diceserv" +version = "0.0.1" +dependencies = [ + "echo-api", + "rand", +] + +[[package]] +name = "echo-example" +version = "0.0.1" +dependencies = [ + "echo-api", +] + +[[package]] +name = "echo-groupserv" +version = "0.0.1" +dependencies = [ + "echo-api", +] + +[[package]] +name = "echo-helpserv" +version = "0.0.1" +dependencies = [ + "echo-api", +] + +[[package]] +name = "echo-hostserv" +version = "0.0.1" +dependencies = [ + "echo-api", +] + +[[package]] +name = "echo-infoserv" +version = "0.0.1" +dependencies = [ + "echo-api", +] + +[[package]] +name = "echo-inspircd" +version = "0.0.1" +dependencies = [ + "echo-api", +] + +[[package]] +name = "echo-memoserv" +version = "0.0.1" +dependencies = [ + "echo-api", +] + +[[package]] +name = "echo-nickserv" +version = "0.0.1" +dependencies = [ + "echo-api", +] + +[[package]] +name = "echo-operserv" +version = "0.0.1" +dependencies = [ + "echo-api", +] + +[[package]] +name = "echo-reportserv" +version = "0.0.1" +dependencies = [ + "echo-api", +] + +[[package]] +name = "echo-statserv" +version = "0.0.1" +dependencies = [ + "echo-api", +] + [[package]] name = "either" version = "1.16.0" @@ -316,160 +470,6 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" -[[package]] -name = "fedserv" -version = "0.0.1" -dependencies = [ - "anyhow", - "argon2", - "axum", - "axum-server", - "base64", - "fedserv-api", - "fedserv-botserv", - "fedserv-chanfix", - "fedserv-chanserv", - "fedserv-diceserv", - "fedserv-example", - "fedserv-groupserv", - "fedserv-helpserv", - "fedserv-hostserv", - "fedserv-infoserv", - "fedserv-inspircd", - "fedserv-memoserv", - "fedserv-nickserv", - "fedserv-operserv", - "fedserv-reportserv", - "fedserv-statserv", - "hmac", - "pbkdf2", - "prost", - "regex", - "rustls-pemfile", - "serde", - "serde_json", - "sha2", - "subtle", - "tokio", - "tokio-rustls", - "tokio-stream", - "toml", - "tonic", - "tonic-build", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "fedserv-api" -version = "0.0.1" - -[[package]] -name = "fedserv-botserv" -version = "0.0.1" -dependencies = [ - "fedserv-api", -] - -[[package]] -name = "fedserv-chanfix" -version = "0.0.1" -dependencies = [ - "fedserv-api", -] - -[[package]] -name = "fedserv-chanserv" -version = "0.0.1" -dependencies = [ - "fedserv-api", -] - -[[package]] -name = "fedserv-diceserv" -version = "0.0.1" -dependencies = [ - "fedserv-api", - "rand", -] - -[[package]] -name = "fedserv-example" -version = "0.0.1" -dependencies = [ - "fedserv-api", -] - -[[package]] -name = "fedserv-groupserv" -version = "0.0.1" -dependencies = [ - "fedserv-api", -] - -[[package]] -name = "fedserv-helpserv" -version = "0.0.1" -dependencies = [ - "fedserv-api", -] - -[[package]] -name = "fedserv-hostserv" -version = "0.0.1" -dependencies = [ - "fedserv-api", -] - -[[package]] -name = "fedserv-infoserv" -version = "0.0.1" -dependencies = [ - "fedserv-api", -] - -[[package]] -name = "fedserv-inspircd" -version = "0.0.1" -dependencies = [ - "fedserv-api", -] - -[[package]] -name = "fedserv-memoserv" -version = "0.0.1" -dependencies = [ - "fedserv-api", -] - -[[package]] -name = "fedserv-nickserv" -version = "0.0.1" -dependencies = [ - "fedserv-api", -] - -[[package]] -name = "fedserv-operserv" -version = "0.0.1" -dependencies = [ - "fedserv-api", -] - -[[package]] -name = "fedserv-reportserv" -version = "0.0.1" -dependencies = [ - "fedserv-api", -] - -[[package]] -name = "fedserv-statserv" -version = "0.0.1" -dependencies = [ - "fedserv-api", -] - [[package]] name = "find-msvc-tools" version = "0.1.9" diff --git a/Cargo.toml b/Cargo.toml index dd23934..2c83c84 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,28 +21,28 @@ members = [ ] [package] -name = "fedserv" +name = "echo" version = "0.0.1" edition = "2021" description = "Federated IRC services daemon (protocol-agnostic core, InspIRCd link first)" [dependencies] -fedserv-api = { path = "api" } -fedserv-inspircd = { path = "modules/protocol/inspircd" } -fedserv-chanserv = { path = "modules/chanserv" } -fedserv-nickserv = { path = "modules/nickserv" } -fedserv-example = { path = "modules/example" } -fedserv-botserv = { path = "modules/botserv" } -fedserv-memoserv = { path = "modules/memoserv" } -fedserv-statserv = { path = "modules/statserv" } -fedserv-hostserv = { path = "modules/hostserv" } -fedserv-operserv = { path = "modules/operserv" } -fedserv-diceserv = { path = "modules/diceserv" } -fedserv-infoserv = { path = "modules/infoserv" } -fedserv-reportserv = { path = "modules/reportserv" } -fedserv-groupserv = { path = "modules/groupserv" } -fedserv-chanfix = { path = "modules/chanfix" } -fedserv-helpserv = { path = "modules/helpserv" } +echo-api = { path = "api" } +echo-inspircd = { path = "modules/protocol/inspircd" } +echo-chanserv = { path = "modules/chanserv" } +echo-nickserv = { path = "modules/nickserv" } +echo-example = { path = "modules/example" } +echo-botserv = { path = "modules/botserv" } +echo-memoserv = { path = "modules/memoserv" } +echo-statserv = { path = "modules/statserv" } +echo-hostserv = { path = "modules/hostserv" } +echo-operserv = { path = "modules/operserv" } +echo-diceserv = { path = "modules/diceserv" } +echo-infoserv = { path = "modules/infoserv" } +echo-reportserv = { path = "modules/reportserv" } +echo-groupserv = { path = "modules/groupserv" } +echo-chanfix = { path = "modules/chanfix" } +echo-helpserv = { path = "modules/helpserv" } tokio = { version = "1", features = ["net", "io-util", "rt-multi-thread", "macros", "time", "sync", "process"] } serde = { version = "1", features = ["derive"] } serde_json = "1" diff --git a/MODULES.md b/MODULES.md index df0c6df..b8b2096 100644 --- a/MODULES.md +++ b/MODULES.md @@ -1,10 +1,10 @@ # Writing a module -fedserv is a small core plus a set of module crates. A module depends on one -crate — `fedserv-api` — and nothing else: not the engine, not the storage, not +Echo is a small core plus a set of module crates. A module depends on one +crate — `echo-api` — and nothing else: not the engine, not the storage, not the network code. That crate carries the traits a module implements and the normalized vocabulary the engine speaks. If your module compiles against -`fedserv-api`, the core can run it. +`echo-api`, the core can run it. There are two kinds of module. @@ -21,18 +21,18 @@ minimal service to copy from; `modules/protocol/inspircd/` is the reference prot ```toml # modules/mymod/Cargo.toml [package] -name = "fedserv-mymod" +name = "echo-mymod" version = "0.0.1" edition = "2021" [dependencies] -fedserv-api = { path = "../../api" } +echo-api = { path = "../../api" } ``` **2. The service.** A plain struct implementing `Service`: ```rust -use fedserv_api::{NetView, Sender, Service, ServiceCtx, Store}; +use echo_api::{NetView, Sender, Service, ServiceCtx, Store}; pub struct MyServ { pub uid: String, // assigned by the daemon @@ -79,14 +79,14 @@ an IRC-originated one does — you do not write any replication code. members = [..., "modules/mymod"] [dependencies] -fedserv-mymod = { path = "modules/mymod" } +echo-mymod = { path = "modules/mymod" } ``` Construct it in `src/main.rs` alongside the others, behind its config name: ```rust if enabled("mymod") { - services.push(Box::new(fedserv_mymod::MyServ { + services.push(Box::new(echo_mymod::MyServ { uid: format!("{}AAAAAD", cfg.server.sid), // a stable, unique suffix })); } diff --git a/README.md b/README.md index d0099fa..afc046a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# fedserv +# Echo A federated IRC services daemon in Rust. Protocol-agnostic core, InspIRCd link first. @@ -8,9 +8,9 @@ derived from any project's source. ## Design The core lives in `src/`. The pluggable parts are separate crates in a Cargo -workspace, each depending only on the `fedserv-api` SDK crate. +workspace, each depending only on the `echo-api` SDK crate. -- **`api/`** (`fedserv-api`) the module SDK: the `Service`, `Protocol`, `Store` +- **`api/`** (`echo-api`) the module SDK: the `Service`, `Protocol`, `Store` and `NetView` traits a module implements or is handed, plus the normalized `NetEvent`/`NetAction` vocabulary and the read views. It has no storage or runtime dependencies, so a third-party module builds against it alone. @@ -21,8 +21,8 @@ workspace, each depending only on the `fedserv-api` SDK crate. stay out of a module's reach. - **`src/gossip.rs`** node-to-node replication over the logs. - **`modules/`** the loadable modules, each its own crate depending only on the - `fedserv-api` SDK: - - **`modules/protocol/inspircd/`** (`fedserv-inspircd`) the ircd link layer. A + `echo-api` SDK: + - **`modules/protocol/inspircd/`** (`echo-inspircd`) the ircd link layer. A `Protocol` impl maps raw server-to-server lines to and from the normalized model, so the engine never touches a raw line and a new ircd is one new crate under `modules/protocol/`. @@ -57,7 +57,7 @@ grows. An account registered on any node works on all of them. ## Directory API (gRPC) **`src/grpc.rs`** exposes the account/channel directory over gRPC (see -`proto/fedserv.proto`) so a website can mirror it without touching IRC: a +`proto/echo.proto`) so a website can mirror it without touching IRC: a one-shot `Snapshot` for the initial load, then `Subscribe` for a live stream of every change from that point on. It subscribes to the same committed-entry channel gossip does, so a change reaches a subscriber in the same push, no @@ -77,7 +77,7 @@ calls do not re-check the account's own password (an admin-level override, the same trust model a JSON-RPC integration to another services package would use) — `Register` and `Authenticate` are the two exceptions, since the password is the actual input there. A write committed this way replicates to -every other fedserv node exactly like an IRC-originated one does — gossip +every other Echo node exactly like an IRC-originated one does — gossip doesn't know or care where it came from. ## Config diff --git a/api/Cargo.toml b/api/Cargo.toml index ea99e23..daa89e4 100644 --- a/api/Cargo.toml +++ b/api/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "fedserv-api" +name = "echo-api" version = "0.0.1" edition = "2021" description = "Stable module SDK: the traits and vocabulary a service or protocol module builds against." diff --git a/build.rs b/build.rs index f6b376a..5be93c8 100644 --- a/build.rs +++ b/build.rs @@ -1,10 +1,10 @@ fn main() -> Result<(), Box> { // Server only: the Rust side never needs to dial itself as a gRPC client. - // Django (or any other consumer) generates its own stub from proto/fedserv.proto. + // Django (or any other consumer) generates its own stub from proto/echo.proto. tonic_build::configure() .build_server(true) .build_client(false) - .compile_protos(&["proto/fedserv.proto"], &["proto"])?; - println!("cargo:rerun-if-changed=proto/fedserv.proto"); + .compile_protos(&["proto/echo.proto"], &["proto"])?; + println!("cargo:rerun-if-changed=proto/echo.proto"); Ok(()) } diff --git a/config.example.toml b/config.example.toml index d6544ee..c42a776 100644 --- a/config.example.toml +++ b/config.example.toml @@ -26,7 +26,7 @@ protocol = 1206 # InspIRCd link protocol version (1206 = insp4, 1205 # name = "other-node" # TLS name to expect; must match the peer certificate # Directory replication (gRPC) — lets a website mirror the account/channel -# directory (identity + metadata only, never credentials; see proto/fedserv.proto). +# directory (identity + metadata only, never credentials; see proto/echo.proto). # Omit this section to run without it. # [grpc] # bind = "127.0.0.1:50051" # a private network hop is the expected deployment @@ -76,12 +76,12 @@ protocol = 1206 # InspIRCd link protocol version (1206 = insp4, 1205 # [session] # default_limit = 3 -# Account authority. Omit this section (the default) and fedserv owns accounts +# Account authority. Omit this section (the default) and Echo owns accounts # itself: NickServ REGISTER / IDENTIFY / SET PASSWORD all work standalone, no # external service needed. Set external = true to hand identity to an outside # authority (e.g. your website): IRC can then only IDENTIFY — REGISTER, DROP, # SET PASSWORD/EMAIL, RESETPASS, CONFIRM, CERT and GROUP are refused, and the -# authority pushes accounts in via the gRPC Accounts API (see [grpc]). fedserv +# authority pushes accounts in via the gRPC Accounts API (see [grpc]). Echo # still owns all channel/vhost/ban data, keyed by the account name. # [auth] # external = true diff --git a/modules/botserv/Cargo.toml b/modules/botserv/Cargo.toml index a7a5ec2..2b8bcfa 100644 --- a/modules/botserv/Cargo.toml +++ b/modules/botserv/Cargo.toml @@ -1,8 +1,8 @@ [package] -name = "fedserv-botserv" +name = "echo-botserv" version = "0.0.1" edition = "2021" description = "BotServ: registers and manages service bots that sit in channels." [dependencies] -fedserv-api = { path = "../../api" } +echo-api = { path = "../../api" } diff --git a/modules/botserv/src/assign.rs b/modules/botserv/src/assign.rs index 34e0ac2..b32a525 100644 --- a/modules/botserv/src/assign.rs +++ b/modules/botserv/src/assign.rs @@ -1,4 +1,4 @@ -use fedserv_api::{Priv, Sender, ServiceCtx, Store}; +use echo_api::{Priv, Sender, ServiceCtx, Store}; // ASSIGN <#channel> / UNASSIGN <#channel>: put a bot in a channel (or take // it out). Channel founder only (or a services admin). diff --git a/modules/botserv/src/badwords.rs b/modules/botserv/src/badwords.rs index 52d942c..c715702 100644 --- a/modules/botserv/src/badwords.rs +++ b/modules/botserv/src/badwords.rs @@ -1,4 +1,4 @@ -use fedserv_api::{ChanError, Sender, ServiceCtx, Store}; +use echo_api::{ChanError, Sender, ServiceCtx, Store}; // BADWORDS <#channel> ADD | DEL | LIST | CLEAR: manage the // channel's badword patterns. Each entry is a regular expression, so a channel diff --git a/modules/botserv/src/bot.rs b/modules/botserv/src/bot.rs index 227f162..70b3269 100644 --- a/modules/botserv/src/bot.rs +++ b/modules/botserv/src/bot.rs @@ -1,4 +1,4 @@ -use fedserv_api::{ChanError, Priv, Sender, ServiceCtx, Store}; +use echo_api::{ChanError, Priv, Sender, ServiceCtx, Store}; // BOT ADD [gecos] | BOT DEL | BOT LIST — manage the // bot registry. Administering bots is oper-only (Priv::Admin). diff --git a/modules/botserv/src/copy.rs b/modules/botserv/src/copy.rs index 3ddd0cd..226ac76 100644 --- a/modules/botserv/src/copy.rs +++ b/modules/botserv/src/copy.rs @@ -1,4 +1,4 @@ -use fedserv_api::{Sender, ServiceCtx, Store}; +use echo_api::{Sender, ServiceCtx, Store}; // COPY <#source> <#dest>: copy a channel's bot configuration — kickers, // badwords, greet and nobot — onto another. Requires founder-or-admin on both. diff --git a/modules/botserv/src/info.rs b/modules/botserv/src/info.rs index 607e9ca..524c275 100644 --- a/modules/botserv/src/info.rs +++ b/modules/botserv/src/info.rs @@ -1,4 +1,4 @@ -use fedserv_api::{Sender, ServiceCtx, Store}; +use echo_api::{Sender, ServiceCtx, Store}; // INFO — describe a bot and list the channels it serves. // INFO <#channel> — show which bot (if any) is assigned to a channel. diff --git a/modules/botserv/src/kick.rs b/modules/botserv/src/kick.rs index f67e0c0..f6201dc 100644 --- a/modules/botserv/src/kick.rs +++ b/modules/botserv/src/kick.rs @@ -1,4 +1,4 @@ -use fedserv_api::{Kicker, Sender, ServiceCtx, Store}; +use echo_api::{Kicker, Sender, ServiceCtx, Store}; // KICK <#channel> {ON|OFF} [params]: configure the bot's kickers. // Types: CAPS [min [percent]], BOLDS, COLORS, UNDERLINES, REVERSES, ITALICS, diff --git a/modules/botserv/src/lib.rs b/modules/botserv/src/lib.rs index 022bb0f..9ed5e57 100644 --- a/modules/botserv/src/lib.rs +++ b/modules/botserv/src/lib.rs @@ -2,7 +2,7 @@ //! and (in later slices) run fantasy commands. `lib.rs` holds the dispatcher; //! each command lives in its own file, matching NickServ/ChanServ. -use fedserv_api::{NetView, Priv, Sender, Service, ServiceCtx, Store}; +use echo_api::{NetView, Priv, Sender, Service, ServiceCtx, Store}; #[path = "bot.rs"] mod bot; diff --git a/modules/botserv/src/say.rs b/modules/botserv/src/say.rs index e652a37..646b3c4 100644 --- a/modules/botserv/src/say.rs +++ b/modules/botserv/src/say.rs @@ -1,4 +1,4 @@ -use fedserv_api::{NetView, Priv, Sender, ServiceCtx, Store}; +use echo_api::{NetView, Priv, Sender, ServiceCtx, Store}; // SAY <#channel> — make the channel's assigned bot say something. // ACT <#channel> — the same, as a CTCP ACTION (/me). diff --git a/modules/botserv/src/set.rs b/modules/botserv/src/set.rs index 99aea8a..7713b5e 100644 --- a/modules/botserv/src/set.rs +++ b/modules/botserv/src/set.rs @@ -1,4 +1,4 @@ -use fedserv_api::{parse_duration, ChanSetting, Priv, Sender, ServiceCtx, Store}; +use echo_api::{parse_duration, ChanSetting, Priv, Sender, ServiceCtx, Store}; // SET <#channel>