· 8 years ago · Jan 06, 2018, 07:10 AM
1function BotCommand(command, min_argument_count, min_level_required, cmd_function, allow_in_channel, usage_text, cmd_help_text)
2{
3 this.command = command;
4 this.min_argument_count = min_argument_count;
5 this.min_level_required = min_level_required;
6 this.cmd_function = cmd_function;
7 this.cmd_help_text = cmd_help_text;
8 this.allow_in_channel = allow_in_channel;
9 this.usage_text = usage_text;
10}
11
12function BotTest(myName, channel_command_prefix)
13{
14 this.me = myName;
15 this.timercount = 0;
16
17 this.botfunctions = [];
18
19 var self = this;
20
21 this.chancmd_prefix = channel_command_prefix;
22
23 this.onRegistered = function(connection)
24 {
25 //bot is online, registered and ready to initiate bot/user supplied IRC commands and operations.
26 Msg(connection, "NickServ", "IDENTIFY <passwd>");
27 Join(connection, "#IRCFreakz.Client");
28 Msg(connection, "#IRCFreakz.Client", "Autoboot: this was triggered on onRegistered(), identify to nickserv, join this channel, and send this message!");
29
30 /* join all channels in channel database */
31 var channel_database_list = ini.getAllSections("botchannels.ini");
32
33 for(p=0; p < channel_database_list.Length; p++)
34 {
35 var channel_name = "#" + channel_database_list[p]["Name"];
36 Join(connection, channel_name);
37 }
38
39 return;
40 }
41
42 this.onChannelMessage = function(connection, channel, message_from, message)
43 {
44 if(param(message, 1).substring(0, 1) == self.chancmd_prefix)
45 {
46 var arguments = params(message, 2);
47 if(arguments == '' || arguments == null || arguments == 'undefined')
48 arguments = '';
49
50 self.parseCommand(connection, message_from.Nickname, null, null, param(message, 1).substring(1, param(message, 1).length), arguments, true, channel);
51 }
52
53 return;
54 }
55
56 this.onPrivateMessage = function(connection, from_nick, from_userid, from_host, message)
57 {
58 var arguments = params(message, 2);
59
60 if(arguments == '' || arguments == null || arguments == 'undefined')
61 arguments = '';
62
63 self.parseCommand(connection, from_nick, from_userid, from_host, param(message, 1), arguments, false, null);
64
65 return;
66 }
67
68 this.onPartChannel = function(connection, channel, member, reason)
69 {
70 var chan_name = channel.Name.substring(1, channel.Name.length);
71 var onPart_PrivNotice = ini.read(INIDataType.String, "botchannels.ini", chan_name, "onpart_private_notice");
72 var onPart_ChanNotice = ini.read(INIDataType.String, "botchannels.ini", chan_name, "onpart_channel_notice");
73 var onPart_PrivMsg = ini.read(INIDataType.String, "botchannels.ini", chan_name, "onpart_private_msg");
74 var onPart_ChanMsg = ini.read(INIDataType.String, "botchannels.ini", chan_name, "onpart_channel_msg");
75
76 onPart_PrivNotice = onPart_PrivNotice.replace("%nickname%", member.Nickname);
77 onPart_PrivNotice = onPart_PrivNotice.replace("%reason%", reason);
78 onPart_PrivNotice = onPart_PrivNotice.replace("%channel%", channel.Name);
79
80 onPart_ChanNotice = onPart_ChanNotice.replace("%nickname%", member.Nickname);
81 onPart_ChanNotice = onPart_ChanNotice.replace("%reason%", reason);
82 onPart_ChanNotice = onPart_ChanNotice.replace("%channel%", channel.Name);
83
84 onPart_PrivMsg = onPart_PrivMsg.replace("%nickname%", member.Nickname);
85 onPart_PrivMsg = onPart_PrivMsg.replace("%reason%", reason);
86 onPart_PrivMsg = onPart_PrivMsg.replace("%channel%", channel.Name);
87
88 onPart_ChanMsg = onPart_ChanMsg.replace("%nickname%", member.Nickname);
89 onPart_ChanMsg = onPart_ChanMsg.replace("%reason%", reason);
90 onPart_ChanMsg = onPart_ChanMsg.replace("%channel%", channel.Name);
91
92
93 if(onPart_PrivNotice != "" && onPart_PrivNotice != null)
94 Notice(connection, member.Nickname, onPart_PrivNotice);
95
96 if(onPart_ChanNotice != "" && onPart_ChanNotice != null)
97 Notice(connection, channel.Name, onPart_ChanNotice);
98
99 if(onPart_PrivMsg != "" && onPart_PrivMsg != null)
100 Msg(connection, member.Nickname, onPart_PrivMsg);
101
102 if(onPart_ChanMsg != "" && onPart_ChanMsg != null)
103 Msg(connection, channel.Name, onPart_ChanMsg);
104
105
106 //Msg(connection, channel.Name, "Good riddance to " + member.Nickname + ", 'dont let the door hit ya where the good lord split ya!', mutters, *" + reason + "* isn't a good reason to leave " + channel.Name + " like that.");
107 return;
108 }
109
110 this.onJoinChannel = function(connection, channel, member)
111 {
112 var me = engine.getMe(connection);
113
114 //make sure it isnt me joining the channel!
115 if(me.Nickname != member.Nickname)
116 {
117 var chan_members = "";
118 for(t=0; t<channel.ChannelMembers.Count; t++)
119 {
120 var cmember = channel.ChannelMembers[t];
121
122 if(cmember.Nickname != member.Nickname)
123 {
124 if(t==0)
125 {
126 chan_members = cmember.Nickname;
127 }
128 else
129 {
130 chan_members = chan_members + ", " + cmember.Nickname;
131 }
132 }
133 }
134
135 var chan_name = channel.Name.substring(1, channel.Name.length);
136 var onJoin_PrivNotice = ini.read(INIDataType.String, "botchannels.ini", chan_name, "onjoin_private_notice");
137 var onJoin_ChanNotice = ini.read(INIDataType.String, "botchannels.ini", chan_name, "onjoin_channel_notice");
138 var onJoin_PrivMsg = ini.read(INIDataType.String, "botchannels.ini", chan_name, "onjoin_private_msg");
139 var onJoin_ChanMsg = ini.read(INIDataType.String, "botchannels.ini", chan_name, "onjoin_channel_msg");
140
141 onJoin_PrivNotice = onJoin_PrivNotice.replace("%nickname%", member.Nickname);
142 onJoin_PrivNotice = onJoin_PrivNotice.replace("%members%", chan_members);
143 onJoin_PrivNotice = onJoin_PrivNotice.replace("%channel%", channel.Name);
144 onJoin_PrivNotice = onJoin_PrivNotice.replace("%membercount%", channel.ChannelMembers.Count);
145
146 onJoin_ChanNotice = onJoin_ChanNotice.replace("%nickname%", member.Nickname);
147 onJoin_ChanNotice = onJoin_ChanNotice.replace("%members%", chan_members);
148 onJoin_ChanNotice = onJoin_ChanNotice.replace("%channel%", channel.Name);
149 onJoin_ChanNotice = onJoin_ChanNotice.replace("%membercount%", channel.ChannelMembers.Count);
150
151 onJoin_PrivMsg = onJoin_PrivMsg.replace("%nickname%", member.Nickname);
152 onJoin_PrivMsg = onJoin_PrivMsg.replace("%members%", chan_members);
153 onJoin_PrivMsg = onJoin_PrivMsg.replace("%channel%", channel.Name);
154 onJoin_PrivMsg = onJoin_PrivMsg.replace("%membercount%", channel.ChannelMembers.Count);
155
156 onJoin_ChanMsg = onJoin_ChanMsg.replace("%nickname%", member.Nickname);
157 onJoin_ChanMsg = onJoin_ChanMsg.replace("%members%", chan_members);
158 onJoin_ChanMsg = onJoin_ChanMsg.replace("%channel%", channel.Name);
159 onJoin_ChanMsg = onJoin_ChanMsg.replace("%membercount%", channel.ChannelMembers.Count);
160
161 if(onJoin_PrivNotice != "" && onJoin_PrivNotice != null)
162 Notice(connection, member.Nickname, onJoin_PrivNotice);
163
164 if(onJoin_ChanNotice != "" && onJoin_ChanNotice != null)
165 Notice(connection, channel.Name, onJoin_ChanNotice);
166
167 if(onJoin_PrivMsg != "" && onJoin_PrivMsg != null)
168 Msg(connection, member.Nickname, onJoin_PrivMsg);
169
170 if(onJoin_ChanMsg != "" && onJoin_ChanMsg != null)
171 Msg(connection, channel.Name, onJoin_ChanMsg);
172
173 return;
174 }
175
176 return;
177 }
178
179 this.parseCommand = function(connection, from_nick, from_userid, from_host, command, arguments, issued_in_channel, channel)
180 {
181
182 var user_access_level = ini.read(INIDataType.Integer, "botusers.ini", from_nick, "level");
183 var is_user_identified = ini.read(INIDataType.Boolean, "botusers.ini", from_nick, "is_id");
184
185 if(is_user_identified == "") { is_user_identified = false; }
186 if(user_access_level == "") { user_access_level = 0; }
187
188 for(t=0; t<this.botfunctions.length; t++)
189 {
190
191 var botcmd = this.botfunctions[t];
192
193 if(botcmd.command.toLowerCase() == command.toLowerCase())
194 {
195 //found command
196
197 if(botcmd.allow_in_channel != true && issued_in_channel == true)
198 {
199 Notice(connection, from_nick, "You cannot use the command '" + command + "' in channel, it MUST be private messaged to me.");
200 return;
201 }
202
203 if(botcmd.min_level_required > 0 && is_user_identified != true)
204 {
205 Notice(connection, from_nick, "You have not identified, please use /msg <botnick> identify <yourpassword>");
206 return;
207 }
208
209 if(botcmd.min_level_required > user_access_level)
210 {
211 Notice(connection, from_nick, "Error: Your level of " + user_access_level + " is below the required level of " + botcmd.min_level_required + " for '"+ command +"'");
212 return;
213 }
214
215 if(botcmd.min_argument_count > paramcount(arguments))
216 {
217 Notice(connection, from_nick, "Error: incorrect parameter count for '"+ command +"'");
218 Notice(connection, from_nick, "Usage: " + botcmd.usage_text);
219 return;
220 }
221
222 var params = [connection, from_nick, from_userid, from_host, user_access_level, arguments, channel];
223 botcmd.cmd_function.apply(this, params);
224 return;
225 }
226 }
227
228 //cmd not found
229 Notice(connection, from_nick, "Error: command not found '"+ command +"'");
230 Notice(connection, from_nick, "Help: For more information, please use 'help'");
231 return;
232 }
233
234 this.addUser = function(connection, from_nick, from_userid, from_host, user_access_level, arguments, channel)
235 {
236 var level_to_add;
237
238 if(paramcount(arguments) < 2)
239 {
240 level_to_add = 100;
241 }
242 else
243 {
244 level_to_add = parseInt(param(arguments, 2));
245 }
246
247 if(level_to_add === NaN)
248 {
249 Notice(connection, from_nick, "Error: ADDUSER, level given is not a number. usage: ADDUSER <nickname> [<level>]");
250 return;
251 }
252
253 if(level_to_add > 299)
254 {
255 Notice(connection, from_nick, "Error: ADDUSER, maximum level allowed with this command is 299");
256 return;
257 }
258
259 if(level_to_add >= user_access_level)
260 {
261 Notice(connection, from_nick, "Error: ADDUSER, you cannot add a user with an equal or higher level to yours.");
262 return;
263 }
264
265 ini.write(INIDataType.Integer, "botusers.ini", param(arguments, 1), "level", level_to_add);
266 ini.write(INIDataType.String, "botusers.ini", param(arguments, 1), "password", "changeme");
267 ini.write(INIDataType.Boolean, "botusers.ini", param(arguments, 1), "is_id", false);
268
269 Notice(connection, from_nick, " User " + param(arguments, 1) + " added at level " + level_to_add + " with default password: 'changeme'");
270 return;
271 }
272
273 this.view_access_list = function(connection, from_nick, from_userid, from_host, user_access_level, arguments, channel)
274 {
275 if(param(arguments, 1) != null && param(arguments, 1) != 'undefined' && param(arguments, 1) != "")
276 {
277 Notice(connection, from_nick, "Access List (Matching " + param(arguments,1) + "): ");
278 }
279 else
280 {
281 Notice(connection, from_nick, "Access List (Matching *): ");
282 }
283
284 var access_users = ini.getAllSections("botusers.ini");
285
286 var shown_users = 0;
287 //padstr(string_to_pad, allowed_length, alignment)
288 Notice(connection, from_nick, " " + padstr("[*]", 6, "center") + " " + padstr("Nickname", 15, "left") + " " + padstr("Level", 6, "left") + " " + padstr("Status", 25, "left") + " ");
289
290 for(t=0; t < access_users.Length; t++)
291 {
292 var user_access_info = access_users[t];
293 var user_settings = ini.getSettings(access_users[t]);
294
295 var is_identified = "";
296 if(user_settings[2].BoolValue == true)
297 is_identified = "[Identified]";
298
299 var user_nick = access_users[t]["Name"];
300
301 if(param(arguments, 1) != null && param(arguments, 1) != 'undefined' && param(arguments, 1) != "")
302 {
303 if(is_match(user_nick, param(arguments, 1)))
304 {
305 var x = t + 1;
306
307 Notice(connection, from_nick, padstr(x, 6, "center") + " " + padstr(user_nick, 15, "left") + " " + padstr(user_settings[0].IntValue, 6, "left") + " " + padstr(is_identified, 25, "left"));
308
309 shown_users++;
310
311 }
312 //filtered access_users[t]["Name"]
313 }
314 else
315 {
316 var x = t + 1;
317
318 Notice(connection, from_nick, padstr(x, 6, "center") + " " + padstr(user_nick, 15, "left") + " " + padstr(user_settings[0].IntValue, 6, "left") + " " + padstr(is_identified, 25, "left"));
319
320 shown_users++;
321
322 }
323
324 }
325
326 Notice(connection, from_nick, "*** End of List (matched " + shown_users + "/" + access_users.Length + " users.) ***");
327
328 return;
329 }
330
331 this.view_loaded_scriptlist = function(connection, from_nick, from_userid, from_host, user_access_level, arguments, channel)
332 {
333 Notice(connection, from_nick, "Loaded Javascripts List: ");
334
335 for(t=0; t<jshandler.loadedScripts.Count; t++)
336 {
337 var x = t + 1;
338 Notice(connection, from_nick, x + ". " + jshandler.loadedScripts[t]);
339 }
340
341 Notice(connection, from_nick, "*** End of List ***");
342
343 return;
344 }
345
346 this.user_identify = function(connection, from_nick, from_userid, from_host, user_access_level, arguments, channel)
347 {
348
349 var user_password = ini.read(INIDataType.String, "botusers.ini", from_nick, "password");
350
351 if(user_password != param(arguments, 1))
352 {
353 Notice(connection, from_nick, "INVALID Password. Please try again.");
354 Msg(connection, "#ircfreakz.client", "Error: user: " + from_nick + " attempted to IDENTIFY with an incorrect password");
355 return;
356 }
357
358 ini.write(INIDataType.Boolean, "botusers.ini", from_nick, "is_id", true);
359
360 Notice(connection, from_nick, "You are now identified to me as " + from_nick);
361 Msg(connection, "#ircfreakz.client", "USER is now identified: " + from_nick);
362 return;
363 }
364
365 this.view_registered_timers = function(connection, from_nick, from_userid, from_host, user_access_level, arguments, channel)
366 {
367
368 Notice(connection, from_nick, "Registered Timer List");
369
370 Notice(connection, from_nick, " " + padstr("[*]", 6, "center") + " " + padstr("Name", 15, "left") + " " + padstr("Interval (ms)", 15, "left") + " ");
371
372
373 for(y=0; y<RegisteredTimerList.Count; y++)
374 {
375 var tmr_number = y+1;
376 var tmr = RegisteredTimerList[y];
377
378 Notice(connection, from_nick, padstr(tmr_number, 6, "center") + " " + padstr(tmr.name, 15, "left") + " " + padstr(tmr.interval, 15, "left"));
379 }
380
381 Notice(connection, from_nick, "*** End of LIST (Total: " + RegisteredTimerList.Count + ") ***");
382
383 return;
384 }
385
386 //self.send_raw
387 this.send_raw = function(connection, from_nick, from_userid, from_host, user_access_level, arguments, channel)
388 {
389 var raw_data = params(arguments, 1);
390 Raw(connection, raw_data);
391 Notice(connection, from_nick, "At your request master, I sent raw data " + raw_data + " to connection with GUID " + connection);
392 return;
393 }
394
395 this.send_message = function(connection, from_nick, from_userid, from_host, user_access_level, arguments, channel)
396 {
397 var recipient = param(arguments, 1);
398 var message = params(arguments, 2);
399
400 Msg(connection, recipient, message);
401 Notice(connection, from_nick, "At your request master, I sent a message to " + recipient + ", message: " + message);
402 return;
403 }
404
405 this.change_nickname = function(connection, from_nick, from_userid, from_host, user_access_level, arguments, channel)
406 {
407 var newNick = param(arguments, 1);
408
409 if(newNick != "")
410 {
411 engine.Nick(connection, newNick);
412 Notice(connection, from_nick, "As you wish, I changed my nickname to " + newNick);
413 return;
414 }
415
416 return;
417 }
418
419 this.show_commands = function(connection, from_nick, from_userid, from_host, user_access_level, arguments, channel)
420 {
421 Notice(connection, from_nick, "Commands that you have access to: ");
422
423 var cmd_sort = new Object;
424
425 for(t=0; t<this.botfunctions.length; t++)
426 {
427 var botcmd = this.botfunctions[t];
428
429 if(botcmd.min_level_required <= user_access_level)
430 {
431 //add command to assoc array as user has access to it.
432 //if(cmd_sort[botcmd.min_level_required] == "")
433 //{
434 // if(typeof botcmd.command !== 'undefined')
435 // cmd_sort[botcmd.min_level_required] = "(cmd=" + botcmd.command + ")";
436 //}
437 //else
438 //{
439 // if(typeof botcmd.command !== 'undefined')
440 if(typeof cmd_sort[botcmd.min_level_required] === 'undefined')
441 {
442 cmd_sort[botcmd.min_level_required] = "";
443 cmd_sort[botcmd.min_level_required] += botcmd.command;
444 }
445 else
446 {
447 cmd_sort[botcmd.min_level_required] += ", " + botcmd.command;
448 }
449
450 //}
451 }
452 }
453
454 var cmds_array = [];
455 for (var i in cmd_sort)
456 {
457 cmds_array.push(i);
458 //padstr("[*]", 6, "center")
459
460 //padstr(" .... ", 8, "center")
461 //Notice(connection, from_nick, padstr("" + i + "", 6, "right") + padstr(" .... ", 8, "center") + cmd_sort[i]);
462 }
463
464 cmds_array.sort(function(a, b){return b-a});
465
466 for(t=0; t<cmds_array.length; t++)
467 {
468 Notice(connection, from_nick, padstr("" + cmds_array[t] + "", 6, "right") + padstr(" .... ", 8, "center") + cmd_sort[cmds_array[t]]);
469 }
470
471 Notice(connection, from_nick, "*** End of List ***");
472 return;
473 }
474
475
476 this.show_usage = function(connection, from_nick, from_userid, from_host, user_access_level, arguments, channel)
477 {
478
479 for(h=0; h<this.botfunctions.length; h++)
480 {
481
482 var botcmd = this.botfunctions[h];
483
484 if(botcmd.command.toLowerCase() == param(arguments, 1).toLowerCase())
485 {
486 //found command
487
488 if(botcmd.min_level_required > user_access_level)
489 {
490 Notice(connection, from_nick, "Error: You do not have appropriate access to use command '" + param(arguments, 1) + "'");
491 Notice(connection, from_nick, "Help: To see what you have access to, try /msg <botnick> commands");
492 return;
493 }
494
495 Notice(connection, from_nick, "Command: " + botcmd.command);
496 Notice(connection, from_nick, "Usage: " + botcmd.usage_text);
497 Notice(connection, from_nick, "Desc.: " + botcmd.cmd_help_text);
498 Notice(connection, from_nick, "*** End of INFO ***");
499 return;
500 }
501 }
502
503 Notice(connection, from_nick, "Error: command not found '" + param(arguments, 1) + "'");
504 Notice(connection, from_nick, "Help: For more information, please use 'help'");
505
506 return;
507 }
508
509 this.show_help = function(connection, from_nick, from_userid, from_host, user_access_level, arguments, channel)
510 {
511 //help path is taken from ALL arguments.
512
513
514 /*
515 [index]
516 help_id=h001
517 note=Welcome to JBot, the example miscellaneous bot|written by anthonym & moocow in Javascript|to demonstrate the IRCFreakz IRC Client Javascript scripting functionality|-|JBot has some built in functionality to demonstrate various engine functions,|along with sample Javascript functions, some prewritten|into the engine so that you can write your|scripts easily, seemlessly and effectively.
518 min_required_level=0
519 usage=
520 see_also=access, identify, commands
521*/
522
523 var help_path = arguments;
524 if(help_path == null || help_path == "")
525 help_path = "index";
526
527 var help_id = ini.read(INIDataType.String, "bothelp.ini", help_path, "help_id");
528
529 if(help_id == null || help_id == "")
530 {
531 Notice(connection, from_nick, "Error: help topic not found '" + help_path + "'");
532 Notice(connection, from_nick, "Help: For more information, please use 'help'");
533 return;
534 }
535
536 Notice(connection, from_nick, " *** JBot Help System [" + padstr(help_path.toUpperCase() + ":" + help_id + "]", 25, "left") + " *** ");
537
538 var help_notes = ini.read(INIDataType.String, "bothelp.ini", help_path, "note");
539
540 Notice(connection, from_nick, " ");
541
542 for(k=0; k<help_notes.length; k+=69)
543 {
544 var help_note_line = help_notes.substring(k, k+69);
545 Notice(connection, from_nick, help_note_line);
546 Notice(connection, from_nick, " ");
547 }
548
549 Notice(connection, from_nick, " ");
550
551 var help_seealso = ini.read(INIDataType.String, "bothelp.ini", help_path, "see_also");
552 var help_min_level = ini.read(INIDataType.String, "bothelp.ini", help_path, "min_required_level");
553 var help_usage = ini.read(INIDataType.String, "bothelp.ini", help_path, "usage");
554 var help_example = ini.read(INIDataType.String, "bothelp.ini", help_path, "example");
555
556 if(help_usage != null && help_usage != "")
557 {
558 Notice(connection, from_nick, "Usage: " + help_usage);
559 Notice(connection, from_nick, " ");
560 }
561
562 if(help_example != null && help_example != "")
563 {
564 Notice(connection, from_nick, "Example: " + help_example);
565 Notice(connection, from_nick, " ");
566 }
567
568 if(help_min_level != null && help_min_level != "" && help_min_level != "0")
569 {
570 Notice(connection, from_nick, "Req. Level: " + help_min_level);
571 Notice(connection, from_nick, " ");
572 }
573
574 if(help_seealso != null && help_seealso != "")
575 {
576 Notice(connection, from_nick, "See Also: " + help_seealso);
577 Notice(connection, from_nick, " ");
578 }
579
580 Notice(connection, from_nick, "*** End of Help ***");
581
582 }
583
584 this.show_connection_guids = function(connection, from_nick, from_userid, from_host, user_access_level, arguments, channel)
585 {
586 var lookup_guid;
587 if(paramcount(arguments) < 1)
588 {
589 lookup_guid = "all";
590 }
591 else
592 {
593 lookup_guid = param(arguments, 1).toLowerCase();
594 }
595
596 if(lookup_guid == "all")
597 {
598 //show all guids as table
599 var all_connections = mainForm.Connections;
600
601 Notice(connection, from_nick, "*** Connection List ***");
602
603 Notice(connection, from_nick, " " + padstr("[*]", 6, "center") + " " + padstr("GUID", 40, "left") + padstr("Network", 15, "left") + padstr("Nickname", 15, "left") + padstr("Server", 35, "left") + "");
604
605 for(c=0; c<all_connections.Count; c++)
606 {
607 var h=c+1;
608 var irc_conn = all_connections[c];
609 Notice(connection, from_nick, padstr(h, 6, "center") + " " + padstr(irc_conn.GUID, 40, "left") + padstr(irc_conn.NetworkName, 15, "left") + padstr(irc_conn.Nickname, 15, "left") + padstr(irc_conn.ServerHost + ":" + irc_conn.Port, 35, "left"));
610 }
611
612 Notice(connection, from_nick, "*** End of List ***");
613
614 return;
615 }
616 else
617 {
618 //attempt to look up GUID, if exists, show, if not, show error.
619
620 if(lookup_guid == "current")
621 lookup_guid = connection;
622
623 var ircclient = mainForm.findClientByGuid(lookup_guid);
624
625 if(ircclient == null || ircclient == "")
626 {
627 Notice(connection, from_nick, "Error: GUID specified (" + lookup_guid + ") does not exist");
628 Notice(connection, from_nick, "Help: For more information, /msg <botnick> help guids");
629 return;
630 }
631
632 var chan_list = "";
633
634 for(p=0; p<ircclient.Channels.Count; p++)
635 {
636 var ichan = ircclient.Channels[p];
637
638 if(chan_list == "")
639 {
640 chan_list = ichan.Name + " (" + ichan.ChannelMembers.Count + ")";
641 }
642 else
643 {
644 chan_list += ", " + ichan.Name + " (" + ichan.ChannelMembers.Count + ")";
645 }
646
647 }
648
649 Notice(connection, from_nick, "*** Connection details for " + lookup_guid + " ***");
650 Notice(connection, from_nick, padstr("GUID:", 20, "left") + " " + ircclient.GUID.toUpperCase());
651 Notice(connection, from_nick, padstr("Connected to:", 20, "left") + ircclient.ServerHost + ":" + ircclient.Port);
652 Notice(connection, from_nick, padstr("Connected as:", 20, "left") + ircclient.Nickname + " (" + ircclient.Gecos + ")");
653 Notice(connection, from_nick, padstr("On channels:", 20, "left") + chan_list);
654 Notice(connection, from_nick, padstr("Network Name:", 20, "left") + ircclient.NetworkName);
655 Notice(connection, from_nick, padstr("Server Name:", 20, "left") + ircclient.ServerName);
656 Notice(connection, from_nick, padstr("IRCD Version:", 20, "left") + ircclient.IRCDVersion);
657 Notice(connection, from_nick, padstr("Server Creation:", 20, "left") + ircclient.ServerCreationTime);
658 Notice(connection, from_nick, "*** End of Information ***");
659
660 return;
661
662 }
663 }
664
665 this.chan_cmd = function(connection, from_nick, from_userid, from_host, user_access_level, arguments, channel)
666 {
667 // usage >> CHAN #channel add/del/set/delset
668 var chan_name = param(arguments, 1);
669 var cmd_func = param(arguments, 2);
670
671 if(chan_name.charAt(0) !== "#")
672 {
673 Notice(connection, from_nick, "Error: CHAN ADD channel " + chan_name + " is not a valid channel name.");
674 Notice(connection, from_nick, "Help: For more information, /msg <botnick> help chan add");
675 return;
676 }
677
678 chan_name = chan_name.substring(1, chan_name.length); //remove '#' at start of channel name for storage.
679
680 var chan_check = ini.read(INIDataType.String, "botchannels.ini", chan_name, "status");
681
682 switch(cmd_func.toUpperCase())
683 {
684 case "ADD":
685
686 if(chan_check != null && chan_check != "")
687 {
688 Notice(connection, from_nick, "Error: CHAN ADD channel #" + chan_name + " already exists in my database");
689 Notice(connection, from_nick, "Help: For more information, /msg <botnick> help chan add");
690 return;
691 }
692
693 ini.write(INIDataType.String, "botchannels.ini", chan_name, "status", "active");
694 ini.write(INIDataType.String, "botchannels.ini", chan_name, "addedby", from_nick);
695
696 Notice(connection, from_nick, "Added channel #" + chan_name + " to my channel database, joining channel if possible.");
697 Msg(connection, "#ircfreakz.client", "Added channel #" + chan_name + " to my channel database on request of " + from_nick + ", joining channel if possible.");
698
699 Join(connection, "#" + chan_name);
700
701 return;
702 break;
703
704 case "DEL":
705
706 if(chan_check == null || chan_check == "")
707 {
708 Notice(connection, from_nick, "Error: CHAN DEL channel #" + chan_name + " is not in my database");
709 Notice(connection, from_nick, "Help: For more information, /msg <botnick> help chan del");
710 return;
711 }
712
713 //del(String Filename, String Section)
714 var del_chan = ini.del("botchannels.ini", chan_name);
715
716 if(del_chan == true)
717 {
718 Notice(connection, from_nick, "Deleted channel #" + chan_name + " from my channel database, parting channel if possible.");
719 Msg(connection, "#ircfreakz.client", "Removed channel #" + chan_name + " from my channel database on request of " + from_nick + ", parting channel if possible.");
720
721 Part(connection, "#" + chan_name, "Deleted by " + from_nick);
722 return;
723 }
724 else
725 {
726 Msg(connection, "#ircfreakz.client", "Error trying to delete channel from channel database. Channel=#" + chan_name + ", requested by=" + from_nick);
727 Notice(connection, from_nick, "Error: CHAN DEL channel #" + chan_name + " could not be deleted. This error may need to be reported.");
728 Notice(connection, from_nick, "Help: For more information, /msg <botnick> help chan del");
729 return;
730 }
731
732 return;
733 break;
734
735 case "SET":
736
737 if(chan_check == null || chan_check == "")
738 {
739 Notice(connection, from_nick, "Error: CHAN SET channel " + chan_name + " does not exist in my database, please use CHAN ADD to add it.");
740 Notice(connection, from_nick, "Help: For more information, /msg <botnick> help chan set");
741 return;
742 }
743
744 //usage: CHAN #channel SET <settingname> <value>
745
746 if(paramcount(arguments) < 4)
747 {
748 Notice(connection, from_nick, "Error: CHAN SET not enough parameters specified for SET command.");
749 Notice(connection, from_nick, "Help: For more information, /msg <botnick> help chan set");
750 return;
751 }
752
753 var setting_name = param(arguments, 3);
754 var setting_value = params(arguments, 4);
755
756 ini.write(INIDataType.String, "botchannels.ini", chan_name, setting_name, setting_value);
757
758 Notice(connection, from_nick, "Changed channel setting '" + setting_name + "' for #" + chan_name + " to: '" + setting_value + "'");
759 Msg(connection, "#ircfreakz.client", "Changed channel setting '" + setting_name + "' for #" + chan_name + " to: '" + setting_value + "', on request of " + from_nick);
760
761 return;
762 break;
763
764 case "DELSET":
765
766 if(chan_check == null || chan_check == "")
767 {
768 Notice(connection, from_nick, "Error: CHAN SET channel " + chan_name + " does not exist in my database, please use CHAN ADD to add it.");
769 Notice(connection, from_nick, "Help: For more information, /msg <botnick> help chan add");
770 return;
771 }
772
773 //usage: CHAN #channel DELSET <settingname>
774 if(paramcount(arguments) < 3)
775 {
776 Notice(connection, from_nick, "Error: CHAN DELSET not enough parameters specified for DELSET command.");
777 Notice(connection, from_nick, "Help: For more information, /msg <botnick> help chan delset");
778 return;
779 }
780
781 var setting_name = param(arguments, 3);
782
783 ini.del("botchannels.ini", chan_name, setting_name);
784
785 Notice(connection, from_nick, "Deleted channel setting '" + setting_name + "' for #" + chan_name);
786 Msg(connection, "#ircfreakz.client", "Deleted channel setting '" + setting_name + "' for #" + chan_name + " on request of " + from_nick);
787
788 return;
789 break;
790
791 }
792
793 //invalid cmd func specified
794 Notice(connection, from_nick, "Error: Invalid CHAN command specified: " + cmd_func);
795 Notice(connection, from_nick, "Help: For more information, /msg <botnick> help chan");
796 return;
797
798 }
799
800 this.debug_cmd = function(connection, from_nick, from_userid, from_host, user_access_level, arguments, channel)
801 {
802 //IsOnChannel
803 var test_ison_chan = IsOnChannel(connection, "#ircfreakz.client", param(arguments,1));
804
805 if(test_ison_chan == true)
806 {
807 Msg(connection, "#ircfreakz.client", "Yes, " + param(arguments,1) + " is in the channel #ircfreakz.client");
808 }
809 else
810 {
811 Msg(connection, "#ircfreakz.client", "No, " + param(arguments,1) + " is NOT in the channel #ircfreakz.client");
812 }
813
814 }
815
816 this.is_user_on_channel = function(connection, from_nick, from_userid, from_host, user_access_level, arguments, channel)
817 {
818 var chan_name = param(arguments,1);
819 var find_nick = param(arguments,2);
820
821 if(MeOnChannel(connection, chan_name) == false)
822 {
823 Notice(connection, from_nick, "Sorry, I'm not currently in the channel " + chan_name + ", so I can't help you there!");
824 return;
825 }
826
827 if(IsOnChannel(connection, chan_name, find_nick))
828 {
829 Notice(connection, from_nick, "Yes! User " + find_nick + " is in the channel " + chan_name);
830 return;
831 }
832 else
833 {
834 Notice(connection, from_nick, "No! User " + find_nick + " is not in the channel " + chan_name);
835 return;
836 }
837
838 }
839
840 this.testtimertick = function()
841 {
842 self.timercount++;
843 }
844
845 this.botfunctions.push(new BotCommand('adduser', 1, 300, self.addUser, true, 'ADDUSER <nickname> [<level default=100>]', 'Add a user to the admin access list'));
846
847 this.botfunctions.push(new BotCommand('access', 0, 0, self.view_access_list, true, 'ACCESS [<Nickname/Wildcard default=*>]', 'View users who have access to me.'));
848
849 this.botfunctions.push(new BotCommand('scripts', 0, 100, self.view_loaded_scriptlist, true, 'SCRIPTS', 'View loaded script list.'));
850
851 this.botfunctions.push(new BotCommand('identify', 1, 0, self.user_identify, false, 'IDENTIFY <password>', 'Authenticate your identity to me.'));
852
853 this.botfunctions.push(new BotCommand('timers', 0, 200, self.view_registered_timers, true, 'TIMERS', 'View list of registered timers.'));
854
855 this.botfunctions.push(new BotCommand('msg', 0, 300, self.send_message, true, 'MSG <Recipient/#Channel> <Message>', 'Send a message from me to someone or somewhere.'));
856
857 this.botfunctions.push(new BotCommand('nick', 1, 300, self.change_nickname, true, 'NICK <NewNickname>', 'Change my nickname.'));
858
859 this.botfunctions.push(new BotCommand('commands', 0, 0, self.show_commands, true, 'COMMANDS', 'View a list of commands you have access to.'));
860
861 this.botfunctions.push(new BotCommand('usage', 1, 0, self.show_usage, true, 'USAGE <COMMAND>', 'View correct usage for specified command'));
862
863 this.botfunctions.push(new BotCommand('help', 0, 1, self.show_help, true, 'HELP <TOPIC/TOPICS>', 'View help for a given topic'));
864
865 this.botfunctions.push(new BotCommand('guids', 0, 250, self.show_connection_guids, true, 'GUIDS [<all|current|guid>]', 'View a list of GUIDs for connections to servers, or specifically view connection information for a specified GUID'));
866
867 this.botfunctions.push(new BotCommand('raw', 1, 300, self.send_raw, true, 'RAW <Rawdata>', 'Submit a raw command (unfiltered) to the IRC Connection - beware this may cause internal issues if not careful.'));
868
869 this.botfunctions.push(new BotCommand('debug', 0, 301, self.debug_cmd, true, 'DEBUG <debugTestcmd>', 'For bot owner only, for debug/testing purposes.'));
870
871 this.botfunctions.push(new BotCommand('isonchan', 2, 50, self.is_user_on_channel, true, 'ISONCHAN <#channel> <nickname>', 'Check if a user is on a channel that the bot resides in.'));
872
873 this.botfunctions.push(new BotCommand('chan', 2, 290, self.chan_cmd, true, 'CHAN <#channel> <add/del/set/delset> [<setting>] [<setting value>]', 'Manipulate bot channels database.'));
874
875}
876
877var myBot = new BotTest("Gerald", "@");
878
879
880//create a test timer..
881var TestTimer = new JSTimer("testtimer", 1000, myBot.testtimertick);
882TestTimer.register(false);
883TestTimer.start();
884
885EventManager.addEventListener('EVT_ChannelMessage', myBot.onChannelMessage);
886EventManager.addEventListener('EVT_PrivateMessage', myBot.onPrivateMessage);
887EventManager.addEventListener('EVT_JoinChannel', myBot.onJoinChannel);
888EventManager.addEventListener('EVT_PartChannel', myBot.onPartChannel);
889EventManager.addEventListener('EVT_Registered', myBot.onRegistered);