Advertisement
Guest User

bot

a guest
Mar 29th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 49.70 KB | None | 0 0
  1. --|============================|
  2. --|     Бот для глобал чата.   |
  3. --|       Автор: SkyDrive_     |
  4. --| Проект McSkill, cервер HTC |
  5. --|         22.12.2016         |
  6. --|     Последнее обновление   |
  7. --|        21.03.2017          |
  8. --|Modded by: Tekyera, krovyaka|
  9. --|        Version: 2.22       |
  10. --|============================|
  11. local component = require("component")
  12. local term = require("term")
  13. local event = require("event")
  14. local unicode=require("unicode")
  15. local serial = require("serialization")
  16. local computer = require("computer")
  17. local kro = require("kro")
  18.  
  19. local g = component.gpu
  20. local d = component.debug
  21. local c = component.chat_box
  22. computer.removeUser("Tekyera")
  23. computer.removeUser("Astro")
  24.  
  25. local mutes = {}
  26. local WORLD = 0 --Номер строительного мира (в котором строятся игроки)
  27. local BOT_NAME = "❻ §8[§9Ассистент§8] §3Vanessa§f: " --Преффикс и имя бота
  28. local VAIP = "29.03.2017" --Дата последнего вайпа
  29. local TIMER_DAY = 3600 --Кд на смену времени суток в секундах
  30. local TIMER_SUN = 3600 --Кд на смену дождя в секундах
  31. local TIMER_MUTE = 7200 --Кд на votemute в секундах
  32. local MUTE_TIMER = 10 --Время, на которое не реагирует бот, после выдачи мута
  33. local HELLO_TIMER = 120 --Кд на приветствие
  34. local BYE_TIMER = 120 --Кд на прощание
  35. local MUTE_DIF = 5 --Разница в голосах, чтоб замутить игрока
  36. local COLOR1 = "§b" --Цвет основного текста
  37. local COLOR2 = "§a" --Цвет выделенных слов
  38. local COLOR_CMD = 0xffff00 --Цвет консоли
  39. --Список модеров. Над указать цвет, либо поставить 2 любых символа перед ником
  40. local MODS = {{"&8[&4ТехАдмин&8] - ","&8lLuffy"}, {"&8[&9Главный модератор&8] - ","&3Astro"}, {"&8[&9Дизайнер&8] - ","&3Tekyera"}, {"&8[&3Старший модератор&8] - ","&bMakcu"}, {"&8[&3Старший модератор&8] - ","&3Shyvana"}, {"&8[&4Модератор&8] - ","&6PIXON"}, {"&8[&2Помощник&8] - ","&2eaglewow"},
  41. {"&8[&aСтажер&8] - ","&aALEX"}, {"&8[&aСтажер&8] - ","&aPETARD"}, {"&8[&aСтажер&8] - ","&aSilverGamers"}, {"&8[&aСтажер&8] - ","&aDark_Nonstop"}, {"&8[&aСтажер&8] - ","&aSynDrom"}}
  42.  
  43. local MODSLIST = "lLuffyAstroTekyeraMakcuShyvanaPIXOHeaglewow"
  44. --Слова, за которые бот даёт мут
  45. local MAT = {"бля", "сука", "пидор", "пидар", "чмо ", "ёбырь", "ёбаный", "нихуя", "ёбнутый", "ебись","пидр", "педик", "хуй", "хуя", "хуи", "нахуй", "похуй", "хули ", "хуёвый", "хуесос", "хуеглот", "отъебись","мудак", "мудила", "мудень", "долбаёб", "долбоёб", "хуета", "пизд","ебать", "ебал", "ебу", "ебло", "уебан", "уёбок", "уёбки", "ахуеть","ахуительно", "заебись", "заебал", "ебет", "курва", "ебацца", "нехуя", "ебацо", "ибаца", "ибацца", "ебанат", "уебище","уёбище","выебать", "блядина", "кончеглот", "выебу", "хуйня", "мудозвон", "выблядок", "еблище", "впиздячил","жидоёб", "Выблядовал", "мразь","4mo","blyat","blyad","ebal","cyka","suka","pidor","pidar","hui","huesos","ueban","ебанный","хуёво","-мать", "залуп", "гандон", "гондон", "xyi", "xui", "наебал", "наебывают", "наёбывают",
  46. }
  47. local SUIC = {"f57", "#f57", "f58", "#f58", "явигре", "#явигре", "я_в_игре", "тихимдом", "#тихийдом", "тихий_дом", "#4:20", "#4.20", "морекитов",
  48. "#морекитов", "синийкит", "синий_кит", "#синийкит", "#синий_кит",
  49. }
  50. local WORDS = {"солнышко", "зайка", "пупсик", "котик", "сладкий", "милый", "медвежонок", "ангелочек", "одуванчик", "малыш", "кисик", "любимый", "родной", "симпотяжка", "львеночек", "тигреночек", "пушистик", "мой герой", "персик", "пончик", "котенок"}
  51. local MASS = {"как", "чем", "почему"}
  52. local MASS2 = {"приватить", "заприватить"}
  53. local MASS3 = {"отключить", "выключить","убрать", "оффнуть", "вырубить", "офф"}
  54. local MASS4 = {"пвп", "pvp"}
  55. local MASS5 = {"убрать", "выключить", "отключить", "вырубить", "оффнуть", "очистить", "снять"}
  56. local MASS6 = {"сетку", "полосы", "полосочки", "zone", "зону", "выделение", "линии"}
  57. local MASS7 = {"привет", "прив", "ку", "q", "qq", "здаров", "здарова", "добрый день", "добрый вечер", "доброе утро",
  58. "здравствуйте", "здрасьте", "дратути", "хай"}
  59. local MASS8 = {"бб", "bb", "пока", "досвидания", "досвиданья", "досвидули","спокойной"}
  60.  
  61. local timer_sun, timer_day, timer_mute, yes, no = 0, 0, 0, 1, 0
  62. local hello_timer, bye_timer = 0, 0
  63. local vsun, vday, vmute = false, false, false
  64. local vnick = {}
  65. local lastmsg={}
  66. local mute = {}
  67. local mute_nick, muted_nick
  68. local glob, loc = {}, {"Инициализация...", "Программа успешно запущена..."}
  69. g.setResolution(160, 40)
  70. term.clear()
  71. c.setName("§6G§7")
  72.  
  73. local RULES = { --Правила проекта
  74. {"1.1", "Любой человек, зарегестрировавшийся на проекте, тем самым соглашается со всеми правилами, перечисленными ниже."},
  75. {"1.2", "Незнание правил не освобождает вас от ответственности."},
  76. {"1.3", "Администрация имеет право менять правила в любой момент без уведомления игрока."},
  77. {"1.4", "Запрещено представляться сотрудником администрации, использовать мат/оскорбления в нике, использовать неприличные ники, ники связанные с нацизмом, ники Администрации, ники похожие на них, ники, состоящие только из спец.символов, а так же использовать в имени игрового персонажа приставки (Admin, Server, Mod, Help, OP и т.п.).", "Наказание: Бан навсегда."},
  78. {"1.5", "Администратор, вправе наказать игрока по причине, не указанной в настоящих правилах."},
  79. {"1.6", "Средства, потраченные на донат, не возвращаются вам ни при каких обстоятельствах."},
  80. {"1.7", "Сервис бесплатен и предоставляется «как есть» без каких-либо гарантий правильной работы. Администрация не возвращает вещи, потерянные в результате бага, отката, смерти игрока, нестабильной работы сервера и т.п."},
  81. {"1.8", "Запрещено изменять игровой клиент, а также использовать/распространять/обсуждать дюпы, программы, скрипты, макросы, автокликеры, упрощающие поиск ресурсов, и дающие преимущество в игре, вредящие игровому процессу. Использование багов (ошибок, дырок) плагинов, сервера, игры - также является нечестной игрой и приравнивается к читам.", "Наказание: Пожизненный бан."},
  82. {"1.9", "Попытки оправдания своих действий путем толкования правил в вашу пользу могут привести к бану. Будьте честными."},
  83. {"1.10", "Запрещено намеренно дестабилизировать работу, создавать лаги/сломанные чанки, вызывать падения сервера.", "Наказание: Бан навсегда."},
  84. {"1.11", "Запрещено подставлять/лжесвидетельствовать против игроков или подделывать улики/доказательства. Шантажировать игроков/модераторов с целью собственной выгоды, угрожая опубликовать его(её) нарушение. Жалобы на нарушения должны быть поданы сразу при обнаружении нарушения или не поданы вовсе.", "Наказание: Тюрьма от 2-х до 7-и дней. При рецидиве – Бан на 30 дней."},
  85. {"1.12", "Запрещается покупка/продажа игровых ресурсов, покупка/продажа игрового аккаунта и прочих услуг за реальные деньги, обмен на другие игровые ценности, которы не связанны с проэктом McSkill, а также передача игрового аккаунта третьим лицам.", "Наказание: Пожизненный бан."},
  86. {"1.13", "Запрещено использовать неофициальные (скачанные не с нашего сайта) лаунчеры для запуска игры.", "Наказание: Пожизненный бан."},
  87. {"1.14", "Запрещено использовать /fly, /god против враждебных NPC. ", "Наказание: бан на 1 день. При рецидиве - Бан на 7 дней."},
  88. {"2.1", "Главное правило строительства – сначала привать, потом строй! Любая незаприваченная постройка переходит во владения игрока заприватевшего её."},
  89. {"2.2", "Запрещено создавать ничтожно малые приваты. Минимальный приват - 16х16х16 блоков (1 чанк).", "Наказание: Удаление привата. За рецедив - Бан на 30 дней."},
  90. {"2.3", "Запрещено разрушать, переделывать постройки, не принадлежащие вам (кроме случая если вы добавлены в приват или постройка не запривачена),так же блокировать доступ к чужим приватам, выстраивая стены, вырывая ямы, разливая любые жидкости и иными способами.", "Наказание: Бан на 7 дней. За рецидив – Бан на 30 дней."},
  91. {"2.4", "Запрещены постройки, не имеющие смысл (столбы, глубокие и узкие ямы и т.п.).", "Наказание: Снос постройки. Если постройка вредит игроку - бан на 1 день. За рецедив - бан от 2 до 7 дней."},
  92. {"2.5", "Запрещены неприличные постройки, представляющие из себя нецензурные выражения, имеющие форму чего-либо непристойного, нацистские символы, пропаганду нацизма, национализма, наркотических веществ и т.д и т.п.", "Наказание: Бан на 1-7 дней и снос постройки. При рецидиве – Бан на 14 дней."},
  93. {"2.6", "Запрещаются постройки, имеющие рекламу других проектов и их названия, а также реклама на табличках, в названии приватов/варпов, в названиях игровых предметов, кличках животных и т.д.", "Наказание: Бан навсегда и удаление постройки/таблички/варпа/привата."},
  94. {"2.7", "Соблюдайте законы физики. Постройки, не соблюдающие законы физики (дома в воздухе) наказуемы. Исключения: Самолет, висящий в небе или воздушный шар и т.п.", "Наказание: Предупреждение. Если недочёты не исправлены – снос постройки и бан на 2 дня."},
  95. {"2.8", "Постройка и использование АФК машин запрещено.", "Наказание: Бан на 2 дня. За рецидив - Бан на 14 дней."},
  96. {"2.9", "Запрещено стоить некрасивые постойки вблизи спавна (коробки и тп.), безпричинно разрушать рельеф.", "Наказание: Удаление постройки, востановленние теретории."},
  97. {"2.10", "Запрещено любым способом обходить ограничения на чанк. ", "Наказание: Убийство всех животных на территории и снос механизмов. За рецидив - бан на 7 дней."},
  98. {"3.1", "Запрещается ставить точку дома/варпа на чужой территории без разрешения её владельца.", "Наказание: Ваша точка /sethome переносится на спавн, а вы получаете 1 день бана."},
  99. {"3.2", "Запрещается ставить неприличные скины и плащи: Адам, Ева, Гитлер, обнажённых людей и т.п.", "Наказание: Бан на 1 день, чтобы сменить скин/плащ. За рецидив – Бан на 14 дней."},
  100. {"3.3", "Запрещается заманивать игроков в ловушки любым способом рекламы, запросом на телепортацию, обманом и т.д.", "Наказание: Бан на 7 дней. За рецидив – Бан на 30 дней."},
  101. {"3.4", "Запрещается убивать чужих мирных животных, намеренно выталкивать их за пределы привата, присваивать себе, если они находятся на территории чужого привата.", "Наказание: Бан на 7 дней. При рецидиве – Бан на 14 дней."},
  102. {"3.5", "Запрещено мешать проведению ивентов, а также нарушать установленные правила ивента.", "Наказание: Бан на 12 часов."},
  103. {"3.6", "Запрещено оскорблять других игроков путём употребления не цензурных выражений в названиях предметов, варпов, приватов, табличек, надписей на скинах и плащах, животных. Употреблять чужой ник в названии предмета/животного и т.д.", "Наказание: Бан на 1 день и удаление вещи/привата и т.д. За рецидив – Бан на 14 дней."},
  104. {"3.7", "Другой игрок не обязан возвращать вам потерянные вами вещи, если он получил их убив вас в ПВП поединке или же вы случайно выбросили вещь."},
  105. {"3.8", "Запрещено обманывать игроков, для получения собственной выгоды.", "Наказание: Бан на 7 дней. За рецидив – Бан на 30 дней."},
  106. {"3.9", "При блокировке аккаунта какого либо игрока, все игровые ценности, предметы в инвентаре, территория, содержимое сундуков и прочее не подлежат передаче другим игрокам или возврату."},
  107. {"3.10", "В случае если игрок не входил в игру более 30 дней, любые его игровые ценности могут быть изъяты и удалены."},
  108. {"3.11", "Если вы добровольно добавили игрока в свой регион и Вас обокрали, удалили с привата и т.д - это полностью Ваши проблемы."},
  109. {"3.12", "Запрещены любого вида действия, направленные на нарушение экономики сервера.", "Наказание: Бан на 1 день. За рецидив – Бан на 14 дней."},
  110. {"3.13", "Запрещено продавать солнечные панели, квантовые генераторы, любые приборы, напечатанные на 3D принтере, без указания того, что это 3D модель.", "Наказание: бан от 1 до 7 дней."},
  111. {"3.14", "Запрещено использование голосового чата во время проведения ивента.", "Наказание: Предупреждение. За рецидив - бан от 15 мин. до 2-ух часов."},
  112. {"3.15", "Запрещено любыми способами выталкивать игроков из зоны без пвп (в зону с пвп), с любой целью (убить, забрать вещи, заманить в ловушку и прочее).", "Наказание: Бан на 7 дней. За рецидив – Бан на 30 дней."},
  113. {"4.1", "Запрещен флуд. Флуд - сообщения, не имеющие смысловой нагрузки, флуд в ЛС, флуд командами, а также повторяющиеся три и более раз подряд сообщения, злоупотребления большим количеством символов приравниваются к флуду..", "Наказание: Мут от 30 минут до 10 часов. За рецидив – мут на 1 день. Флуд командами - от 1-го до 24 часов бана."},
  114. {"4.2", "Запрещается оскорблять других игроков/модераторов/администраторов, а также оскорбления в адрес сервера/проекта и т.д.", "Наказание: Мут от 30 мин до 24 часов. За рецидив – бан от 1-го до 7 дней."},
  115. {"4.3", "Запрещается употреблять ругательства, нецензурные слова, мат в любом виде, в том числе завуалированный, а также эвфемизмы, мат на другом языке и т.д и т.п.", "Наказание: Мут от 30 мин до 8 часов. За рецидив – бан от 1-го до 7 дней."},
  116. {"4.4", "Запрещен капс в сообщениях за исключением аббревиатур и названий приборов в игре. Капсом является сообщение состоящее целиком (или одно из слов сообщения) из ЗАГЛАВНЫХ букв или большого их количества.", "Наказание: Мут от 15 минут до 2-х часов. За рецидив – мут от 2-х до 12 часов."},
  117. {"4.5", "Запрещается пропаганда нацизма, расизма, наркотиков и алкоголизма.", "Наказание: Мут от 1 часа до 3 дней. За рецидив – Бан на 30 дней."},
  118. {"4.6", "Запрещается сообщения сексуального характера (действия сексуального характера), угрозы расправой в реальной жизни, угрозы баном/мутом.киком и т.д. (кроме предупреждений от модераторов/администраторов проекта).", "Наказание: Мут от 1 часа до 1 дня. За рецидив – Бан от 1 дня."},
  119. {"4.7", "Запрещены сообщения содержащие рекламу или скрытую рекламу других проектов, сайтов и т.д.", "Наказание: Пожизненный мут или бан."},
  120. {"4.8", "Рекламу одного и того же магазина, варпа, товара, услуг можно давать раз в 5 минут. Частые сообщения с рекламой приравниваются к флуду.", "Наказание: Мут от 30 минут до 10 часов. За рецидив – мут на 1 день. Флуд командами - от 1-го до 24 часов бана."},
  121. {"4.9", "Запрещено выпрашивать ресурсы, абилки, подарки, премиумы, креатив и т.д. Просить сменить погоду или время суток.", "Наказание: Мут от 30 минут до 10 часов. За рецидив – мут на 1 день. Флуд командами - от 1-го до 24 часов бана."},
  122. {"4.10", "Запрещено создание конфликтов, путем отправки в чат провокационных сообщений.", "Наказание: Мут от 1 часа до 3-х дней. За рецидив – Бан 1-го до 7 дней."},
  123. {"4.11", "Публичная критика/оспаривание/обсуждение действий администрации проекта запрещена. Для этого существует специальный раздел форума, где можно подать жалобу.", "Наказание: Мут от 6 до 24 часов. За рецидив – бан на 7 дней."},
  124. {"4.12", "Запрещено пускать ложные сведения о вайпе, обо всех вайпах всегда пишут в новостях на сайте и на форуме.", "Наказание: Мут от 6 до 24 часов. За рецидив бан на 30 дней.."},
  125. {"4.13", "Запрещено оскорбление родителей других игроков, неприличные намёки и т.д.", "Наказание: Бан на 3 дня. За рецидив - Бан на 30 дней."},
  126. {"4.14", "Запрещено флудить командами бота Vanessa.", "Наказание: мут на 2 часа. За рецидив - бан от 1 до 3 дней."},
  127. {"4.15", "Запрещена пропаганда суицида, сообщения, подразумевающие его, в том числе завуалированные, намеки и т.д.", "Наказание: мут на 2 дня. За рецидив - мут навсегда."},
  128. }
  129.  
  130. function addMute(user,sec)
  131.   mutes[user] = os.time() + (100*sec)
  132. end
  133.  
  134. function checkMute(user)
  135.   if mutes[user] ~= nil then
  136.   if os.time() < mutes[user] then
  137.     return true
  138.     else return false end
  139.   else return false
  140.     end
  141.   end
  142.  
  143. function com_block(com)
  144.     component.opencb.execute(com)
  145. end
  146.  
  147. function caps(msg,nick) --Мут за капс
  148.   if unicode.upper(msg2)==msg2 and unicode.len(msg2)>=12
  149.   then
  150.     if string.find(msg,"1")==nil and string.find(msg,"2")==nil and string.find(msg,"3")==nil and string.find(msg,"4")==nil and string.find(msg,"5")==nil and string.find(msg,"6")==nil and string.find(msg,"7")==nil and string.find(msg,"8")==nil and string.find(msg,"9")==nil and string.find(msg,"0")==nil
  151.     then
  152.     tmute(nick,3)
  153.     end
  154.   end
  155. end
  156.  
  157. function flood(msg, nick)
  158.     if lastmsg[nick] == nil or msg ~= lastmsg[nick].msgp then
  159.         lastmsg[nick] = {
  160.             msgp = msg,
  161.             date = computer.uptime(),
  162.             kol = 1
  163.         }
  164.     elseif lastmsg[nick].date <= computer.uptime() - 12 then
  165.         lastmsg[nick] = {
  166.             msgp = msg,
  167.             date = computer.uptime(),
  168.             kol = 1
  169.         }
  170.     else
  171.         lastmsg[nick].kol = lastmsg[nick].kol + 1
  172.     end
  173.     if lastmsg[nick].kol > 2 then
  174.         tmute(nick, 2)
  175.         lastmsg[nick] = {
  176.             msgp = msg,
  177.             date = computer.uptime(),
  178.             kol = 1
  179.         }
  180.     elseif lastmsg[nick].kol > 1 and (string.find(msg, "куплю") ~= nil or string.find(msg, "продам") ~= nil or string.find(msg, "warp") ~= nil) then
  181.         tmute(nick, 5)
  182.         lastmsg[nick] = {
  183.             msgp = msg,
  184.             date = computer.uptime(),
  185.             kol = 1
  186.         }
  187.     end
  188. end
  189.  
  190.  
  191. function suics(msg, nick) --Мут за китов в глобал чат
  192.     for i = 1, #SUIC do
  193.         if string.find(msg, SUIC[i]) ~= nil then
  194.             t1 = " " .. string.match(msg, SUIC[i])
  195.             t2 = "!" .. string.match(msg, SUIC[i])
  196.             if string.find(msg, t1) ~= nil or string.find(msg, t2) ~= nil then
  197.                 if #mute ~= 0 then
  198.                     for j = 1, #mute do
  199.                         if nick == mute[j][1] then
  200.                             return false
  201.                         end
  202.                     end
  203.                 end
  204.                 tmute(nick,4)
  205.                 return true
  206.             end
  207.         end
  208.     end
  209.     return false
  210. end
  211.  
  212. function mats(msg, nick) --Мут за мат в глобал чат
  213.     for i = 1, #MAT do
  214.         if string.find(msg, MAT[i]) ~= nil then
  215.             t1 = " " .. string.match(msg, MAT[i])
  216.             t2 = "!" .. string.match(msg, MAT[i])
  217.             if string.find(msg, t1) ~= nil or string.find(msg, t2) ~= nil then
  218.                 if #mute ~= 0 then
  219.                     for j = 1, #mute do
  220.                         if nick == mute[j][1] then
  221.                             return false
  222.                         end
  223.                     end
  224.                 end
  225.                 tmute(nick,1)
  226.                 return true
  227.             end
  228.         end
  229.     end
  230.     return false
  231. end
  232.  
  233. function hello(msg) --Приветствие
  234.     if string.find(msg, "!всем") ~= nil or string.find(msg, "!vsem") ~= nil or string.find(msg, " всем") ~= nil or string.find(msg, " vsem") ~= nil then
  235.         for i = 1, #MASS7 do
  236.             if string.find(msg, MASS7[i]) ~= nil and hello_timer == 0 then
  237.                 hello_timer = HELLO_TIMER
  238.                 c.say(BOT_NAME .. COLOR1 .. "Привет, " .. WORDS[math.random(1, #WORDS)] .. " :*")
  239.                 return true
  240.             end
  241.         end
  242.     end
  243.     return false
  244. end
  245.  
  246. function bye(msg) --Прощание
  247.     if string.find(msg, "!всем") ~= nil or string.find(msg, "!vsem") or string.find(msg, " всем") ~= nil or string.find(msg, " vsem") ~= nil then
  248.         for i = 1, #MASS8 do
  249.             if string.find(msg, MASS8[i]) ~= nil and bye_timer == 0 then
  250.                 bye_timer = BYE_TIMER
  251.                 c.say(BOT_NAME .. COLOR1 .. "Всего хорошего, " .. WORDS[math.random(1, #WORDS)] .. " :*")
  252.                 return true
  253.             end
  254.         end
  255.     end
  256.     return false
  257. end
  258.  
  259. function privat(msg) --Ответ на вопрос: Как приватить
  260.     for i = 1, #MASS do
  261.         if string.find(msg, MASS[i]) ~= nil then
  262.             for i = 1, #MASS2 do
  263.                 if string.find(msg, MASS2[i]) ~= nil then
  264.                     c.say(BOT_NAME .. COLOR1 .. "Команды для привата: " .. COLOR2 .. "/warp world §8➢ " .. COLOR2 .. "/rtp §8➢ " .. COLOR1 .. "вместо топорика: " .. COLOR2 .. "/zone §8➢ " .. COLOR2 .. "/rg claim <name>")
  265.                     return true
  266.                 end
  267.             end
  268.         end
  269.     end
  270.     return false
  271. end
  272.  
  273.  
  274. local mutepp = {
  275.   {time = "2 hour", pp = "4.3", word = "ругайся",sec = 7200},
  276.   {time = "40 min", pp = "4.1", word = "флуди",sec = 2400},
  277.   {time = "warn", pp = "4.4", word = "капси",sec = 0},
  278.   {time = "2 day", pp = "4.15", word = "говори так",sec = 172800},
  279.   {time = "40 min", pp = "4.8", word = "рекламируй так часто",sec = 2400},
  280. }
  281.  
  282. function tmute(nick,reason)
  283.   if string.find(MODSLIST,nick)~=nil then
  284.     c.say(BOT_NAME .. COLOR1 .. "Ты же модератор, " .. nick .. ". Веди себя приличнее и не ".. mutepp[reason].word .. "! :*")
  285.   else
  286.     if mutepp[reason].time == "warn" then
  287.       com_block("warn " .. nick .. " " .. mutepp[reason].pp .. "_from_kelira_with_love")
  288.       c.say(BOT_NAME .. COLOR1 .. "Не " .. mutepp[reason].word .. ", " .. WORDS[math.random(1, #WORDS)] .. " :*")
  289.     else
  290.     com_block("tempmute " .. nick .. " " .. mutepp[reason].time .. " " .. mutepp[reason].pp .. "_from_kelira_with_love")
  291.     c.say(BOT_NAME .. COLOR1 .. "Не " .. mutepp[reason].word .. ", " .. WORDS[math.random(1, #WORDS)] .. " :*")
  292.     table.insert(mute, {nick, MUTE_TIMER})
  293.     addMute(nick,mutepp[reason].sec)
  294.     end
  295. end
  296. end
  297.  
  298.  
  299. function pvp(msg) --Ответ на вопрос: Как оффнуть пвп
  300.     if string.find(msg, "как") ~= nil then
  301.         for i = 1, #MASS3 do
  302.             if string.find(msg, MASS3[i]) ~= nil then
  303.                 for i = 1, #MASS4 do
  304.                     if string.find(msg, MASS4[i]) ~= nil then
  305.                         c.say(BOT_NAME .. COLOR1 .. "Отключить пвп вы можете через команду §8➢ " .. COLOR2 .. "/buyflag" .. COLOR1 .. ". Цена: " .. COLOR2 .. "100 " .. COLOR1 .. "эм.")
  306.                         return true
  307.                     end
  308.                 end
  309.             end
  310.         end
  311.     end
  312.     return false
  313. end
  314.  
  315. function vaip(msg) --Ответ на вопрос: Когда был вайп
  316.     if string.find(msg, "когда") ~= nil or string.find(msg, "давно") ~= nil then
  317.             if string.find(msg, "вайп") ~= nil then
  318.                 c.say(BOT_NAME .. COLOR1 .. "Вайп был: " .. COLOR2 .. VAIP .. COLOR1 .. ", а вот когда будет - неизвестно.")
  319.                 return true
  320.             end
  321.     end
  322.     return false
  323. end
  324.  
  325. function spawn(msg) --Ответ на вопрос: Как выйти со спавна
  326.     if string.find(msg, "как") ~= nil or string.find(msg, "где") ~= nil then
  327.         if string.find(msg, "выйти") ~= nil or string.find(msg, "покинуть") ~= nil or string.find(msg, "выход") ~= nil then
  328.             if string.find(msg, "спавн") ~= nil then
  329.                 c.say(BOT_NAME .. COLOR1 .. "Чтобы выйти со спавна, напиши" .. COLOR2 .. " /warp world " .. COLOR1 .. ":*")
  330.                 return true
  331.             end
  332.         end
  333.     return false
  334.     end
  335. end
  336.  
  337. function rebura(msg)
  338.   if string.find(msg, "как") ~= nil then
  339.     if string.find(msg, "сменит") ~= nil or string.find(msg, "включ") ~= nil or string.find(msg, "переключ") ~= nil then
  340.             if string.find(msg, "бур") ~= nil or string.find(msg, "гравиту") ~= nil then
  341.                 c.say(BOT_NAME .. COLOR1 .. "Сменить режим инструмента можно, используя сочетание клавиш " .. COLOR2 .. "ПКМ + I")
  342.                 return true
  343.             end
  344.           end
  345.     end
  346.     return false
  347. end --Ответ на вопрос: Как сменить режим бура
  348.  
  349. function zrenie(msg)
  350.     if string.find(msg, "ночн") ~= nil then
  351.         if string.find(msg, "как") ~= nil then
  352.             if string.find(msg, "зрение") ~= nil or string.find(msg, "вид") ~= nil then
  353.                 c.say(BOT_NAME .. COLOR1 .. "Включить ночное зрение на квантовом или нано-шлеме можно сочетанием клавиш " .. COLOR2 .. "Alt + I")
  354.                 return true
  355.             end
  356.         end
  357.     end
  358.     return false
  359. end --Ответ на вопрос: Как включить ночное зрение
  360.  
  361. function skull(msg)
  362.         if string.find(msg, "череп") ~= nil then
  363.             if string.find(msg, "как") ~= nil or string.find(msg, "где") ~= nil then
  364.                 c.say(BOT_NAME .. COLOR1 .. "Мешочки можно получать на ивентах. Например, побеждая на " .. COLOR2 .. "/warp spleef" .. COLOR1 .. " или " .. COLOR2 .. "/warp king" .. COLOR1 .. ". Об их начале заранее сообщают модераторы!")
  365.                 return true
  366.             end
  367.     end
  368.     return false
  369. end --Ответ на вопрос: Как получить череп
  370.  
  371. function kost(msg)
  372.         if string.find(msg, "костолом") ~= nil then
  373.             if string.find(msg, "где") ~= nil or string.find(msg, "найти") ~= nil or string.find(msg, "попасть") ~= nil then
  374.                 --c.say(BOT_NAME .. COLOR1 .. "Портал к боссу " .. COLOR2 .. "Костолом" .. COLOR1 .. " находится на спавне в разделе " .. COLOR2 .. "Ивенты")
  375.                 return true
  376.             end
  377.     end
  378.     return false
  379. end --Ответ на вопрос: Где костолом
  380.  
  381. function polet(msg)
  382.     if string.find(msg, "как") ~= nil then
  383.         if string.find(msg, "летать") ~= nil or string.find(msg, "полёт") ~= nil or string.find(msg, "лететь") ~= nil or string.find(msg, "полет") ~= nil then
  384.             c.say(BOT_NAME .. COLOR1 .. "Вкл/откл полёт на гравитационном жилете или улучшенном наножилете можно клавишей " .. COLOR2 .. "F" .. COLOR1 .. ". На квантовом нагруднике это делается сочетанием клавиш " .. COLOR2 .. "Ctrl + I" )
  385.             return true
  386.         end
  387.     end
  388.     return false
  389. end
  390. --Ответ на вопрос: Как летать
  391.  
  392. function planir(msg)
  393.     if string.find(msg, "как") ~= nil then
  394.         if string.find(msg, "планировани") ~= nil or string.find(msg, "планировать") ~= nil or string.find(msg, "левитировать") ~= nil or string.find(msg, "левитац") ~= nil then
  395.             c.say(BOT_NAME .. COLOR1 .. "Режим планирования или левитации на гравитационном жилете или улучшенном наножилете включается/отключается сочетанием клавиш " .. COLOR2 .. "Пробел + I")
  396.             return true
  397.         end
  398.     end
  399.     return false
  400. end
  401. --Ответ на вопрос: Как планировать
  402.  
  403. function sel(msg) --Ответ на вопрос: Как убрать сетку
  404.     if string.find(msg, "как") ~= nil then
  405.         for i = 1, #MASS5 do
  406.             if string.find(msg, MASS5[i]) ~= nil then
  407.                 for i = 1, #MASS6 do
  408.                     if string.find(msg, MASS6[i]) ~= nil then
  409.                         c.say(BOT_NAME .. COLOR1 .. "Чтобы убрать сетку, пропиши §8➢ " .. COLOR2 .. "//sel")
  410.                         return true
  411.                     end
  412.                 end
  413.             end
  414.         end
  415.     end
  416.     return false
  417. end
  418.  
  419. function help(msg, nick) --Команда -help (Список доступных команд)
  420.     if msg == "-help" then
  421.         com_block("w " .. nick .. " " .. COLOR1 .. "Все команды вводятся в " .. COLOR2 .. "локал " .. COLOR1 .. "чат.")
  422.         com_block("w " .. nick .. " " .. COLOR2 .. "-voteday §8➢ " .. COLOR1 .. "Начать голосование для смены времени суток на " .. COLOR2 .. "6:00 " .. COLOR1 .. "утра.")
  423.         com_block("w " .. nick .. " " .. COLOR2 .. "-votesun §8➢ " .. COLOR1 .. "Начать голосование для отключения дождя.")
  424.         com_block("w " .. nick .. " " .. COLOR2 .. "-votemute §8➢ " .. COLOR1 .. "Голосование, чтобы замутить игрока на 2 часа. Разница должна быть в +" .. MUTE_DIF .. " голосов, иначе вы получите мут на 10 мин.")
  425.         com_block("w " .. nick .. " " .. COLOR2 .. "-mods §8➢ " .. COLOR1 .. "Модераторы в сети.")
  426.         com_block("w " .. nick .. " " .. COLOR2 .. "-inf §8➢ " .. COLOR1 .. "Узнать информацию о нужном п.п.")
  427.         com_block("w " .. nick .. " " .. COLOR2 .. "-seen §8➢ " .. COLOR1 .. "Получить онлайн/оффлайн время выбранного игрока.")
  428.         return true
  429.     end
  430.     return false
  431. end
  432.  
  433. function mods(msg, nick) --Команда -mods (Список Администрации на сервере)
  434.     if msg == "-mods" then
  435.         for i = 1, #MODS do
  436.             if computer.addUser(string.sub(MODS[i][2],3,unicode.len(MODS[i][2]))) ~= nil then
  437.                 com_block("w " .. nick .. " &aOnline &8➢ " .. MODS[i][1] .. MODS[i][2])
  438.                 computer.removeUser(string.sub(MODS[i][2],3,unicode.len(MODS[i][2])))
  439.             end
  440.         end
  441.         return true
  442.     end
  443.     return false
  444. end
  445.  
  446. function inf(msg, nick)
  447.     if msg == "-inf" then
  448.         com_block("w " .. nick .. " " .. COLOR1 .. " Введите пункт правил. Пример: " .. COLOR2 .. "-inf 4.1")
  449.     elseif string.find(msg, "-inf") ~= nil then
  450.         for i = 1, #RULES do
  451.             if string.sub(msg, 6, unicode.len(msg)) == RULES[i][1] then
  452.                 com_block("w " .. nick .. " " .. COLOR1 .. RULES[i][2])
  453.                 if RULES[i][3] ~= nil then
  454.                     com_block("w " .. nick .. " " .. COLOR2 .. RULES[i][3])
  455.                 end
  456.                 return true
  457.             end
  458.         end
  459.         com_block("w " .. nick .. " " .. COLOR1 .. " Пункт правил введён неверно")
  460.     end
  461.     return false
  462. end
  463.  
  464. function voteday(msg, nick) --Голосование на день
  465.     if msg == "-voteday" then
  466.         if d.getWorld(WORLD).getTime()%24000 > 14000 then
  467.             if timer_day == 0 and vsun == false and vmute == false then
  468.                 c.say(BOT_NAME .. COLOR1 .. "Игрок §8➢ " .. COLOR2 .. nick .. COLOR1 .. " начал голосование за смену времени суток на " .. COLOR2 .. "6:00 " .. COLOR1 .. "утра.")
  469.                 c.say(BOT_NAME .. COLOR1 .. "Введите §8➢ " .. COLOR2 .. "-yes " .. COLOR1 .. "или " .. COLOR2 .. "-no " .. COLOR1 .. "в " .. COLOR2 .. "локал " .. COLOR1 .. "чат. На голосование 1 мин.")
  470.                 timer_day = TIMER_DAY
  471.                 table.insert(vnick, nick)
  472.                 vday = true
  473.                 return true
  474.             elseif (vsun) or (vmute) then
  475.                 com_block("w " .. nick .. " " .. COLOR1 .. " Идёт другое голосование")
  476.             else
  477.                 com_block("w " .. nick .. " " .. COLOR1 .. " Голосование будет доступно через §8➢ " .. COLOR2 .. timer_day .. COLOR1 .. " сек.")
  478.             end
  479.         else
  480.             com_block("w " .. nick .. " " .. COLOR1 .. " Голосование доступно только ночью")
  481.         end
  482.     end
  483.     return false
  484. end
  485.  
  486. function votesun(msg, nick) --Голосование на дождь
  487.     if msg == "-votesun" then
  488.         if d.getWorld(WORLD).isRaining() == true then
  489.             if timer_sun == 0 and vday == false and vmute == false then
  490.                 c.say(BOT_NAME .. COLOR1 .. "Игрок §8➢ " .. COLOR2 .. nick .. COLOR1 .. " начал голосование за отключение дождя.")
  491.                 c.say(BOT_NAME .. COLOR1 .. "Введите §8➢ " .. COLOR2 .. "-yes " .. COLOR1 .. "или " .. COLOR2 .. "-no " .. COLOR1 .. "в " .. COLOR2 .. "локал " .. COLOR1 .. "чат. На голосование 1 мин.")
  492.                 timer_sun = TIMER_SUN
  493.                 table.insert(vnick, nick)
  494.                 vsun = true
  495.                 return true
  496.             elseif (vday) or (vmute) then
  497.                 com_block("w " .. nick .. " " .. COLOR1 .. " Идёт другое голосование")
  498.             else
  499.                 com_block("w " .. nick .. " " .. COLOR1 .. " Голосование будет доступно через §8➢ " .. COLOR2 .. timer_sun .. COLOR1 .. " сек.")
  500.             end
  501.         else
  502.             com_block("w " .. nick .. " " .. COLOR1 .. " В данный момент солнечная погода")
  503.         end
  504.     end
  505.     return false
  506. end
  507.  
  508. function votemute(msg, nick) --Голосование на мут
  509.     if string.find(msg, "-votemute") ~= nil then
  510.         if computer.addUser(string.sub(msg,11,unicode.len(msg))) ~= nil then
  511.             computer.removeUser(string.sub(msg,11,unicode.len(msg)))
  512.           if string.find(nick,string.sub(msg,11,unicode.len(msg)))==nil then
  513.             if string.find(MODSLIST,string.sub(msg,11,unicode.len(msg)))==nil then
  514.               if timer_mute == 0 and vday == false and vsun == false then
  515.                 c.say(BOT_NAME .. COLOR1 .. "Игрок §8➢ " .. COLOR2 .. nick .. COLOR1 .. " хочет замутить на 2 часа игрока §8➢ " .. COLOR2 .. string.sub(msg,11,unicode.len(msg)))
  516.                 c.say(BOT_NAME .. COLOR1 .. "Введите §8➢ " .. COLOR2 .. "-yes " .. COLOR1 .. "или " .. COLOR2 .. "-no " .. COLOR1 .. "в " .. COLOR2 .. "локал " .. COLOR1 .. "чат. Разница должна быть в" .. COLOR2 .. " +" .. MUTE_DIF .. COLOR1 .. " голосов. У вас 1 мин.")
  517.                 timer_mute = TIMER_MUTE
  518.                 mute_nick = nick
  519.                 muted_nick = string.sub(msg,11,unicode.len(msg))
  520.                 table.insert(vnick, nick)
  521.                 vmute = true
  522.                 return true
  523.             elseif (vday) or (vsun) then
  524.                 com_block("w " .. nick .. " " .. COLOR1 .. " Идёт другое голосование!")
  525.             else
  526.                 com_block("w " .. nick .. " " .. COLOR1 .. " Голосование будет доступно через §8➢ " .. COLOR2 .. timer_mute .. COLOR1 .. " сек.")
  527.             end
  528.           else com_block("w " .. nick .. " " .. COLOR1 .. " Ты не можешь голосовать против модератора!") end
  529.           else com_block("w " .. nick .. " " .. COLOR1 .. " Ты не можешь голосовать против самого себя!") end
  530.         else
  531.             com_block("w " .. nick .. " " .. COLOR1 .. " Игрок не найден")
  532.         end
  533.     end
  534.     return false
  535. end
  536.  
  537. function vote(msg, nick)
  538.     if msg == "-yes" or msg == "-no" then
  539.         if (vday) or (vsun) or (vmute) then
  540.             for i = 1, #vnick do
  541.                 if vnick[i] == nick then
  542.                     com_block("w " .. nick .. " " .. COLOR1 .. " Вы уже голосовали")
  543.                     return
  544.                 end
  545.             end
  546.             table.insert(vnick, nick)
  547.             if msg == "-yes" then
  548.                 yes = yes + 1
  549.             elseif msg == "-no" then
  550.                 no = no + 1
  551.             end
  552.             com_block("w " .. nick .. " " .. COLOR1 .. " Ваш голос засчитан")
  553.         else
  554.             com_block("w " .. nick .. " " .. COLOR1 .. " Нет активных голосований")
  555.         end
  556.     end
  557. end
  558.  
  559. function draw()
  560.     term.clear()
  561.     g.setForeground(COLOR_CMD)
  562.     g.set(1,1,"||================== Локал чат ==================||============================================= Глобальный чат ==============================================||")
  563.     g.set(1,40,"||=== Консоль ===================================||==================================================================== Автор: SkyDrive_ - Проект: McSkill ===||")
  564.     g.fill(1,1,2,40,"|")
  565.     g.fill(50,1,2,40,"|")
  566.     g.fill(159,1,2,40,"|")
  567.     g.setForeground(0xffffff)
  568.     for i = 1, #loc do
  569.         g.set(4,i+1,"[ ]" .. loc[i])
  570.         g.setForeground(0x00ff00)
  571.         g.set(5,i+1, "L")
  572.         g.setForeground(0xffffff)
  573.     end
  574.     for i = 1, #glob do
  575.         g.set(53,i+1,"[ ]" .. glob[i])
  576.         g.setForeground(0xff9900)
  577.         g.set(54,i+1, "G")
  578.         g.setForeground(0xffffff)
  579.     end
  580. end
  581.  
  582. function message(msg, nick)
  583.     msg2 = msg
  584.     msg = unicode.lower(msg)
  585.     if string.sub(msg, 1,1) == "!" and checkMute(nick)==false then
  586.         local flood = flood(msg, nick)
  587.         local caps = caps(msg, nick)
  588.         local mats = mats(msg, nick)
  589.         local suics = suics(msg, nick)
  590.         local privat = privat(msg)
  591.         local pvp = pvp(msg)
  592.         local sel = sel(msg)
  593.         local vaip = vaip(msg)
  594.         local rebura = rebura(msg)
  595.         local zrenie = zrenie(msg)
  596.         local polet = polet(msg)
  597.         local planir = planir(msg)
  598.         local hello = hello(msg)
  599.         local bye = bye(msg)
  600.         local kost = kost(msg)
  601.         local skull = skull(msg)
  602.         local spawn = spawn(msg)
  603.        
  604.         if (flood) or (caps) or (mats) or (suics) or (privat) or (pvp) or (sel) or (vaip) or (hello) or (bye) or (rebura) or (zrenie) or (polet) or (planir) or (skull) or (kost) or (spawn) then
  605.             if #glob == 38 then
  606.                 table.remove(glob, 1)
  607.             end
  608.             table.insert(glob, nick .. ":" .. msg2)
  609.             draw()
  610.         end
  611.     else
  612.         local help = help(msg, nick)
  613.         local votesun = votesun(msg, nick)
  614.         local voteday = voteday(msg, nick)
  615.         local votemute = votemute(msg2, nick)
  616.         local user_say = user_say(msg2, nick)
  617.         local mods = mods(msg, nick)
  618.         local inf = inf(msg, nick)
  619.         local spamon = spamon(msg, nick)
  620.         local seen = seen(msg, nick)
  621.         vote(msg, nick)
  622.         if (voteday) or (votesun) or (votemute) or (help) or (mods) or (inf) or (seen) then  
  623.             if #loc == 38 then
  624.                 table.remove(loc, 1)
  625.             end
  626.             table.insert(loc, nick .. ":" .. msg2)
  627.             draw()
  628.         end
  629.     end
  630. end
  631.  
  632. function timer()
  633.     if timer_sun > 0 then
  634.         if timer_sun == TIMER_SUN - 60 then
  635.             c.say(BOT_NAME .. COLOR1 .. "Голосование окончено за: " .. COLOR2 .. yes .. COLOR1 .. ", против: " .. COLOR2 .. no .. COLOR1 .. ".")
  636.             if yes >= no then
  637.                 c.say(BOT_NAME .. COLOR1 .. "Дождь выключен")
  638.                 d.getWorld(WORLD).setRaining(false)
  639.             else
  640.                 c.say(BOT_NAME .. COLOR1 .. "Дождь не выключен")
  641.             end
  642.             vnick = {}
  643.             vsun = false
  644.             yes, no = 1, 0
  645.         end
  646.         timer_sun = timer_sun - 1
  647.     end
  648.     if timer_day > 0 then
  649.         if timer_day == TIMER_DAY - 60 then
  650.             c.say(BOT_NAME .. COLOR1 .. "Голосование окончено за: " .. COLOR2 .. yes .. COLOR1 .. ", против: " .. COLOR2 .. no .. COLOR1 .. ".")
  651.             if yes >= no then
  652.                 c.say(BOT_NAME .. COLOR1 .. "Время суток установлено на " .. COLOR2 .. "6:00 " .. COLOR1 .. "утра.")
  653.                 d.getWorld(WORLD).setTime(0)
  654.             else
  655.                 c.say(BOT_NAME .. COLOR1 .. "Время суток не изменено")
  656.             end
  657.             vnick = {}
  658.             vday = false
  659.             yes, no = 1, 0
  660.         end
  661.         timer_day = timer_day - 1
  662.     end
  663.     if timer_mute > 0 then
  664.         if timer_mute == TIMER_MUTE - 60 then
  665.             c.say(BOT_NAME .. COLOR1 .. "Голосование окончено за: " .. COLOR2 .. yes .. COLOR1 .. ", против: " .. COLOR2 .. no .. COLOR1 .. ".")
  666.             if (yes - no) >= MUTE_DIF then
  667.                 com_block("tempmute " .. muted_nick .. " 2 hour votemute_from_kelira_with_love")
  668.                 c.say(BOT_NAME .. COLOR1 .. "Прости " .. WORDS[math.random(1, #WORDS)] .. ", но их слишком много :(")
  669.             else
  670.                 com_block("tempmute " .. mute_nick .. " 10 min votemute_from_kelira_with_love")
  671.                 c.say(BOT_NAME .. COLOR1 .. "Прости " .. WORDS[math.random(1, #WORDS)] .. ", но тебя не поддержали :(")
  672.             end
  673.             mute_nick = ""
  674.             muted_nick = ""
  675.             vnick = {}
  676.             vmute = false
  677.             yes, no = 1, 0
  678.         end
  679.         timer_mute = timer_mute - 1
  680.     end
  681.     if hello_timer > 0 then
  682.         hello_timer = hello_timer - 1
  683.     end
  684.     if bye_timer > 0 then
  685.         bye_timer = bye_timer - 1
  686.     end
  687.     if #mute ~= 0 then
  688.         for i = 1, #mute do
  689.             if mute[i][2] > 0 then
  690.                 mute[i][2] = mute[i][2] - 1
  691.             else
  692.                 table.remove(mute, i)
  693.                 break
  694.             end
  695.         end
  696.     end
  697. end
  698.  
  699. function user_say(msg, nick)
  700.     if string.find(msg, "==") ~= nil and (nick == "SkyDrive_" or nick == "lLuffy" or nick == "Tekyera" or nick == "Astro") then
  701.         c.say(BOT_NAME .. COLOR1 .. unicode.sub(msg,3, unicode.len(msg)))
  702.     end
  703. end
  704.  
  705. function spamon(msg,nick)
  706.   if string.find(msg,"-spam")==1 and (nick == "Astro" or nick == "lLuffy" or nick == "Tekyera" or nick == "Shyvana" or nick == "Makcu") then
  707.     for i=1,5 do
  708.       c.say(BOT_NAME .. COLOR1 .. unicode.sub(msg,7, unicode.len(msg)))
  709.     end
  710.   end
  711. end
  712.  
  713. function seen(msg,nick)
  714.   if string.find(msg,"-seen")==1 then
  715.       kro.exec("w " .. nick .. " " .. kro.getOffline(unicode.sub(msg,7, unicode.len(msg))))
  716.   end
  717. end
  718.  
  719. draw()
  720.  
  721. while true do
  722.     local _, _, nick, msg = event.pull(1, "chat_message")
  723.     if msg ~= nil and nick ~= nil then
  724.         message(msg, nick)
  725.     end
  726.     timer()
  727. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement