public async void OnVerified(VerifiedEventArgs ev) { if (Instance.Config.ShouldSyncRoles) { SyncedUser syncedUser = Instance.SyncedUsersCache.FirstOrDefault(tempSyncedUser => tempSyncedUser?.Id == ev.Player.UserId); if (syncedUser == null) { await Network.SendAsync(new RemoteCommand("getGroupFromId", ev.Player.UserId)).ConfigureAwait(false); } else { syncedUser?.SetGroup(); } } if (Instance.Config.EventsToLog.PlayerJoined && (!ev.Player.DoNotTrack || !Instance.Config.ShouldRespectDoNotTrack)) { await Network.SendAsync(new RemoteCommand("log", "gameEvents", string.Format(Language.HasJoinedTheGame, ev.Player.Nickname, Instance.Config.ShouldLogUserIds ? ev.Player.UserId : Language.Redacted, Instance.Config.ShouldLogIPAddresses ? ev.Player.IPAddress : Language.Redacted))).ConfigureAwait(false); } if (Instance.Config.StaffOnlyEventsToLog.PlayerJoined) { await Network.SendAsync(new RemoteCommand("log", "staffCopy", string.Format(Language.HasJoinedTheGame, ev.Player.Nickname, ev.Player.UserId, ev.Player.IPAddress))).ConfigureAwait(false); } }
/// <inheritdoc cref="API.Network.OnReceivedFull(object, ReceivedFullEventArgs)"/> public void OnReceivedFull(object _, ReceivedFullEventArgs ev) { try { Log.Debug($"[NET] {string.Format(Language.ReceivedData, ev.Data, ev.Length)}", Instance.Config.IsDebugEnabled); RemoteCommand remoteCommand = JsonConvert.DeserializeObject <RemoteCommand>(ev.Data, Network.JsonSerializerSettings); Log.Debug($"[NET] {string.Format(Language.HandlingRemoteCommand, remoteCommand.Action, remoteCommand.Parameters[0], Network.TcpClient?.Client?.RemoteEndPoint)}", Instance.Config.IsDebugEnabled); switch (remoteCommand.Action) { case "executeCommand": JsonConvert.DeserializeObject <GameCommand>(remoteCommand.Parameters[0].ToString())?.Execute(); break; case "setGroupFromId": SyncedUser syncedUser = JsonConvert.DeserializeObject <SyncedUser>(remoteCommand.Parameters[0].ToString(), Network.JsonSerializerSettings); if (syncedUser == null) { break; } if (!Instance.SyncedUsersCache.Contains(syncedUser)) { Instance.SyncedUsersCache.Add(syncedUser); } syncedUser?.SetGroup(); break; case "commandReply": JsonConvert.DeserializeObject <CommandReply>(remoteCommand.Parameters[0].ToString(), Network.JsonSerializerSettings)?.Answer(); break; } } catch (Exception exception) { Log.Error($"[NET] {string.Format(Language.HandlingRemoteCommandError, Instance.Config.IsDebugEnabled ? exception.ToString() : exception.Message)}"); } }
/// <inheritdoc cref="API.Network.OnReceivedFull(object, ReceivedFullEventArgs)"/> public void OnReceivedFull(object _, ReceivedFullEventArgs ev) { try { Log.Debug($"[NET] {string.Format(Language.ReceivedData, ev.Data, ev.Length)}", Instance.Config.IsDebugEnabled); RemoteCommand remoteCommand = JsonConvert.DeserializeObject <RemoteCommand>(ev.Data, Network.JsonSerializerSettings); Log.Debug($"[NET] {string.Format(Language.HandlingRemoteCommand, remoteCommand.Action, remoteCommand.Parameters[0], Network.TcpClient?.Client?.RemoteEndPoint)}", Instance.Config.IsDebugEnabled); switch (remoteCommand.Action) { case "executeCommand": JsonConvert.DeserializeObject <GameCommand>(remoteCommand.Parameters[0].ToString())?.Execute(); break; case "playerList": string description = string.Empty; IList <Field> fields = new List <Field>(); TimeSpan duration = Round.ElapsedTime; string seconds = duration.Seconds < 10 ? $"0{duration.Seconds}" : duration.Seconds.ToString(); string minutes = duration.Minutes < 10 ? $"0{duration.Minutes}" : duration.Minutes.ToString(); IEnumerable <Player> list = Player.List.OrderBy(pl => pl.Id); description += "```diff\n"; foreach (Player ply in list) { if (ply.RemoteAdminAccess) { description += $"- | {ply.Id} | {ply.Nickname} | {ply.Role.Translate()} | Staff |\n"; } else if (ply.CheckPermission("cerberus.viplist")) { description += $"+ | {ply.Id} | {ply.Nickname} | {ply.Role.Translate()} | VIP |\n"; } else if (ply.CheckPermission("cerberus.donadorlist")) { description += $"+ | {ply.Id} | {ply.Nickname} | {ply.Role.Translate()} | Donador |\n"; } else { description += $"+ | {ply.Id} | {ply.Nickname} | {ply.Role.Translate()} |\n"; } } description += "\n```"; if (Player.List.Count() < 1) { description = "```diff\n- No hay jugadores conectados - \n```"; } Network.SendAsync(new RemoteCommand( "sendEmbed", JsonConvert.DeserializeObject <GameCommand>(remoteCommand.Parameters[0].ToString())?.ChannelId, $"| Jugadores {Player.Dictionary.Count}/{Instance.Slots} | Tiempo de la ronda {minutes}:{seconds} |\n | ID | Nombre | Clase | Rol en el servidor |", description)); break; case "setGroupFromId": SyncedUser syncedUser = JsonConvert.DeserializeObject <SyncedUser>(remoteCommand.Parameters[0].ToString(), Network.JsonSerializerSettings); if (syncedUser == null) { break; } if (!Instance.SyncedUsersCache.Contains(syncedUser)) { Instance.SyncedUsersCache.Add(syncedUser); } syncedUser?.SetGroup(); break; case "commandReply": JsonConvert.DeserializeObject <CommandReply>(remoteCommand.Parameters[0].ToString(), Network.JsonSerializerSettings)?.Answer(); break; } } catch (Exception exception) { Log.Error($"[NET] {string.Format(Language.HandlingRemoteCommandError, Instance.Config.IsDebugEnabled ? exception.ToString() : exception.Message)}"); } }
public static async Task ReceiveData(SerializedData.SerializedData data, TcpClient client) { try { if (data == null) { Console.WriteLine("Network: Received data null"); return; } if (data.Data.Contains("REQUEST_DATA PLAYER_LIST SILENT")) { return; } SocketGuild guild = Bot.Client.Guilds.FirstOrDefault(); if (data.Data.StartsWith("checksync")) { string[] args = data.Data.Split(' '); SyncedUser user = Program.Users.FirstOrDefault(u => u.UserId == args[1]); if (user == null) { return; } foreach (SocketRole role in guild.GetUser(user.DiscordId).Roles) { if (Program.SyncedGroups.ContainsKey(role.Id)) { SendData($"setgroup {user.UserId} {Program.SyncedGroups[role.Id]}", Config.Port, "RoleSync"); } } } if (data.Data == "ping") { if (!bag.ContainsKey(data.Port)) { Console.WriteLine($"Network: Adding {data.Port}"); bag.TryAdd(data.Port, client); } if (!bag[data.Port].Connected || bag[data.Port] == null) { Console.WriteLine($"Network: Bag {data.Port} not connected or null, removing."); if (bag.TryRemove(data.Port, out TcpClient cli)) { cli?.Close(); } } Console.WriteLine($"Network: Received heartbeat for: {data.Port}"); if (!heartbeats.ContainsKey(data.Port)) { Heartbeat(data.Port); heartbeats.TryAdd(data.Port, 0); } else { heartbeats[data.Port]--; } return; } if (data.Data.StartsWith("updateStatus")) { string status = data.Data.Replace("updateStatus ", ""); if (status.StartsWith("0")) { await Bot.Client.SetStatusAsync(UserStatus.Idle); } else { await Bot.Client.SetStatusAsync(UserStatus.Online); } await Bot.Client.SetActivityAsync(new Game(status)); return; } if (data.Data.StartsWith("embed")) { try { Console.WriteLine($"Received embed: \"{data.Data.Replace("embed ", "")}\""); Console.WriteLine("Splitting"); string[] embedData = data.Data.Replace("embed ", "").Split('+'); Console.WriteLine("Initializing EmbedBuilder"); EmbedBuilder embedBuilder = new EmbedBuilder(); Embed embed; Console.WriteLine("Setting color"); embedBuilder.WithColor(Color.Red); if (!string.IsNullOrEmpty(embedData[0]) && embedData[0] != "none") { Console.WriteLine($"Setting title: {embedData[0]}"); embedBuilder.WithTitle(embedData[0]); } if (!string.IsNullOrEmpty(embedData[1])) { Console.WriteLine($"Setting description: {embedData[1]}"); embedBuilder.WithDescription(embedData[1]); } if (!string.IsNullOrEmpty(embedData[2])) { Console.WriteLine($"Setting footer: {embedData[2]}"); EmbedFooterBuilder embedFooterBuilder = new EmbedFooterBuilder(); embedFooterBuilder.WithText(embedData[2]); embedBuilder.WithFooter(embedFooterBuilder); } Console.WriteLine("Building embed"); embed = embedBuilder.Build(); Console.WriteLine($"Sending embed to {data.Channel}"); await API.API.SendEmbed(embed, data.Channel); return; } catch (Exception e) { Console.WriteLine(e.ToString()); return; } } if (data.Data.StartsWith("cmdresp")) { try { Console.WriteLine($"Received command embed response: \"{data.Data.Replace("embed ", "")}\""); Console.WriteLine("Getting description"); string description = data.Data.Replace("cmdresp ", ""); description = $"```{description.Substring(description.IndexOf("#") + 1)}```"; Console.WriteLine("Initializing EmbedBuilder"); EmbedBuilder embedBuilder = new EmbedBuilder(); Embed embed; Console.WriteLine("Setting properties"); embedBuilder.WithColor(Color.Blue); embedBuilder.WithDescription(description); embedBuilder.WithCurrentTimestamp(); Console.WriteLine("Building embed"); embed = embedBuilder.Build(); Console.WriteLine($"Sending embed to {data.Channel}"); await API.API.SendEmbed(embed, data.Channel); return; } catch (Exception e) { Console.WriteLine(e.ToString()); return; } } data.Data = data.Data.Substring(data.Data.IndexOf('#') + 1); if (guild == null) { return; } SocketTextChannel chan = null; chan = data.Channel.GetChannel(); if (chan == null) { return; } await chan.SendMessageAsync($"[{DateTime.Now.ToString("HH:mm:ss")}] {data.Data}"); } catch (Exception e) { Console.WriteLine(e); } }