本文整理汇总了C++中chanserv::Channel类的典型用法代码示例。如果您正苦于以下问题:C++ Channel类的具体用法?C++ Channel怎么用?C++ Channel使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Channel类的17个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: Execute
void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override
{
ChanServ::Channel *ci = ChanServ::Find(params[0]);
const Anope::string &value = params[1];
if (ci == NULL)
{
source.Reply(_("Channel \002{0}\002 isn't registered."), params[0]);
return;
}
if (!source.HasPriv("botserv/administration") && !source.AccessFor(ci).HasPriv("SET"))
{
source.Reply(_("Access denied. You do not have the \002{0}\002 privilege on \002{1}\002."), "SET", ci->GetName());
return;
}
if (Anope::ReadOnly)
{
source.Reply(_("Sorry, bot option setting is temporarily disabled."));
return;
}
if (value.equals_ci("ON"))
{
bool override = !source.AccessFor(ci).HasPriv("SET");
Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to enable fantasy";
ci->SetS<bool>("BS_FANTASY", true);
source.Reply(_("Fantasy mode is now \002on\002 on channel \002{0}\002."), ci->GetName());
}
开发者ID:SaberUK,项目名称:anope,代码行数:31,代码来源:fantasy.cpp
示例2: Execute
void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override
{
const Anope::string &chan = params[0];
const Anope::string &value = params[1];
if (Anope::ReadOnly)
{
source.Reply(_("Services are in read-only mode."));
return;
}
ChanServ::Channel *ci = ChanServ::Find(chan);
if (ci == NULL)
{
source.Reply(_("Channel \002{0}\002 isn't registered."), chan);
return;
}
if (!source.HasPriv("botserv/administration") && !source.AccessFor(ci).HasPriv("SET"))
{
source.Reply(_("Access denied. You do not have privilege \002{0}\002 on \002{1}\002."), "SET", ci->GetName());
return;
}
if (value.equals_ci("ON"))
{
bool override = !source.AccessFor(ci).HasPriv("SET");
Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to enable greets";
ci->SetS<bool>("BS_GREET", true);
source.Reply(_("Greet mode for \002{0}\002 is now \002on\002."), ci->GetName());
}
开发者ID:SaberUK,项目名称:anope,代码行数:32,代码来源:greet.cpp
示例3: Execute
void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override
{
const Anope::string &chan = params[0];
User *u = source.GetUser();
Channel *c = Channel::Find(chan);
if (!c)
{
source.Reply(_("Channel \002{0}\002 doesn't exist."), chan);
return;
}
ChanServ::Channel *ci = c->ci;
if (!ci)
{
source.Reply(_("Channel \002{0}\002 isn't registered."), c->name);
return;
}
if (!source.AccessFor(ci).HasPriv("INVITE") && !source.HasCommand("chanserv/invite"))
{
source.Reply(_("Access denied. You do not have privilege \002{0}\002 on \002{1}\002."), "INVITE", ci->GetName());
return;
}
User *u2;
if (params.size() == 1)
u2 = u;
else
u2 = User::Find(params[1], true);
if (!u2)
{
source.Reply(_("\002{0}\002 isn't currently online."), params.size() > 1 ? params[1] : source.GetNick());
return;
}
if (c->FindUser(u2))
{
if (u2 == u)
source.Reply(_("You are already in \002{0}\002!"), c->name);
else
source.Reply(_("\002{0}\002 is already in \002{1}\002!"), u2->nick, c->name);
return;
}
bool override = !source.AccessFor(ci).HasPriv("INVITE");
IRCD->SendInvite(ci->WhoSends(), c, u2);
if (u2 != u)
{
source.Reply(_("\002{0}\002 has been invited to \002{1}\002."), u2->nick, c->name);
u2->SendMessage(ci->WhoSends(), _("You have been invited to \002{0}\002 by \002{1}\002."), c->name, source.GetNick());
Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "for " << u2->nick;
}
开发者ID:bonnedav,项目名称:anope,代码行数:57,代码来源:invite.cpp
示例4: Execute
void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override
{
const Anope::string &chan = params[0];
const Anope::string &nick = params[1];
if (Anope::ReadOnly)
{
source.Reply(_("Sorry, bot assignment is temporarily disabled."));
return;
}
ChanServ::Channel *ci = ChanServ::Find(chan);
if (ci == NULL)
{
source.Reply(_("Channel \002{0}\002 isn't registered."), chan);
return;
}
ServiceBot *bi = ServiceBot::Find(nick, true);
if (!bi)
{
source.Reply(_("Bot \002{0}\002 does not exist."), nick);
return;
}
ChanServ::AccessGroup access = source.AccessFor(ci);
if (!access.HasPriv("ASSIGN") && !source.HasPriv("botserv/administration"))
{
source.Reply(_("Access denied. You do not have privilege \002{0}\002 on \002{1}\002."), "ASSIGN", ci->GetName());
return;
}
if (ci->HasFieldS("BS_NOBOT"))
{
source.Reply(_("Access denied. \002{0}\002 may not have a bot assigned to it because a Services Operator has disallowed it."), ci->GetName());
return;
}
if (bi->bi->GetOperOnly() && !source.HasPriv("botserv/administration"))
{
source.Reply(_("Access denied. Bot \002{0}\002 is for operators only."), bi->nick);
return;
}
if (ci->GetBot() == bi)
{
source.Reply(_("Bot \002{0}\002 is already assigned to \002{1}\002."), ci->GetBot()->nick, ci->GetName());
return;
}
bool override = !access.HasPriv("ASSIGN");
Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "for " << bi->nick;
bi->Assign(source.GetUser(), ci);
source.Reply(_("Bot \002{0}\002 has been assigned to \002{1}\002."), bi->nick, ci->GetName());
}
开发者ID:bonnedav,项目名称:anope,代码行数:56,代码来源:assign.cpp
示例5: Execute
void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override
{
const Anope::string &chan = params[0];
if (Anope::ReadOnly && !source.HasPriv("chanserv/administration"))
{
source.Reply(_("Sorry, channel de-registration is temporarily disabled."));
return;
}
ChanServ::Channel *ci = ChanServ::Find(chan);
if (ci == NULL)
{
source.Reply(_("Channel \002{0}\002 isn't registered."), chan);
return;
}
if (params.size() < 2 || !chan.equals_ci(params[1]))
{
source.Reply(_("You must enter the channel name twice as a confirmation that you wish to drop \002{0}\002."), ci->GetName());
return;
}
if ((ci->HasFieldS("SECUREFOUNDER") ? !source.IsFounder(ci) : !source.AccessFor(ci).HasPriv("FOUNDER")) && !source.HasCommand("chanserv/drop"))
{
source.Reply(_("Access denied. You do not have privilege \002{0}\002 on \002{1}\002."), "FOUNDER", ci->GetName());
return;
}
EventReturn MOD_RESULT = this->onchandrop(&Event::ChanDrop::OnChanDrop, source, ci);
if (MOD_RESULT == EVENT_STOP)
return;
bool override = (ci->HasFieldS("SECUREFOUNDER") ? !source.IsFounder(ci) : !source.AccessFor(ci).HasPriv("FOUNDER"));
Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "(founder was: " << (ci->GetFounder() ? ci->GetFounder()->GetDisplay() : "none") << ")";
Reference<Channel> c = ci->c;
ci->Delete();
source.Reply(_("Channel \002{0}\002 has been dropped."), chan);
if (c)
c->CheckModes();
}
开发者ID:bonnedav,项目名称:anope,代码行数:44,代码来源:drop.cpp
示例6:
MemoServ::MemoInfo *GetMemoInfo(const Anope::string &target, bool &is_registered, bool &ischan, bool create) override
{
if (!target.empty() && target[0] == '#')
{
ischan = true;
ChanServ::Channel *ci = ChanServ::Find(target);
if (ci != NULL)
{
is_registered = true;
if (create && !ci->GetMemos())
{
MemoServ::MemoInfo *mi = Serialize::New<MemoServ::MemoInfo *>();
mi->SetOwner(ci);
}
return ci->GetMemos();
}
else
is_registered = false;
}
else
{
ischan = false;
NickServ::Nick *na = NickServ::FindNick(target);
if (na != NULL)
{
is_registered = true;
if (create && !na->GetAccount()->GetMemos())
{
MemoServ::MemoInfo *mi = Serialize::New<MemoServ::MemoInfo *>();
mi->SetOwner(na->GetAccount());
}
return na->GetAccount()->GetMemos();
}
else
is_registered = false;
}
return NULL;
}
开发者ID:dream1986,项目名称:anope,代码行数:39,代码来源:memoserv.cpp
示例7: Execute
void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override
{
const Anope::string &chan = params[0];
const Anope::string &text = params[1];
ChanServ::Channel *ci = ChanServ::Find(chan);
if (ci == NULL)
{
source.Reply(_("Channel \002{0}\002 isn't registered."), chan);
return;
}
if (!source.AccessFor(ci).HasPriv("SAY") && !source.HasPriv("botserv/administration"))
{
source.Reply(_("Access denied. You do not have privilege \002{0}\002 on \002{1}\002."), "SAY", ci->GetName());
return;
}
if (!ci->GetBot())
{
source.Reply(_("There is no bot assigned to \002{0}\002. One must be assigned to the channel before this command can be used."), ci->GetName());
ServiceBot *bi;
Anope::string name;
Command::FindCommandFromService("botserv/assign", bi, name);
CommandInfo *help = source.service->FindCommand("generic/help");
if (bi && help)
source.Reply(_("See \002{msg}{service} {help} {command}\002 for information on assigning bots."),
"msg"_kw = Config->StrictPrivmsg, "service"_kw = bi->nick, "help"_kw = help->cname, "command"_kw = name);
return;
}
if (!ci->c || !ci->c->FindUser(ci->GetBot()))
{
source.Reply(_("Bot \002{0}\002 is not on channel \002{1}\002."), ci->GetBot()->nick, ci->GetName());
return;
}
if (text[0] == '\001')
{
this->OnSyntaxError(source, "");
return;
}
IRCD->SendPrivmsg(ci->GetBot(), ci->GetName(), "%s", text.c_str());
ci->GetBot()->lastmsg = Anope::CurTime;
bool override = !source.AccessFor(ci).HasPriv("SAY");
Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to say: " << text;
}
开发者ID:SaberUK,项目名称:anope,代码行数:49,代码来源:control.cpp
示例8: OnLog
void OnLog(Logger *logger) override
{
User *user = logger->GetUser();
ChanServ::Channel *channel = logger->GetCi();
Command *command = logger->GetCommand();
CommandSource *source = logger->GetSource();
if (logger->GetType() != LogType::COMMAND || user == nullptr || command == nullptr || channel == nullptr || !Me || !Me->IsSynced())
return;
Channel *c = channel->GetChannel();
for (LogSetting *log : channel->GetRefs<LogSetting *>())
{
/* wrong command */
if (log->GetServiceName() != command->GetName())
continue;
/* if a command name is given check the service and the command */
if (!log->GetCommandName().empty())
{
/* wrong service (only check if not a fantasy command, though) */
if (!source->c && log->GetCommandService() != source->service->nick)
continue;
if (!log->GetCommandName().equals_ci(source->GetCommand()))
continue;
}
const Anope::string &buffer = logger->GetMaskedMessage();
if (log->GetMethod().equals_ci("MEMO") && memoserv && channel->WhoSends() != NULL)
memoserv->Send(channel->WhoSends()->nick, channel->GetName(), buffer, true);
else if (source->c)
/* Sending a channel message or notice in response to a fantasy command */;
else if (log->GetMethod().equals_ci("MESSAGE") && c)
{
IRCD->SendPrivmsg(channel->WhoSends(), log->GetExtra() + c->name, "{0}", buffer);
#warning "fix idletimes"
//l->ci->WhoSends()->lastmsg = Anope::CurTime;
}
else if (log->GetMethod().equals_ci("NOTICE") && c)
IRCD->SendNotice(channel->WhoSends(), log->GetExtra() + c->name, "{0}", buffer);
}
}
开发者ID:Robby-,项目名称:anope,代码行数:45,代码来源:log.cpp
示例9: Execute
void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override
{
Anope::string param = !params.empty() ? params[0] : "", chan;
ChanServ::Channel *ci = NULL;
MemoServ::MemoInfo *mi;
if (!param.empty() && param[0] == '#')
{
chan = param;
param = params.size() > 1 ? params[1] : "";
ci = ChanServ::Find(chan);
if (!ci)
{
source.Reply(_("Channel \002{0}\002 isn't registered."), chan);
return;
}
if (!source.AccessFor(ci).HasPriv("MEMO"))
{
source.Reply(_("Access denied. You do not have privilege \002{0}\002 on \002{1}\002."), "MEMO", ci->GetName());
return;
}
mi = ci->GetMemos();
}
else
{
mi = source.nc->GetMemos();
}
if (!param.empty() && !isdigit(param[0]) && !param.equals_ci("NEW"))
{
this->OnSyntaxError(source);
return;
}
if (!mi)
return;
auto memos = mi->GetMemos();
if (!memos.size())
{
if (!chan.empty())
source.Reply(_("\002{0}\002 has no memos."), chan);
else
source.Reply(_("You have no memos."));
return;
}
ListFormatter list(source.GetAccount());
list.AddColumn(_("Number")).AddColumn(_("Sender")).AddColumn(_("Date/Time"));
if (!param.empty() && isdigit(param[0]))
{
NumberList(param, false,
[&](unsigned int number)
{
if (!number || number > memos.size())
return;
MemoServ::Memo *m = mi->GetMemo(number - 1);
ListFormatter::ListEntry entry;
entry["Number"] = (m->GetUnread() ? "* " : " ") + stringify(number);
entry["Sender"] = m->GetSender();
entry["Date/Time"] = Anope::strftime(m->GetTime(), source.GetAccount());
list.AddEntry(entry);
},
[]{});
}
else
{
if (!param.empty())
{
unsigned i, end;
for (i = 0, end = memos.size(); i < end; ++i)
if (mi->GetMemo(i)->GetUnread())
break;
if (i == end)
{
if (!chan.empty())
source.Reply(_("\002{0}\002 has no new memos."), chan);
else
source.Reply(_("You have no new memos."));
return;
}
}
for (unsigned i = 0, end = memos.size(); i < end; ++i)
{
if (!param.empty() && !mi->GetMemo(i)->GetUnread())
continue;
MemoServ::Memo *m = mi->GetMemo(i);
ListFormatter::ListEntry entry;
//.........这里部分代码省略.........
开发者ID:Robby-,项目名称:anope,代码行数:101,代码来源:list.cpp
示例10: Execute
//.........这里部分代码省略.........
source.Reply(_("Added a forbid on \002{0}\002 of type \002{1}\002 to expire on \002{2}\002."), entry, subcommand.lower(), expiryt ? Anope::strftime(expiryt, source.GetAccount()) : "never");
/* apply forbid */
switch (ftype)
{
case FT_NICK:
{
int na_matches = 0;
for (user_map::const_iterator it = UserListByNick.begin(); it != UserListByNick.end(); ++it)
this->OnUserNickChange(it->second);
for (auto it = NickServ::service->GetNickList().begin(); it != NickServ::service->GetNickList().end();)
{
NickServ::Nick *na = *it;
++it;
d = this->fs->FindForbid(na->GetNick(), FT_NICK);
if (d == NULL)
continue;
++na_matches;
delete na;
}
source.Reply(_("\002{0}\002 nickname(s) dropped."), na_matches);
break;
}
case FT_CHAN:
{
int chan_matches = 0, ci_matches = 0;
for (channel_map::const_iterator it = ChannelList.begin(), it_end = ChannelList.end(); it != it_end;)
{
Channel *c = it->second;
++it;
d = this->fs->FindForbid(c->name, FT_CHAN);
if (d == NULL)
continue;
ServiceBot *OperServ = Config->GetClient("OperServ");
if (IRCD->CanSQLineChannel && OperServ)
{
time_t inhabit = Config->GetModule("chanserv")->Get<time_t>("inhabit", "15s");
#warning "xline allocated on stack"
#if 0
XLine x(c->name, OperServ->nick, Anope::CurTime + inhabit, d->GetReason());
IRCD->SendSQLine(NULL, &x);
#endif
}
else if (ChanServ::service)
{
ChanServ::service->Hold(c);
}
++chan_matches;
for (Channel::ChanUserList::const_iterator cit = c->users.begin(), cit_end = c->users.end(); cit != cit_end;)
{
User *u = cit->first;
++cit;
if (u->server == Me || u->HasMode("OPER"))
continue;
开发者ID:SaberUK,项目名称:anope,代码行数:67,代码来源:forbid.cpp
示例11: Execute
void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override
{
const Anope::string &chan = params[0];
User *u = source.GetUser();
Channel *c = Channel::Find(chan);
if (!c)
{
source.Reply(_("Channel \002{0}\002 doesn't exist."), chan);
return;
}
ChanServ::Channel *ci = c->GetChannel();
if (!ci)
{
source.Reply(_("Channel \002{0}\002 isn't registered."), c->name);
return;
}
if (!source.AccessFor(ci).HasPriv("INVITE") && !source.HasOverrideCommand("chanserv/invite"))
{
source.Reply(_("Access denied. You do not have privilege \002{0}\002 on \002{1}\002."), "INVITE", ci->GetName());
return;
}
User *u2;
if (params.size() == 1)
u2 = u;
else
u2 = User::Find(params[1], true);
if (!u2)
{
source.Reply(_("\002{0}\002 isn't currently online."), params.size() > 1 ? params[1] : source.GetNick());
return;
}
if (c->FindUser(u2))
{
if (u2 == u)
source.Reply(_("You are already in \002{0}\002!"), c->name);
else
source.Reply(_("\002{0}\002 is already in \002{1}\002!"), u2->nick, c->name);
return;
}
IRCD->Send<messages::Invite>(ci->WhoSends(), c, u2);
if (u2 != u)
{
source.Reply(_("\002{0}\002 has been invited to \002{1}\002."), u2->nick, c->name);
u2->SendMessage(ci->WhoSends(), _("You have been invited to \002{0}\002 by \002{1}\002."), c->name, source.GetNick());
logger.Command(source, ci, _("{source} used {command} on {channel} to invite {0}"), u2->nick);
}
else
{
u2->SendMessage(ci->WhoSends(), _("You have been invited to \002{0}\002."), c->name);
logger.Command(source, ci, _("{source} used {command} on {channel}"));
}
}
开发者ID:Robby-,项目名称:anope,代码行数:61,代码来源:invite.cpp
示例12: OnUserLogin
void OnUserLogin(User *u) override
{
ServiceBot *NickServ = Config->GetClient("NickServ");
if (!NickServ)
return;
std::vector<AutoJoin *> channels = u->Account()->GetRefs<AutoJoin *>();
if (channels.empty())
return;
/* Set +r now, so we can ajoin users into +R channels */
ModeManager::ProcessModes();
for (AutoJoin *entry : channels)
{
Channel *c = Channel::Find(entry->GetChannel());
ChanServ::Channel *ci;
if (c)
ci = c->ci;
else
ci = ChanServ::Find(entry->GetChannel());
bool need_invite = false;
Anope::string key = entry->GetKey();
ChanServ::AccessGroup u_access;
if (ci != NULL)
{
if (ci->HasFieldS("CS_SUSPENDED"))
continue;
u_access = ci->AccessFor(u);
}
if (c != NULL)
{
if (c->FindUser(u) != NULL)
continue;
else if (c->HasMode("OPERONLY") && !u->HasMode("OPER"))
continue;
else if (c->HasMode("ADMINONLY") && !u->HasMode("ADMIN"))
continue;
else if (c->HasMode("SSL") && !(u->HasMode("SSL") || u->HasExtOK("ssl")))
continue;
else if (c->MatchesList(u, "BAN") == true && c->MatchesList(u, "EXCEPT") == false)
need_invite = true;
else if (c->HasMode("INVITE") && c->MatchesList(u, "INVITEOVERRIDE") == false)
need_invite = true;
if (c->HasMode("KEY"))
{
Anope::string k;
if (c->GetParam("KEY", k))
{
if (u_access.HasPriv("GETKEY"))
key = k;
else if (key != k)
need_invite = true;
}
}
if (c->HasMode("LIMIT"))
{
Anope::string l;
if (c->GetParam("LIMIT", l))
{
try
{
unsigned limit = convertTo<unsigned>(l);
if (c->users.size() >= limit)
need_invite = true;
}
catch (const ConvertException &) { }
}
}
}
if (need_invite && c != NULL)
{
if (!u_access.HasPriv("INVITE"))
continue;
IRCD->SendInvite(NickServ, c, u);
}
IRCD->SendSVSJoin(NickServ, u, entry->GetChannel(), key);
}
}
开发者ID:SaberUK,项目名称:anope,代码行数:85,代码来源:ajoin.cpp
示例13: Execute
void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override
{
MemoServ::MemoInfo *mi;
ChanServ::Channel *ci = NULL;
Anope::string numstr = params[0], chan;
if (!numstr.empty() && numstr[0] == '#')
{
chan = numstr;
numstr = params.size() > 1 ? params[1] : "";
ci = ChanServ::Find(chan);
if (!ci)
{
source.Reply(_("Channel \002{0}\002 isn't registered."), chan);
return;
}
if (!source.AccessFor(ci).HasPriv("MEMO"))
{
source.Reply(_("Access denied. You do not have privilege \002{0}\002 on \002{1}\002."), "MEMO", ci->GetName());
return;
}
mi = ci->GetMemos();
}
else
mi = source.nc->GetMemos();
if (numstr.empty() || (!numstr.equals_ci("LAST") && !numstr.equals_ci("NEW") && !numstr.is_number_only()))
{
this->OnSyntaxError(source, numstr);
return;
}
if (!mi)
return;
auto memos = mi->GetMemos();
if (memos.empty())
{
if (!chan.empty())
source.Reply(_("\002{0}\002 has no memos."), chan);
else
source.Reply(_("You have no memos."));
return;
}
int i, end;
if (numstr.equals_ci("NEW"))
{
int readcount = 0;
for (i = 0, end = memos.size(); i < end; ++i)
if (mi->GetMemo(i)->GetUnread())
{
DoRead(source, mi, ci, i);
++readcount;
}
if (!readcount)
{
if (!chan.empty())
source.Reply(_("\002{0}\002 has no new memos."), chan);
else
source.Reply(_("You have no new memos."));
}
}
else if (numstr.equals_ci("LAST"))
{
for (i = 0, end = memos.size() - 1; i < end; ++i);
DoRead(source, mi, ci, i);
}
else /* number[s] */
{
NumberList(numstr, false,
[&](unsigned int number)
{
if (!number || number > memos.size())
return;
DoRead(source, mi, ci, number - 1);
},
[]{});
}
}
开发者ID:bonnedav,项目名称:anope,代码行数:87,代码来源:read.cpp
示例14: Send
MemoResult Send(const Anope::string &source, const Anope::string &target, const Anope::string &message, bool force) override
{
bool ischan, isregistered;
MemoServ::MemoInfo *mi = GetMemoInfo(target, ischan, isregistered, true);
if (mi == NULL)
return MEMO_INVALID_TARGET;
User *sender = User::Find(source);
if (sender != NULL && !sender->HasPriv("memoserv/no-limit") && !force)
{
time_t send_delay = Config->GetModule("memoserv")->Get<time_t>("senddelay");
if (send_delay > 0 && sender->lastmemosend + send_delay > Anope::CurTime)
return MEMO_TOO_FAST;
else if (!mi->GetMemoMax())
return MEMO_TARGET_FULL;
else if (mi->GetMemoMax() > 0 && mi->GetMemos().size() >= static_cast<unsigned>(mi->GetMemoMax()))
return MEMO_TARGET_FULL;
else if (mi->HasIgnore(sender))
return MEMO_SUCCESS;
}
if (sender != NULL)
sender->lastmemosend = Anope::CurTime;
MemoServ::Memo *m = Serialize::New<MemoServ::Memo *>();
m->SetMemoInfo(mi);
m->SetSender(source);
m->SetTime(Anope::CurTime);
m->SetText(message);
m->SetUnread(true);
EventManager::Get()->Dispatch(&MemoServ::Event::MemoSend::OnMemoSend, source, target, mi, m);
if (ischan)
{
ChanServ::Channel *ci = ChanServ::Find(target);
if (ci->c)
{
for (Channel::ChanUserList::iterator it = ci->c->users.begin(), it_end = ci->c->users.end(); it != it_end; ++it)
{
ChanUserContainer *cu = it->second;
if (ci->AccessFor(cu->user).HasPriv("MEMO"))
{
if (cu->user->Account() && cu->user->Account()->HasFieldS("MEMO_RECEIVE"))
cu->user->SendMessage(*MemoServ, _("There is a new memo on channel \002{0}\002. Type \002{1}{2} READ {3} {4}\002 to read it."), ci->GetName(), Config->StrictPrivmsg, MemoServ->nick, ci->GetName(), mi->GetMemos().size()); // XXX
}
}
}
}
else
{
NickServ::Account *nc = NickServ::FindNick(target)->GetAccount();
if (nc->HasFieldS("MEMO_RECEIVE"))
for (User *u : nc->users)
u->SendMessage(*MemoServ, _("You have a new memo from \002{0}\002. Type \002{1}{2} READ {3}\002 to read it."), source, Config->StrictPrivmsg, MemoServ->nick, mi->GetMemos().size());//XXX
/* let's get out the mail if set in the nickcore - certus */
if (nc->HasFieldS("MEMO_MAIL"))
SendMemoMail(nc, mi, m);
}
return MEMO_SUCCESS;
}
开发者ID:dream1986,项目名称:anope,代码行数:67,代码来源:memoserv.cpp
示例15: Execute
void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override
{
const Anope::string &channel = params[0];
ChanServ::Channel *ci = ChanServ::Find(channel);
if (ci == NULL)
{
source.Reply(_("Channel \002{0}\002 isn't registered."), channel);
return;
}
if (!source.AccessFor(ci).HasPriv("SET") && !source.HasOverridePriv("chanserv/administration"))
{
source.Reply(_("Access denied. You do not have privilege \002{0}\002 on \002{1}\002."), "SET", ci->GetName());
return;
}
if (params.size() == 1)
{
std::vector<LogSetting *> ls = ci->GetRefs<LogSetting *>();
if (ls.empty())
{
source.Reply(_("There currently are no logging configurations for \002{0}\002."), ci->GetName());
return;
}
ListFormatter list(source.GetAccount());
list.AddColumn(_("Number")).AddColumn(_("Service")).AddColumn(_("Command")).AddColumn(_("Method")).AddColumn("");
for (unsigned i = 0; i < ls.size(); ++i)
{
LogSetting *log = ls[i];
ListFormatter::ListEntry entry;
entry["Number"] = stringify(i + 1);
entry["Service"] = log->GetCommandService();
entry["Command"] = !log->GetCommandName().empty() ? log->GetCommandName() : log->GetServiceName();
entry["Method"] = log->GetMethod();
entry[""] = log->GetExtra();
list.AddEntry(entry);
}
source.Reply(_("Log list for \002{0}\002:"), ci->GetName());
std::vector<Anope::string> replies;
list.Process(replies);
for (unsigned i = 0; i < replies.size(); ++i)
source.Reply(replies[i]);
}
else if (params.size() > 2)
{
if (Anope::ReadOnly)
{
source.Reply(_("Services are in read-only mode."));
return;
}
const Anope::string &command = params[1];
const Anope::string &method = params[2];
const Anope::string &extra = params.size() > 3 ? params[3] : "";
size_t sl = command.find('/');
if (sl == Anope::string::npos)
{
source.Reply(_("\002{0}\002 is not a valid command."), command);
return;
}
Anope::string service = command.substr(0, sl),
command_name = command.substr(sl + 1);
ServiceBot *bi = ServiceBot::Find(service, true);
Anope::string service_name;
/* Allow either a command name or a service name. */
if (bi && bi->commands.count(command_name))
{
/* Get service name from command */
service_name = bi->commands[command_name].name;
}
else if (ServiceReference<Command>(command.lower()))
{
/* This is the service name, don't use any specific command */
service_name = command;
bi = NULL;
command_name.clear();
}
else
{
source.Reply(_("\002{0}\002 is not a valid command."), command);
return;
}
if (!method.equals_ci("MESSAGE") && !method.equals_ci("NOTICE") && !method.equals_ci("MEMO"))
{
source.Reply(_("\002%s\002 is not a valid logging method."));
return;
}
//.........这里部分代码省略.........
开发者ID:Robby-,项目名称:anope,代码行数:101,代码来源:log.cpp
示例16: Execute
void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override
{
ChannelMode *cm = ModeManager::FindChannelModeByName("BAN");
if (!cm)
return;
std::vector<ChannelMode *> modes = cm->listeners;
modes.push_back(cm);
if (params.empty())
{
if (!source.GetUser())
return;
unsigned count = 0;
for (ChanServ::Channel *ci : source.GetAccount()->GetRefs<ChanServ::Channel *>())
{
if (!ci->c || !source.AccessFor(ci).HasPriv("UNBAN"))
continue;
for (unsigned j = 0; j < modes.size(); ++j)
if (ci->c->Unban(source.GetUser(), modes[j]->name, true))
++count;
}
Log(LOG_COMMAND, source, this, NULL) << "on all channels";
source.Reply(_("You have been unbanned from %d channels."), count);
return;
}
const Anope::string &chan = params[0];
ChanServ::Channel *ci = ChanServ::Find(chan);
if (ci == NULL)
{
source.Reply(_("Channel \002{0}\002 isn't registered."), chan);
return;
}
if (ci->c == NULL)
{
source.Reply(_("Channel \002{0}\002 doesn't exist."), ci->GetName());
return;
}
if (!source.AccessFor(ci).HasPriv("UNBAN") && !source.HasPriv("chanserv/kick"))
{
source.Reply(_("Access denied. You do not have privilege \002{0}\002 on \002{1}\002."), "UNBAN", ci->GetName());
return;
}
User *u2 = source.GetUser();
if (params.size() > 1)
u2 = User::Find(params[1], true);
if (!u2)
{
if (params.size() > 1)
source.Reply(_("User \002{0}\002 isn't currently online."), params[1]);
return;
}
bool override = !source.AccessFor(ci).HasPriv("UNBAN") && source.HasPriv("chanserv/kick");
Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to unban " << u2->nick;
for (unsigned i = 0; i < modes.size(); ++i)
ci->c->Unban(u2, modes[i]->name, source.GetUser() == u2);
if (u2 == source.GetUser())
source.Reply(_("You have been unbanned from \002{0}\002."), ci->c->name);
else
source.Reply(_("\002{0}\002 has been unbanned from \002{1}\002."), u2->nick, ci->c->name);
}
开发者ID:SaberUK,项目名称:anope,代码行数:73,代码来源:unban.cpp
示例17: DoLimit
void DoLimit(CommandSource &source, const std::vector<Anope::string> ¶ms, MemoServ::MemoInfo *mi)
{
Anope::string p1 = params[1];
Anope::string p2 = params.size() > 2 ? params[2] : "";
Anope::string p3 = params.size() > 3 ? params[3] : "";
Anope::string user, chan;
int16_t limit;
NickServ::Account *nc = source.nc;
ChanServ::Channel *ci = NULL;
bool is_servadmin = source.HasPriv("memoserv/set-limit");
if (p1[0] == '#')
{
chan = p1;
p1 = p2;
p2 = p3;
p3 = params.size() > 4 ? params[4] : "";
ci = ChanServ::Find(chan);
if (!ci)
{
source.Reply(_("Channel \002{0}\002 isn't registered."), chan);
return;
}
if (!is_servadmin && !source.AccessFor(ci).HasPriv("MEMO"))
{
source.Reply(_("Access denied. You do not have privilege \002{0}\002 on \002{1}\002."), "MEMO", ci->GetName());
return;
}
mi = ci->GetMemos();
}
if (is_servadmin)
{
if (!p2.empty() && !p2.equals_ci("HARD") && chan.empty())
{
NickServ::Nick *na;
if (!(na = NickServ::FindNick(p1)))
{
source.Reply(_("\002{0}\002 isn't registered."), p1);
return;
}
user = p1;
mi = na->GetAccount()->GetMemos();
nc = na->GetAccount();
p1 = p2;
p2 = p3;
}
else if (p1.empty() || (!p1.is_pos_number_only() && !p1.equals_ci("NONE")) || (!p2.empty() && !p2.equals_ci("HARD")))
{
this->OnSyntaxError(source, "");
return;
}
if (!chan.empty())
{
if (!p2.empty())
ci->SetS<bool>("MEMO_HARDMAX", true);
else
ci->UnsetS<bool>("MEMO_HARDMAX");
}
else
{
if (!p2.empty())
nc->SetS<bool>("MEMO_HARDMAX", true);
else
nc->UnsetS<bool>("MEMO_HARDMAX");
}
limit = -1;
try
{
limit = convertTo<int16_t>(p1);
}
catch (const ConvertException &) { }
}
else
{
if (p1.empty() || !p2.empty() || !isdigit(p1[0]))
{
this->OnSyntaxError(source, "");
return;
}
if (!chan.empty() && ci->HasFieldS("MEMO_HARDMAX"))
{
source.Reply(_("The memo limit for \002{0}\002 may not be changed."), chan);
return;
}
if (chan.empty() && nc->HasFieldS("MEMO_HARDMAX"))
{
source.Reply(_("You are not permitted to change your memo limit."));
return;
}
int max_memos = Config->GetModule("memoserv")->Get<int>("maxmemos");
limit = -1;
try
{
limit = convertTo<int16_t>(p1);
}
catch (const ConvertException &) { }
/* The first character is a digit, but we could still go negative
//.........这里部分代码省略.........
开发者ID:dream1986,项目名称:anope,代码行数:101,代码来源:set.cpp
注:本文中的chanserv::Channel类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论