Anope IRC Services  Version 2.0
plexus.cpp
Go to the documentation of this file.
1 /* Plexus 3+ IRCD functions
2  *
3  * (C) 2003-2014 Anope Team
4  * Contact us at team@anope.org
5  *
6  * Please read COPYING and README for further details.
7  *
8  * Based on the original code of Epona by Lara.
9  * Based on the original code of Services by Andy Church.
10  */
11 
12 #include "module.h"
13 
15 
16 static ServiceReference<IRCDProto> hybrid("IRCDProto", "hybrid");
17 
18 class PlexusProto : public IRCDProto
19 {
20  public:
21  PlexusProto(Module *creator) : IRCDProto(creator, "hybrid-7.2.3+plexus-3.0.1")
22  {
23  DefaultPseudoclientModes = "+oiU";
24  CanSVSNick = true;
25  CanSVSJoin = true;
26  CanSetVHost = true;
27  CanSetVIdent = true;
28  CanSNLine = true;
29  CanSQLine = true;
30  CanSQLineChannel = true;
31  CanSVSHold = true;
32  CanCertFP = true;
33  RequiresID = true;
34  MaxModes = 4;
35  }
36 
37  void SendSVSKillInternal(const MessageSource &source, User *targ, const Anope::string &reason) anope_override { hybrid->SendSVSKillInternal(source, targ, reason); }
38  void SendGlobalNotice(BotInfo *bi, const Server *dest, const Anope::string &msg) anope_override { hybrid->SendGlobalNotice(bi, dest, msg); }
39  void SendGlobalPrivmsg(BotInfo *bi, const Server *dest, const Anope::string &msg) anope_override { hybrid->SendGlobalPrivmsg(bi, dest, msg); }
40  void SendSQLine(User *u, const XLine *x) anope_override { hybrid->SendSQLine(u, x); }
41  void SendSQLineDel(const XLine *x) anope_override { hybrid->SendSQLineDel(x); }
42  void SendSGLineDel(const XLine *x) anope_override { hybrid->SendSGLineDel(x); }
43  void SendSGLine(User *u, const XLine *x) anope_override { hybrid->SendSGLine(u, x); }
44  void SendAkillDel(const XLine *x) anope_override { hybrid->SendAkillDel(x); }
45  void SendAkill(User *u, XLine *x) anope_override { hybrid->SendAkill(u, x); }
46  void SendServer(const Server *server) anope_override { hybrid->SendServer(server); }
47  void SendChannel(Channel *c) anope_override { hybrid->SendChannel(c); }
48  void SendSVSHold(const Anope::string &nick, time_t t) anope_override { hybrid->SendSVSHold(nick, t); }
49  void SendSVSHoldDel(const Anope::string &nick) anope_override { hybrid->SendSVSHoldDel(nick); }
50 
52  {
53  UplinkSocket::Message(source) << "OPERWALL :" << buf;
54  }
55 
56  void SendJoin(User *user, Channel *c, const ChannelStatus *status) anope_override
57  {
58  UplinkSocket::Message(Me) << "SJOIN " << c->creation_time << " " << c->name << " +" << c->GetModes(true, true) << " :" << user->GetUID();
59  if (status)
60  {
61  /* First save the channel status incase uc->Status == status */
62  ChannelStatus cs = *status;
63  /* If the user is internally on the channel with flags, kill them so that
64  * the stacker will allow this.
65  */
66  ChanUserContainer *uc = c->FindUser(user);
67  if (uc != NULL)
68  uc->status.Clear();
69 
70  BotInfo *setter = BotInfo::Find(user->GetUID());
71  for (size_t i = 0; i < cs.Modes().length(); ++i)
72  c->SetMode(setter, ModeManager::FindChannelModeByChar(cs.Modes()[i]), user->GetUID(), false);
73 
74  if (uc != NULL)
75  uc->status = cs;
76  }
77  }
78 
79  void SendForceNickChange(User *u, const Anope::string &newnick, time_t when) anope_override
80  {
81  UplinkSocket::Message(Me) << "ENCAP " << u->server->GetName() << " SVSNICK " << u->GetUID() << " " << u->timestamp << " " << newnick << " " << when;
82  }
83 
84  void SendVhost(User *u, const Anope::string &ident, const Anope::string &host) anope_override
85  {
86  if (!ident.empty())
87  UplinkSocket::Message(Me) << "ENCAP * CHGIDENT " << u->GetUID() << " " << ident;
88  UplinkSocket::Message(Me) << "ENCAP * CHGHOST " << u->GetUID() << " " << host;
89  u->SetMode(Config->GetClient("HostServ"), "CLOAK");
90  }
91 
93  {
94  u->RemoveMode(Config->GetClient("HostServ"), "CLOAK");
95  }
96 
98  {
99  UplinkSocket::Message() << "PASS " << Config->Uplinks[Anope::CurrentUplink].password << " TS 6 :" << Me->GetSID();
100  /* CAPAB
101  * QS - Can handle quit storm removal
102  * EX - Can do channel +e exemptions
103  * CHW - Can do channel wall @#
104  * LL - Can do lazy links
105  * IE - Can do invite exceptions
106  * EOB - Can do EOB message
107  * KLN - Can do KLINE message
108  * GLN - Can do GLINE message
109  * HUB - This server is a HUB
110  * AOPS - Can do anon ops (+a)
111  * UID - Can do UIDs
112  * ZIP - Can do ZIPlinks
113  * ENC - Can do ENCrypted links
114  * KNOCK - Supports KNOCK
115  * TBURST - Supports TBURST
116  * PARA - Supports invite broadcasting for +p
117  * ENCAP - Supports encapsulization of protocol messages
118  * SVS - Supports services protocol extensions
119  */
120  UplinkSocket::Message() << "CAPAB :QS EX CHW IE EOB KLN UNKLN GLN HUB KNOCK TBURST PARA ENCAP SVS";
121  /* Make myself known to myself in the serverlist */
122  SendServer(Me);
123  /*
124  * SVINFO
125  * parv[0] = sender prefix
126  * parv[1] = TS_CURRENT for the server
127  * parv[2] = TS_MIN for the server
128  * parv[3] = server is standalone or connected to non-TS only
129  * parv[4] = server's idea of UTC time
130  */
131  UplinkSocket::Message() << "SVINFO 6 5 0 :" << Anope::CurTime;
132  }
133 
135  {
136  Anope::string modes = "+" + u->GetModes();
137  UplinkSocket::Message(Me) << "UID " << u->nick << " 1 " << u->timestamp << " " << modes << " " << u->GetIdent() << " " << u->host << " 255.255.255.255 " << u->GetUID() << " 0 " << u->host << " :" << u->realname;
138  }
139 
140  void SendModeInternal(const MessageSource &source, User *u, const Anope::string &buf) anope_override
141  {
142  UplinkSocket::Message(source) << "ENCAP * SVSMODE " << u->GetUID() << " " << u->timestamp << " " << buf;
143  }
144 
146  {
147  UplinkSocket::Message(Me) << "ENCAP * SU " << u->GetUID() << " " << na->nc->display;
148  }
149 
151  {
152  UplinkSocket::Message(Me) << "ENCAP * SU " << u->GetUID();
153  }
154 
156  {
157  UplinkSocket::Message(source) << "ENCAP * TOPIC " << c->name << " " << c->topic_setter << " " << c->topic_ts << " :" << c->topic;
158  }
159 
160  void SendSVSJoin(const MessageSource &source, User *user, const Anope::string &chan, const Anope::string &param) anope_override
161  {
162  UplinkSocket::Message(source) << "ENCAP " << user->server->GetName() << " SVSJOIN " << user->GetUID() << " " << chan;
163  }
164 
165  void SendSVSPart(const MessageSource &source, User *user, const Anope::string &chan, const Anope::string &param) anope_override
166  {
167  UplinkSocket::Message(source) << "ENCAP " << user->server->GetName() << " SVSPART " << user->GetUID() << " " << chan;
168  }
169 };
170 
172 {
174 
175  void Run(MessageSource &source, const std::vector<Anope::string> &params) anope_override
176  {
177  /*
178  * Received: :dev.anope.de ENCAP * SU DukePyrolator DukePyrolator
179  * params[0] = *
180  * params[1] = SU
181  * params[2] = nickname
182  * params[3] = account
183  */
184  if (params[1].equals_cs("SU"))
185  {
186  User *u = User::Find(params[2]);
187  NickCore *nc = NickCore::Find(params[3]);
188  if (u && nc)
189  {
190  u->Login(nc);
191  }
192  }
193 
194  /*
195  * Received: :dev.anope.de ENCAP * CERTFP DukePyrolator :3F122A9CC7811DBAD3566BF2CEC3009007C0868F
196  * params[0] = *
197  * params[1] = CERTFP
198  * params[2] = nickname
199  * params[3] = fingerprint
200  */
201  else if (params[1].equals_cs("CERTFP"))
202  {
203  User *u = User::Find(params[2]);
204  if (u)
205  {
206  u->fingerprint = params[3];
207  FOREACH_MOD(OnFingerprint, (u));
208  }
209  }
210  return;
211  }
212 };
213 
215 {
217 
218  void Run(MessageSource &source, const std::vector<Anope::string> &params) anope_override
219  {
220  UplinkSID = params[3];
221  }
222 };
223 
225 {
227 
228  /* 0 1 2 */
229  /* SERVER hades.arpa 1 :ircd-hybrid test server */
230  void Run(MessageSource &source, const std::vector<Anope::string> &params) anope_override
231  {
232  /* Servers other than our immediate uplink are introduced via SID */
233  if (params[1] != "1")
234  return;
235 
236  new Server(source.GetServer() == NULL ? Me : source.GetServer(), params[0], 1, params[2], UplinkSID);
237  }
238 };
239 
241 {
243 
244  /*
245  params[0] = nick
246  params[1] = hop
247  params[2] = ts
248  params[3] = modes
249  params[4] = user
250  params[5] = host
251  params[6] = IP
252  params[7] = UID
253  params[8] = services stamp
254  params[9] = realhost
255  params[10] = info
256  */
257  // :42X UID Adam 1 1348535644 +aow Adam 192.168.0.5 192.168.0.5 42XAAAAAB 0 192.168.0.5 :Adam
258  void Run(MessageSource &source, const std::vector<Anope::string> &params) anope_override
259  {
260  /* An IP of 0 means the user is spoofed */
261  Anope::string ip = params[6];
262  if (ip == "0")
263  ip.clear();
264 
265  time_t ts;
266  try
267  {
268  ts = convertTo<time_t>(params[2]);
269  }
270  catch (const ConvertException &)
271  {
272  ts = Anope::CurTime;
273  }
274 
275  NickAlias *na = NULL;
276  try
277  {
278  if (params[8].is_pos_number_only() && convertTo<time_t>(params[8]) == ts)
279  na = NickAlias::Find(params[0]);
280  }
281  catch (const ConvertException &) { }
282  if (params[8] != "0" && !na)
283  na = NickAlias::Find(params[8]);
284 
285  User::OnIntroduce(params[0], params[4], params[9], params[5], ip, source.GetServer(), params[10], ts, params[3], params[7], na ? *na->nc : NULL);
286  }
287 };
288 
289 class ProtoPlexus : public Module
290 {
292 
294 
295  /* Core message handlers */
315 
316  /* Hybrid message handlers */
319 
320  /* Our message handlers */
325 
326  void AddModes()
327  {
328  /* Add user modes */
329  ModeManager::AddUserMode(new UserModeOperOnly("ADMIN", 'a'));
330  ModeManager::AddUserMode(new UserMode("NOCTCP", 'C'));
331  ModeManager::AddUserMode(new UserMode("DEAF", 'D'));
332  ModeManager::AddUserMode(new UserMode("SOFTCALLERID", 'G'));
333  ModeManager::AddUserMode(new UserMode("CALLERID", 'g'));
334  ModeManager::AddUserMode(new UserMode("INVIS", 'i'));
335  ModeManager::AddUserMode(new UserModeOperOnly("LOCOPS", 'l'));
336  ModeManager::AddUserMode(new UserModeOperOnly("OPER", 'o'));
337  ModeManager::AddUserMode(new UserModeOperOnly("NETADMIN", 'N'));
338  ModeManager::AddUserMode(new UserMode("PRIV", 'p'));
339  ModeManager::AddUserMode(new UserModeOperOnly("ROUTING", 'q'));
340  ModeManager::AddUserMode(new UserModeNoone("REGISTERED", 'r'));
341  ModeManager::AddUserMode(new UserMode("REGPRIV", 'R'));
342  ModeManager::AddUserMode(new UserModeOperOnly("SNOMASK", 's'));
343  ModeManager::AddUserMode(new UserModeNoone("SSL", 'S'));
344  ModeManager::AddUserMode(new UserMode("WALLOPS", 'w'));
345  ModeManager::AddUserMode(new UserModeNoone("WEBIRC", 'W'));
346  ModeManager::AddUserMode(new UserMode("CLOAK", 'x'));
347  ModeManager::AddUserMode(new UserModeOperOnly("OPERWALLS", 'z'));
348 
349  /* b/e/I */
351  ModeManager::AddChannelMode(new ChannelModeList("EXCEPT", 'e'));
352  ModeManager::AddChannelMode(new ChannelModeList("INVITEOVERRIDE", 'I'));
353  ModeManager::AddUserMode(new UserModeNoone("PROTECTED", 'U'));
354 
355  /* v/h/o/a/q */
356  ModeManager::AddChannelMode(new ChannelModeStatus("VOICE", 'v', '+', 0));
357  ModeManager::AddChannelMode(new ChannelModeStatus("HALFOP", 'h', '%', 1));
358  ModeManager::AddChannelMode(new ChannelModeStatus("OP", 'o', '@', 2));
359  ModeManager::AddChannelMode(new ChannelModeStatus("PROTECT", 'a', '&', 3));
360  ModeManager::AddChannelMode(new ChannelModeStatus("OWNER", 'q', '~', 4));
361 
362  /* l/k */
363  ModeManager::AddChannelMode(new ChannelModeParam("LIMIT", 'l', true));
365 
366  /* Add channel modes */
367  ModeManager::AddChannelMode(new ChannelMode("BANDWIDTH", 'B'));
368  ModeManager::AddChannelMode(new ChannelMode("NOCTCP", 'C'));
369  ModeManager::AddChannelMode(new ChannelMode("BLOCKCOLOR", 'c'));
370  ModeManager::AddChannelMode(new ChannelMode("INVITE", 'i'));
371  ModeManager::AddChannelMode(new ChannelMode("MODERATED", 'm'));
372  ModeManager::AddChannelMode(new ChannelMode("REGMODERATED", 'M'));
373  ModeManager::AddChannelMode(new ChannelMode("NOEXTERNAL", 'n'));
374  ModeManager::AddChannelMode(new ChannelMode("NONOTICE", 'N'));
375  ModeManager::AddChannelMode(new ChannelMode("PRIVATE", 'p'));
376  ModeManager::AddChannelMode(new ChannelMode("SECRET", 's'));
377  ModeManager::AddChannelMode(new ChannelMode("TOPIC", 't'));
378  ModeManager::AddChannelMode(new ChannelModeOperOnly("OPERONLY", 'O'));
379  ModeManager::AddChannelMode(new ChannelMode("REGMODERATED", 'M'));
380  ModeManager::AddChannelMode(new ChannelMode("REGISTEREDONLY", 'R'));
381  ModeManager::AddChannelMode(new ChannelMode("SSL", 'S'));
382  ModeManager::AddChannelMode(new ChannelMode("PERM", 'z'));
383  }
384 
385  public:
386  ProtoPlexus(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, PROTOCOL | VENDOR),
387  ircd_proto(this),
388  message_away(this), message_capab(this), message_error(this), message_invite(this), message_kick(this), message_kill(this),
389  message_mode(this), message_motd(this), message_notice(this), message_part(this), message_ping(this), message_privmsg(this),
390  message_quit(this), message_squit(this), message_stats(this), message_time(this), message_topic(this), message_version(this),
391  message_whois(this),
392 
393  message_bmask("IRCDMessage", "plexus/bmask", "hybrid/bmask"), message_eob("IRCDMessage", "plexus/eob", "hybrid/eob"),
394  message_join("IRCDMessage", "plexus/join", "hybrid/join"), message_nick("IRCDMessage", "plexus/nick", "hybrid/nick"),
395  message_sid("IRCDMessage", "plexus/sid", "hybrid/sid"),
396  message_sjoin("IRCDMessage", "plexus/sjoin", "hybrid/sjoin"), message_tburst("IRCDMessage", "plexus/tburst", "hybrid/tburst"),
397  message_tmode("IRCDMessage", "plexus/tmode", "hybrid/tmode"),
398 
399  message_encap(this), message_pass(this), message_server(this), message_uid(this)
400  {
401 
402  if (ModuleManager::LoadModule("hybrid", User::Find(creator)) != MOD_ERR_OK)
403  throw ModuleException("Unable to load hybrid");
404  m_hybrid = ModuleManager::FindModule("hybrid");
405  if (!m_hybrid)
406  throw ModuleException("Unable to find hybrid");
407  if (!hybrid)
408  throw ModuleException("No protocol interface for hybrid");
409 
410  this->AddModes();
411  }
412 
414  {
415  m_hybrid = ModuleManager::FindModule("hybrid");
416  ModuleManager::UnloadModule(m_hybrid, NULL);
417  }
418 };
419 
Serialize::Reference< NickCore > nc
Definition: account.h:47
Definition: bots.h:24
void SendSVSPart(const MessageSource &source, User *user, const Anope::string &chan, const Anope::string &param) anope_override
Definition: plexus.cpp:165
Message::Capab message_capab
Definition: plexus.cpp:297
static NickAlias * Find(const Anope::string &nick)
Definition: nickalias.cpp:121
ProtoPlexus(const Anope::string &modname, const Anope::string &creator)
Definition: plexus.cpp:386
Definition: servers.h:42
void SendJoin(User *user, Channel *c, const ChannelStatus *status) anope_override
Definition: plexus.cpp:56
Message::Kick message_kick
Definition: plexus.cpp:300
IRCDMessageServer(Module *creator)
Definition: plexus.cpp:226
Message::SQuit message_squit
Definition: plexus.cpp:309
IRCDMessageServer message_server
Definition: plexus.cpp:323
bool CanSNLine
Definition: protocol.h:55
static Module * FindModule(const Anope::string &name)
bool CanSQLineChannel
Definition: protocol.h:59
Message::Privmsg message_privmsg
Definition: plexus.cpp:307
Message::Version message_version
Definition: plexus.cpp:313
IRCDMessageEncap message_encap
Definition: plexus.cpp:321
void clear()
Definition: anope.h:187
void Run(MessageSource &source, const std::vector< Anope::string > &params) anope_override
Definition: plexus.cpp:258
ServiceAlias message_eob
Definition: plexus.cpp:317
void SetMode(BotInfo *bi, UserMode *um, const Anope::string &param="")
Definition: users.cpp:573
Message::MOTD message_motd
Definition: plexus.cpp:303
ServiceAlias message_sjoin
Definition: plexus.cpp:317
void SendSVSHoldDel(const Anope::string &nick) anope_override
Definition: plexus.cpp:49
void SendSQLine(User *u, const XLine *x) anope_override
Definition: plexus.cpp:40
void Run(MessageSource &source, const std::vector< Anope::string > &params) anope_override
Definition: plexus.cpp:230
Anope::string fingerprint
Definition: users.h:73
void SendServer(const Server *server) anope_override
Definition: plexus.cpp:46
static ModuleReturn UnloadModule(Module *m, User *u)
void Run(MessageSource &source, const std::vector< Anope::string > &params) anope_override
Definition: plexus.cpp:175
Message::Stats message_stats
Definition: plexus.cpp:310
const Anope::string & GetSID() const
Definition: servers.cpp:203
ServiceAlias message_tburst
Definition: plexus.cpp:317
static User * OnIntroduce(const Anope::string &snick, const Anope::string &sident, const Anope::string &shost, const Anope::string &svhost, const Anope::string &sip, Server *sserver, const Anope::string &srealname, time_t ts, const Anope::string &smodes, const Anope::string &suid, NickCore *nc)
Definition: users.cpp:116
void SendSVSKillInternal(const MessageSource &source, User *targ, const Anope::string &reason) anope_override
Definition: plexus.cpp:37
Definition: users.h:34
void SendSGLineDel(const XLine *x) anope_override
Definition: plexus.cpp:42
static ServiceReference< IRCDProto > hybrid("IRCDProto","hybrid")
Anope::string DefaultPseudoclientModes
Definition: protocol.h:47
Message::Whois message_whois
Definition: plexus.cpp:314
ServiceAlias message_nick
Definition: plexus.cpp:317
void SendClientIntroduction(User *u) anope_override
Definition: plexus.cpp:134
Message::Part message_part
Definition: plexus.cpp:305
void SendForceNickChange(User *u, const Anope::string &newnick, time_t when) anope_override
Definition: plexus.cpp:79
ServiceAlias message_tmode
Definition: plexus.cpp:317
bool CanSetVHost
Definition: protocol.h:53
void SendTopic(const MessageSource &source, Channel *c) anope_override
Definition: plexus.cpp:155
Module * m_hybrid
Definition: plexus.cpp:291
bool RequiresID
Definition: protocol.h:69
CoreExport time_t CurTime
Definition: main.cpp:41
void SendGlobalPrivmsg(BotInfo *bi, const Server *dest, const Anope::string &msg) anope_override
Definition: plexus.cpp:39
Message::Time message_time
Definition: plexus.cpp:311
#define FOREACH_MOD(ename, args)
Definition: modules.h:62
void SendLogin(User *u, NickAlias *na) anope_override
Definition: plexus.cpp:145
Message::Error message_error
Definition: plexus.cpp:298
IRCDMessagePass(Module *creator)
Definition: plexus.cpp:216
IRCDMessagePass message_pass
Definition: plexus.cpp:322
bool CanSetVIdent
Definition: protocol.h:53
size_type length() const
Definition: anope.h:131
bool CanSQLine
Definition: protocol.h:57
ServiceAlias message_sid
Definition: plexus.cpp:317
Definition: Config.cs:26
bool CanSVSNick
Definition: protocol.h:49
bool CanCertFP
Definition: protocol.h:67
Message::Away message_away
Definition: plexus.cpp:296
unsigned MaxModes
Definition: protocol.h:73
void SendSVSJoin(const MessageSource &source, User *user, const Anope::string &chan, const Anope::string &param) anope_override
Definition: plexus.cpp:160
void Run(MessageSource &source, const std::vector< Anope::string > &params) anope_override
Definition: plexus.cpp:218
static bool AddUserMode(UserMode *um)
Definition: modes.cpp:391
void SendAkillDel(const XLine *x) anope_override
Definition: plexus.cpp:44
void SetFlag(IRCDMessageFlag f)
Definition: protocol.h:282
void SendSVSHold(const Anope::string &nick, time_t t) anope_override
Definition: plexus.cpp:48
ServiceAlias message_join
Definition: plexus.cpp:317
void SendSQLineDel(const XLine *x) anope_override
Definition: plexus.cpp:41
Definition: modes.h:68
PlexusProto ircd_proto
Definition: plexus.cpp:293
static ChannelMode * FindChannelModeByChar(char mode)
Definition: modes.cpp:524
void SendModeInternal(const MessageSource &source, User *u, const Anope::string &buf) anope_override
Definition: plexus.cpp:140
static Anope::map< std::pair< bool, Anope::string > > modes
Definition: cs_mode.cpp:745
Message::Ping message_ping
Definition: plexus.cpp:306
#define anope_override
Definition: services.h:56
Message::Quit message_quit
Definition: plexus.cpp:308
#define MODULE_INIT(x)
Definition: modules.h:45
static Anope::string UplinkSID
Definition: plexus.cpp:14
void SendVhost(User *u, const Anope::string &ident, const Anope::string &host) anope_override
Definition: plexus.cpp:84
bool CanSVSHold
Definition: protocol.h:63
ChannelStatus status
Definition: channels.h:28
void Login(NickCore *core)
Definition: users.cpp:391
CoreExport int CurrentUplink
Definition: main.cpp:43
Message::Topic message_topic
Definition: plexus.cpp:312
void SendGlobalNotice(BotInfo *bi, const Server *dest, const Anope::string &msg) anope_override
Definition: plexus.cpp:38
static User * Find(const Anope::string &name, bool nick_only=false)
Definition: users.cpp:815
void Clear()
Definition: modes.cpp:91
static bool AddChannelMode(ChannelMode *cm)
Definition: modes.cpp:418
static ModuleReturn LoadModule(const Anope::string &modname, User *u)
~ProtoPlexus()
Definition: plexus.cpp:413
Definition: xline.h:18
Message::Notice message_notice
Definition: plexus.cpp:304
PlexusProto(Module *creator)
Definition: plexus.cpp:21
void SendVhostDel(User *u) anope_override
Definition: plexus.cpp:92
void SendLogout(User *u) anope_override
Definition: plexus.cpp:150
IRCDMessageUID message_uid
Definition: plexus.cpp:324
CoreExport Server * Me
Definition: servers.cpp:24
const Anope::string & Modes() const
Definition: modes.cpp:96
ServiceAlias message_bmask
Definition: plexus.cpp:317
Message::Invite message_invite
Definition: plexus.cpp:299
bool CanSVSJoin
Definition: protocol.h:51
void SendConnect() anope_override
Definition: plexus.cpp:97
void SendAkill(User *u, XLine *x) anope_override
Definition: plexus.cpp:45
IRCDMessageEncap(Module *creator)
Definition: plexus.cpp:173
IRCDMessageUID(Module *creator)
Definition: plexus.cpp:242
void SendGlobopsInternal(const MessageSource &source, const Anope::string &buf) anope_override
Definition: plexus.cpp:51
void SendSGLine(User *u, const XLine *x) anope_override
Definition: plexus.cpp:43
void AddModes()
Definition: plexus.cpp:326
static NickCore * Find(const Anope::string &nick)
Definition: nickcore.cpp:258
static BotInfo * Find(const Anope::string &nick, bool nick_only=false)
Definition: bots.cpp:249
Message::Mode message_mode
Definition: plexus.cpp:302
void SendChannel(Channel *c) anope_override
Definition: plexus.cpp:47
Message::Kill message_kill
Definition: plexus.cpp:301