CCCPaste

ChatBox

-- /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("Остановлено.")