diff options
-rw-r--r-- | modules/memoserv/cancel.cpp | 57 |
1 files changed, 36 insertions, 21 deletions
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 |