Personal Chat JS

This is some personal Chat.JS you can get on any wiki. Follow the steps:

1. Create a page called "User:USERNAME/chat.js" (replace USERNAME with your username)

2. Copy the following code between the line:

```
var blinkInterval = 1000; // Custom blink delay, 1000ms is default
 importScriptPage('MediaWiki:PrivateMessageAlert/code.js', 'dev');

 importScriptPage('User:Monchoman45/ChatHacks.js', 'community');

 importScriptPage('User:Madnessfan34537/multikick.js', 'callofduty');

 importArticles( {
     type: 'script',
     articles: [
         "u:dev:ChatOptions/code.js",
     ]
 } );
 /* ChatPlugins */

 var ChatPlugins = {
 release: {
 version: 1.1,
 branch: "Stable"
 },
 models: {
 feature: function(id, name, access, script) {
 this.enabled = false;
 this.id = id;
 this.name = name;
 this.access = access;
 this.script = script;
 },
 alert: function(text) {
 newInlineAlert = new models.InlineAlert();
 newInlineAlert.attributes.text = text;
 mainRoom.model.chats.add(newInlineAlert);
 },
 command: function(command, script) {
 this.command = command;
 this.script = script;
 }
 },
 features: {},
 settings: {
 release: {
 version: 1.0,
 branch: "Stable"
 },
 icons: {
 staffIcon: "",
 modIcon: ""
 },
 sounds: {
 pingSound: "https://notificationsounds.com/soundfiles/9461cce28ebe3e76fb4b931c35a169b0/file-sounds-1044-inquisitiveness.mp3"
 },
 features: {
 pings: true
 }
 },
 save: function() {
 ChatPlugins.settings.features.pings = ChatPlugins.features.pings.enabled;
 api.functions.editPage("User:" + wgUserName + "/ChatPlugins.js", JSON.stringify(ChatPlugins.settings));
 },
 load: function() {
 new ChatPlugins.models.alert("Welcome to Chat Plugins 1.0!");
 pagecontents = api.functions.getPageContents("User:" + wgUserName + "/ChatPlugins.js");
 if (pagecontents == "error") {
 new ChatPlugins.models.alert("There seems to be something wrong with your settings file, or it doesn't exist yet. Default settings have been saved.");
 ChatPlugins.save();
 } else {
 ChatPlugins.settings = JSON.parse(pagecontents);
 ChatPlugins.features.pings.enabled = ChatPlugins.settings.features.pings;
 ChatPlugins.features.pings.words = ChatPlugins.settings.pings;
 }
 pagecontents = api.functions.getPageContents("MediaWiki:ChatPluginsSettings.js");
 if (pagecontents != "error") {
 wikicustom = JSON.parse(pagecontents);
 if (typeof(wikicustom.settings) != "object") {
 new ChatPlugins.models.alert("This wiki has a custom settings page, but it is broken.");
 } else {
 ChatPlugins.settings.icons = wikicustom.settings.icons; //Load Wiki-specific icons
 ChatPlugins.settings.sounds = wikicustom.settings.sounds; //Load Wiki-specific sounds
 new ChatPlugins.models.alert("This wiki has custom settings and they have been applied.");
 }

 }
 }
 };
 // Call API
 function callAPI(data, method, callback) {
 data.format = 'json';
 $.ajax({
 data: data,
 dataType: 'json',
 url: wgScriptPath + '/api.php',
 type: method,
 success: function(response) {
 if (response.error)
 showError('API error: ' + response.error.info);
 else
 callback(response);
 },
 error: function(xhr, error) {
 showError('AJAX error: ' + error);
 }
 });
 }
 //Inline-mod tools
 function scrollToBottom() {
 var chat = document.getElementById('Chat_' + mainRoom.roomId);
 chat.scrollTop = chat.scrollHeight;
 }
 ChatPlugins.features.modIcons = new ChatPlugins.models.feature(null, "Mod Icons", 0, function(chat) {
 var time = new Date();
 var hours = time.getHours();
 var minutes = time.getMinutes();
 var seconds = time.getSeconds();
 if ( hours < 10) hours = '0' + hours;
 if (minutes < 10) minutes = "0" + minutes;
 if (seconds < 10) seconds = "0" + seconds;
 mainRoom.viewDiscussion.chatUL.children().last().children(".message").attr('msg-source', chat.attributes.text);
 mainRoom.viewDiscussion.chatUL.children().last().children(".message").attr('msg-time', hours + ':' + minutes + ':' + seconds);
 var icon = *;*
 mainRoom.viewDiscussion.chatUL.children().last().children('.message').hover(
 function() {
     thistarget = this;
 username = $(thistarget).parent().attr("data-user");
 timestamp = $(thistarget).attr('msg-time');
 message = $(thistarget).attr('msg-source');
 $(thistarget).append('&nbsp;&nbsp;Quote');
 $(thistarget).children('.inline-quote').click(function(e) {
 if ( e.shiftKey ) {
 $('.message textarea').val($('.message textarea').val() + '[' + timestamp + '] ' + username + ": " + message.replace(/^\/me/, "* " + username) + '\n');
 } else {
 $('.message textarea').val('[' + timestamp + '] ' + username + ": " + message.replace(/^\/me/, "* " + username) + '\n');
 scrollToBottom();
 }
 $(".message textarea").focus();
 });

 },
 function() {
 $(this).children('.inline-quote').remove();
 }
 );
 }
 );
 //Bind function to chat updates
 setTimeout(function() {
 mainRoom.model.chats.bind('afteradd', ChatPlugins.features.modIcons.script, mainRoom.viewDiscussion);
 }, 15000);

```

3. Publish the page

4. Clear your cache

There! You have chat hacks.