Advertisement
Guest User

Untitled

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