Автораспространитель будущего

**Внимание! Скрипт только для Служебная:MyPage/chat.js**
В углу чата появляется аватар. При нажатии на него открывается чат автораспространителя. При нажатии на верхнюю часть чата (там, где аватар) чат снова закрывается в аватар.

Команды:

* Ангел-он - включение режима Ангела, в котором на любое сообщение он будет отвечать цитатой.
* Ангел-офф - выключение режима Ангела
* Угадай-он - включение игры-угадайки
* num-(число) - угадывание номера
* Угадай-офф - выключение игры
* Рулетка (кол-во патронов) - игра в рулетку
* Фразу - случайная фраза
* Заглавную - ссылка на заглавную
* Смайлы - ссылка в смайлики
* Правила - ссылка на правила чата
* Админы - ссылка в ListUsers
* js - ссылка на страницу Special:MyPage/chat.js
* Если в фразе есть слово "пожалуйста", то бот согласится
* Если в фразе есть "pi", то он ответит резко

Добавлены команды из Автораспространитель\_будущего/Le H2O, а также команды:

* music - набор команд для включения-выключения музыки с youtube. Играет зацикленно Следует изменить то, что в "var defaultMusic", иначе вы узнаете все странные вкусы Сибы. Чтобы их узнать:
	+ music.d.\*число\* - включает музыку, которые собсна занесены в defaulMusic. Пример: music.d.5
	+ music.\*url видео\* - включает подобранное видео. Пример: music.dQw4w9WgXcQ
	+ music.toggle - показывает/скрывает видео. Можно использовать для просмотра видео, но рекомендуется прежде всего для отладки
	+ music.rnd - включает случайную музыку из defaultMusic
	+ music.stop - отключает текущую музыку
	+ music.replay - воспроизводит заново последнюю воспроизведённую музыку
* User|Ник участника - показывает важные ссылки на участника
* Active - ссылает на Служебная:WikiActivity Служебная:RecentChanges и Служебная:Log
* Привет - приветствие
* MultiPM|Участник1|Участник2|etc - открывает личное сообщение с участниками Участник1, Участник2, etc.

**Код:**

```
/\*
\* Автораспространитель будущего
\*/
(function() {
 var usernick = ""; //Введите здесь свой ник

 //Смайлы
 var smiles = [
 'http://images3.wikia.nocookie.net/mlp/ru/images/f/ff/Twilight\_Sparkle\_emoticon.png',
 'http://images1.wikia.nocookie.net/mlp/ru/images/c/c9/Rarity\_emoticon.png',
 'http://images1.wikia.nocookie.net/mlp/ru/images/2/29/Rainbow\_Dash\_emoticon.png',
 'http://images2.wikia.nocookie.net/mlp/ru/images/e/e1/Fluttershy\_emoticon.png',
 'http://images2.wikia.nocookie.net/mlp/ru/images/3/35/Applejack\_emoticon.png',
 'http://images2.wikia.nocookie.net/mlp/ru/images/a/ab/Pinkie\_Pie\_emoticon.png'
 ];

 var defaultMusic = ['dQw4w9WgXcQ', 'dQw4w9WgXcQ', 'dQw4w9WgXcQ', 'dQw4w9WgXcQ', 'dQw4w9WgXcQ', 'fd2tIudSyR8', 'dL2VKZQbee8', 'dQw4w9WgXcQ'];

 //Цитатки Ангела
 var angelPhrases = [
 'Чего?!',
 'Я хелперам пожалуюсь!',
 'Я считаю это оскорблением!',
 'Да как ты смеешь разговаривать так с повелителем Рейман Вики?!',
 'Да ты сейчас получишь бессрочный бан глобальный!',
 'Вообще-то я не люблю, когда меня обсуждают',
 'Считай тебя на хостинге не видели!',
 'Не понимаешь по хорошему?',
 'Может, хватит меня обсуждать?',
 'Я тебе не верю.',
 'Делаю тебе последнее предупреждение: ещё раз что-то в этом роде скажешь - получишь бан.',
 'Ещё раз со мной заговоришь в таком тоне - получишь бан. Вообще я имею полное право дать тебе сразу, без предупреждений, бессрочный бан, но я всё-таки сделал снисхождение. Другой админ сразу бы забанил тебя на бессрочно, но я добрый.',
 'Хватит троллить меня!'
 ];

 //Для команды "Фразу"
 var phrase = [
 ['Поняшный', 'Маленький', 'Милый', 'Любимый', 'Добрый', 'Честный', 'Щедрый', 'Верный', 'Дружелюбный', 'Хороший', 'Смешной', 'Чудный', 'Весёлый'],
 ['Сиба', 'Вода', 'Аннови', 'Корсар', 'Хелпер', 'брони', 'пони', 'участник', 'бот', 'Ктулху'],
 ['играет', 'делится', 'дружит', 'обнимается', 'ест печеньки вместе', 'устраивает бой подушками', 'читает книжку', 'надевает носочки вместе', 'гуляет'],
 ['с понями', 'с Флатти', 'с Рейнбоу Дэш', 'с Криззи', 'с Твайли', 'с Эйджей', 'с Луной', 'с Лирой', 'с Бон-бон', 'с Дерпи', 'с Пинки', 'с Рэркой', 'с Дэринг Ду', 'с великой и могучей Трикси']
 ];

 var phraseW = [
 'Флатти - любимая понь Воды!',
 'Вода няша',
 'У моего создателя не хватило креативности на эту строку',
 'У Воды ДР 3 декабря',
 'Вода - хорошо',
 'Добрый Вода играет с Флатти'
 ];

 var phraseF = [
 'Флатти добрая',
 'Флатти няша',
 'Добрая Флатти играет с понями',
 'Мой создатель любит Флатти',
 'Я всего лишь жестянка, я не способен любить Флатти, как ты',
 'Флатти - это понь'
 ];

 var waterPhrases = [
 'Не найдётся минутка поговорить о футболе? <a href="https://www.youtube.com/watch?v=43vYjLKxYYU " target="\_blank">Click</a>',
 'Во! <a href="https://www.youtube.com/watch?v=kKNfwfI8wHU" target="\_blank">Click</a>',
 'Немного о футболе: <a href="https://www.youtube.com/watch?v=HSokhezl1QU" target="\_blank">Click</a>',
 'Вы когда-нибудь интересовались футболом? <a href="https://www.youtube.com/watch?v=Y0ky0NWnr6U" target="\_blank">Click</a>',
 'Как они там! <a href="https://www.youtube.com/watch?v=N2MmwpE6vQw " target="\_blank">Click</a>',
 'WWE: <a href="http://www.dailymotion.com/video/x2p9bei" target="\_blank">Click</a>',
 'Что такое WWE? WWE - это <a href="https://www.youtube.com/watch?v=qolj0NWPzRo" target="\_blank">Click</a>',
 'Держи WWE, ведь это бесплатно! <a href="http://www.dailymotion.com/video/x2asqbh\_ecw-one-night-stand-6-12-05\_fun" target="\_blank">Click</a>',
 '<a href="http://www.dailymotion.com/video/x2x3dac\_ecw-one-night-stand-2006-terry-funk-tommy-dreamer-vs-edge-mick-foley\_sport" target="\_blank">Click</a>',
 'Извини :c',
 'Не ходи в мой сарай, лады?',
 'МЛП скатилось совсем :c',
 'Это... йоу',
 'Ты влез в мой сарай!',
 'Флатти ^^',
 'МЛП - это бесплатно!'
 ];

 function rnd(min, max) {
 var rand = min - 0.5 + Math.random() \* (max - min + 1);
 rand = Math.round(rand);
 return rand;
 }

 $('<div class="future-spreader" style="position: absolute; top: -39px; left: 10px; z-index: 10000;">' +
 '<div class="fs-avatar" style="display: block;">' +
 '<img src="http://vignette2.wikia.nocookie.net/learnedit/images/e/ed/Kopcap94-2.jpg/revision/latest?cb=20150826212217&path-prefix=ru" width="30px" height="30px" />' +
 '</div>' +
 '<div class="fs-body" style="display: none;">' +
 '<div class="fs-profile" style="padding: 3px; background: rgb(30, 30, 30); width: 300px;">' +
 '<img src="http://vignette2.wikia.nocookie.net/learnedit/images/e/ed/Kopcap94-2.jpg/revision/latest?cb=20150826212217&path-prefix=ru" width="30px" height="30px" />' +
 '<div class="fs-profile-desc" style="width: 250px; display: inline-block; padding-left: 3px; vertical-align: top; color: white;">'+
 'Это распространитель будущего' +
 '</div>' +
 '</div>' +
 '<ul style="overflow: auto; width: 300px; background: rgb(170, 170, 170); height: 300px; margin: 0px; padding: 3px;">' +
 '</ul>' +
 '<div class="fs-message" style="padding: 3px; background: rgb(30, 30, 30); width: 300px;">' +
 '<img src="' + $('.Write img').attr('src') + '" width="30px" height="30px" />' +
 '<textarea style="width: 200px; height: 25px; margin-left: 4px; resize: none;"></textarea>' +
 '<button class="fs-clr" style="display: inline-block; vertical-align: top; margin-left: 4px;">CLR</button>' +
 '</div>' +
 '</div>' +
 '</div>').prependTo('.ChatWindow .WikiaPage');

 $('.fs-avatar').click(function() {
 $('.fs-avatar').hide();
 $('.fs-body').show();
 $('.fs-message textarea').focus();
 });

 $('.fs-profile').click(function() {
 $('.fs-body').hide();
 $('.fs-avatar').show();
 });

 $('.fs-clr').click(function() {
 $('.fs-body ul').empty();
 });

 function output(text, mode) {
 if (mode == 'normal') {
 $('<li style="padding: 3px;">' +
 '<img src="http://vignette2.wikia.nocookie.net/learnedit/images/e/ed/Kopcap94-2.jpg/revision/latest?cb=20150826212217&path-prefix=ru" width="30px" height="30px" />' +
 '<div style="display: inline-block; vertical-align: top; padding-top: 7px; padding-left: 10px; width: 220px; color: black;">' +
 text +
 '<img src="' + smiles[rnd(0, 5)] + '" width="19px" height="19px">' +
 '</div>' +
 '</li>').appendTo('.fs-body ul');
 } else if (mode == 'angel') {
 $('<li style="padding: 3px;">' +
 '<img src="http://vignette4.wikia.nocookie.net/common/avatars/d/d4/25332104.png/revision/latest/scale-to-width-down/150?cb=1427994001&format=jpg" width="30px" height="30px" />' +
 '<div style="display: inline-block; vertical-align: top; padding-top: 7px; padding-left: 10px; width: 220px; color: black;">' +
 text +
 '</div>' +
 '</li>').appendTo('.fs-body ul');
 } else if (mode == 'water') {
 $('<li style="padding: 3px;">' +
 '<img src="http://i.imgur.com/8opsEny.png" width="30px" height="30px" />' +
 '<div style="display: inline-block; vertical-align: top; padding-top: 7px; padding-left: 10px; width: 220px; color: black;">' +
 text +
 '</div>' +
 '</li>').appendTo('.fs-body ul');
 }
 }

 var angelMode = false;
 var waterMode = false;
 var gnumber = false;
 var lastMusic;
 var lastNumber;

 $('.fs-message textarea').keypress(function(e) {
 if (e.which == 13) {
 e.preventDefault();
 var message = $(this).val();

 if (message.trim() !== '') {
 $(this).val('');

 $('<li style="padding: 3px; background: rgba(90, 90, 90, 0.6);">' +
 '<img src="' + $('.Write img').attr('src') + '" width="30px" height="30px" />' +
 '<div style="display: inline-block; vertical-align: top; padding-top: 7px; padding-left: 10px; width: 220px; color: white;">' +
 message +
 '</div>' +
 '</li>').appendTo('.fs-body ul');

 if (angelMode) {
 if (message.search(/Ангел-офф/ig) != -1) {
 angelMode = false;
 output('Всё-всё-всё, ' + usernick + '!', 'normal');
 } else if (message.search(/вы/ig) != -1) {
 output('Называй меня на ты!!11!11!!!!1одзен', 'angel');
 } else {
 output(angelPhrases[rnd(0, angelPhrases.length - 1)], 'angel');
 }
 } else if (waterMode) {
 if (message.search(/Вода-офф/ig) != -1) {
 waterMode = false;
 output('Всё-всё-всё, ' + usernick + '!', 'normal');
 } else {
 var random = rnd(0, waterPhrases.length - 1);
 if (random == lastNumber) {
 while (random == lastNumber) {
 random = rnd(0, waterPhrases.length - 1);
 }
 }
 output(waterPhrases[random], 'water');
 lastNumber = random;
 }
 } else {
 if (message.search(/Ангел-он/ig) != -1) {
 angelMode = true;
 output('Я вернулся и всех забаню!', 'angel');
 } else if (message.search(/Вода-он/ig) != -1) {
 waterMode = true;
 output(usernick + ' ^^', 'water');
 } else if (message.search(/Угадай-он/ig) != -1) {
 gnumber = rnd(1, 1000);
 output('Начинаем игру! От 1 до 1000! Используй num-<число>, ' + usernick + ' ', 'normal');
 } else if (message.search(/num-\d+/ig) != -1 && gnumber) {
 var n = parseInt(message.split('-')[1], 10);
 var out;

 if (n - gnumber === 0) {
 gnumber = false;
 out = 'Да, это то самое число, ' + usernick + '! ';
 } else if (Math.abs(n - gnumber) <= 5) {
 out = 'Очень горячо, ' + usernick + ' ';
 } else if (Math.abs(n - gnumber) <= 10) {
 out = usernick + ', горячо ';
 } else if (Math.abs(n - gnumber) <= 50) {
 out = usernick + ', еще теплее ';
 } else if (Math.abs(n - gnumber) <= 100) {
 out = usernick + ', тепло ';
 } else if (Math.abs(n - gnumber) <= 500) {
 out = usernick + ', холодно ';
 } else {
 out = usernick + ', о4 холодно ';
 }

 output(out, 'normal');
 } else if (message.search(/Угадай-офф/ig) != -1) {
 gnumber = false;
 output('Всё-всё-всё, ' + usernick + ' ', 'normal');
 } else if (message.search(/Фразу о (Воде|Le|Le H2O)/ig) != -1) {
 var random = rnd(0, phraseW.length - 1);
 if (random == lastNumber) {
 while (random == lastNumber) {
 random = rnd(0, phraseW.length - 1);
 }
 }
 output(phraseW[random], 'normal');
 lastNumber = random;
 } else if (message.search(/Фразу о (Флатти|Флаттершай)/ig) != -1) {
 var random = rnd(0, phraseF.length - 1);
 if (random == lastNumber) {
 while (random == lastNumber) {
 random = rnd(0, phraseF.length - 1);
 }
 }
 output(phraseF[random], 'normal');
 lastNumber = random;
 } else if (message.search(/Фразу/ig) != -1) {
 output(phrase[0][rnd(0, phrase[0].length - 1)] + ' ' + phrase[1][rnd(0, phrase[1].length - 1)] + ' ' + phrase[2][rnd(0, phrase[2].length - 1)] + ' ' + phrase[3][rnd(0, phrase[3].length - 1)] + ' ', 'normal');
 } else if (message.search(/Рулетка \d+/ig) != -1) {
 var number = parseInt(message.split(' ')[1], 10);
 var result;

 if (rnd(1, 6) >= number) {
 result = usernick + ', вы выжили ';
 } else {
 result = usernick + ', вы умерли ';
 }

 if (number < 1) {
 result = usernick + ', а чем предложишь стрелять? Бананами? ';
 } else if (number >= 6) {
 result = usernick + ', вы 4о, пулями питаетесь? ';
 }

 output(result, 'normal');
 } else if (message.search(/user\|[\s\S]+/ig) != -1) {
 var nick = encodeURIComponent(message.split('|')[1].replace(/\s/g, '\_'));

 output(usernick + ', инфа по участнику: <a href="/wiki/User:' + nick +
 '" target="\_blank">u</a>-<a href="/wiki/User\_talk:' + nick +
 '" target="\_blank">ut</a>-<a href="/wiki/Special:Contributions/' + nick +
 '" target="\_blank">c</a>-<a href="/wiki/Special:Editcount/' + nick +
 '" target="\_blank">ec</a>-<a href="/wiki/Special:Log?page=User:' + nick +
 '" target="\_blank">l</a> ', 'normal');
 } else if (message.search(/(заглавная|заглавную)/ig) != -1) {
 output('На, ' + usernick + ', держи: <a href="/wiki/" target="\_blank">Заглавная</a> ', 'normal');
 } else if (message.search(/(смайлы|смайлики)/ig) != -1) {
 output('Вот, ' + usernick + ', пользуйся: <a href="/wiki/MediaWiki:Emoticons" target="\_blank">Хотя, у тя всё равно пони</a> ', 'normal');
 } else if (message.search(/правила/ig) != -1) {
 output(usernick + ', а ну быстро читать: <a href="/wiki/Project:Правила\_чата" target="\_blank">Ты ведь послушный пони!</a> ', 'normal');
 } else if (message.search(/(админы|модеры)/ig) != -1) {
 output('Кр4, ' + usernick + ', найдёшь: <a href="/wiki/Служебная:ListUsers" target="\_blank">Все пользователи</a> ', 'normal');
 } else if (message.search(/(js|javascript)/ig) != -1) {
 output(usernick + ', это <a href="/wiki/Special:MyPage/chat.js" target="\_blank">здесь</a> ', 'normal');
 } else if (message.search(/css/ig) != -1) {
 output(usernick + ', это <a href="/wiki/Special:MyPage/chat.css" target="\_blank">здесь</a> ', 'normal');
 } else if (message.search(/music/ig) != -1) {
 var command = message.split('.');
 if (command[1] == 'd') {
 if (defaultMusic[parseInt(command[2]) - 1] === undefined) {
 output(usernick + ', я не нашёл такой музыки', "normal");
 } else {
 $('iframe').remove();
 output('Загружаю стандартную музыку ' + command[2] + ' (<a href="https://www.youtube.com/watch?v=' + defaultMusic[parseInt(command[2]) - 1] + '" target="\_blank">не работает?</a>) ', "normal");
 $('<iframe style="display: none; position: absolute; z-index: 10000; right: 5px; top: 5px;" src="http://www.youtube.com/embed/' + defaultMusic[parseInt(command[2]) - 1] + '?autoplay=1&loop=1&playlist=' + defaultMusic[parseInt(command[2]) - 1] + '" frameborder="0" allowfullscreen></iframe>').prependTo('.ChatHeader');
 lastMusic = defaultMusic[parseInt(command[2]) - 1];
 }
 } else if (command[1] == 'stop') {
 if (!$('iframe').length) {
 output("Вы не воспроизводили никакой музыки ", "normal");
 } else {
 $('iframe').remove();
 output('Останавливаю музыку ', "normal");
 }
 } else if (command[1] == 'replay') {
 if (!lastMusic.length) {
 output("Вы не воспроизводили никакой музыки ", "normal");
 } else {
 var music = $('<iframe style="display: none; position: absolute; z-index: 10000; right: 5px; top: 5px;" src="http://www.youtube.com/embed/' + lastMusic + '?autoplay=1&loop=1&playlist=' + lastMusic + '" frameborder="0" allowfullscreen></iframe>');
 $('iframe').remove();
 output('Запускаю эту музыку снова ', "normal");
 music.prependTo('.ChatHeader');
 }
 } else if (command[1] == 'toggle') {
 if (!$('iframe').length) {
 output("Вы не воспроизводили никакой музыки ", "normal");
 } else {
 if ($('iframe').css('display') == 'none') {
 $('iframe').css('display', 'block');
 output('Показываю видео ', 'normal');
 } else {
 $('iframe').css('display', 'none');
 output('Прячу видео ', 'normal');
 }
 }
 } else if (command[1] == 'rnd') {
 var num = rnd(1, defaultMusic.length);
 $('iframe').remove();
 output('Загружаю рандомную стандартную музыку ' + num + ' (<a href="https://www.youtube.com/watch?v=' + defaultMusic[num-1] + '" target="\_blank">не работает?</a>) ', "normal");
 $('<iframe style="display: none; position: absolute; z-index: 10000; right: 5px; top: 5px;" src="http://www.youtube.com/embed/' + defaultMusic[num-1] + '?autoplay=1&loop=1&playlist=' + defaultMusic[num-1] + '" frameborder="0" allowfullscreen></iframe>').prependTo('.ChatHeader');
 lastMusic = defaultMusic[num-1];
 } else {
 $('iframe').remove();
 output('Загружаю музыку (<a href="https://www.youtube.com/watch?v=' + command[1] + '" target="\_blank">не работает?</a>) ', "normal");
 $('<iframe style="display: none; position: absolute; z-index: 10000; right: 5px; top: 5px;" src="http://www.youtube.com/embed/' + command[1] + '?autoplay=1&loop=1&playlist=' + command[1] + '" frameborder="0" allowfullscreen></iframe>').prependTo('.ChatHeader');
 lastMusic = command[1];
 }
 } else if (message.search(/active/ig) != -1) {
 output(usernick + ', на: <a href="/wiki/Special:WikiActivity" target="\_blank">WA</a>-<a href="/wiki/Special:RecentChanges" target="\_blank">RC</a>-<a href="/wiki/Special:Log" target="\_blank">LOG</a>', 'normal');
 } else if (message.search(/pi/ig) != -1) {
 output('4о, ' + usernick + ', будущего захотелось? А не дам, дороговато тебе! ', 'normal');
 } else if (message.search(/Привет/ig) != -1) {
 output('Привет,' + usernick + ' ', 'normal');
 } else if (message.search(/me/ig) != -1) {
 output(usernick + ', ты <a href="/wiki/Special:MyPage" target="\_blank">здесь</a> ', 'normal');
 } else if (message.search(/пожалуйста/ig) != -1) {
 output('Ок, ' + usernick + ' ', 'normal');
 } else if (message.search(/listusers/ig) != -1) {
 var listUser = [];
 $('.User').each(function() {
 var userList = $(this).attr('data-user');
 if ($(this).hasClass('chat-mod')) {
 userList += " (м)";
 }
 if ($(this).hasClass('away')) {
 userList += " (о)";
 }
 if ($(this).hasClass('staff')) {
 userList += " (с)";
 }

 listUser.push(userList);
 });

 output(listUser.join('<br/>'), "normal");
 } else if (message.search(/MultiPM/ig) != -1) {
 var users = message.split('|');
 users.shift();
 output("Открываю MultiPM ", "normal");
 $("#PrivateChatList [data-user='" + users[0] + "']").remove();
 mainRoom.openPrivateChat(users);
 } else {
 output('А? ', 'normal');
 }
 }
 $('.fs-body ul').animate({'scrollTop': '9999999'}, 1);
 }
 }
 });
})();

```