Skip to content

Commit 98d3305

Browse files
committed
Improved muting
1 parent 0e3c465 commit 98d3305

File tree

4 files changed

+137
-113
lines changed

4 files changed

+137
-113
lines changed

resources/irc/meta.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@
124124
<script src="scripts/ads.lua" type="client" />
125125
<script src="scripts/echo.lua" type="server" />
126126
<script src="scripts/irccommands.lua" type="server" />
127+
<script src="scripts/mutes.lua" type="server" />
127128
<script src="scripts/ircclient_server.lua" type="server" />
128129
<script src="scripts/ircclient_client.lua" type="client" />
129130

resources/irc/scripts/irccommands.lua

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,9 @@ addEventHandler("onIRCResourceStart",root,
7676
function (server,channel,user,command,name,...)
7777
if not name then ircNotice(user,"syntax is !mute <name> [reason] [time]") return end
7878
local reason = table.concat({...}," ")
79-
local t = split(reason,40)
80-
local time
81-
if #t > 1 then
82-
time = "("..t[#t]
83-
end
8479
local player = getPlayerFromPartialName(name)
8580
if player then
86-
setPlayerMuted(player,true,reason,ircGetUserNick(user),toMs(time))
81+
setPlayerMuted(player,true,reason,ircGetUserNick(user))
8782
if reason then
8883
outputChatBox(getPlayerName(player).." has been muted by "..ircGetUserNick(user).." ("..reason..")",root,255,0,0)
8984
else
@@ -97,13 +92,13 @@ addEventHandler("onIRCResourceStart",root,
9792

9893
addIRCCommandHandler("!mutes",
9994
function (server,channel,user,command)
100-
local results = executeSQLSelect("ircmutes","player,admin,reason")
95+
local results = executeSQLSelect("ircmutes","player,admin,reason,duration")
10196
if type(results) == "table" then
10297
if #results == 0 then
10398
outputIRC("12* There are no muted players")
10499
else
105100
for i,result in ipairs (results) do
106-
outputIRC("12* "..tostring(result["player"]).." by "..tostring(result["admin"]).." for: "..tostring(result["reason"]))
101+
outputIRC("12* "..tostring(result.player).." by "..tostring(result.admin).." for: "..tostring(result.reason).." during: "..tostring(getTimeString(result.duration)))
107102
end
108103
end
109104
else

resources/irc/scripts/mutes.lua

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
---------------------------------------------------------------------
2+
-- Project: irc
3+
-- Author: MCvarial
4+
-- Contact: [email protected]
5+
-- Version: 1.0.0
6+
-- Date: 31.10.2010
7+
---------------------------------------------------------------------
8+
9+
executeSQLCreateTable("ircmutes","player TEXT, serial TEXT, reason TEXT, admin TEXT, mute TEXT, duration TEXT")
10+
local mutes = {}
11+
12+
-- admin panel interaction
13+
addEvent("aPlayer",true)
14+
addEventHandler("aPlayer",root,
15+
function (player,action,reason,time)
16+
if isPlayerMuted(player) then
17+
executeSQLInsert("ircmutes","'"..tostring(getPlayerName(player)).."','"..tostring(getPlayerSerial(player)).."','"..tostring(reason).."','"..tostring(getPlayerName(source)).."','"..tostring(getRealTime().timestamp*1000).."','"..((time or 0)*1000).."'")
18+
else
19+
executeSQLDelete("ircmutes","serial = '"..tostring(getPlayerSerial(player)).."'")
20+
end
21+
end
22+
)
23+
24+
_setPlayerMuted = setPlayerMuted
25+
function setPlayerMuted (player,muted,reason,admin)
26+
if muted then
27+
local time = getTimeFromString(reason) or 0
28+
executeSQLInsert("ircmutes","'"..tostring(getPlayerName(player)).."','"..tostring(getPlayerSerial(player)).."','"..tostring(reason).."','"..tostring(admin).."','"..tostring(getRealTime().timestamp*1000).."','"..time.."'")
29+
if time > 50 then
30+
mutes[player] = setTimer(setPlayerMuted,time,1,player,false)
31+
end
32+
else
33+
executeSQLDelete("ircmutes","serial = '"..tostring(getPlayerSerial(player)).."'")
34+
if mutes[player] then
35+
mutes[player] = nil
36+
end
37+
end
38+
return _setPlayerMuted(player,muted)
39+
end
40+
41+
addEventHandler("onPlayerUnmute",root,
42+
function ()
43+
executeSQLDelete("ircmutes","serial = '"..tostring(getPlayerSerial(source)).."'")
44+
if mutes[source] then
45+
mutes[source] = nil
46+
end
47+
end
48+
)
49+
50+
addEventHandler("onPlayerJoin",root,
51+
function ()
52+
local result = executeSQLSelect("ircmutes","serial,reason,mute,duration","serial = '"..getPlayerSerial(source).."'")
53+
if result and result[1] then
54+
local time = (tonumber(result[1]["mute"])+tonumber(result[1]["duration"]))-(getRealTime().timestamp*1000)
55+
if time < 50 then
56+
executeSQLDelete("ircmutes","serial = '"..tostring(getPlayerSerial(source)).."'")
57+
else
58+
_setPlayerMuted(source,true)
59+
mutes[source] = setTimer(setPlayerMuted,time,1,source,false)
60+
end
61+
end
62+
end
63+
)
64+
65+
addEventHandler("onPlayerQuit",root,
66+
function ()
67+
if mutes[source] then
68+
killTimer(mutes[source])
69+
mutes[source] = nil
70+
local result = executeSQLSelect("ircmutes","serial,reason,mute,duration","serial = '"..getPlayerSerial(source).."'")
71+
if result and result[1] then
72+
if result[1].duration == 0 then
73+
executeSQLDelete("ircmutes","serial = '"..tostring(getPlayerSerial(source)).."'")
74+
end
75+
end
76+
end
77+
end
78+
)
79+
80+
addEventHandler("onResourceStart",resourceRoot,
81+
function ()
82+
local results = executeSQLSelect("ircmutes","serial,mute,duration")
83+
if type(results) == "table" then
84+
for i,result in ipairs (results) do
85+
local mutetime = tonumber(result["mute"])
86+
local duration = tonumber(result["duration"])
87+
if mutetime and duration and (mutetime+duration) < (getRealTime().timestamp)*1000 then
88+
for i,player in ipairs (getElementsByType("player")) do
89+
if getPlayerSerial(player) == result["serial"] then
90+
_setPlayerMuted(player,false)
91+
outputChatBox("* "..getPlayerName(player).." has been unmuted",root,255,0,0)
92+
end
93+
end
94+
executeSQLDelete("ircmutes","serial = '"..tostring(result["serial"]).."'")
95+
end
96+
end
97+
end
98+
end
99+
)
100+
101+
local times = {}
102+
times["ms"] = 1
103+
times["sec"] = 1000
104+
times["secs"] = 1000
105+
times["second"] = 1000
106+
times["seconds"] = 1000
107+
times["min"] = 60000
108+
times["mins"] = 60000
109+
times["minute"] = 60000
110+
times["minutes"] = 60000
111+
times["hour"] = 3600000
112+
times["hours"] = 3600000
113+
times["day"] = 86400000
114+
times["days"] = 86400000
115+
times["week"] = 604800000
116+
times["weeks"] = 604800000
117+
times["month"] = 2592000000
118+
times["months"] = 2592000000
119+
function getTimeFromString (string)
120+
if type(string) ~= "string" then return false end
121+
local time = 0
122+
for i,v in pairs (times) do
123+
local start,stop = string.find(string,i)
124+
if start then
125+
local number = string.sub(string,start-2,start-1)
126+
if number and tonumber(number) then
127+
number = tonumber(number)
128+
time = time + number*v
129+
end
130+
end
131+
end
132+
return time
133+
end

resources/irc/scripts/utility.lua

Lines changed: 0 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@
66
-- Date: 31.10.2010
77
---------------------------------------------------------------------
88

9-
executeSQLCreateTable("ircmutes","player TEXT, serial TEXT, reason TEXT, admin TEXT, mute TEXT, duration TEXT")
10-
local mutes = {}
11-
129
------------------------------------
1310
-- Utility
1411
------------------------------------
@@ -85,108 +82,6 @@ function getTimeStamp ()
8582
return "["..(time.year + 1900).."-"..(time.month+1).."-"..time.monthday.." "..time.hour..":"..time.minute..":"..time.second.."]"
8683
end
8784

88-
_setPlayerMuted = setPlayerMuted
89-
function setPlayerMuted (player,muted,reason,admin,time)
90-
if muted then
91-
executeSQLInsert("ircmutes","'"..tostring(getPlayerName(player)).."','"..tostring(getPlayerSerial(player)).."','"..tostring(reason).."','"..tostring(admin).."','"..tostring(getRealTime().timestamp*1000).."','"..tostring(time).."'")
92-
mutes[player] = setTimer(setPlayerMuted,time,1,player,false)
93-
else
94-
executeSQLDelete("ircmutes","serial = '"..tostring(getPlayerSerial(player)).."'")
95-
if mutes[player] then
96-
mutes[player] = nil
97-
end
98-
end
99-
return _setPlayerMuted(player,muted)
100-
end
101-
102-
addEventHandler("onPlayerUnmute",root,
103-
function ()
104-
executeSQLDelete("ircmutes","serial = '"..tostring(getPlayerSerial(source)).."'")
105-
if mutes[source] then
106-
mutes[source] = nil
107-
end
108-
end
109-
)
110-
111-
addEventHandler("onPlayerJoin",root,
112-
function ()
113-
local result = executeSQLSelect("ircmutes","serial,reason,mute,duration","serial = '"..getPlayerSerial(source).."'")
114-
if result and result[1] then
115-
local time = (tonumber(result[1]["mute"])+tonumber(result[1]["duration"]))-(getRealTime().timestamp*1000)
116-
if time < 50 then
117-
executeSQLDelete("ircmutes","serial = '"..tostring(getPlayerSerial(source)).."'")
118-
else
119-
_setPlayerMuted(source,true)
120-
mutes[source] = setTimer(setPlayerMuted,time,1,source,false)
121-
end
122-
end
123-
end
124-
)
125-
126-
addEventHandler("onPlayerQuit",root,
127-
function ()
128-
if mutes[source] then
129-
killTimer(mutes[source])
130-
mutes[source] = nil
131-
end
132-
end
133-
)
134-
135-
addEventHandler("onResourceStart",resourceRoot,
136-
function ()
137-
local results = executeSQLSelect("ircmutes","serial,mute,duration")
138-
if type(results) == "table" then
139-
for i,result in ipairs (results) do
140-
local mutetime = tonumber(result["mute"])
141-
local duration = tonumber(result["duration"])
142-
if mutetime and duration and (mutetime+duration) < (getRealTime().timestamp)*1000 then
143-
for i,player in ipairs (getElementsByType("player")) do
144-
if getPlayerSerial(player) == result["serial"] then
145-
_setPlayerMuted(player,false)
146-
outputChatBox("* "..getPlayerName(player).." has been unmuted",root,255,0,0)
147-
end
148-
end
149-
executeSQLDelete("ircmutes","serial = '"..tostring(result["serial"]).."'")
150-
end
151-
end
152-
end
153-
end
154-
)
155-
156-
local times = {}
157-
times["ms"] = 1
158-
times["sec"] = 1000
159-
times["secs"] = 1000
160-
times["second"] = 1000
161-
times["seconds"] = 1000
162-
times["min"] = 60000
163-
times["mins"] = 60000
164-
times["minute"] = 60000
165-
times["minutes"] = 60000
166-
times["hour"] = 3600000
167-
times["hours"] = 3600000
168-
times["day"] = 86400000
169-
times["days"] = 86400000
170-
times["week"] = 604800000
171-
times["weeks"] = 604800000
172-
times["month"] = 2592000000
173-
times["months"] = 2592000000
174-
function toMs (time)
175-
if not time then return false end
176-
time = string.sub(time,2,-2)
177-
local t = split(time,32)
178-
local factor = 0
179-
local ms = 0
180-
for i,v in ipairs (t) do
181-
if tonumber(v) then
182-
factor = tonumber(v)
183-
elseif times[v] then
184-
ms = ms + (factor * times[v])
185-
end
186-
end
187-
return ms
188-
end
189-
19085
function msToTimeStr(ms)
19186
if not ms then
19287
return ''

0 commit comments

Comments
 (0)