From e5acc270109de8b3a0ca99b63c806ac687725057 Mon Sep 17 00:00:00 2001 From: Cooldude2606 Date: Sun, 2 Jun 2019 18:51:16 +0100 Subject: [PATCH] Added alerts --- config/discord_alerts.lua | 18 ++- modules/addons/discord-alerts.lua | 234 +++++++++++++++++++++++++++++- 2 files changed, 249 insertions(+), 3 deletions(-) diff --git a/config/discord_alerts.lua b/config/discord_alerts.lua index f197852d..2eeb922f 100644 --- a/config/discord_alerts.lua +++ b/config/discord_alerts.lua @@ -1,4 +1,20 @@ --- Config file used to enable and disable different push messages for discord return { - + player_reports=true, + player_warnings=true, + player_bans=true, + player_mutes=true, + player_kicks=true, + player_promotes=false, + config=true, + purge=true, + c=true, + command=true, + ['silent-command']=true, + ['measured-command']=true, + ['banlist']=true, + ['permissions']=true, + ['editor']=true, + ['cheat']=true, + ['open']=false, } \ No newline at end of file diff --git a/modules/addons/discord-alerts.lua b/modules/addons/discord-alerts.lua index 19740d3f..fbc70d9c 100644 --- a/modules/addons/discord-alerts.lua +++ b/modules/addons/discord-alerts.lua @@ -1,3 +1,233 @@ local Event = require 'utils.event' -local write_json = ext_require('expcore.common','write_json') -local config = require 'config.discord_alerts' \ No newline at end of file +local Game = require 'utils.game' +local Colors = require 'resources.color_presets' +local write_json,format_time = ext_require('expcore.common','write_json','format_time') +local config = require 'config.discord_alerts' + +local function get_player_name(event) + local player = Game.get_player_by_index(event.player_index) + return player.name, event.by_player_name +end + +local function to_hex(color) + local hex_digits = '0123456789ABCDEF' + local function hex(bit) + local major, minor = math.modf(bit/16) + minor = minor*16 + return hex_digits:sub(major,major)..hex_digits:sub(minor,minor) + end + + return hex(color.r)..hex(color.g)..hex(color.b) +end + +local function emit_event(args) + local title = args.title or '' + local color = args.color or '0x0' + local description = args.description or '' + + if type(color) == 'table' then + color = to_hex(color) + end + + local tick = args.tick or 0 + local tick_formated = format_time(tick,{hours = true,minutes = true,string = true,long = true}) + + local players_online = 0 + local admins_online = 0 + for _,player in pairs(game.connected_players) do + players_online = players_online+1 + if player.admin then + admins_online = admins_online + 1 + end + end + + local done = {title=true,color=true,description=true} + local fields = {{ + name='Server Details', + value=string.format('Server name: ${serverName} Players: %d Admins: %d Time: %s',players_online,admins_online,tick_formated) + }} + + for key,value in pairs(args) do + if not done[key] then + done[key] = true + local field = { + name=key, + value=value, + inline=false + } + + local new_value, inline = value:gsub('','',1) + if inline then + field.value = new_value + field.inline = true + end + + table.insert(fields,field) + end + end + + write_json('log/discord.log',{ + title=title, + description=description, + color=color, + fields=fields + }) +end + +--- Reports added and removed +if config.player_reports then + local Reports = require 'modules.addons.reports-control' + Event.add(Reports.player_report_added,function(event) + local player_name,by_player_name = get_player_name(event) + emit_event{ + title='Report', + description='A player was reported', + color=Colors.yellow, + ['Player:']=''..player_name, + ['By:']=''..by_player_name, + ['Reason:']=event.reason + } + end) + Event.add(Reports.player_report_removed,function(event) + local player_name,by_player_name = get_player_name(event) + emit_event{ + title='Report Removed', + description='A player has a report removed', + color=Colors.green, + ['Player:']=''..player_name, + ['By:']=''..by_player_name + } + end) +end + +--- Warnings added and removed +if config.player_warnings then + local Warnings = require 'modules.addons.warnings-control' + Event.add(Warnings.player_warning_added,function(event) + local player_name,by_player_name = get_player_name(event) + emit_event{ + title='Warning', + description='A player has been given a warning', + color=Colors.yellow, + ['Player:']=''..player_name, + ['By:']=''..by_player_name + } + end) + Event.add(Warnings.player_warning_removed,function(event) + local player_name,by_player_name = get_player_name(event) + emit_event{ + title='Warning Removed', + description='A player has a warning removed', + color=Colors.green, + ['Player:']=''..player_name, + ['By:']=''..by_player_name + } + end) +end + +--- Ban and unban +if config.player_bans then + Event.add(defines.events.on_player_banned,function(event) + if event.by_player then + local by_player = Game.get_player_by_index(event.by_player) + emit_event{ + title='Banned', + description='A player has been banned', + color=Colors.red, + ['Player:']=''..event.player_name, + ['By:']=''..by_player.name, + ['Reason:']=event.reason + } + end + end) + Event.add(defines.events.on_player_unbanned,function(event) + if event.by_player then + local by_player = Game.get_player_by_index(event.by_player) + emit_event{ + title='Un-Banned', + description='A player has been un-banned', + color=Colors.green, + ['Player:']=''..event.player_name, + ['By:']=''..by_player.name + } + end + end) +end + +--- Mute and unmute +if config.player_mutes then + Event.add(defines.events.on_player_muted,function(event) + local player_name = get_player_name(event) + emit_event{ + title='Muted', + description='A player has been muted', + color=Colors.yellow, + ['Player:']=''..player_name + } + end) + Event.add(defines.events.on_player_unmuted,function(event) + local player_name = get_player_name(event) + emit_event{ + title='Un-Muted', + description='A player has been un-muted', + color=Colors.green, + ['Player:']=''..player_name + } + end) +end + +--- Kick +if config.player_kicks then + Event.add(defines.events.on_player_kicked,function(event) + if event.by_player then + local player_name = get_player_name(event) + local by_player = Game.get_player_by_index(event.by_player) + emit_event{ + title='Kick', + description='A player has been kicked', + color=Colors.orange, + ['Player:']=''..player_name, + ['By:']=''..by_player.name, + ['Reason:']=event.reason + } + end + end) +end + +--- Promote and demote +if config.player_promotes then + Event.add(defines.events.on_player_promoted,function(event) + local player_name = get_player_name(event) + emit_event{ + title='Promote', + description='A player has been promoted', + color=Colors.green, + ['Player:']=''..player_name + } + end) + Event.add(defines.events.on_player_demoted,function(event) + local player_name = get_player_name(event) + emit_event{ + title='Demote', + description='A player has been demoted', + color=Colors.yellow, + ['Player:']=''..player_name + } + end) +end + +--- Other commands +Event.add(defines.events.on_console_command,function(event) + if event.player_index then + local player_name = get_player_name(event) + if config[event.command] then + emit_event{ + title=event.command:gsub('^%l',string.upper), + description='/'..event.command..' was used', + color=Colors.grey, + ['By:']=''..player_name, + ['Details:']=event.parameters + } + end + end +end) \ No newline at end of file