-- /home/ChatBox — с обратным отсчётом и корректным Ctrl+C local component = require("component") local event = require("event") local term = require("term") local chat = component.chat_box or component.chat assert(chat, "Chat Box не найден. Поставь рядом/через Adapter.") -- настройки local NAME = "botWarpS" local DISTANCE = 32767 -- сделай локальный радиус; ставь 32767 для «везде» local PERIOD = 3600 -- 10 минут local MESSAGE = "§2✌ ⫸Warp S⫷ ✌ §4➤ &3Магазин ⣿ §5Механизмы ⣿ §aОбмен §aруды ⣿ §eКачалка опыта ✔" if chat.setName then pcall(chat.setName, NAME) end if chat.setDistance then pcall(chat.setDistance, DISTANCE) end local function say(msg) if chat.say then chat.say(msg) elseif chat.sendMessage then chat.sendMessage(msg) end end local function drawStatus(remain) local m = math.floor(remain / 60) local s = remain % 60 term.clear() term.setCursor(1,1) io.write(("Сообщение: %s\n"):format(MESSAGE)) io.write(("Отправитель: %s\n"):format(NAME)) io.write(("Следующая отправка через: %02d:%02d\n"):format(m, s)) io.write("Нажми Ctrl+C для остановки.\n") end -- первое сообщение сразу pcall(say, MESSAGE) drawStatus(PERIOD) -- слушаем Ctrl+C и считаем секунды local running = true event.listen("interrupted", function() running = false end) while running do for t = PERIOD, 1, -1 do drawStatus(t) -- ждём любое событие до 1 сек; если было Ctrl+C, running станет false local name = event.pull(1) if not running or name == "interrupted" then running = false; break end end if not running then break end pcall(say, MESSAGE) drawStatus(PERIOD) end event.ignore("interrupted", function() running=false end) term.clear() term.setCursor(1,1) print("Остановлено.")