View difference between Paste ID: PFPNj5zX and K4KTrddc
SHOW: | | - or go back to the newest paste.
1
--[[
2
pastebin run PFPNj5zX
3
Создано командой SOCC company
4
Nightmare_Night
5
6
P.S. Программа написана на скорую руку
7
Просьба тапками не кидаться
8
9
P.S.S. Функция получения времени хост-машины была взята из API ECS
10
11
]]--
12
13
local component = require("component")
14
local term = require("term")
15
local event = require("event")
16
local fs = require("filesystem")
17
18
local gpu = component.gpu
19
20
local LOG_PATH = "chat_log.txt"
21
22
-- Конвертирует строку в массив
23
function stringToArray(text)
24
    t = {}
25
    text:gsub(".",function(c) table.insert(t,c) end)
26
    return t
27
end
28
29
--Получить текущее реальное время компьютера, хостящего сервер майна
30
function getHostTime(timezone)
31
    timezone = timezone or 2
32
    local file = io.open("/HostTime.tmp", "w")
33
    file:write("")
34
    file:close()
35
    local timeCorrection = timezone * 3600
36
    local lastModified = tonumber(string.sub(fs.lastModified("/HostTime.tmp"), 1, -4)) + timeCorrection
37
    fs.remove("/HostTime.tmp")
38
    local year, month, day, hour, minute, second = os.date("%Y", lastModified), os.date("%m", lastModified), os.date("%d", lastModified), os.date("%H", lastModified), os.date("%M", lastModified), os.date("%S", lastModified)
39
    return tonumber(day), tonumber(month), tonumber(year), tonumber(hour), tonumber(minute), tonumber(second)
40
end
41
42
-- Получет настоящее время, стоящее на Хост-машине
43
function real_time()
44
    local time = {getHostTime(3)}
45
    local text = string.format("%02d:%02d:%02d", time[4], time[5], time[6])
46
    return text
47
end
48
49
-- Проверяет является ли текст окрашенным
50
function isColored(text)
51
    for pos, i in pairs(stringToArray(text)) do
52
        if (i ~= "&") then
53
            if (i ~= " ") then
54
                return false
55
            end
56
        else
57
            return true
58
        end
59
    end
60
61
    return true
62
end
63
64
-- Проверяет в глобальном ли чате написано сообщение
65
function isGlobal(text)
66
    for pos, i in pairs(stringToArray(text)) do
67
        if (i ~= "!") then
68
            if (i ~= " ") then
69
                return false
70
            end
71
        else
72
            return true, pos
73
        end
74
    end
75
    return false
76
end
77
78
-- Делит строку на части
79
function split(str, pat)
80
    local t = {}
81
    local fpat = "(.-)" .. pat
82
    local last_end = 1
83
    local s, e, cap = str:find(fpat, 1)
84
    while s do
85
        if s ~= 1 or cap ~= "" then
86
            table.insert(t,cap)
87
        end
88
        last_end = e+1
89
        s, e, cap = str:find(fpat, last_end)
90
    end
91
    if last_end <= #str then
92
        cap = str:sub(last_end)
93
        table.insert(t, cap)
94
    end
95
    return t
96
end
97
98
-- Устанавливает цвет шрифта в зависимости от патерна
99
function setColor(num)
100
    if (num == "0") then
101
        gpu.setForeground(0x333333)
102
    end
103
104
    if (num == "1") then
105
        gpu.setForeground(0x000099)
106
    end
107
108
    if (num == "2") then
109
        gpu.setForeground(0x006600)
110
    end
111
112
    if (num == "3") then
113
        gpu.setForeground(0x006666)
114
    end
115
116
    if (num == "4") then
117
        gpu.setForeground(0x660000)
118
    end
119
120
    if (num == "5") then
121
        gpu.setForeground(0x660066)
122
    end
123
124
    if (num == "6") then
125
        gpu.setForeground(0xFF8000)
126
    end
127
128
    if (num == "7") then
129
        gpu.setForeground(0xA0A0A0)
130
    end
131
132
    if (num == "8") then
133
        gpu.setForeground(0x404040)
134
    end
135
136
    if (num == "9") then
137
        gpu.setForeground(0x3399FF)
138
    end
139
140
    if (num == "a") then
141
        gpu.setForeground(0x99FF33)
142
    end
143
144
    if (num == "b") then
145
        gpu.setForeground(0x00FFFF)
146
    end
147
148
    if (num == "c") then
149
        gpu.setForeground(0xFF3333)
150
    end
151
152
    if (num == "d") then
153
        gpu.setForeground(0xFF00FF)
154
    end
155
156
    if (num == "e") then
157
        gpu.setForeground(0xFFFF00)
158
    end
159
160
    if (num == "f") then
161
        gpu.setForeground(0xFFFFFF)
162
    end
163
end
164
165
-- Выводит сообщение
166
function writeMessage(text)
167
    local t = split(text, "&")
168
    for pos, i in pairs(t) do
169
        if (pos == 1 and not isColored(text)) then
170
            io.write(i)
171
        else
172
            setColor(string.sub(i, 1, 1))
173
            io.write(string.sub(i, 2))
174
        end
175
    end
176
end
177
178
-- Выводит остальную часть сообщения
179
function message(nick, msg, isGlobal, pos)
180
    local type = ""
181
    if (isGlobal) then msg = string.sub(msg, pos + 1) type = "G" else type = "L" end
182
183
    local file = fs.open(LOG_PATH, "a")
184
    file:write("[" .. real_time() .. "] [" .. type .. "] " .. nick .. ": " .. msg .. "\n")
185
    file:close()
186
187
    gpu.setForeground(0x00FFFF)
188
    io.write("[" .. real_time() .. "] ")
189
    gpu.setForeground(0xFFFFFF)
190
    if (type == "G") then
191
        gpu.setForeground(0xFF9933)
192
    else
193
        gpu.setForeground(0xFFFFFF)
194
    end
195
    io.write("[" .. type .. "] ")
196
    gpu.setForeground(0x00FF00)
197
    io.write(nick)
198
    gpu.setForeground(0xFFFFFF)
199
    io.write(": ")
200
    writeMessage(msg, l)
201
    io.write("\n")
202
end
203
   print("Ожидание первого сообщения...")
204-
local c, fs = require("component"), require("filesystem")
204+
 
205-
local gpu = c.gpu
205+
    local _, add, nick, msg = event.pull("chat_message") 
206-
local TC, RO, RN, RD, TPS = 1, 0, 0, 0
206+
    term.clear()
207
    local type, pos = isGlobal(msg)
208-
local admins = {
208+
    message(nick, msg, type, pos)
209-
    {"max32","макс"},
209+
 
210-
    {"OSSO","OSSO"},
210+
 
211-
    {"Garou","Garou"},
211+
    while true do
212-
    {"__HAPKOMAH__","нарик"},
212+
 
213-
    {"LiwMorgan","ливМорган"},
213+
      local _, add, nick, msg = event.pull("chat_message") 
214-
    {"Alpaka_Masha","альпака"},
214+
      local type, pos = isGlobal(msg)
215-
    {"Turgor","тургор"}
215+
      message(nick, msg, type, pos)
216
 
217
    end