]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_spanningtree/privmsg.cpp
b9b62ad006df4ad89038b9f950fe2215e85bbb1f
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / privmsg.cpp
1 /*       +------------------------------------+
2  *       | Inspire Internet Relay Chat Daemon |
3  *       +------------------------------------+
4  *
5  *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
6  * See: http://wiki.inspircd.org/Credits
7  *
8  * This program is free but copyrighted software; see
9  *            the file COPYING for details.
10  *
11  * ---------------------------------------------------
12  */
13
14 #include "inspircd.h"
15 #include "xline.h"
16
17 #include "treesocket.h"
18 #include "treeserver.h"
19 #include "utils.h"
20
21 /* $ModDep: m_spanningtree/utils.h m_spanningtree/treeserver.h m_spanningtree/treesocket.h */
22
23
24
25 /** remote MOTD. leet, huh? */
26 bool TreeSocket::ServerMessage(const std::string &messagetype, const std::string &prefix, std::deque<std::string> &params, const std::string &sourceserv)
27 {
28         if (params.size() >= 2)
29         {
30                 CUList except_list;
31                 char status = '\0';
32                 const char* target = params[0].c_str();
33                 std::string text = params[1].c_str();
34
35                 if (ServerInstance->Modes->FindPrefix(*target))
36                 {
37                         status = *target;
38                         target++;
39                 }
40
41                 Channel* channel = ServerInstance->FindChan(target);
42
43                 if (channel)
44                 {
45                         if (messagetype == "PRIVMSG")
46                         {
47                                 FOREACH_MOD_I(ServerInstance, I_OnUserMessage, OnUserMessage(NULL, channel, TYPE_CHANNEL, text, status, except_list));
48                         }
49                         else
50                         {
51                                 FOREACH_MOD_I(ServerInstance, I_OnUserNotice, OnUserNotice(NULL, channel, TYPE_CHANNEL, text, status, except_list));
52                         }
53                         TreeServer* s = Utils->FindServer(prefix);
54                         if (s)
55                         {
56                                 FOREACH_MOD_I(ServerInstance, I_OnText, OnText(NULL, channel, TYPE_CHANNEL, text, status, except_list));
57                                 channel->WriteChannelWithServ(s->GetName().c_str(), "%s %s :%s", messagetype.c_str(), channel->name.c_str(), text.c_str());
58                         }
59                 }
60                 else
61                 {
62                         User* user = ServerInstance->FindNick(target);
63
64                         if (user)
65                         {
66                                 if (messagetype == "PRIVMSG")
67                                 {
68                                         FOREACH_MOD_I(ServerInstance, I_OnUserMessage, OnUserMessage(NULL, user, TYPE_USER, text, 0, except_list));
69                                 }
70                                 else
71                                 {
72                                         FOREACH_MOD_I(ServerInstance, I_OnUserNotice, OnUserNotice(NULL, user, TYPE_USER, text, 0, except_list));
73                                 }
74                                 TreeServer* s = Utils->FindServer(prefix);
75                                 if (s)
76                                 {
77                                         FOREACH_MOD_I(ServerInstance, I_OnText, OnText(NULL, user, TYPE_USER, text, status, except_list));
78                                         user->Write(":%s %s %s :%s", s->GetName().c_str(), messagetype.c_str(), user->nick.c_str(), text.c_str());
79                                 }
80
81                         }
82                 }
83
84                 /* Propogate as channel privmsg */
85                 return Utils->DoOneToAllButSenderRaw(":" + prefix + " " + messagetype + " " + target + " :" + text, sourceserv, prefix, assign(messagetype), params);
86         }
87         return true;
88 }
89