Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Импортируем необходимые библиотеки
- local component = require("component")
- local computer = require("computer")
- local GUI = require("libGUI") -- Убедитесь, что путь корректен
- -- Проверяем наличие компонентов
- local chat_box_available = component.isAvailable("chat_box")
- local tablet_available = component.isAvailable("tablet")
- if not chat_box_available and not tablet_available then
- print("Ни компонент chat_box, ни tablet не найдены!")
- return
- end
- -- Определяем используемый интерфейс чата
- local chat_interface = "chat_box" -- По умолчанию используем chat_box
- if tablet_available then
- -- Если доступен компонент tablet, предложим выбрать интерфейс
- print("Доступен компонент tablet. Хотите использовать улучшенный чат для планшета? (yes/no)")
- local choice = io.read()
- if choice:lower() == "yes" then
- chat_interface = "tablet"
- else
- if not chat_box_available then
- print("Компонент chat_box недоступен. Используем tablet.")
- chat_interface = "tablet"
- else
- print("Используем chat_box.")
- chat_interface = "chat_box"
- end
- end
- end
- -- Пути к файлам базы данных
- local dbNamePath = "/home/user/dbName.txt"
- local dbPrefixPath = "/home/user/dbPrefix.txt"
- local dbQAPath = "/home/user/qaDatabase.txt"
- -- Функция для чтения файла и возврата таблицы строк
- local function readFile(path)
- local file = io.open(path, "r")
- local t = {}
- if file then
- for line in file:lines() do
- table.insert(t, line)
- end
- file:close()
- end
- return t
- end
- -- Функция для записи строки в файл
- local function writeFile(path, data)
- local file = io.open(path, "a")
- if file then
- file:write(data .. "\n")
- file:close()
- end
- end
- -- Загрузка имен и префиксов из файлов или установка значений по умолчанию
- local names = readFile(dbNamePath)
- local prefixes = readFile(dbPrefixPath)
- local qaDatabase = {}
- -- Загрузка базы вопросов и ответов
- local qaLines = readFile(dbQAPath)
- for i = 1, #qaLines, 2 do
- local question = qaLines[i]
- local answer = qaLines[i + 1]
- if question and answer then
- qaDatabase[question:lower()] = answer
- end
- end
- -- Функция для сохранения базы вопросов и ответов
- local function saveQADatabase()
- local file = io.open(dbQAPath, "w")
- if file then
- for question, answer in pairs(qaDatabase) do
- file:write(question .. "\n" .. answer .. "\n")
- end
- file:close()
- end
- end
- -- Инициализация настроек бота
- local varConfChat = "§6G" -- Глобальный чат по умолчанию
- local varName = names[1] or "§dВалерия"
- local varPrefix = prefixes[1] or "§bМ§4а§5л§1ы§2ш§3к§aа"
- -- Функция для установки имени бота в chat_box
- local function confChat()
- if chat_interface == "chat_box" then
- chat.setName(varConfChat .. "§8")
- end
- end
- confChat()
- -- Функция управления добавлением имен и префиксов
- local function addToDB(option)
- if option == "добавить имя" then
- print("Введите новое имя:")
- local add = io.read()
- writeFile(dbNamePath, add)
- table.insert(names, add)
- varName = add
- print("Имя обновлено на " .. varName)
- elseif option == "добавить префикс" then
- print("Введите новый префикс:")
- local add = io.read()
- writeFile(dbPrefixPath, add)
- table.insert(prefixes, add)
- varPrefix = add
- print("Префикс обновлен на " .. varPrefix)
- end
- end
- -- Функция выбора имени и префикса из базы
- local function chooseFromDB(option)
- if option == "выбор имя" then
- print("########## Список имен ##########")
- for i, name in ipairs(names) do
- print(i .. ". " .. name)
- end
- print("##########")
- local choice = tonumber(io.read())
- if names[choice] then
- varName = names[choice]
- print("Имя выбрано: " .. varName)
- else
- print("Неверный выбор.")
- end
- elseif option == "выбор префикс" then
- print("########## Список префиксов ##########")
- for i, prefix in ipairs(prefixes) do
- print(i .. ". " .. prefix)
- end
- print("##########")
- local choice = tonumber(io.read())
- if prefixes[choice] then
- varPrefix = prefixes[choice]
- print("Префикс выбран: " .. varPrefix)
- else
- print("Неверный выбор.")
- end
- end
- end
- -- Функция обработки команд
- local function handleCommand(cmd, playerName)
- cmd = cmd:lower()
- if cmd == "имя" then
- print("Введите новое имя:")
- varName = io.read()
- elseif cmd == "префикс" then
- print("Введите новый префикс:")
- varPrefix = io.read()
- elseif cmd == "добавить имя" or cmd == "добавить префикс" then
- addToDB(cmd)
- elseif cmd == "выбор имя" or cmd == "выбор префикс" then
- chooseFromDB(cmd)
- elseif cmd == "глобальный" then
- varConfChat = "§6G"
- confChat()
- print("Чат установлен на глобальный.")
- elseif cmd == "локальный" then
- varConfChat = "§fL"
- confChat()
- print("Чат установлен на локальный.")
- elseif cmd == "добавить вопрос" then
- print("Введите вопрос:")
- local question = io.read():lower()
- print("Введите ответ:")
- local answer = io.read()
- qaDatabase[question] = answer
- saveQADatabase()
- print("Вопрос и ответ добавлены.")
- elseif cmd == "показать вопросы" then
- print("########## Список вопросов ##########")
- for q, a in pairs(qaDatabase) do
- print("Вопрос: " .. q)
- print("Ответ: " .. a)
- print("---------")
- end
- print("##########")
- elseif cmd == "выход" then
- print("Выход из программы.")
- computer.shutdown()
- else
- -- Проверка, есть ли ответ на вопрос
- if qaDatabase[cmd] then
- if chat_interface == "chat_box" then
- chat.say(varConfChat .. " " .. varPrefix .. varName .. "§f: " .. qaDatabase[cmd])
- elseif chat_interface == "tablet" then
- -- Отображение ответа в GUI
- output:addItem(GUI.text(2, #output.children + 1, 0xFFFFFF, varConfChat .. " " .. varPrefix .. varName .. "§f: " .. qaDatabase[cmd]))
- end
- else
- print("Нет ответа на данный вопрос.")
- end
- end
- end
- -- Функция для обновления имени бота при изменении настроек
- local function updateBotName()
- if chat_interface == "chat_box" then
- chat.setName(varConfChat .. "§8")
- end
- -- Для планшета нет необходимости обновлять имя через метод setName
- end
- -- Функция для управления через GUI на планшете
- local function manageViaTablet()
- local application, window = GUI.application()
- window:resize(80, 25)
- window:setTitle("Управление Валерией")
- -- Добавление элементов управления
- window:addChild(GUI.label(2, 2, 76, 1, 0xFFFFFF, "Введите команду или вопрос:"))
- local input = window:addChild(GUI.input(2, 4, 76, 1, 0x000000, 0xFFFFFF, 0x000000, ""))
- local button = window:addChild(GUI.button(2, 6, 10, 3, 0x00FF00, 0xFFFFFF, 0x000000, "Отправить"))
- local output = window:addChild(GUI.multibox(2, 10, 76, 14, 0x000000, 0xFFFFFF))
- button.onTouch = function()
- local cmd = input.text
- handleCommand(cmd, "tablet") -- Можно добавить имя игрока, если доступно
- if qaDatabase[cmd:lower()] then
- output:addItem(GUI.text(2, #output.children + 1, 0xFFFFFF, varConfChat .. " " .. varPrefix .. varName .. "§f: " .. qaDatabase[cmd:lower()]))
- else
- output:addItem(GUI.text(2, #output.children + 1, 0xFF0000, "Нет ответа на данный вопрос."))
- end
- input:setText("")
- end
- application:drawOnScreen()
- application:start()
- end
- -- Основной цикл программы
- local function main()
- if chat_interface == "chat_box" then
- while true do
- -- Обновляем строку чата
- updateBotName()
- -- Вывод меню управления
- print("######### Управление #########")
- print("имя - изменить ник")
- print("префикс - изменить префикс")
- print("локальный/глобальный - изменить чат")
- print("добавить имя - добавить новое имя")
- print("добавить префикс - добавить новый префикс")
- print("выбор имя - выбрать имя из списка")
- print("выбор префикс - выбрать префикс из списка")
- print("добавить вопрос - добавить новый вопрос и ответ")
- print("показать вопросы - показать все вопросы и ответы")
- print("выход - завершить программу")
- print("###############################")
- print("Введите команду или вопрос:")
- -- Чтение ввода пользователя
- local input = io.read()
- handleCommand(input, "chat_box")
- end
- elseif chat_interface == "tablet" then
- manageViaTablet()
- end
- end
- -- Запуск основного цикла
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement