From 1c094f837656fb6eb039860cbf5b90b36747995d Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 7 Oct 2016 19:34:43 -0400 Subject: ms_cancel: cleanup, consider accounts by equiality instead of sender name to account name --- modules/memoserv/cancel.cpp | 57 ++++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 21 deletions(-) (limited to 'modules') diff --git a/modules/memoserv/cancel.cpp b/modules/memoserv/cancel.cpp index 3ba25ffaf..eea99e27a 100644 --- a/modules/memoserv/cancel.cpp +++ b/modules/memoserv/cancel.cpp @@ -48,33 +48,48 @@ class CommandMSCancel : public Command source.Reply(_("Channel \002{0}\002 isn't registered."), nname); else source.Reply(_("\002{0}\002 isn't registered."), nname); + + return; + } + + if (mi == nullptr) + return; + + ChanServ::Channel *ci = NULL; + NickServ::Nick *na = NULL; + if (ischan) + { + ci = ChanServ::Find(nname); + if (ci == nullptr) + return; } else { - ChanServ::Channel *ci = NULL; - NickServ::Nick *na = NULL; - if (ischan) - ci = ChanServ::Find(nname); - else - na = NickServ::FindNick(nname); - if (mi) + na = NickServ::FindNick(nname); + if (na == nullptr) + return; + } + + auto memos = mi->GetMemos(); + for (int i = memos.size() - 1; i >= 0; --i) + { + MemoServ::Memo *m = memos[i]; + + if (!m->GetUnread()) + continue; + + NickServ::Nick *sender = NickServ::FindNick(m->GetSender()); + + if (sender && sender->GetAccount() == source.GetAccount()) { - auto memos = mi->GetMemos(); - for (int i = memos.size() - 1; i >= 0; --i) - { - MemoServ::Memo *m = memos[i]; - if (m->GetUnread() && source.nc->GetDisplay().equals_ci(m->GetSender())) - { - EventManager::Get()->Dispatch(&MemoServ::Event::MemoDel::OnMemoDel, ischan ? ci->GetName() : na->GetAccount()->GetDisplay(), mi, m); - mi->Del(i); - source.Reply(_("Your last memo to \002{0}\002 has been cancelled."), nname); - return; - } - } + EventManager::Get()->Dispatch(&MemoServ::Event::MemoDel::OnMemoDel, ischan ? ci->GetName() : na->GetAccount()->GetDisplay(), mi, m); + mi->Del(i); + source.Reply(_("Your last memo to \002{0}\002 has been cancelled."), ischan ? ci->GetName() : na->GetAccount()->GetDisplay()); + return; } - - source.Reply(_("No memo to \002{0}\002 was cancelable."), nname); } + + source.Reply(_("No memo was cancelable.")); } bool OnHelp(CommandSource &source, const Anope::string &subcommand) override -- cgit