MemoServ: add CANCEL, CHECK, and INFO
All checks were successful
CI / check (push) Successful in 3m49s
All checks were successful
CI / check (push) Successful in 3m49s
CANCEL recalls the sender's most recent unread memo to a target (one the recipient already read can't be recalled); CHECK reports whether the last memo you sent someone has been read; INFO summarises your mailbox. Adds memo_cancel/memo_check store methods and shares MAX_MEMOS from the module root instead of duplicating it in send.rs.
This commit is contained in:
parent
a26ee722d1
commit
98ecbca414
9 changed files with 118 additions and 2 deletions
18
modules/memoserv/src/check.rs
Normal file
18
modules/memoserv/src/check.rs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
use echo_api::{human_time, Sender, ServiceCtx, Store};
|
||||
|
||||
// CHECK <nick>: has the last memo you sent to <nick> been read yet?
|
||||
pub fn handle(me: &str, from: &Sender, account: &str, args: &[&str], ctx: &mut ServiceCtx, db: &mut dyn Store) {
|
||||
let Some(&target) = args.get(1) else {
|
||||
ctx.notice(me, from.uid, "Syntax: CHECK <nick>");
|
||||
return;
|
||||
};
|
||||
let Some(dest) = db.resolve_account(target).map(str::to_string) else {
|
||||
ctx.notice(me, from.uid, format!("\x02{target}\x02 isn't registered."));
|
||||
return;
|
||||
};
|
||||
match db.memo_check(&dest, account) {
|
||||
Some((true, ts)) => ctx.notice(me, from.uid, format!("Your last memo to \x02{target}\x02 (sent {}) has been \x02read\x02.", human_time(ts))),
|
||||
Some((false, ts)) => ctx.notice(me, from.uid, format!("Your last memo to \x02{target}\x02 (sent {}) has \x02not\x02 been read yet.", human_time(ts))),
|
||||
None => ctx.notice(me, from.uid, format!("You have no memo on record to \x02{target}\x02.")),
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue