summaryrefslogtreecommitdiff
path: root/modules/commands/ms_cancel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/commands/ms_cancel.cpp')
-rw-r--r--modules/commands/ms_cancel.cpp56
1 files changed, 38 insertions, 18 deletions
diff --git a/modules/commands/ms_cancel.cpp b/modules/commands/ms_cancel.cpp
index 9e6f0ce63..07b7f3050 100644
--- a/modules/commands/ms_cancel.cpp
+++ b/modules/commands/ms_cancel.cpp
@@ -34,27 +34,47 @@ class CommandMSCancel : public Command
MemoInfo *mi = MemoInfo::GetMemoInfo(nname, ischan);
if (mi == NULL)
- source.Reply(ischan ? CHAN_X_NOT_REGISTERED : _(NICK_X_NOT_REGISTERED), nname.c_str());
+ {
+ source.Reply(ischan ? CHAN_X_NOT_REGISTERED : NICK_X_NOT_REGISTERED, nname.c_str());
+ return;
+ }
+
+ ChannelInfo *ci = NULL;
+ NickAlias *na = NULL;
+ if (ischan)
+ {
+ ci = ChannelInfo::Find(nname);
+
+ if (ci == NULL)
+ return; // can't happen
+ }
else
{
- ChannelInfo *ci = NULL;
- NickAlias *na = NULL;
- if (ischan)
- ci = ChannelInfo::Find(nname);
- else
- na = NickAlias::Find(nname);
- for (int i = mi->memos->size() - 1; i >= 0; --i)
- if (mi->GetMemo(i)->unread && source.nc->display.equals_ci(mi->GetMemo(i)->sender))
- {
- FOREACH_MOD(OnMemoDel, (ischan ? ci->name : na->nc->display, mi, mi->GetMemo(i)));
- mi->Del(i);
- source.Reply(_("Last memo to \002%s\002 has been cancelled."), nname.c_str());
- return;
- }
-
- source.Reply(_("No memo was cancelable."));
+ na = NickAlias::Find(nname);
+
+ if (na == NULL)
+ return; // can't happen
}
- return;
+
+ for (int i = mi->memos->size() - 1; i >= 0; --i)
+ {
+ Memo *m = mi->GetMemo(i);
+
+ if (!m->unread)
+ continue;
+
+ NickAlias *sender = NickAlias::Find(m->sender);
+
+ if (sender && sender->nc == source.GetAccount())
+ {
+ FOREACH_MOD(OnMemoDel, (ischan ? ci->name : na->nc->display, mi, m));
+ mi->Del(i);
+ source.Reply(_("Last memo to \002%s\002 has been cancelled."), (ischan ? ci->name : na->nc->display).c_str());
+ return;
+ }
+ }
+
+ source.Reply(_("No memo was cancelable."));
}
bool OnHelp(CommandSource &source, const Anope::string &subcommand) anope_override