Rename 'plugins' to 'modules'
[KiwiIRC.git] / server / clientcommands.js
1 var _ = require('lodash');
2
3
4
5
6 var ClientCommands = function (client) {
7 this.client = client;
8 };
9 module.exports = ClientCommands;
10
11 ClientCommands.prototype.run = function (command, args, irc_connection, callback) {
12 // Do we have a function to handle this command?
13 if (!listeners[command.toUpperCase()]) {
14 return;
15 }
16
17 return listeners[command.toUpperCase()](args, irc_connection, callback);
18 };
19
20
21
22
23 var listeners = {
24 PRIVMSG: function (args, irc_connection, callback) {
25 var data = {};
26 data.args = args;
27 data.client = null;
28
29 global.modules.emit('client:commands:msg', data);
30
31 if (args.target && (args.msg)) {
32 // TODO: Enable plugin support here again
33 //obj = kiwi.kiwi_mod.run('msgsend', args, {websocket: websocket});
34 //if (obj !== null) {
35 irc_connection.write('PRIVMSG ' + args.target + ' :' + args.msg, callback);
36 //}
37 }
38 },
39
40
41 CTCP: function (args, irc_connection, callback) {
42 if ((args.target) && (args.type)) {
43 if (args.request) {
44 irc_connection.write('PRIVMSG ' + args.target + ' :' + String.fromCharCode(1) + args.type.toUpperCase() + ' ' + args.params + String.fromCharCode(1), callback);
45 } else {
46 irc_connection.write('NOTICE ' + args.target + ' :' + String.fromCharCode(1) + args.type.toUpperCase() + ' ' + args.params + String.fromCharCode(1), callback);
47 }
48 }
49 },
50
51
52 RAW: function (args, irc_connection, callback) {
53 irc_connection.write(args.data, callback);
54 },
55
56
57 JOIN: function (args, irc_connection, callback) {
58 if (args.channel) {
59 channels = args.channel.split(",");
60 keys = (args.key) ? args.key.split(",") : [];
61 _.each(channels, function (chan, index) {
62 irc_connection.write('JOIN ' + chan + ' ' + (keys[index] || ''), callback);
63 });
64 }
65 },
66
67
68 PART: function (args, irc_connection, callback) {
69 if (args.channel) {
70 _.each(args.channel.split(","), function (chan) {
71 irc_connection.write('PART ' + chan, callback);
72 });
73 }
74 },
75
76
77 TOPIC: function (args, irc_connection, callback) {
78 if (args.channel) {
79 if (args.topic) {
80 irc_connection.write('TOPIC ' + args.channel + ' :' + args.topic, callback);
81 } else {
82 irc_connection.write('TOPIC ' + args.channel, callback);
83 }
84 }
85 },
86
87
88 KICK: function (args, irc_connection, callback) {
89 if ((args.channel) && (args.nick)) {
90 irc_connection.write('KICK ' + args.channel + ' ' + args.nick + ':' + args.reason, callback);
91 }
92 },
93
94
95 QUIT: function (args, irc_connection, callback) {
96 websocket.ircConnection.end('QUIT :' + args.message + '\r\n');
97 websocket.sentQUIT = true;
98 websocket.ircConnection.destroySoon();
99 websocket.disconnect();
100 },
101
102
103 NOTICE: function (args, irc_connection, callback) {
104 if ((args.target) && (args.msg)) {
105 irc_connection.write('NOTICE ' + args.target + ' :' + args.msg, callback);
106 }
107 },
108
109
110 MODE: function (args, irc_connection, callback) {
111 if ((args.target) && (args.mode)) {
112 irc_connection.write('MODE ' + args.target + ' ' + args.mode + ' ' + args.params, callback);
113 }
114 },
115
116
117 NICK: function (args, irc_connection, callback) {
118 if (args.nick) {
119 irc_connection.write('NICK ' + args.nick, callback);
120 }
121 },
122
123
124 KIWI: function (args, irc_connection, callback) {
125 if ((args.target) && (args.data)) {
126 irc_connection.write('PRIVMSG ' + args.target + ': ' + String.fromCharCode(1) + 'KIWI ' + args.data + String.fromCharCode(1), callback);
127 }
128 }
129 };