map/links/permission denied/unknown command errors shown
[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 if (args.target && (args.msg)) {
26 irc_connection.write('PRIVMSG ' + args.target + ' :' + args.msg, callback);
27 }
28 },
29
30
31 CTCP: function (args, irc_connection, callback) {
32 if ((args.target) && (args.type)) {
33 if (args.request) {
34 irc_connection.write('PRIVMSG ' + args.target + ' :' + String.fromCharCode(1) + args.type.toUpperCase() + ' ' + args.params + String.fromCharCode(1), callback);
35 } else {
36 irc_connection.write('NOTICE ' + args.target + ' :' + String.fromCharCode(1) + args.type.toUpperCase() + ' ' + args.params + String.fromCharCode(1), callback);
37 }
38 }
39 },
40
41
42 RAW: function (args, irc_connection, callback) {
43 irc_connection.write(args.data, callback);
44 },
45
46
47 JOIN: function (args, irc_connection, callback) {
48 if (args.channel) {
49 channels = args.channel.split(",");
50 keys = (args.key) ? args.key.split(",") : [];
51 _.each(channels, function (chan, index) {
52 irc_connection.write('JOIN ' + chan + ' ' + (keys[index] || ''), callback);
53 });
54 }
55 },
56
57
58 PART: function (args, irc_connection, callback) {
59 if (args.channel) {
60 _.each(args.channel.split(","), function (chan) {
61 irc_connection.write('PART ' + chan, callback);
62 });
63 }
64 },
65
66
67 TOPIC: function (args, irc_connection, callback) {
68 if (args.channel) {
69 if (args.topic) {
70 irc_connection.write('TOPIC ' + args.channel + ' :' + args.topic, callback);
71 } else {
72 irc_connection.write('TOPIC ' + args.channel, callback);
73 }
74 }
75 },
76
77
78 KICK: function (args, irc_connection, callback) {
79 if ((args.channel) && (args.nick)) {
80 irc_connection.write('KICK ' + args.channel + ' ' + args.nick + ':' + args.reason, callback);
81 }
82 },
83
84
85 QUIT: function (args, irc_connection, callback) {
86 websocket.ircConnection.end('QUIT :' + args.message + '\r\n');
87 websocket.sentQUIT = true;
88 websocket.ircConnection.destroySoon();
89 websocket.disconnect();
90 },
91
92
93 NOTICE: function (args, irc_connection, callback) {
94 if ((args.target) && (args.msg)) {
95 irc_connection.write('NOTICE ' + args.target + ' :' + args.msg, callback);
96 }
97 },
98
99
100 MODE: function (args, irc_connection, callback) {
101 if ((args.target) && (args.mode)) {
102 irc_connection.write('MODE ' + args.target + ' ' + args.mode + ' ' + args.params, callback);
103 }
104 },
105
106
107 NICK: function (args, irc_connection, callback) {
108 if (args.nick) {
109 irc_connection.write('NICK ' + args.nick, callback);
110 }
111 },
112
113
114 KIWI: function (args, irc_connection, callback) {
115 if ((args.target) && (args.data)) {
116 irc_connection.write('PRIVMSG ' + args.target + ': ' + String.fromCharCode(1) + 'KIWI ' + args.data + String.fromCharCode(1), callback);
117 }
118 }
119 };