» Goto page Previous  1, 2, 3, 4, 5, 6 ... 9, 10, 11  Next
» View previous topic :: View next topic  
jcgter777 wrote:
_iPhoenix_ wrote:
This week has been a very productive week for UniChat: 1.5k-ish additions, 200-something deletions, and more. (We are sorry that we have to keep the service itself under wraps, it's going through some massive changes)

Here's a changelog:
+ Karma and profiles (this is a huge update and I can't put my excitement into words. It isn't done, and needs a TON of polishing, but it's still quite exciting.)
* Restructured how database is stored to make it virtually impossible to spam (All of the spambots we tested can't beat this one, let alone take it down)
+ Added many commands and created a still-unfinished Chatbot API (using the loosest definition of what an API is)
+ Added more ways for the admins and moderators to smite you and laugh in your face. (and a way to report abuse, for the recipients)
* Changed how highlights work.
+ Notifications. (You can toggle between not receiving notifications, only receiving them on highlights, and always receiving them.)
+ Preliminary link detection.
* Internal optimizations.


When will UniChat be back up?


When I squash most of my major bugs and finish implementing what I have started.

Here’s the current to-do list:
1) Finish implementing karma. (It’s not going to be live-updating, due to the limitations of GitHub hosting, but it will update every 30 seconds, whenever an admin or moderator has the admin console open)
2) Beautify profile pages, they look like they were made in 30 seconds (they were)
3) Finish link detection.
4) Add buttons for notifications. Currently you have to run a command in the console to toggle them. (Super easy)
5) General UI and UX enhancements.

I’ll probably release a video today or tomorrow showing off the new features.

EDIT:
Or, I can put up a demo, that is, well, broken: (it’s been fixed, but the bots are down up)
https://legend-of-iphoenix.github.io/UniChatDemo/
I want to give a warm "thank-you" to the people who took it upon themselves to try and take down UniChat instead of reporting a bug.

It means a lot.

Thanks.
_iPhoenix_ wrote:
I want to give a warm "thank-you" to the people who took it upon themselves to try and take down UniChat instead of reporting a bug.

It means a lot.

Thanks.

It is always a pleasure Razz
Although I think a good rule of thumb when coding something that is meant for end users to use, is to expect the worst possible inputs from the users. Instead of reporting bugs, (although maybe a little counter-intuitive) it might even be more constructive to create spam scripts and do everything we can to destroy UniChat, since it will bring immediate attention to possible issues/flaws Rolling Eyes
mr womp womp wrote:
_iPhoenix_ wrote:
I want to give a warm "thank-you" to the people who took it upon themselves to try and take down UniChat instead of reporting a bug.

It means a lot.

Thanks.

It is always a pleasure Razz
Although I think a good rule of thumb when coding something that is meant for end users to use, is to expect the worst possible inputs from the users. Instead of reporting bugs, (although maybe a little counter-intuitive) it might even be more constructive to create spam scripts and do everything we can to destroy UniChat, since it will bring immediate attention to possible issues/flaws Rolling Eyes


Yep! (In case you can't tell by the post, which you probably cannot, I was half-joking.)

Murphy's law, am I right? Razz (The exploit has since been fixed. Thanks for the bug report, nonetheless.)

You can report issues here and see current issues here.

Also, you can enable and disable notifications: Check out this wiki page.

The bots are only online when I'm online, due to the fact that I only have one viable machine to run it through.

Hopefully this can be fixed at some point.
A lot of changes have happened this week! (I do know it's Thursday, I am busy on other projects for the rest of the week. I quite like the idea of weekly update posts, I'll probably keep doing them unless nothing has happened that week.)

(In case you haven't noticed, my changelog bullet points actually mean things. A '-' means I removed a feature, a '+' means I added a feature, and a '*' means that I changed an existing feature)

* Moved the code handling bots away from the user, due to security. (You could give your self insane quantities of karma really easily. All bots are now controlled from the Admin Console).
* Fixed the bug where messages from bots would appear twice.
* Fixed the bug where return messages from ~karma would sink to the bottom of the page on reload.
* Fixed the bug where /pm's would show up as 'undefined' in the chat log, and you would get notifications from /pm's that you shouldn't see.
+ Bot API (lets you write your own bots) is working, just need to write some docs. (yay fun Rolling Eyes )
- Unfortunately, we have to say goodbye to the "get recent pm's" button, because:

  • It never worked as intended.
  • It was unfixably buggy.
  • It had some huge security flaws.

+ Added notifications: https://github.com/Legend-of-iPhoenix/UniChatDemo/wiki/Notifications
+ Added link detection! (I used small snippets of SAX's link detection script, credits are in the readme, and the actual snippet is here)
* Tightened up security.
* Merged karma over from the closed beta, and did a database check to find all <username>++'s and increment karma as necessary.
+ (edit) Added Battlesquid's flame effect to his username in the profile.
+ (edit) Added all kinds of cool commands.
+ (edit) Added semi-functional username linking.
* (edit) Updated the docs with the new commands.
+ (edit) Added documentation on the bot API, available here: part 1 and part 2
+ (edit) Work has commenced on a small, UniChat-like bot platform, that is entirely local and lets you test your bots without me going in and making them part of UniChat. (Which may take a while.)

The Closed Beta Testers (Codename: CITY, due to a PM I sent them, titled "Can I Trust You?") were: (in no particular order) TheLastMillennial/TLM, Battlesquid, SM84CE, and xMarminq_.

They all have ethereal, glowy usernames in their UniChat profiles, but I'm giving them the option to have it be whatever they want. I remember that Battlesquid wants (edit: and now has) flames, (as a side note, the flame text currently in jcgter777's signature is from that experiment, I showed Battlesquid a demo picture via SAX, and he wanted a firey version of his username, too!) and other members of the closed beta can submit their choices here.

Without their testing, UniChat would be much, much more primitive, and I don't think I would have had the motivation to get this far.

Thanks.
Not really a bug, but if you're highlighted, the links are kind of hard to see. I adjusted the pictures to make it look more like my cruddy monitor. Razz
Without mouse hovering:

Not much different, but this is with mouse hovering (Windows removes the mouse when taking screenshots):
That's a problem!

I am SUPER happy to announce that you can finally create your own bots for UniChat, using the UniChat bot API.

You can find the download here, as well as the documentation.

I'm interested in seeing what you guys can create!

EDIT: It would be really awesome if you guys could create simple bots to aid with documentation. It's somewhat hard for me to create *just* a simple bot (I get carried away), and I've been quite busy doing UniChat things, life things, and PoTM-writing things.

Edit: I think I'm going to completely rewrite UniChat. It's a complete mess (especially this file, this file (though it is neater), and this file.), and new features are becoming too hard to implement.

I wrote most of the code back when I had no knowledge of Closures, JS objects, the ternary/conditional operator (the '<condition> ? <true> : <false>'), and I was simply writing the code as a small project that I didn't think was going to go that far.

There probably won't be many updates for the next few days, but when I'm done, UniChat will be practically a million times better. I will be taking the chance to implement some amazing new features.

I will be answering questions here and on UniChat, but expect me to be mainly on UniChat, probably under a weird username that changes every 30 seconds as I test things.

The one thing I'm going to leave alone is the bot API and the Admin Console, because the bot API is already amazingly neat and probably at the upper limit of what I currently know about JavaScript and the Admin Console is essentially the bot API, a karma handler, some spam detection scripts, and another script that lets me do one-click banning, and it's quite neat and compact.

Edit:
Oh boy. The new spam detection we have is genius. DKKing thought of calculating the Levenshtein distance between the previous message and the current message, dividing it by the average length of the two messages, and checking if it is lower than a certain value. (Currently set at .25)

Because things like "c" and "cc" will still pass through this, I am working on other methods to determine the spam. We still have all of the other time-based spam prevention methods.

This lets us detect things like people adding random characters to the ends of their messages and more.

(none of this is live yet, and probably won't be for at least a few days)
TheLastMillennial wrote:
Not really a bug, but if you're highlighted, the links are kind of hard to see. I adjusted the pictures to make it look more like my cruddy monitor. Razz
Without mouse hovering:
<massive pic omfg>
Not much different, but this is with mouse hovering (Windows removes the mouse when taking screenshots):
<massive pic omfg>


This isn't live yet, but yeah. Problem solved.
sooo I got bored and kind of made a bot that was supposed to calculate gamma and beta functions, using 1 or 2 arguments, but I failed quite miserably... Here is the code I came up with...

Code:
var wompBot = new Bot("wompBot", "#");

function initializeBots() {
    wompBot.register();
}

wompBot.executeCommand = function (data) {
    var poster = data.poster;
    var message = data.message;
        if (message.substring(0, 5) == "beta(" || message.substring(0, 6) == "gamma(") {

        if (message.substring(0, 5) == "beta(") {
            var func = 10;
            args = message.substring(5);
            var looping = 3;
        } else {
            var func = 1;
            args = message.substring(6);
            var looping = 2;
        }
        args = message.slice(0, -1);
        var argarr = args.split(",");
        for (var i = 0; i < argarr.length; i++) {
            argarr[i] = parseFloat(argarr[i]);
        }
        L2 = [A, B, A + B];
        for (var D = 1; D <= looping; D++) {
            if func == 10 {
                var A = L2[D];
            }
            var Z == A;
            if 0 > A {
                Z = 1 - Z;
            }
            var cumSum = Array.apply(null, {
                length: 10
            }).map(Function.call, Number);
            var numbers = [5716.400188, -14815.30427, 14291.49278, -6348.160218, 1301.608286, -108.1767054, 2.605696506, -0.0074234525, 5.384136433e-8, -4.023533141e-9];

            var sum = 0;
            for (var j = 0; j < numbers.length; j++) {
                sum += numbers[j] / (Z - cumSum[j]);
            }
            var Ans = Math.log(Math.sqrt(2 * Math.PI) * (1 + sum));
            var Y = Math.exp(Ans + (Z - .5) * Math.log(Z + 8.5) - Z - 8.5);
            if 0 > A {
                Y = 2 * Math.PI * math.i / Y / (2 * math.i * Math.sin(Math.PI * A));
            }
            L2.push(Y);

        }
        if func == 10 {
            Y = L2[3] * L2[4] / L2[5];
        }

        respond(poster + Y);
    }
}

It was supposed to be used as follows:

Code:
user: #gamma(5.3)
wompBot: user38.0779764499
user: #beta(3.5,2.2)
wompBot: user0.05048663728

the code is an adaptation from a basic program I wrote a while ago which went a little like this:

Code:
If N=1 or N=10
Then
   {A,B,A+B->L2
   For(D,1,1+2(N=10
      If N=10
      L2(D->A
      A->Z
      If 0>real(A
      1-Z->Z
      ln(sqrt(2pi)(1+sum({5716.400188,~14815.30427,14291.49278,~6348.160218,1301.608286,~108.1767054,2.605696506,~0.0074234525,5.384136433|E~8,~4.023533141|E~9}/(Z-1+cumSum(binomcdf(9,0
      e^(Ans+(Z-.5)ln(Z+8.5)-Z-8.5->Y
      If 0>real(A
      2pi[i]/Y/(2[i]sin(piA->Y
      augment(L2,{Y->L2
   End
   If N=10
   Ans(4)Ans(5)/Ans(6->Y
   Disp Y
End

Which was inspired by a really old post from UnitedTI in 2005.
This routine uses Lanczos approximation to compute the Gamma function numerically. Basically, it implements


where sg(z) is


which can be expressed in closed form, and numerically evaluated.
The beta function ()can easily be calculated once we have the gamma function by using the following form:


Now for the juicy part... The code doesn't work. I get "[06:44:59] ERROR: Function "initializeBots()" does not exist! No bots loaded." for some reason, even though it is clearly in my code... For that reason, I wasn't able to even test my code to see if it works! The basic version definitely works, but I'm not sure the javascript one works. I also get a parsing error on the 28th line with "if func == 10" which I'm not too sure about either, given that I clearly declared func...
Does someone know what I'm doing wrong?
This code works:

Code:
var wompBot = new Bot("wompBot", "#");

function initializeBots() {
  wompBot.register();
}
//You are welcome.
wompBot.executeCommand = function (data) {
  var poster = data.poster;
  var message = data.message;
  var numDecimals = 5;
  var result = ""
  if (message.substring(0, 5) == "beta(") {
    var args_raw = message.substring(5).slice(0, -1).split(",");
    var args = [];
    args_raw.forEach(function(element) {
      args[args.length] = (parseFloat(element));
      console.log(element)
    });
    var result = ((Lanczos_Gamma(args[0]) + Lanczos_Gamma(args[1])) / Lanczos_Gamma(args[0] + args[1])).toFixed(numDecimals);
    respond(poster + ": beta(" + args[0] + ", " + args[1]+") is roughly equal to "+ result + ".");
  }
  if (message.substring(0, 6) == "gamma(") {
    var args_raw = message.substring(6).slice(0, -1).split(",");
    var args = [];
    args_raw.forEach(function(element) {
      args.push(parseFloat(args_raw));
    });
    respond(poster + ": gamma("+args[0]+") is roughly equal to " + (Lanczos_Gamma(args[0])).toFixed(numDecimals) + ".");
  }
}
//source: https://www.w3resource.com/javascript-exercises/javascript-math-exercise-49.php
//I modified this so it worked. The example given on that page has a small error.
function Lanczos_Gamma(num) {
  var p = [
    0.99999999999980993, 676.5203681218851, -1259.1392167224028,
    771.32342877765313, -176.61502916214059, 12.507343278686905, -0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7
  ];
  var i;
  var g = 7;
  if (num < 0.5) return Math.PI / (Math.sin(Math.PI * num) * Lanczos_Gamma(1 - num));
  num -= 1;
  var a = p[0];
  var t = num + g + 0.5;
  for (i = 1; i < p.length; i++) {
    a += p[i] / (num + i);
  }
  return Math.sqrt(2 * Math.PI) * Math.pow(t, num + 0.5) * Math.exp(-t) * a;
}


You basically had a bunch of scopes, syntax, and all kinds of other crud messed up.

I figured I'd restart with something I knew worked.
The gamma function seems to be working great, while the beta function is straight up incorrect...
wompBot wrote:
[08:00:22] user_3a9af9: #gamma(1.32)
[08:00:22] [wompBot]: user_3a9af9: gamma(1.32) is roughly equal to 0.89464.
[08:00:25] user_3a9af9: #beta(1,1)
[08:00:25] [wompBot]: user_3a9af9: beta(1, 1) is roughly equal to 2.00000.

I had a look, and the code you found is actually an implementation of the method described in " Mathematics: A Brief Review of Some Important Topics" Page 582 Razz
Thankfully, the wrong answers are due to a very small mistake you made with the equation derived by Cramér.

Code:
    var result = ((Lanczos_Gamma(args[0]) + Lanczos_Gamma(args[1])) / Lanczos_Gamma(args[0] + args[1])).toFixed(numDecimals);

Should be

Code:
        var result = (Lanczos_Gamma(args[0]) * Lanczos_Gamma(args[1])) / Lanczos_Gamma(args[0] + args[1]).toFixed(numDecimals);

And that small change makes it all work out.
wompBot wrote:
[08:09:33] user_4ef575: #beta(1.32,1.73)
[08:09:33] [wompBot]: user_4ef575: beta(1.32, 1.73) is roughly equal to 0.3905074523509848.

Thanks for this, I guess now we have a bot that can calculate gamma and beta functions... what now Laughing
mr womp womp wrote:
The gamma function seems to be working great, while the beta function is straight up incorrect...
wompBot wrote:
[08:00:22] user_3a9af9: #gamma(1.32)
[08:00:22] [wompBot]: user_3a9af9: gamma(1.32) is roughly equal to 0.89464.
[08:00:25] user_3a9af9: #beta(1,1)
[08:00:25] [wompBot]: user_3a9af9: beta(1, 1) is roughly equal to 2.00000.

I had a look, and the code you found is actually an implementation of the method described in " Mathematics: A Brief Review of Some Important Topics" Page 582 Razz
Thankfully, the wrong answers are due to a very small mistake you made with the equation derived by Cramér.

Code:
    var result = ((Lanczos_Gamma(args[0]) + Lanczos_Gamma(args[1])) / Lanczos_Gamma(args[0] + args[1])).toFixed(numDecimals);

Should be

Code:
        var result = (Lanczos_Gamma(args[0]) * Lanczos_Gamma(args[1])) / Lanczos_Gamma(args[0] + args[1]).toFixed(numDecimals);

And that small change makes it all work out.
wompBot wrote:
[08:09:33] user_4ef575: #beta(1.32,1.73)
[08:09:33] [wompBot]: user_4ef575: beta(1.32, 1.73) is roughly equal to 0.3905074523509848.

Thanks for this, I guess now we have a bot that can calculate gamma and beta functions... what now 0x5


Interestingly, I had literally no clue what the beta/gamma functions were, this was quite cool to learn about.

I just went to Wikipedia and hoped the formulae given would work. (I'm not giving myself enough credit here, I spent like an hour fixing that code and figuring out what in the world I was even trying to do.)

EDIT: I think I'm going to remove links from UniChat just because it will make my code neater. I will, however, continue linking certain usernames in a hard-coded fashion.

I'm working on adding wompBot to UniChat, the only hitch is that I'm having some friction porting my current bots over onto the bots API.

One bot in particular (karmaBot), requires access to the database in order to do its task (handle karma) correctly. I didn't really think about this, and the whole code that backed up karmaBot was initially a mess, so it's quite difficult to work with.
I'm having some issues with my own code that I cannot solve. I have done research on this, but I am still quite confused.

In the bots API, (relevant file, main.js, is here) I'm having some issues where multiple objects (in this case, bots) of the same constructor are sharing properties. (in this case, the name attribute)

In my code, I am creating and initializing bots as per my documentation, but I am initializing two bots, one with the name "iPhoenixBot", and the other with the name "karmaBot". Note that iPhoenixBot is being initialized first, then karmaBot.

The command "~bad" is registered under iPhoenixBot, yet when I execute that command, this happens:
Quote:
[07:47:52] _iPhoenix_: ~bad
[07:47:53] [karmaBot]: That's so bad, it's almost impressive!

As you can tell, the username is showing up wrong.

The console tells me this:
Quote:
Callback for bot "iPhoenixBot" triggered with message "bad".
Response from "karmaBot" received. //this should be "iPhoenixBot", not "karmaBot"
Callback for bot "karmaBot" triggered with message "bad".


In the main.js file linked above, I am using the bot_name input from the constructor in the code to determine what name to display.

I initially assumed this was the problem. I thought that the bot_name variable might be changed each time the constructor is called, even though this seems strange.

I changed it to "this.name", which is the bot's name. This works elsewhere, but it didn't work there.

How can I fix this, and what exactly is happening?

I fixed it, but I can't explain how I fixed it.

Edit: wompBot is now online! The docs have been edited to include the commands, too.
Is it possible to erase the name of the user that sent the message in bots programming?

I'm trying to make a MEBOT but it looks kind of stupid with the bot name being sent with it.
I have 2 bots that i have developed for Unichat:
----------------------------------------------------------------------
AFKBOT:
A simple bot that displays [username] has gone AFK

USAGE:
~afk

SOURCE CODE:
https://github.com/LAX18/AFKBOT
-----------------------------------------------------------------------
BUGBOT:
A simple bot that displays the Cemetech thread link on call

USAGE:
~bug

SOURCE CODE:
https://github.com/LAX18/BUGBOT
----------------------------------------------------------------------

These will help to make Unichat more feature rich.
Noice!

I’ll try to get them up when I can. (Currently, there are exactly 0 bots online :/)

And yes, it is possible, if you ask (via comment) in the source, then I can try to make it work!

(We already have /me, by the way, and it is done client-side, so it doesn’t have a bot and always works)
I made a script that would go through the DoorsCS bot replies and turn them into if-then:respond statements. I don't know if the creators would be ok with you adding this into Unichat, but I made it sooo here it is Razz

Code:
    if (message == "o/") {
        respond("waves at DecBot o/");
    }
    if (message == "kermm") {
        respond("KermM is still not your personal programmer.");
    }
    if (message == "ask") {
        respond("Don't ask to ask, or ask if anyone is here, or if anyone is alive, or if anyone uses something. Just ask!");
    }
    if (message == "utmaps") {
        respond("find the Cemetech UT2004 maps here http://tinyurl.com/utmaps");
    }
    if (message == "pillow") {
        respond("nick wanted you to have this pillow.");
    }
    if (message == "topic") {
        respond("You should make a topic!");
    }
    if (message == "6/2(1+2)") {
        respond("=9");
    }
    if (message == "post") {
        respond("You should post in the thread.");
    }
    if (message == "account") {
        respond("You can register for a Cemetech account at http://www.cemetech.net/forum/profile.php?mode=register");
    }
    if (message == "doorscs") {
        respond("DoorsCS is a bot that helps us do things.");
    }
    if (message == "bashphorism") {
        respond("#bash The questioner will keep changing the original question until it drives the helpers in the channel insane.");
    }
    if (message == "etiquette") {
        respond("Read this, please: http://mywiki.wooledge.org/NetEtiquette");
    }
    if (message == "war") {
        respond("are we talking about programming languages again?");
    }
    if (message == "nayy") {
        respond("=^_^= NEKO");
    }
    if (message == "grammar") {
        respond("http://learnyourdamnhomophones.com/");
    }
    if (message == "emacs") {
        respond("a great operating system, lacking only a decent editor");
    }
    if (message == "vi") {
        respond("vi only has 2 modes: beep repeatedly, and break everything.");
    }
    if (message == "losing") {
        respond("fun!");
    }
    if (message == "ninja'd") {
        respond("Somebody typed faster to express the same sentiment.");
    }
    if (message == "introduce") {
        respond("You should introduce yourself: http://cemete.ch/t4925");
    }
    if (message == "implied") {
        respond(" implied not found. Did you mean 'implode'?");
    }
    if (message == "implode") {
        respond(" collapses on itself");
    }
    if (message == "ed") {
        respond("What about him?");
    }
    if (message == "nyaa") {
        respond("=^_^= NEKO");
    }
    if (message == "developers") {
        respond("DEVELOPERS, DEVELOPERS, DEVELOPERS!");
    }
    if (message == "inception") {
        respond("BWAAAAHHHHNNNN See also: Inception");
    }
    if (message == "gedit z80") {
        respond("http://cemete.ch/t5867");
    }
    if (message == "moar") {
        respond("POST MOAR");
    }
    if (message == "kill") {
        respond("kills $1");
    }
    if (message == "nanananabooboo") {
        respond("You can't catch me!");
    }
    if (message == "cookie") {
        respond("Someone wanted you to have this cookie");
    }
    if (message == "mecookie") {
        respond("$nick wanted you to have this cookie");
    }
    if (message == "konami") {
        respond("↑↑↓↓←→←→BA");
    }
    if (message == "khorne") {
        respond("BLOOD FOR THE BLOOD GOD! SKULLS FOR THE SKULL THRONE!");
    }
    if (message == "spiders") {
        respond("suck");
    }
    if (message == "keys") {
        respond("http://en.wikipedia.org/wiki/Texas_Instruments_signing_key_controversy");
    }
    if (message == "nickspam") {
        respond("Bad.");
    }
    if (message == "tanner") {
        respond("Stop abusing the bot");
    }
    if (message == "linux") {
        respond("awesomeness");
    }
    if (message == "wabbit") {
        respond("http://wabbit.codeplex.com/");
    }
    if (message == "freebuild") {
        respond("Temporary Freebuild download link: http://sfgp.cemetech.net/fb1.5.2.tgz");
    }
    if (message == "overkill") {
        respond("IT'S OVER NINE THOUSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAND");
    }
    if (message == "tokens") {
        respond("http://merthsoft.com/Tokens.zip");
    }
    if (message == "botabuse") {
        respond("Take it to /query (or #flood, but /query is better).");
    }
    if (message == "pastebin") {
        respond("Please use Pastebin (http://cemetech.pastebin.com/) to share your code.");
    }
    if (message == "rtfm") {
        respond("Read The Fantastic Manual");
    }
    if (message == "howask") {
        respond("How to ask Smart Questions http://www.catb.org/~esr/faqs/smart-questions.html");
    }
    if (message == "saxhelp") {
        respond("Admins: ~saxfail to enable DoorsCS backup saxjax, ~saxback to disable it");
    }
    if (message == "pokemonpurple") {
        respond(" tifreak8x's TI-Basic Pokemon port. trust us its the best!");
    }
    if (message == "war2") {
        respond("Are we talking about editors again?");
    }
    if (message == "war3") {
        respond("Are we talking about shells again?");
    }
    if (message == "sugar") {
        respond("nospamplz");
    }
    if (message == "tokenszip") {
        respond("http://merthsoft.com/Tokens.zip");
    }
    if (message == "python") {
        respond("David, Kerm, Shaun, Merth, Willrandship, TC01, Kllrnohj");
    }
    if (message == "war4") {
        respond("Are we talking about operating systems again?");
    }
    if (message == "mint") {
        respond("burn it with fire");
    }
    if (message == "piracy") {
        respond("Not for this channel. Take it somewhere else.");
    }
    if (message == "minecraftchat") {
        respond("Please take it to this topic: http://www.cemetech.net/forum/viewtopic.php?t=5549");
    }
    if (message == "minecrafttalk") {
        respond("Please take it to this topic: http://www.cemetech.net/forum/viewtopic.php?t=5549");
    }
    if (message == "dcssdk") {
        respond("Doors CS 7 SDK http://dcs.cemetech.net/index.php?title=SDK");
    }
    if (message == "mplayer") {
        respond("having vlc steal your libraries and statically compile them has never been so fun!");
    }
    if (message == "vlc") {
        respond("statically compiled mplayer libraries surrounded by qt interface");
    }
    if (message == "catherine") {
        respond("is _player1537 is Tanner");
    }
    if (message == "qazz") {
        respond("What a terrible night to have a curse");
    }
    if (message == "castlevanis") {
        respond("Kill it with fire");
    }
    if (message == "nout") {
        respond("$nick sadly cannot play UT at this present time. :'(");
    }
    if (message == "war20") {
        respond("Are we talking about tev again?");
    }
    if (message == "notepad") {
        respond("{bad at handling files larger than 64k");
    }
    if (message == "java") {
        respond("http://www.bash.org/?946461");
    }
    if (message == "spree") {
        respond("M-M-M-M-MONSTER POST");
    }
    if (message == "pti") {
        respond("http://sgate.emt.bme.hu/patai/pindurti/");
    }
    if (message == "sax") {
        respond("SAX is the Simultaneous Asychronous eXchange chat widget written by Kerm. http://cemete.ch/t3072");
    }
    if (message == "war5") {
        respond("Are we talking about browsers again?");
    }
    if (message == "browserwar") {
        respond("Are we talking about browsers again?");
    }
    if (message == "oswar") {
        respond("Are we talking about operating systems again?");
    }
    if (message == "shellwar") {
        respond("Are we talking about shells again?");
    }
    if (message == "dcs") {
        respond("Downloads and documentation: http://dcs.cemetech.net");
    }
    if (message == "kitty") {
        respond("A cat is fine too.");
    }
    if (message == "calclink") {
        respond(" Learn to link your calculator here: http://tifreakware.net/tutorials/link.htm");
    }
    if (message == "art") {
        respond("Art is arbitrary and fundamentally meaningless.");
    }
    if (message == "tifreak") {
        respond("a cupcake.");
    }
    if (message == "navi") {
        respond("Hey Listen!");
    }
    if (message == "fail") {
        respond("http://www.cemetech.net/img/misc/epicflail.jpg");
    }
    if (message == "alot") {
        respond("http://hyperboleandahalf.blogspot.com/2010/04/alot-is-better-than-you-at-everything.html");
    }
    if (message == "sara") {
        respond("http://xkcd.com/684/");
    }
    if (message == "flip") {
        respond("(╯°□°)╯︵ ┻━┻");
    }
    if (message == "unflip") {
        respond("┬─┬ノ( º _ ºノ)");
    }
    if (message == "flip2") {
        respond("┻━┻ ︵ヽ(`Д´)ノ︵ ┻━┻");
    }
    if (message == "space") {
        respond("You know what I hope's in space? Fire. I hope you go to space and catch on fire.");
    }
    if (message == "utip") {
        respond("Ask Kerm");
    }
    if (message == "nikky2") {
        respond("http://www.cemetech.net/img/misc/trollinhatin.jpg");
    }
    if (message == "party") {
        respond("http://failblog.files.wordpress.com/2012/01/party-fails-after-aint-no-party-like-a-calculator-party.jpg");
    }
    if (message == "pr0n") {
        respond("http://i41.tinypic.com/9vk1fl.gif");
    }
    if (message == "randwar") {
        respond("Are we (fight|yell|scream|argu|rant|yapp|groan)ing about (shells|operating systems|editors|calculators|websites|your mother|religion) again?")
    }
    if (message == "nikky3") {
        respond("Nikky is a sincere, intelligent, and caring person who loves all people.");
    }
    if (message == "troll") {
        respond("A troll is a short little creature that hates all life. If you happen to run across one on the interwebs, be sure to spray it in the eyes with mace.");
    }
    if (message == "glk2") {
        respond("<+glk> Ban calculators as weapons of math instruction.");
    }
    if (message == "glk3") {
        respond("<glk> My other computer is a Turing punch tape machine");
    }
    if (message == "javasucks") {
        respond("http://f.asset.soup.io/asset/3004/4095_7f1a_390.jpeg");
    }
    if (message == "yes ut") {
        respond("I will gladly join you for UT gogogogo!");
    }
    if (message == "party2") {
        respond("* Michael_V brings out the 89 and 83+ with the orange DS slidecases, the 83+ silver edition, and the strobe lights and starts his own ticalc.org party");
    }
    if (message == "prizmc") {
        respond("There's no such thingas Prizm C. It's just C.");
    }
    if (message == "mlp") {
        respond("Kill it with fire.");
    }
    if (message == "os243") {
        respond(" http://education.ti.com/downloads/files/83plus/TI84Plus_OS243.8Xu");
    }
    if (message == "nano") {
        respond(" Why is my source code full of :w's?");
    }
    if (message == "pico") {
        respond(" Aww, what a cute editor!");
    }
    if (message == "にゃあ") {
        respond("=^_^= ~nyaa");
    }
    if (message == "prizmscreen") {
        respond(" 384x216");
    }
    if (message == "panic") {
        respond("http://ompldr.org/vZm1w");
    }
    if (message == "sovietflip") {
        respond("┬──┬╯︵ /(.□. \)");
    }
    if (message == "kyubey") {
        respond("/人◕‿‿◕人\ Anything is possible, if you make a contract with me!");
    }
    if (message == "nycat") {
        respond("ncat miku.acm.uiuc.edu 23");
    }
    if (message == "shaunnag") {
        respond(" @shaun: nagnagnagTokensnagnagnag");
    }
    if (message == "lol") {
        respond("http://www.cemetech.net/forum/viewtopic.php?t=969");
    }
    if (message == "tableflip") {
        respond("(╯°□°)╯︵ ┻━┻");
    }
    if (message == "tableunflip") {
        respond("┬─┬ノ( º _ ºノ)");
    }
    if (message == "hahano") {
        respond("<tcparetro> <+nikky> Lol that's so hilarious \ <tcparetro> <+nikky> you should do stand up");
    }
    if (message == "daisy") {
        respond("Daisy, Daisy, give me your answer do. I'm half crazy all for the love of you.");
    }
    if (message == "thanks") {
        respond("*thakns");
    }
    if (message == "vim") {
        respond("<Aoi-chan> everyone's first vi session. ^C^C^X^X^X^XquitqQ!qdammit [esc] qwertyuiopasdfghjkl;:xwhat");
    }
    if (message == "buru") {
        respond("Buruburuburuburuburuburuburu");
    }
    if (message == "woah") {
        respond("It's 'whoa'.");
    }
    if (message == "l4d") {
        respond("Jonimus, Merth, IkariTari, Catherine, others L4D2 gogogo?");
    }
    if (message == "bronies") {
        respond(" They're comin right at us! *BLAM BLAM BLAMBLAM BLAM*");
    }
    if (message == "dance") {
        respond("^('-')^ ^('-')^ v('-')v v('-')v <('-'<) (>'-')> <('-'<) (>'-')> B A");
    }
    if (message == "narwhal") {
        respond("http://www.weebls-stuff.com/songs/Narwhals/");
    }
    if (message == "flail") {
        respond("http://www.cemetech.net/img/misc/epicflail.jpg");
    }
    if (message == "IkariTari") {
        respond("Kerm's personal debugger.");
    }
    if (message == "whoosh") {
        respond("http://i.imgur.com/axJmn.gif");
    }
    if (message == "regex") {
        respond("Some people, when confronted with a problem, think, I know, I'll use regular expressions. Now they have two problems.");
    }
    if (message == "wotd") {
        respond("a great idea");
    }
    if (message == "bot") {
        respond(" is a bot + + + + + does the robot");
    }
    if (message == "why") {
        respond("Why? Because we love you!");
    }
    if (message == "0x5") {
        respond("http://www.cemetech.net/forum/viewtopic.php?t=969");
    }
    if (message == "magicka") {
        respond(" IkariTari, Jonimus, Merth, Others, join us for some Wizard Suicide Simulator!");
    }
    if (message == "float") {
        respond("Some people, when confronted with a problem, think, 'I know, I'll use floating point arithmetic'. Now they have 2.000000000000000000001 problems.");
    }
    if (message == "php") {
        respond("\"I think English is probably a better programming language than PHP.\" - Kerm");
    }
    if (message == "\o/") {
        respond("Stop it.");
    }
    if (message == "offtopic") {
        respond(" WOOP WOOP offtopic alarm! WOOP WOOP");
    }
    if (message == "ahelper") {
        respond(" Get yer butt in gear and get that there SDK done!");
    }
    if (message == "greek") {
        respond("ιτ'ς αλλ γρεεκ το με!");
    }
    if (message == "minecraft") {
        respond("Don't discuss Minecraft in SAX/IRC. Use topics. Also join mc.cemetech.net");
    }
    if (message == "xyzzy") {
        respond("Nothing happens.");
    }
    if (message == "linkdocs") {
        respond("http://merthsoft.com/linkguide/");
    }
    if (message == "errors") {
        respond("Don't just say it doesn't work. Give the exact error. If you think that more information than a line or two will be useful, paste the output on a pastebin site such as http://rafb.me");
    }
    if (message == "flip4") {
        respond("(╯°□°)╯︵ /(.□. \)");
    }
    if (message == "minecraftshoosh") {
        respond(" http://tifreakware.net/images/STOPMINECRAFT.jpg");
    }
    if (message == "ponies") {
        respond("Take the ponytalk elsewhere. It is not welcome here.");
    }
    if (message == "yodawg") {
        respond("http://captionsearch.com/pix/y1hcmth24y.jpg");
    }
    if (message == "blub") {
        respond("Blub club! >(<')");
    }
    if (message == "bulb2") {
        respond(">(^') >(^') >(v') >(v') >(<') >(>') >(<') >(>')");
    }
    if (message == "yesut") {
        respond("$nick will gladly join you for UT gogogogo!");
    }
    if (message == "general") {
        respond("Why not ask your question as a general question to everyone who might know? See also: ~ask");
    }
    if (message == "nou") {
        respond("Actually, the thing that you have just accused me of is more applicable to yourself.");
    }
    if (message == "yesme") {
        respond("http://www.youtube.com/watch?v=9-k5J4RxQdE");
    }
    if (message == "...") {
        respond("That's not the right way to use those.");
    }
    if (message == "supidity") {
        respond("Never attribute to malice that which is adequately explained by stupidity.");
    }
    if (message == "kyubey2") {
        respond("http://i.imgur.com/hx3mdO4.png");
    }
    if (message == "kermsleep") {
        respond(" Find the definition of 'Sleep' for Kerm here: http://i.imgur.com/LOvy2Ut.png");
    }
    if (message == "wiener") {
        respond("Because Jonimus is a wiener.");
    }
    if (message == "fx-cg-cl") {
        respond("http://www.cemetech.net/forum/viewtopic.php?t=8059");
    }
    if (message == "nagkerm") {
        respond(" @KermM: nagnagnagstuffandthingsnagnagnag");
    }
    if (message == ".-.") {
        respond(".-. ʷʰʳʳʳʳ");
    }
    if (message == "kiwf") {
        respond("Kill it with fire.");
    }
    if (message == "deal") {
        respond("( •_•)>⌐■-■        (⌐■_■) Deal with it");
    }
    if (message == "emacs2") {
        respond("http://fc04.deviantart.net/fs71/i/2011/029/8/3/emacs_user_at_work_by_earlcolour-d38aj2x.jpg");
    }
    if (message == "semicolon") {
        respond("http://theoatmeal.com/comics/semicolon");
    }
    if (message == "dcs8") {
        respond(" Kerm programming gogogo");
    }
    if (message == "tilp") {
        respond("http://sourceforge.net/projects/tilp/files/tilp2-win32/tilp2-1.17/tilp-1.17.zip/download");
    }
    if (message == "tilpbeta") {
        respond("http://tiplanet.org/beta/setup.exe");
    }
    if (message == "tilplinux") {
        respond("http://lpg.ticalc.org/prj_tilp/download/install_tilp.sh");
    }
    if (message == "goose") {
        respond(" And this is why Goose is a sadist: http://themetapicture.com/what-math-stands-for/");
    }
    if (message == "programmers") {
        respond(" http://themetapicture.com/programmers-vs-users/");
    }
    if (message == "systemtray") {
        respond("http://blogs.msdn.com/b/oldnewthing/archive/2003/09/10/54831.aspx");
    }
    if (message == "diaf") {
        respond("http://i.imgur.com/B8Icw6q.gif");
    }
    if (message == "apostrophe") {
        respond("http://theoatmeal.com/comics/apostrophe");
    }
    if (message == ";") {
        respond("http://theoatmeal.com/comics/semicolon");
    }
    if (message == "'") {
        respond("http://theoatmeal.com/comics/apostrophe");
    }
    if (message == "z80bits") {
        respond("http://baze.au.com/misc/z80bits.html");
    }
    if (message == "wienerlist") {
        respond("Jonimus, shaun");
    }
    if (message == "µt") {
        respond(" Let's play a scientific game of UT2004!");
    }
    if (message == "ports") {
        respond("http://tinyurl.com/83p-ports");
    }
    if (message == "doubt") {
        respond(" When in doubt, ask benryves!");
    }
    if (message == "contest10") {
        respond("Cemetech Contest #10: Write physics programs, win one or two of 4 calculators. Info: http://cemete.ch/n603");
    }
    if (message == "kerm") {
        respond(" tha ghettoz most prolific graphin calculator programmer, or not your personal programmer");
    }
    if (message == "ticalc") {
        respond(" http://www.ticalc.org Tha leadah in yo graphin calculator programmin hood");
    }
    if (message == "dicshaunary") {
        respond("You really don't need the ~ when you say that...");
    }
    if (message == "idiot") {
        respond("What you just said is one of the most insanely idiotic things I have ever heard. At no point in your rambling, incoherent response were you even close to anything that could be considered a rational thought. Everyone in this room is now dumber for having listened to it. http://www.youtube.com/watch?v=0MRmxfLuNto");
    }
    if (message == "tapthat") {
        respond("https://xkcd.com/398/");
    }
    if (message == "damnit") {
        respond("http://english.stackexchange.com/questions/79282/dammit-vs-damnit");
    }
    if (message == "dcssdk2") {
        respond(" http://www.cemetech.net/programs/index.php?mode=file&id=470");
    }
    if (message == "no wars") {
        respond(" Null: programming languages; 2: editors; 3: shells; 4: OSes; 5: browsers");
    }
    if (message == "bakercat") {
        respond("http://belarr.com/bakercat/");
    }
    if (message == "no .-.") {
        respond(".-.~~ ʷʰʳʳʳʳ");
    }
    if (message == "Splash") {
        respond(" Magikarp used Splash! It was super effective! Yamcha fainted..");
    }
    if (message == "ftpmustdie") {
        respond("http://mywiki.wooledge.org/FtpMustDie");
    }
    if (message == "bored") {
        respond("If you're bored you're boring. Go do something instead of complaining about it.");
    }
    if (message == "blasdflkh") {
        respond("http://jonimoose.net/calcstuff/blasdflkh.txt");
    }
    if (message == "binsprite") {
        respond("http://merthsoft.com/binsprite.html");
    }
    if (message == "comic") {
        respond(" [18:36] <nikkybot> comicidiot is a hypocrite. or a pet duck. named Mr. Chuckles...");
    }
    if (message == "xlibpalette") {
        respond("http://merthsoft.com/rgbhlpalette.png");
    }
    if (message == "xlibcpalette") {
        respond("http://dcs.cemetech.net/index.php/DCSE:BasicLibs:DrawShape#Color_Values");
    }
    if (message == "overgoat") {
        respond("http://media.taricorp.net/sc2n/day9/overgoat.ogg");
    }
    if (message == "when") {
        respond("When its ready.");
    }
    if (message == "utgog") {
        respond("http://www.gog.com/game/unreal_tournament_2004_ece");
    }
    if (message == "shame") {
        respond("http://www.ticalc.org/archives/news/articles/6/69/69778.html");
    }
    if (message == "DATAonMATH") {
        respond("http://web.archive.org/web/20120210004232/http://grahamkendall.net/");
    }
    if (message == "documentationflip") {
        respond("(╯°□°)╯︵ ┻━uoıʇɐʇuǝɯnɔop━┻");
    }
    if (message == "install_tilp.sh") {
        respond(" http://lpg.ticalc.org/prj_tilp/download/install_tilp.sh");
    }
    if (message == "hcwp") {
        respond("Have Calc, Will Program, every Wednesday at 8pm ET! https://plus.google.com/hangouts/_/event/cfsg1nmjnppa31u6en7l177ok68");
    }
    if (message == "quiz") {
        respond("Join #cemetech-quiz for an exciting trivia quiz gogogo");
    }
    if (message == "comfort") {
        respond(" Comfort is irrelevant!");
    }
    if (message == "isthatbetter") {
        respond(" Affirmative");
    }
    if (message == "factoids") {
        respond("http://jonimoose.net/calcstuff/factoids.txt");
    }
    if (message == "jstified") {
        respond("http://cemete.ch/emu");
    }
    if (message == "dishonor") {
        respond(" Dishonor on you! Dishonor on your cow!");
    }
    if (message == "moffat") {
        respond("a disgrace to television.");
    }
    if (message == "noaoe") {
        respond("$nick unfortunately cannot play Age of Empires 2 HD at this time");
    }
    if (message == "skifree34") {
        respond("http://ski.ihoc.net/abom_fu.gif");
    }
    if (message == "food") {
        respond("$nick needs food :'(");
    }
    if (message == "recursion") {
        respond("Please see the ~recursion command");
    }
    if (message == "problem") {
        respond("Some people, when confronted with a problem, think, I know, I'll use $*. Now they have two problems.");
    }
    if (message == "editors") {
        respond("http://i.imgur.com/IRrBM0A.jpg");
    }
    if (message == "banhammer") {
        respond(" gets out the banhammer ▬▬▬▬▬▬▬▋ Ò╭╮Ó");
    }
    if (message == "nikkyforadmin2014") {
        respond(" Wait, nikky isn't already an admin?");
    }
    if (message == "linkguide") {
        respond("http://merthsoft.com/linkguide/");
    }
    if (message == "spice") {
        respond("THE SPICE MUST FLOW");
    }
    if (message == "flipallthetables") {
        respond(" ┻━┻ ︵ヽ(`Д´)ノ︵ ┻━┻");
    }
    if (message == "shutup") {
        respond(" <@nikky> Nobody cares about UT");
    }
    if (message == "debug") {
        respond("http://ericlippert.com/2014/03/05/how-to-debug-small-programs/");
    }
    if (message == "decbot") {
        respond("http://decbot.cemetech.net/scores/");
    }
    if (message == "tokenide") {
        respond("TokenIDE is awesome. See cemete.ch/t10098 for more awesomeness.");
    }
    if (message == "motivation") {
        respond(" THIS IS AMAZING! I FEEL INCREDIBLE! YES! YES! YES! YES! I CAN WIN! I FEEL GREAT! I. CAN. DO. THIS!! AAAHHH!");
    }
    if (message == "mc") {
        respond("Move Minecraft discussion to #cemetech-mc, or use the forum. MC server is mc.cemetech.net ; DynMap is http://mc.cemetech.net:8122/");
    }
    if (message == "kermbook") {
        respond("Programming : http://www.amazon.com/dp/1617290777/");
        respond(" Using : http://www.amazon.com/dp/161729084X");
    }
    if (message == "karma") {
        respond("Decbot does the karma, not me.");
    }
    if (message == "shaun") {
        respond("Not your personal musician.");
    }
    if (message == "freespeech") {
        respond("http://xkcd.com/1357/");
    }
    if (message == "programming") {
        respond("Programming is easy; building software is hard.");
    }
    if (message == "computers") {
        respond("All computers are just carefully organized sand. Everything is hard until someone makes it easy. ");
        respond(" http://xkcd.org/1349/");
    }
    if (message == "kermpaper") {
        respond("PAPER");
        respond("THESIS WRITING GOGOGOGOGOGO");
    }
    if (message == "dense") {
        respond(" http://tifreakware.net/images/dense.jpg");
    }
    if (message == "rules") {
        respond("Don't be irritating to the staff.");
    }
    if (message == "nikkykip") {
        respond("http://i.imgur.com/NKzwiVb.jpg");
    }
    if (message == "bash.org") {
        respond("Roses are red, violets are blue, you read bash.org, WE ALL DO TOO.");
    }
    if (message == "liljon") {
        respond("IF I WASNT N MUSIC I WULD B A PSYCHIATRIST");
    }
    if (message == "regex2") {
        respond("http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags");
    }
    if (message == "nohw") {
        respond("$nick unfortunately cannot play Hedgewars at this time");
    }
    if (message == "yeshw") {
        respond("$nick is happy to join you for Hedgewars!");
    }
    if (message == "motivation2") {
        respond(" http://9gag.com/gag/azbwANz?ref=fbp");
    }
    if (message == "mccoy") {
        respond("I'm a doctor, Jim, not an engineer!");
    }
    if (message == "nag") {
        respond("When in doubt, nag comic!");
    }
    if (message == "volunteers") {
        respond(" We contribute our time here because we love teaching. Our time is valuable, our lives are busy, and we'll respond to good questions if we have the time and inclination. Please be patient.");
    }
    if (message == "what") {
        respond("dat");
    }
    if (message == "aoe") {
        respond("KermM, AHelper, tifreak, nikky, ordelore, Kaslai, unknownln, elfprince, qazz42, pyrotechn, others, Age of Empires 2 HD?");
    }
    if (message == "potatoes") {
        respond(" Boil 'em, mash 'em, stick 'em in a stew..");
    }
    if (message == "nagahelper") {
        respond("AHelper, Redintegrate and gCAS gogogogogo");
    }
    if (message == "whrrrr") {
        respond("https://www.youtube.com/watch?v=KU3rcptyfhE");
    }
    if (message == "hrwo") {
        respond("https://plus.google.com/hangouts/_/event/cablf14737sqoa77tsdihin2g9s");
    }
    if (message == "pullTheLeverKronk") {
        respond("WRONG LEVERRRRRRRR!");
    }
    if (message == "war6") {
        respond("Are we arguing about hg, git, SVN, and CVS again?");
    }
    if (message == "no, scores") {
        respond("http://decbot.cemetech.net/scores/");
    }
    if (message == "away") {
        respond("Away nicks are a bannable offence, please read http://bisqwit.iki.fi/jutut/away.html");
    }
    if (message == "xkcd") {
        respond("There's an XKCD that relates to this.");
    }
    if (message == "war7") {
        respond("Are we arguing about smartphone OSes again?");
    }
    if (message == "wars") {
        respond("null: programming languages ; 2: editors; 3: shells; 4: OSes; 5: browsers; 6: DCVSes; 7: Phone OSes");
    }
    if (message == "xd") {
        respond("not an actual face. Stop it.");
    }
    if (message == "posf") {
        respond("You should posf on the Comictech foam.");
    }
    if (message == "dinner") {
        respond("Sorry, $nick needs to fulfill their mortal need for tasty sustenance.");
    }
    if (message == "laundry") {
        respond("The bane of modern life.");
    }
    if (message == "nagunknown") {
        respond("@Unknownln: nagnagstuffandthingsnagnag (calculator C compiler work gogogogo)");
    }
    if (message == "test") {
        respond("Just testing.");
    }
    if (message == "++") {
        respond("Our karma system rewards people or things for being helpful, intelligent, funny, or useful.");
    }
    if (message == "forth") {
        respond("I think you meant to type FORTH .");
    }
    if (message == "kermflip") {
        respond("(╯°□°)╯︵ɯɯɹǝʞ");
    }
    if (message == "ban") {
        respond("When in doubt, ban Ultimate Dev'r!");
    }
    if (message == "givewhitelist") {
        respond("test cookie cemetech thread post posf introduce decbot dcswiki prizm topic ask wikiti lmgtfy");
    }
    if (message == "mantra") {
        respond("\"Quality over quantity\" is the goal of Cemetech. Posting is great, but it's best when it adds constructively to a discussion or is used for well-phrased questions.");
    }
    if (message == "angryflip") {
        respond("http://www.mspaintadventures.com/?s=6&p=007429");
    }
    if (message == "yesish") {
        respond("$nick wants to do that thing, but will do it in a bit, like 5 minutes or an hour or so.");
    }
    if (message == "starcraft") {
        respond("KermM, Merth, DJ_O, Tari, elfprince, others: Starcraft gogogogo?");
    }
    if (message == "hater") {
        respond("<nikkybot> 3. don't be a hater.");
    }
    if (message == "merth") {
        respond("Don't greet Merth--how many times do I have to say it!");
    }
    if (message == "topblame") {
        respond("Blame Kerm for making poor dictatorial decisions.");
    }
    if (message == "gitblame") {
        respond("Blame elfprince for making the system super-complicated. We'll do it live!");
    }
    if (message == "creation") {
        respond("There is no other scientifically sound explanation for the creation of the universe.");
    }
    if (message == "languages") {
        respond("\"There are only two kinds of languages: the ones people complain about and the ones nobody uses.\" - Bjarne Stroustrup");
    }
    if (message == "28d") {
        respond("Updated Learn TI-83 Plus Assembly In 28 Days: http://media.taricorp.net/83pa28d/welcome.html");
    }
    if (message == "yesblame") {
        respond("Yes, when in doubt, $nick will blame comicIDIOT.");
    }
    if (message == "no, blame") {
        respond("When in doubt, blame Ephraim!");
    }
    if (message == "coffee") {
        respond("$nick, please accept this steaming cup of coffee with my compliments: C[_] http://theoatmeal.com/comics/semicolon");
    }
    if (message == "nikky") {
        respond("The glue that holds the TI community together, or http://calcg.org/cgi-bin/files.cgi?id=236 .");
    }
    if (message == "doctorwho") {
        respond("<nikky> Doctor Who That's not the right way to use those. is pretty ok");
    }
    if (message == "comicsleep") {
        respond(" Early to bed, early to rise, makes a man healthy, wealthy and wise.");
    }
    if (message == "ez80") {
        respond("Zilog ez80 maual: http://www.zilog.com/docs/um0077.pdf");
    }
    if (message == "iambian") {
        respond("It be crunk in dis hizzle, fa rizzle?");
    }
    if (message == "glk") {
        respond("My url has vast 89 data in MATH http://grahamkendall.org/");
    }
    if (message == "rocketsurgery") {
        respond("http://www.turkeyandghost.com/3");
    }
    if (message == "blame") {
        respond("When in doubt, blame comic!");
    }
    if (message == "etiquette2") {
        respond("Please read http://www.cemetech.net/forum/viewtopic.php?t=10262");
    }
    if (message == "analogref") {
        respond("https://www.ti.com/seclit/ml/slyw038a/slyw038a.pdf");
    }
    if (message == "brokegit") {
        respond("http://ibrokegit.com/");
    }
    if (message == "ut") {
        respond("Jonimus, Kaslai, geekboy, CVSoft, Ahelper, KermM, pyrotechn, Eeems, Hayleia, Qazz42, EarthDrag, Abrum, others: UT2004 gogogogo?");
    }
    if (message == "programmingsucks") {
        respond("http://www.stilldrinking.org/programming-sucks");
    }
    if (message == "tiprogrameditor") {
        respond("http://tifreakware.net/forum/viewtopic.php?f=47&t=203");
    }
    if (message == "patrickd") {
        respond(" [PatrickD] The TI-85 shall reign supreme, always and forever");
    }
    if (message == "eta") {
        respond("When It's Ready™");
    }
    if (message == "ticalccd") {
        respond("https://archive.org/details/ticalc-org-cd");
    }
    if (message == "zds") {
        respond("http://store.zilog.com/index.php?option=com_ixxocart&Itemid=1&p=product&id=28&parent=5");
    }
    if (message == "scores") {
        respond("http://decbot.cemetech.net");
    }
    if (message == "quotes") {
        respond("http://decbot.cemetech.net/quotes/");
    }
    if (message == "netiquette") {
        respond("Cemetech netiquette: http://www.cemetech.net/forum/viewtopic.php?t=10262");
    }
    if (message == "z80") {
        respond("Zilog z80 Manual: http://www.zilog.com/manage_directlink.php?filepath=docs/z80/um0080&extn=.pdf");
    }
    if (message == "hw") {
        respond("KermM, Hooloovoo/Hoolootwo, comic, unknownln, EinHelfer/AHelper, M. I. Wright, Ivoah, others: Hedgewars gogogogo?");
    }
    if (message == "ti86flip") {
        respond("98-ıʇ");
    }
    if (message == "bwt") {
        respond("badwordtest");
    }
    if (message == "z80time") {
        respond("z80 opcode hex and timing: http://www.ticalc.org/archives/files/fileinfo/1/110.html");
    }
    if (message == "partitioning") {
        respond("Proper disk partitioning visual guide: http://www.cemetech.net/img/misc/partitioning.jpg");
    }
    if (message == "powercycle") {
        respond("Have you tried turning it off and on again? https://youtu.be/nn2FB1P_Mn8");
    }
    if (message == "textspeak") {
        respond(" http://tifreakware.net/cemetech/typememe.jpg");
    }
    if (message == "pt_") {
        respond(" http://sgate.emt.bme.hu/patai/pindurti/");
    }
    if (message == "nagpt_") {
        respond("P_T/PT_, you have tons of ICE/jsTIfied/SourceCoder/Cemetech/studying/sleep/life... things you could be doing!");
    }
    if (message == "fast") {
        respond(" https://i.imgur.com/KrsN4hl.png");
    }

I had to make small changes so that the prompts didn't have capital letters, because == doesn't IgnoreCase, and I didn't feel like using .equalsIgnoreCase(). I also had to modify the ones that have quotes in the replies, and the ones that return 2 responses, but overall it took about 15 minutes.
_iPhoenix_ wrote:
(We already have /me, by the way, and it is done client-side, so it doesn’t have a bot and always works)


I took the link down shortly before you posted this. I forgot about the /me command and saw it while looking to make more bots.
LAX18 added some a lot of awesomeness to UniChat. (And you can, too.)

In order to say thanks, I "bestowed upon him" the title of "Contributor"!
Unichat was down today for a while (possible yesterday too) because of a mistake in coding a edit to the notifications script. I apologise for the sudden halt of services.
  
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
» Goto page Previous  1, 2, 3, 4, 5, 6 ... 9, 10, 11  Next
» View previous topic :: View next topic  
Page 5 of 11
» All times are UTC - 5 Hours
 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

 

Advertisement