Advertisement
FeyMen

VALERA

Jan 4th, 2025 (edited)
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 11.08 KB | None | 0 0
  1. -- Импортируем необходимые библиотеки
  2. local component = require("component")
  3. local computer = require("computer")
  4. local GUI = require("libGUI") -- Убедитесь, что путь корректен
  5.  
  6. -- Проверяем наличие компонентов
  7. local chat_box_available = component.isAvailable("chat_box")
  8. local tablet_available = component.isAvailable("tablet")
  9.  
  10. if not chat_box_available and not tablet_available then
  11.     print("Ни компонент chat_box, ни tablet не найдены!")
  12.     return
  13. end
  14.  
  15. -- Определяем используемый интерфейс чата
  16. local chat_interface = "chat_box" -- По умолчанию используем chat_box
  17.  
  18. if tablet_available then
  19.     -- Если доступен компонент tablet, предложим выбрать интерфейс
  20.     print("Доступен компонент tablet. Хотите использовать улучшенный чат для планшета? (yes/no)")
  21.     local choice = io.read()
  22.     if choice:lower() == "yes" then
  23.         chat_interface = "tablet"
  24.     else
  25.         if not chat_box_available then
  26.             print("Компонент chat_box недоступен. Используем tablet.")
  27.             chat_interface = "tablet"
  28.         else
  29.             print("Используем chat_box.")
  30.             chat_interface = "chat_box"
  31.         end
  32.     end
  33. end
  34.  
  35. -- Пути к файлам базы данных
  36. local dbNamePath = "/home/user/dbName.txt"
  37. local dbPrefixPath = "/home/user/dbPrefix.txt"
  38. local dbQAPath = "/home/user/qaDatabase.txt"
  39.  
  40. -- Функция для чтения файла и возврата таблицы строк
  41. local function readFile(path)
  42.     local file = io.open(path, "r")
  43.     local t = {}
  44.     if file then
  45.         for line in file:lines() do
  46.             table.insert(t, line)
  47.         end
  48.         file:close()
  49.     end
  50.     return t
  51. end
  52.  
  53. -- Функция для записи строки в файл
  54. local function writeFile(path, data)
  55.     local file = io.open(path, "a")
  56.     if file then
  57.         file:write(data .. "\n")
  58.         file:close()
  59.     end
  60. end
  61.  
  62. -- Загрузка имен и префиксов из файлов или установка значений по умолчанию
  63. local names = readFile(dbNamePath)
  64. local prefixes = readFile(dbPrefixPath)
  65. local qaDatabase = {}
  66.  
  67. -- Загрузка базы вопросов и ответов
  68. local qaLines = readFile(dbQAPath)
  69. for i = 1, #qaLines, 2 do
  70.     local question = qaLines[i]
  71.     local answer = qaLines[i + 1]
  72.     if question and answer then
  73.         qaDatabase[question:lower()] = answer
  74.     end
  75. end
  76.  
  77. -- Функция для сохранения базы вопросов и ответов
  78. local function saveQADatabase()
  79.     local file = io.open(dbQAPath, "w")
  80.     if file then
  81.         for question, answer in pairs(qaDatabase) do
  82.             file:write(question .. "\n" .. answer .. "\n")
  83.         end
  84.         file:close()
  85.     end
  86. end
  87.  
  88. -- Инициализация настроек бота
  89. local varConfChat = "§6G" -- Глобальный чат по умолчанию
  90. local varName = names[1] or "§dВалерия"
  91. local varPrefix = prefixes[1] or "§bМ§4а§5л§1ы§2ш§3к§aа"
  92.  
  93. -- Функция для установки имени бота в chat_box
  94. local function confChat()
  95.     if chat_interface == "chat_box" then
  96.         chat.setName(varConfChat .. "§8")
  97.     end
  98. end
  99.  
  100. confChat()
  101.  
  102. -- Функция управления добавлением имен и префиксов
  103. local function addToDB(option)
  104.     if option == "добавить имя" then
  105.         print("Введите новое имя:")
  106.         local add = io.read()
  107.         writeFile(dbNamePath, add)
  108.         table.insert(names, add)
  109.         varName = add
  110.         print("Имя обновлено на " .. varName)
  111.     elseif option == "добавить префикс" then
  112.         print("Введите новый префикс:")
  113.         local add = io.read()
  114.         writeFile(dbPrefixPath, add)
  115.         table.insert(prefixes, add)
  116.         varPrefix = add
  117.         print("Префикс обновлен на " .. varPrefix)
  118.     end
  119. end
  120.  
  121. -- Функция выбора имени и префикса из базы
  122. local function chooseFromDB(option)
  123.     if option == "выбор имя" then
  124.         print("########## Список имен ##########")
  125.         for i, name in ipairs(names) do
  126.             print(i .. ". " .. name)
  127.         end
  128.         print("##########")
  129.         local choice = tonumber(io.read())
  130.         if names[choice] then
  131.             varName = names[choice]
  132.             print("Имя выбрано: " .. varName)
  133.         else
  134.             print("Неверный выбор.")
  135.         end
  136.     elseif option == "выбор префикс" then
  137.         print("########## Список префиксов ##########")
  138.         for i, prefix in ipairs(prefixes) do
  139.             print(i .. ". " .. prefix)
  140.         end
  141.         print("##########")
  142.         local choice = tonumber(io.read())
  143.         if prefixes[choice] then
  144.             varPrefix = prefixes[choice]
  145.             print("Префикс выбран: " .. varPrefix)
  146.         else
  147.             print("Неверный выбор.")
  148.         end
  149.     end
  150. end
  151.  
  152. -- Функция обработки команд
  153. local function handleCommand(cmd, playerName)
  154.     cmd = cmd:lower()
  155.     if cmd == "имя" then
  156.         print("Введите новое имя:")
  157.         varName = io.read()
  158.     elseif cmd == "префикс" then
  159.         print("Введите новый префикс:")
  160.         varPrefix = io.read()
  161.     elseif cmd == "добавить имя" or cmd == "добавить префикс" then
  162.         addToDB(cmd)
  163.     elseif cmd == "выбор имя" or cmd == "выбор префикс" then
  164.         chooseFromDB(cmd)
  165.     elseif cmd == "глобальный" then
  166.         varConfChat = "§6G"
  167.         confChat()
  168.         print("Чат установлен на глобальный.")
  169.     elseif cmd == "локальный" then
  170.         varConfChat = "§fL"
  171.         confChat()
  172.         print("Чат установлен на локальный.")
  173.     elseif cmd == "добавить вопрос" then
  174.         print("Введите вопрос:")
  175.         local question = io.read():lower()
  176.         print("Введите ответ:")
  177.         local answer = io.read()
  178.         qaDatabase[question] = answer
  179.         saveQADatabase()
  180.         print("Вопрос и ответ добавлены.")
  181.     elseif cmd == "показать вопросы" then
  182.         print("########## Список вопросов ##########")
  183.         for q, a in pairs(qaDatabase) do
  184.             print("Вопрос: " .. q)
  185.             print("Ответ: " .. a)
  186.             print("---------")
  187.         end
  188.         print("##########")
  189.     elseif cmd == "выход" then
  190.         print("Выход из программы.")
  191.         computer.shutdown()
  192.     else
  193.         -- Проверка, есть ли ответ на вопрос
  194.         if qaDatabase[cmd] then
  195.             if chat_interface == "chat_box" then
  196.                 chat.say(varConfChat .. " " .. varPrefix .. varName .. "§f: " .. qaDatabase[cmd])
  197.             elseif chat_interface == "tablet" then
  198.                 -- Отображение ответа в GUI
  199.                 output:addItem(GUI.text(2, #output.children + 1, 0xFFFFFF, varConfChat .. " " .. varPrefix .. varName .. "§f: " .. qaDatabase[cmd]))
  200.             end
  201.         else
  202.             print("Нет ответа на данный вопрос.")
  203.         end
  204.     end
  205. end
  206.  
  207. -- Функция для обновления имени бота при изменении настроек
  208. local function updateBotName()
  209.     if chat_interface == "chat_box" then
  210.         chat.setName(varConfChat .. "§8")
  211.     end
  212.     -- Для планшета нет необходимости обновлять имя через метод setName
  213. end
  214.  
  215. -- Функция для управления через GUI на планшете
  216. local function manageViaTablet()
  217.     local application, window = GUI.application()
  218.    
  219.     window:resize(80, 25)
  220.     window:setTitle("Управление Валерией")
  221.    
  222.     -- Добавление элементов управления
  223.     window:addChild(GUI.label(2, 2, 76, 1, 0xFFFFFF, "Введите команду или вопрос:"))
  224.     local input = window:addChild(GUI.input(2, 4, 76, 1, 0x000000, 0xFFFFFF, 0x000000, ""))
  225.     local button = window:addChild(GUI.button(2, 6, 10, 3, 0x00FF00, 0xFFFFFF, 0x000000, "Отправить"))
  226.     local output = window:addChild(GUI.multibox(2, 10, 76, 14, 0x000000, 0xFFFFFF))
  227.    
  228.     button.onTouch = function()
  229.         local cmd = input.text
  230.         handleCommand(cmd, "tablet") -- Можно добавить имя игрока, если доступно
  231.         if qaDatabase[cmd:lower()] then
  232.             output:addItem(GUI.text(2, #output.children + 1, 0xFFFFFF, varConfChat .. " " .. varPrefix .. varName .. "§f: " .. qaDatabase[cmd:lower()]))
  233.         else
  234.             output:addItem(GUI.text(2, #output.children + 1, 0xFF0000, "Нет ответа на данный вопрос."))
  235.         end
  236.         input:setText("")
  237.     end
  238.    
  239.     application:drawOnScreen()
  240.     application:start()
  241. end
  242.  
  243. -- Основной цикл программы
  244. local function main()
  245.     if chat_interface == "chat_box" then
  246.         while true do
  247.             -- Обновляем строку чата
  248.             updateBotName()
  249.            
  250.             -- Вывод меню управления
  251.             print("######### Управление #########")
  252.             print("имя                - изменить ник")
  253.             print("префикс            - изменить префикс")
  254.             print("локальный/глобальный - изменить чат")
  255.             print("добавить имя       - добавить новое имя")
  256.             print("добавить префикс   - добавить новый префикс")
  257.             print("выбор имя          - выбрать имя из списка")
  258.             print("выбор префикс      - выбрать префикс из списка")
  259.             print("добавить вопрос    - добавить новый вопрос и ответ")
  260.             print("показать вопросы    - показать все вопросы и ответы")
  261.             print("выход              - завершить программу")
  262.             print("###############################")
  263.             print("Введите команду или вопрос:")
  264.            
  265.             -- Чтение ввода пользователя
  266.             local input = io.read()
  267.             handleCommand(input, "chat_box")
  268.         end
  269.     elseif chat_interface == "tablet" then
  270.         manageViaTablet()
  271.     end
  272. end
  273.  
  274. -- Запуск основного цикла
  275. main()
  276.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement