mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-24 03:47:58 +02:00
Merge pull request #201 from ComfyFactory/changes_discord
Minor changes to logging to discord
This commit is contained in:
commit
01cc7036ac
@ -7,7 +7,6 @@ local Server = require 'utils.server'
|
|||||||
local random = math.random
|
local random = math.random
|
||||||
local sqrt = math.sqrt
|
local sqrt = math.sqrt
|
||||||
local floor = math.floor
|
local floor = math.floor
|
||||||
local ceil = math.ceil
|
|
||||||
local format = string.format
|
local format = string.format
|
||||||
local match = string.match
|
local match = string.match
|
||||||
local insert = table.insert
|
local insert = table.insert
|
||||||
@ -146,76 +145,6 @@ function Public.ternary(c, t, f)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function CurrentDate(z)
|
|
||||||
z = floor(z / 86400) + 719468
|
|
||||||
local era = floor(z / 146097)
|
|
||||||
local doe = floor(z - era * 146097)
|
|
||||||
local yoe = floor((doe - doe / 1460 + doe / 36524 - doe / 146096) / 365)
|
|
||||||
local y = floor(yoe + era * 400)
|
|
||||||
local doy = doe - floor((365 * yoe + yoe / 4 - yoe / 100))
|
|
||||||
local mp = floor((5 * doy + 2) / 153)
|
|
||||||
local d = ceil(doy - (153 * mp + 2) / 5 + 1)
|
|
||||||
local m = floor(mp + (mp < 10 and 3 or -9))
|
|
||||||
return y + (m <= 2 and 1 or 0), m, d
|
|
||||||
end
|
|
||||||
|
|
||||||
function Public.CurrentTime(epoch)
|
|
||||||
if not epoch then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local unixTime = floor(epoch) - (60 * 60 * (-2))
|
|
||||||
|
|
||||||
local hours = floor(unixTime / 3600 % 12)
|
|
||||||
local minutes = floor(unixTime / 60 % 60)
|
|
||||||
local seconds = floor(unixTime % 60)
|
|
||||||
|
|
||||||
local year, month, day = CurrentDate(unixTime)
|
|
||||||
|
|
||||||
month = tonumber(month)
|
|
||||||
month = 0 .. month
|
|
||||||
|
|
||||||
day = tonumber(day)
|
|
||||||
if day < 10 then
|
|
||||||
day = 0 .. day
|
|
||||||
end
|
|
||||||
|
|
||||||
return {
|
|
||||||
year = year,
|
|
||||||
month = month,
|
|
||||||
day = day,
|
|
||||||
hours = hours,
|
|
||||||
minutes = minutes < 10 and '0' .. minutes or minutes,
|
|
||||||
seconds = seconds < 10 and '0' .. seconds or seconds
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local CurrentTime = Public.CurrentTime
|
|
||||||
|
|
||||||
function Public.get_current_date(pretty)
|
|
||||||
local server_time = Server.get_current_time()
|
|
||||||
if not server_time then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
local date = CurrentTime(server_time)
|
|
||||||
if pretty then
|
|
||||||
return tonumber(date.year .. '-' .. date.month .. '-' .. date.day)
|
|
||||||
else
|
|
||||||
return tonumber(date.year .. date.month .. date.day)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function Public.get_current_date_with_time()
|
|
||||||
local server_time = Server.get_current_time()
|
|
||||||
if not server_time then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
local date = CurrentTime(server_time)
|
|
||||||
return date.year .. '-' .. date.month .. '-' .. date.day .. ' ' .. date.hours .. ':' .. date.minutes
|
|
||||||
end
|
|
||||||
|
|
||||||
--- Takes a time in ticks and returns a string with the time in format "x hour(s) x minute(s)"
|
--- Takes a time in ticks and returns a string with the time in format "x hour(s) x minute(s)"
|
||||||
function Public.format_time(ticks)
|
function Public.format_time(ticks)
|
||||||
local result = {}
|
local result = {}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
local Server = require 'utils.server'
|
local Server = require 'utils.server'
|
||||||
local Core = require 'utils.core'
|
|
||||||
local Event = require 'utils.event'
|
local Event = require 'utils.event'
|
||||||
local ComfyGui = require 'comfy_panel.main'
|
local ComfyGui = require 'comfy_panel.main'
|
||||||
local Color = require 'utils.color_presets'
|
local Color = require 'utils.color_presets'
|
||||||
@ -28,7 +27,7 @@ local function set_location(player)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function create_label(player)
|
local function create_label(player)
|
||||||
local date = Core.get_current_date_with_time()
|
local date = Server.get_current_date_with_time()
|
||||||
if not date then
|
if not date then
|
||||||
date = '1970-01-01'
|
date = '1970-01-01'
|
||||||
end
|
end
|
||||||
@ -65,7 +64,7 @@ Event.add(
|
|||||||
Event.on_nth_tick(
|
Event.on_nth_tick(
|
||||||
60,
|
60,
|
||||||
function()
|
function()
|
||||||
local date = Core.get_current_date_with_time()
|
local date = Server.get_current_date_with_time()
|
||||||
if not date then
|
if not date then
|
||||||
date = '1969-01-01 00:00'
|
date = '1969-01-01 00:00'
|
||||||
end
|
end
|
||||||
|
@ -387,7 +387,10 @@ local vote_to_jail = function(player, griefer, msg)
|
|||||||
votejail[griefer][player.name] = true
|
votejail[griefer][player.name] = true
|
||||||
votejail[griefer].index = votejail[griefer].index + 1
|
votejail[griefer].index = votejail[griefer].index + 1
|
||||||
Utils.print_to(player, 'You have voted to jail player ' .. griefer .. '.')
|
Utils.print_to(player, 'You have voted to jail player ' .. griefer .. '.')
|
||||||
if votejail[griefer].index >= settings.votejail_count or (votejail[griefer].index == #game.connected_players - 1 and #game.connected_players > votejail[griefer].index) then
|
if
|
||||||
|
votejail[griefer].index >= settings.votejail_count or
|
||||||
|
(votejail[griefer].index == #game.connected_players - 1 and #game.connected_players > votejail[griefer].index)
|
||||||
|
then
|
||||||
Public.try_ul_data(griefer, true, votejail[griefer].actor, msg)
|
Public.try_ul_data(griefer, true, votejail[griefer].actor, msg)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -415,7 +418,10 @@ local vote_to_free = function(player, griefer)
|
|||||||
votefree[griefer].index = votefree[griefer].index + 1
|
votefree[griefer].index = votefree[griefer].index + 1
|
||||||
|
|
||||||
Utils.print_to(player, 'You have voted to free player ' .. griefer .. '.')
|
Utils.print_to(player, 'You have voted to free player ' .. griefer .. '.')
|
||||||
if votefree[griefer].index >= settings.votejail_count or (votefree[griefer].index == #game.connected_players - 1 and #game.connected_players > votefree[griefer].index) then
|
if
|
||||||
|
votefree[griefer].index >= settings.votejail_count or
|
||||||
|
(votefree[griefer].index == #game.connected_players - 1 and #game.connected_players > votefree[griefer].index)
|
||||||
|
then
|
||||||
Public.try_ul_data(griefer, false, votefree[griefer].actor)
|
Public.try_ul_data(griefer, false, votefree[griefer].actor)
|
||||||
votejail[griefer] = nil
|
votejail[griefer] = nil
|
||||||
votefree[griefer] = nil
|
votefree[griefer] = nil
|
||||||
@ -460,7 +466,10 @@ local jail = function(player, griefer, msg, raised)
|
|||||||
end
|
end
|
||||||
|
|
||||||
Utils.print_to(nil, message)
|
Utils.print_to(nil, message)
|
||||||
Utils.action_warning_embed('[Jailed]', message)
|
local data = Server.build_embed_data()
|
||||||
|
data.username = griefer
|
||||||
|
data.admin = player
|
||||||
|
Server.to_jailed_embed(data)
|
||||||
|
|
||||||
if votejail[griefer] then
|
if votejail[griefer] then
|
||||||
votejail[griefer].jailed = true
|
votejail[griefer].jailed = true
|
||||||
@ -489,7 +498,10 @@ local free = function(player, griefer)
|
|||||||
set_data(jailed_data_set, griefer, nil)
|
set_data(jailed_data_set, griefer, nil)
|
||||||
|
|
||||||
Utils.print_to(nil, message)
|
Utils.print_to(nil, message)
|
||||||
Utils.action_warning_embed('[Jailed]', message)
|
local data = Server.build_embed_data()
|
||||||
|
data.username = griefer
|
||||||
|
data.admin = player
|
||||||
|
Server.to_unjailed_embed(data)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -703,7 +715,10 @@ Event.add(
|
|||||||
if trusted and playtime >= settings.playtime_for_vote and playtime < settings.playtime_for_instant_jail and not player.admin then
|
if trusted and playtime >= settings.playtime_for_vote and playtime < settings.playtime_for_instant_jail and not player.admin then
|
||||||
if cmd == 'jail' then
|
if cmd == 'jail' then
|
||||||
if not terms_tbl[player.name] then
|
if not terms_tbl[player.name] then
|
||||||
Utils.warning(player, 'Abusing the jail command will lead to revoked permissions. Jailing someone in case of disagreement is _NEVER_ OK!')
|
Utils.warning(
|
||||||
|
player,
|
||||||
|
'Abusing the jail command will lead to revoked permissions. Jailing someone in case of disagreement is _NEVER_ OK!'
|
||||||
|
)
|
||||||
Utils.warning(player, 'Run this command again to if you really want to do this!')
|
Utils.warning(player, 'Run this command again to if you really want to do this!')
|
||||||
for i = 1, 4 do
|
for i = 1, 4 do
|
||||||
Task.set_timeout_in_ticks(delay, play_alert_sound, {name = player.name})
|
Task.set_timeout_in_ticks(delay, play_alert_sound, {name = player.name})
|
||||||
@ -725,7 +740,10 @@ Event.add(
|
|||||||
if player.admin or playtime >= settings.playtime_for_instant_jail then
|
if player.admin or playtime >= settings.playtime_for_instant_jail then
|
||||||
if cmd == 'jail' then
|
if cmd == 'jail' then
|
||||||
if not terms_tbl[player.name] then
|
if not terms_tbl[player.name] then
|
||||||
Utils.warning(player, 'Abusing the jail command will lead to revoked permissions. Jailing someone in case of disagreement is _NEVER_ OK!')
|
Utils.warning(
|
||||||
|
player,
|
||||||
|
'Abusing the jail command will lead to revoked permissions. Jailing someone in case of disagreement is _NEVER_ OK!'
|
||||||
|
)
|
||||||
Utils.warning(player, 'Run this command again to if you really want to do this!')
|
Utils.warning(player, 'Run this command again to if you really want to do this!')
|
||||||
for i = 1, 4 do
|
for i = 1, 4 do
|
||||||
Task.set_timeout_in_ticks(delay, play_alert_sound, {name = player.name})
|
Task.set_timeout_in_ticks(delay, play_alert_sound, {name = player.name})
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
local Global = require 'utils.global'
|
local Global = require 'utils.global'
|
||||||
local Game = require 'utils.game'
|
local Game = require 'utils.game'
|
||||||
local Core = require 'utils.core'
|
|
||||||
local Token = require 'utils.token'
|
local Token = require 'utils.token'
|
||||||
local Task = require 'utils.task'
|
local Task = require 'utils.task'
|
||||||
local Server = require 'utils.server'
|
local Server = require 'utils.server'
|
||||||
@ -88,7 +87,7 @@ local try_download_amount_of_resets_token =
|
|||||||
local old_value = data.value
|
local old_value = data.value
|
||||||
if old_value then
|
if old_value then
|
||||||
old_value = tonumber(old_value)
|
old_value = tonumber(old_value)
|
||||||
local new_value = Core.get_current_date()
|
local new_value = Server.get_current_date()
|
||||||
local time_to_reset = (new_value - old_value)
|
local time_to_reset = (new_value - old_value)
|
||||||
if not time_to_reset then
|
if not time_to_reset then
|
||||||
return
|
return
|
||||||
@ -102,7 +101,7 @@ local try_download_amount_of_resets_token =
|
|||||||
try_get_all_data(this.settings.dataset, clear_all_data_token)
|
try_get_all_data(this.settings.dataset, clear_all_data_token)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
local new_value = Core.get_current_date()
|
local new_value = Server.get_current_date()
|
||||||
|
|
||||||
if new_value then
|
if new_value then
|
||||||
set_data(this.settings.dataset, this.settings.reset_key, tonumber(new_value))
|
set_data(this.settings.dataset, this.settings.reset_key, tonumber(new_value))
|
||||||
|
@ -30,6 +30,12 @@ end
|
|||||||
local sync_supporters_callback =
|
local sync_supporters_callback =
|
||||||
Token.register(
|
Token.register(
|
||||||
function(data)
|
function(data)
|
||||||
|
if not data then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not data.entries then
|
||||||
|
return
|
||||||
|
end
|
||||||
table.clear_table(this.supporters)
|
table.clear_table(this.supporters)
|
||||||
for k, v in pairs(data.entries) do
|
for k, v in pairs(data.entries) do
|
||||||
this.supporters[k] = v
|
this.supporters[k] = v
|
||||||
|
336
utils/server.lua
336
utils/server.lua
@ -5,14 +5,21 @@ local Event = require 'utils.event'
|
|||||||
local Game = require 'utils.game'
|
local Game = require 'utils.game'
|
||||||
local Print = require('utils.print_override')
|
local Print = require('utils.print_override')
|
||||||
|
|
||||||
local serialize = serpent.serialize
|
-- local constants
|
||||||
|
local floor = math.floor
|
||||||
|
local ceil = math.ceil
|
||||||
|
local insert = table.insert
|
||||||
local concat = table.concat
|
local concat = table.concat
|
||||||
|
local serialize = serpent.serialize
|
||||||
local remove = table.remove
|
local remove = table.remove
|
||||||
local tostring = tostring
|
local tostring = tostring
|
||||||
local len = string.len
|
local len = string.len
|
||||||
local gmatch = string.gmatch
|
local gmatch = string.gmatch
|
||||||
local insert = table.insert
|
|
||||||
local raw_print = Print.raw_print
|
local raw_print = Print.raw_print
|
||||||
|
local minutes_to_ticks = 60 * 60
|
||||||
|
local hours_to_ticks = 60 * 60 * 60
|
||||||
|
local ticks_to_minutes = 1 / minutes_to_ticks
|
||||||
|
local ticks_to_hours = 1 / hours_to_ticks
|
||||||
|
|
||||||
local serialize_options = {sparse = true, compact = true}
|
local serialize_options = {sparse = true, compact = true}
|
||||||
|
|
||||||
@ -48,6 +55,12 @@ local discord_bold_tag = '[DISCORD-BOLD]'
|
|||||||
local discord_admin_tag = '[DISCORD-ADMIN]'
|
local discord_admin_tag = '[DISCORD-ADMIN]'
|
||||||
local discord_banned_tag = '[DISCORD-BANNED]'
|
local discord_banned_tag = '[DISCORD-BANNED]'
|
||||||
local discord_banned_embed_tag = '[DISCORD-BANNED-EMBED]'
|
local discord_banned_embed_tag = '[DISCORD-BANNED-EMBED]'
|
||||||
|
local discord_unbanned_tag = '[DISCORD-UNBANNED]'
|
||||||
|
local discord_unbanned_embed_tag = '[DISCORD-UNBANNED-EMBED]'
|
||||||
|
local discord_jailed_tag = '[DISCORD-JAILED]'
|
||||||
|
local discord_jailed_embed_tag = '[DISCORD-JAILED-EMBED]'
|
||||||
|
local discord_unjailed_tag = '[DISCORD-UNJAILED]'
|
||||||
|
local discord_unjailed_embed_tag = '[DISCORD-UNJAILED-EMBED]'
|
||||||
local discord_admin_raw_tag = '[DISCORD-ADMIN-RAW]'
|
local discord_admin_raw_tag = '[DISCORD-ADMIN-RAW]'
|
||||||
local discord_embed_tag = '[DISCORD-EMBED]'
|
local discord_embed_tag = '[DISCORD-EMBED]'
|
||||||
local discord_embed_raw_tag = '[DISCORD-EMBED-RAW]'
|
local discord_embed_raw_tag = '[DISCORD-EMBED-RAW]'
|
||||||
@ -186,7 +199,7 @@ function Public.to_admin(message, locale)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Sends a message to the linked banend discord channel. The message is sanitized of markdown server side.
|
--- Sends a message to the linked banned discord channel. The message is sanitized of markdown server side.
|
||||||
-- @param message<string> message to send.
|
-- @param message<string> message to send.
|
||||||
-- @param locale<boolean> if the message should be handled as localized.
|
-- @param locale<boolean> if the message should be handled as localized.
|
||||||
function Public.to_banned(message, locale)
|
function Public.to_banned(message, locale)
|
||||||
@ -196,6 +209,37 @@ function Public.to_banned(message, locale)
|
|||||||
raw_print(discord_banned_tag .. message)
|
raw_print(discord_banned_tag .. message)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
--- Sends a message to the linked banned discord channel. The message is sanitized of markdown server side.
|
||||||
|
-- @param message<string> message to send.
|
||||||
|
-- @param locale<boolean> if the message should be handled as localized.
|
||||||
|
function Public.to_unbanned(message, locale)
|
||||||
|
if locale then
|
||||||
|
print(message, discord_unbanned_tag)
|
||||||
|
else
|
||||||
|
raw_print(discord_unbanned_tag .. message)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Sends a message to the linked connected discord channel. The message is sanitized of markdown server side.
|
||||||
|
-- @param message<string> message to send.
|
||||||
|
-- @param locale<boolean> if the message should be handled as localized.
|
||||||
|
function Public.to_jailed(message, locale)
|
||||||
|
if locale then
|
||||||
|
print(message, discord_jailed_tag)
|
||||||
|
else
|
||||||
|
raw_print(discord_jailed_tag .. message)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
--- Sends a message to the linked connected discord channel. The message is sanitized of markdown server side.
|
||||||
|
-- @param message<string> message to send.
|
||||||
|
-- @param locale<boolean> if the message should be handled as localized.
|
||||||
|
function Public.to_unjailed(message, locale)
|
||||||
|
if locale then
|
||||||
|
print(message, discord_unjailed_tag)
|
||||||
|
else
|
||||||
|
raw_print(discord_unjailed_tag .. message)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
--- Sends a message to the linked admin discord channel. The message is not sanitized of markdown.
|
--- Sends a message to the linked admin discord channel. The message is not sanitized of markdown.
|
||||||
-- @param message<string> message to send.
|
-- @param message<string> message to send.
|
||||||
@ -242,13 +286,92 @@ function Public.to_admin_embed(message, locale)
|
|||||||
end
|
end
|
||||||
|
|
||||||
--- Sends a embed message to the linked banned discord channel. The message is sanitized of markdown server side.
|
--- Sends a embed message to the linked banned discord channel. The message is sanitized of markdown server side.
|
||||||
-- @param message<string> the content of the embed.
|
-- @param message<tbl> the content of the embed.
|
||||||
-- @param locale<boolean> if the message should be handled as localized.
|
-- @param locale<boolean> if the message should be handled as localized.
|
||||||
function Public.to_banned_embed(message, locale)
|
function Public.to_banned_embed(message, locale)
|
||||||
|
local table_to_json = game.table_to_json
|
||||||
|
if not type(message) == 'table' then
|
||||||
|
return
|
||||||
|
end
|
||||||
if locale then
|
if locale then
|
||||||
print(message, discord_banned_embed_tag)
|
print(message, discord_banned_embed_tag)
|
||||||
else
|
else
|
||||||
raw_print(discord_banned_embed_tag .. message)
|
if not message.username then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not message.reason then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not message.admin then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
raw_print(discord_banned_embed_tag .. table_to_json(message))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Sends a embed message to the linked banned discord channel. The message is sanitized of markdown server side.
|
||||||
|
-- @param message<tbl> the content of the embed.
|
||||||
|
-- @param locale<boolean> if the message should be handled as localized.
|
||||||
|
function Public.to_unbanned_embed(message, locale)
|
||||||
|
local table_to_json = game.table_to_json
|
||||||
|
if not type(message) == 'table' then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if locale then
|
||||||
|
print(message, discord_unbanned_embed_tag)
|
||||||
|
else
|
||||||
|
if not message.username then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not message.admin then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
raw_print(discord_unbanned_embed_tag .. table_to_json(message))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Sends a embed message to the linked connected discord channel. The message is sanitized of markdown server side.
|
||||||
|
-- @param message<tbl> the content of the embed.
|
||||||
|
-- @param locale<boolean> if the message should be handled as localized.
|
||||||
|
function Public.to_jailed_embed(message, locale)
|
||||||
|
local table_to_json = game.table_to_json
|
||||||
|
if not type(message) == 'table' then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if locale then
|
||||||
|
print(message, discord_jailed_embed_tag)
|
||||||
|
else
|
||||||
|
if not message.username then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not message.reason then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not message.admin then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
raw_print(discord_jailed_embed_tag .. table_to_json(message))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Sends a embed message to the linked connected discord channel. The message is sanitized of markdown server side.
|
||||||
|
-- @param message<tbl> the content of the embed.
|
||||||
|
-- @param locale<boolean> if the message should be handled as localized.
|
||||||
|
function Public.to_unjailed_embed(message, locale)
|
||||||
|
local table_to_json = game.table_to_json
|
||||||
|
if not type(message) == 'table' then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if locale then
|
||||||
|
print(message, discord_unjailed_embed_tag)
|
||||||
|
else
|
||||||
|
if not message.username then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not message.admin then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
raw_print(discord_unjailed_embed_tag .. table_to_json(message))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -377,6 +500,27 @@ local function validate_arguments(data_set, key, callback_token)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function getOnlineAdmins()
|
||||||
|
local online = game.connected_players
|
||||||
|
local i = 0
|
||||||
|
for _, p in pairs(online) do
|
||||||
|
if p.admin then
|
||||||
|
i = i + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return i
|
||||||
|
end
|
||||||
|
|
||||||
|
local function build_embed_data()
|
||||||
|
local d = {
|
||||||
|
time = Public.format_time(game.ticks_played),
|
||||||
|
onlinePlayers = #game.connected_players,
|
||||||
|
totalPlayers = #game.players,
|
||||||
|
onlineAdmins = getOnlineAdmins()
|
||||||
|
}
|
||||||
|
return d
|
||||||
|
end
|
||||||
|
|
||||||
local function send_try_get_data(data_set, key, callback_token)
|
local function send_try_get_data(data_set, key, callback_token)
|
||||||
data_set = double_escape(data_set)
|
data_set = double_escape(data_set)
|
||||||
key = double_escape(key)
|
key = double_escape(key)
|
||||||
@ -907,7 +1051,109 @@ function Public.get_current_time()
|
|||||||
return math.floor(secs + diff / game.speed / 60)
|
return math.floor(secs + diff / game.speed / 60)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Called be the web server to re sync which players are online.
|
--- Converts from epoch to yymmddhhmm.
|
||||||
|
-- @param epoch<number>
|
||||||
|
-- @return date?
|
||||||
|
function Public.convertFromEpoch(epoch)
|
||||||
|
if not epoch then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local function date(z)
|
||||||
|
z = floor(z / 86400) + 719468
|
||||||
|
local era = floor(z / 146097)
|
||||||
|
local doe = floor(z - era * 146097)
|
||||||
|
local yoe = floor((doe - doe / 1460 + doe / 36524 - doe / 146096) / 365)
|
||||||
|
local y = floor(yoe + era * 400)
|
||||||
|
local doy = doe - floor((365 * yoe + yoe / 4 - yoe / 100))
|
||||||
|
local mp = floor((5 * doy + 2) / 153)
|
||||||
|
local d = ceil(doy - (153 * mp + 2) / 5 + 1)
|
||||||
|
local m = floor(mp + (mp < 10 and 3 or -9))
|
||||||
|
return y + (m <= 2 and 1 or 0), m, d
|
||||||
|
end
|
||||||
|
|
||||||
|
local unixTime = floor(epoch) - (60 * 60 * (-2))
|
||||||
|
|
||||||
|
local hours = floor(unixTime / 3600 % 12)
|
||||||
|
local minutes = floor(unixTime / 60 % 60)
|
||||||
|
local seconds = floor(unixTime % 60)
|
||||||
|
|
||||||
|
local year, month, day = date(unixTime)
|
||||||
|
|
||||||
|
month = tonumber(month)
|
||||||
|
month = 0 .. month
|
||||||
|
|
||||||
|
day = tonumber(day)
|
||||||
|
if day < 10 then
|
||||||
|
day = 0 .. day
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
year = year,
|
||||||
|
month = month,
|
||||||
|
day = day,
|
||||||
|
hours = hours,
|
||||||
|
minutes = minutes < 10 and '0' .. minutes or minutes,
|
||||||
|
seconds = seconds < 10 and '0' .. seconds or seconds
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Returns the current date.
|
||||||
|
-- @param pretty<boolean>
|
||||||
|
-- @return date?
|
||||||
|
function Public.get_current_date(pretty)
|
||||||
|
local s = Public.get_current_time()
|
||||||
|
if not s then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local date = Public.convertFromEpoch(s)
|
||||||
|
if pretty then
|
||||||
|
return tonumber(date.year .. '-' .. date.month .. '-' .. date.day)
|
||||||
|
else
|
||||||
|
return tonumber(date.year .. date.month .. date.day)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Returns the total played time in yymmddhhmm.
|
||||||
|
-- @return date?
|
||||||
|
function Public.get_current_date_with_time()
|
||||||
|
local s = Public.get_current_time()
|
||||||
|
if not s then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local date = Public.convertFromEpoch(s)
|
||||||
|
return date.year .. '-' .. date.month .. '-' .. date.day .. ' ' .. date.hours .. ':' .. date.minutes
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Takes a time in ticks and returns a string with the time in format "x hour(s) x minute(s)"
|
||||||
|
function Public.format_time(ticks)
|
||||||
|
local result = {}
|
||||||
|
|
||||||
|
local hours = floor(ticks * ticks_to_hours)
|
||||||
|
if hours > 0 then
|
||||||
|
ticks = ticks - hours * hours_to_ticks
|
||||||
|
insert(result, hours)
|
||||||
|
if hours == 1 then
|
||||||
|
insert(result, 'hour')
|
||||||
|
else
|
||||||
|
insert(result, 'hours')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local minutes = floor(ticks * ticks_to_minutes)
|
||||||
|
insert(result, minutes)
|
||||||
|
if minutes == 1 then
|
||||||
|
insert(result, 'minute')
|
||||||
|
else
|
||||||
|
insert(result, 'minutes')
|
||||||
|
end
|
||||||
|
|
||||||
|
return concat(result, ' ')
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Called by the web server to re sync which players are online.
|
||||||
function Public.query_online_players()
|
function Public.query_online_players()
|
||||||
local message = {query_players_tag, '['}
|
local message = {query_players_tag, '['}
|
||||||
|
|
||||||
@ -1014,10 +1260,7 @@ Event.add(
|
|||||||
defines.events.on_console_command,
|
defines.events.on_console_command,
|
||||||
function(event)
|
function(event)
|
||||||
local cmd = event.command
|
local cmd = event.command
|
||||||
if not event.player_index then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local player = game.players[event.player_index]
|
|
||||||
local user = event.parameters
|
local user = event.parameters
|
||||||
if not user then
|
if not user then
|
||||||
return
|
return
|
||||||
@ -1027,10 +1270,6 @@ Event.add(
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if not player.admin then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local userIndex
|
local userIndex
|
||||||
local reason
|
local reason
|
||||||
local str = ''
|
local str = ''
|
||||||
@ -1052,41 +1291,56 @@ Event.add(
|
|||||||
end
|
end
|
||||||
|
|
||||||
local banishedPlayer
|
local banishedPlayer
|
||||||
if game.players[userIndex] then
|
if game.get_player(userIndex) then
|
||||||
banishedPlayer = game.players[userIndex]
|
banishedPlayer = game.get_player(userIndex)
|
||||||
else
|
else
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if banishedPlayer.index == player.index then
|
if event.player_index then
|
||||||
return
|
local player = game.get_player(event.player_index)
|
||||||
end
|
if player and player.valid and player.admin then
|
||||||
|
if banishedPlayer.index == player.index then
|
||||||
if cmd == 'ban' then
|
|
||||||
Public.set_data(jailed_data_set, player.name, nil) -- this is added here since we don't want to clutter the jail dataset.
|
|
||||||
if player then
|
|
||||||
if not reason then
|
|
||||||
Public.to_banned_embed(table.concat {player.name .. ' banned ' .. banishedPlayer.name .. '. Reason: Not specified.'})
|
|
||||||
return
|
|
||||||
else
|
|
||||||
Public.to_banned_embed(table.concat {player.name .. ' banned ' .. banishedPlayer.name .. '. Reason: ' .. reason})
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
else
|
|
||||||
if not reason then
|
local data = build_embed_data()
|
||||||
Public.to_banned_embed(table.concat {'Server banned ' .. banishedPlayer.name .. '. Reason: Not specified.'})
|
data.username = banishedPlayer.name
|
||||||
return
|
data.admin = player.name
|
||||||
else
|
|
||||||
Public.to_banned_embed(table.concat {'Server banned ' .. banishedPlayer.name .. '. Reason: ' .. reason})
|
if cmd == 'ban' then
|
||||||
|
Public.set_data(jailed_data_set, banishedPlayer.name, nil) -- this is added here since we don't want to clutter the jail dataset.
|
||||||
|
if not reason then
|
||||||
|
data.reason = 'Not specified.'
|
||||||
|
Public.to_banned_embed(data)
|
||||||
|
return
|
||||||
|
else
|
||||||
|
data.reason = reason
|
||||||
|
Public.to_banned_embed(data)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
elseif cmd == 'unban' then
|
||||||
|
Public.to_unbanned_embed(data)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif cmd == 'unban' then
|
else
|
||||||
if player then
|
local data = build_embed_data()
|
||||||
Public.to_banned_embed(table.concat {player.name .. ' unbanned ' .. banishedPlayer.name})
|
data.username = banishedPlayer.name
|
||||||
return
|
data.admin = '<Server>'
|
||||||
else
|
|
||||||
Public.to_banned_embed(table.concat {'Server unbanned ' .. banishedPlayer.name})
|
if cmd == 'ban' then
|
||||||
|
if not reason then
|
||||||
|
data.reason = 'Not specified.'
|
||||||
|
Public.to_banned_embed(data)
|
||||||
|
return
|
||||||
|
else
|
||||||
|
data.reason = reason
|
||||||
|
Public.to_banned_embed(data)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
elseif cmd == 'unban' then
|
||||||
|
Public.to_unbanned_embed(data)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -1124,4 +1378,6 @@ Event.add(
|
|||||||
end
|
end
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Public.build_embed_data = build_embed_data
|
||||||
|
|
||||||
return Public
|
return Public
|
||||||
|
Loading…
x
Reference in New Issue
Block a user