protected override async Task OnExecuteAsync() { var actor = Context.Actor; var target = await Context.Parameters.GetAsync <string>(0); var unbans = await m_GlobalBanRepository.UnbanAutoFindAsync(target, BanSearchMode.All); var pData = await m_PlayerInfoRepository.FindPlayerAsync(target, UserSearchMode.FindByNameOrId); if (unbans.Count == 0) { if (pData == null) { await actor.PrintMessageAsync(m_StringLocalizer["commands:global:playernotfound", new { Input = target }]); return; } unbans = await m_GlobalBanRepository.UnbanAutoFindAsync(pData.Id.ToString(), BanSearchMode.Id); if (unbans.Count == 0) { await actor.PrintMessageAsync(m_StringLocalizer["commands:unban:no_bans", new { Target = target }]); return; } } var playerId = unbans.First().PlayerId; if (unbans.Any(x => x.PlayerId != playerId)) { await actor.PrintMessageAsync(m_StringLocalizer["commands:unban:unbanned", new { Target = target, BanCount = unbans.Count }]); return; } var data = await m_PlayerInfoRepository.FindPlayerAsync(playerId.ToString(), UserSearchMode.FindById); var charName = data?.CharacterName ?? playerId.ToString(); var translated = m_StringLocalizer["commands:unban:unbanned", new { Target = charName, BanCount = unbans.Count }]; await m_UserManager.BroadcastAsync(translated); await actor.PrintMessageAsync(translated); if (m_Plugin.Instance != null) { await m_Plugin.Instance.SendWebhookAsync(WebhookType.Unban, charName, actor.DisplayName, "", playerId.ToString(), 0); } }
public Task HandleEventAsync(object sender, UnturnedPlayerConnectedEvent @event) { var joinTime = DateTime.Now; AsyncHelper.Schedule("PlayerInfoLib_PlayerConnected", async() => { var player = @event.Player; var playerId = player.SteamPlayer.playerID; var steamId = player.SteamId; var pfpHash = await GetProfilePictureHashAsync(steamId); var groupName = await GetSteamGroupNameAsync(playerId.group); var hwid = string.Join("", playerId.hwid); if (!player.SteamPlayer.transportConnection.TryGetIPv4Address(out var ip)) { ip = uint.MinValue; } var questGroupId = player.Player.quests.groupID.m_SteamID; var pData = await m_PlayerInfoRepository.FindPlayerAsync(steamId.ToString(), UserSearchMode.FindById); var server = await m_PlayerInfoRepository.GetCurrentServerAsync() ?? await m_PlayerInfoRepository.CheckAndRegisterCurrentServerAsync(); if (pData == null) { pData = BuildPlayerData(steamId.m_SteamID, player.SteamPlayer.playerID.characterName, playerId.playerName, hwid, ip, pfpHash, questGroupId, playerId.group.m_SteamID, groupName, 0, joinTime, server); await m_PlayerInfoRepository.AddPlayerDataAsync(pData); } else { pData.ProfilePictureHash = pfpHash; pData.CharacterName = player.SteamPlayer.playerID.characterName; pData.Hwid = hwid; pData.Ip = ip; pData.LastLoginGlobal = joinTime; if (questGroupId != 0) { pData.LastQuestGroupId = questGroupId; } pData.SteamGroup = playerId.group.m_SteamID; pData.SteamGroupName = groupName; pData.SteamName = playerId.playerName; pData.Server = server; pData.ServerId = server.Id; await m_PlayerInfoRepository.UpdatePlayerDataAsync(pData); } });
protected override async Task OnExecuteAsync() { var actor = Context.Actor; // Get target player if (!Context.Parameters.TryGet <string>(0, out var target)) { if (!(actor is UnturnedUser actorUser)) { throw new CommandWrongUsageException(Context); } var bans = await m_GlobalBanRepository.FindBansAsync(actorUser.SteamId.ToString(), BanSearchMode.Id); var latestBans = bans.OrderByDescending(k => k.TimeOfBan).Take(4); foreach (var ban in latestBans) { await actor.PrintMessageAsync(m_StringLocalizer["commands:banhistory:format", new { Ban = ban, Player = actorUser.DisplayName }]); } return; } var user = await m_UserManager.FindUserAsync(KnownActorTypes.Player, target, UserSearchMode.FindByNameOrId); var pData = await m_PlayerInfoRepository.FindPlayerAsync(target, UserSearchMode.FindByNameOrId); if (!(user is UnturnedUser) && pData == null) { if (!(actor is UnturnedUser actorUser)) { throw new CommandWrongUsageException(Context); } var bans = await m_GlobalBanRepository.FindBansAsync(actorUser.SteamId.ToString(), BanSearchMode.Id); var latestBans = bans.OrderByDescending(k => k.TimeOfBan).Take(4); foreach (var ban in latestBans) { await actor.PrintMessageAsync(m_StringLocalizer["commands:banhistory:format", new { Ban = ban, Player = actorUser.DisplayName }]); } return; } if (await CheckPermissionAsync("other") != PermissionGrantResult.Grant) { throw new NotEnoughPermissionException(Context, "other"); } UnturnedUser player = null; if (user is UnturnedUser unturnedUser) { player = unturnedUser; } var steamId = player?.SteamId ?? (CSteamID)pData.Id; var characterName = player?.DisplayName ?? pData.CharacterName; var allBans = await m_GlobalBanRepository.FindBansAsync(steamId.ToString(), BanSearchMode.Id); var lastBans = allBans.OrderByDescending(k => k.TimeOfBan).Take(4); foreach (var ban in lastBans) { await actor.PrintMessageAsync(m_StringLocalizer["commands:banhistory:format", new { Ban = ban, Player = characterName }]); } }
protected override async Task OnExecuteAsync() { var actor = Context.Actor; if (!Context.Parameters.TryGet <string>(0, out var target)) { var totalBans = await m_DbContext.PlayerBans.CountAsync(); var inEffect = await m_DbContext.PlayerBans.Where(k => !k.IsUnbanned).ToListAsync(); var totalBansInEffect = inEffect.Count(k => DateTime.Now.Subtract(k.TimeOfBan).TotalSeconds <= k.Duration); await actor.PrintMessageAsync(m_StringLocalizer["commands:bans:global", new { Total = totalBans, InEffect = totalBansInEffect }]); return; } var user = await m_UserManager.FindUserAsync(KnownActorTypes.Player, target, UserSearchMode.FindByNameOrId); var pData = await m_PlayerInfoRepository.FindPlayerAsync(target, UserSearchMode.FindByNameOrId); if (user is UnturnedUser || pData != null) { var player = user as UnturnedUser; var steamId = player?.SteamId ?? (CSteamID)pData.Id; var characterName = player?.DisplayName ?? pData.CharacterName; var hwid = player != null?string.Join("", player.Player.SteamPlayer.playerID.hwid) : pData.Hwid; uint ip; if (player != null) { SteamGameServerNetworking.GetP2PSessionState(player.SteamId, out var sessionState); ip = sessionState.m_nRemoteIP == 0 ? 0 : sessionState.m_nRemoteIP; } else { ip = (uint)pData.Ip; } var idBans = await m_GlobalBanRepository.FindBansInEffectAsync(steamId.ToString(), BanSearchMode.Id); var ipBans = await m_GlobalBanRepository.FindBansInEffectAsync(ip.ToString(), BanSearchMode.Ip); var hwidBans = await m_GlobalBanRepository.FindBansInEffectAsync(hwid, BanSearchMode.Hwid); var bansInEffect = idBans.Concat(ipBans).Concat(hwidBans).DistinctBy(k => k.Id).ToList(); var lastBan = bansInEffect.LastOrDefault(); idBans = await m_GlobalBanRepository.FindBansAsync(steamId.ToString(), BanSearchMode.Id); ipBans = await m_GlobalBanRepository.FindBansAsync(ip.ToString(), BanSearchMode.Ip); hwidBans = await m_GlobalBanRepository.FindBansAsync(hwid, BanSearchMode.Hwid); var bans = idBans.Concat(ipBans).Concat(hwidBans).DistinctBy(k => k.Id).Count(); await actor.PrintMessageAsync(m_StringLocalizer["commands:bans:count", new { Player = characterName, Total = bans, InEffect = bansInEffect.Count }]); if (lastBan != null) { await actor.PrintMessageAsync(m_StringLocalizer["commands:bans:last_ban", new { Ban = lastBan }]); } } }
protected override async Task OnExecuteAsync() { var actor = Context.Actor; // Parse arguments var target = await Context.Parameters.GetAsync <string>(0); var reason = m_StringLocalizer["commands:global:no_reason_specified"].Value; if (Context.Parameters.Count >= 2) { reason = Context.Parameters.GetArgumentLine(1); } // Try to find user to ban var user = await m_UserManager.FindUserAsync(KnownActorTypes.Player, target, UserSearchMode.FindByNameOrId); var pData = await m_PlayerInfoRepository.FindPlayerAsync(target, UserSearchMode.FindByNameOrId); var isId = ulong.TryParse(target, out var pId) && pId >= 76561197960265728 && pId <= 103582791429521408; if (!(user is UnturnedUser) && pData == null && !isId) { await actor.PrintMessageAsync(m_StringLocalizer["commands:global:playernotfound", new { Input = target }]); return; } var adminId = ulong.TryParse(actor.Id, out var id) ? id : 0ul; CSteamID steamId; string characterName; string hwid; uint ip; if (user is UnturnedUser player) { steamId = player.SteamId; characterName = player.DisplayName; SteamGameServerNetworking.GetP2PSessionState(steamId, out var sessionState); ip = sessionState.m_nRemoteIP == 0 ? 0 : sessionState.m_nRemoteIP; hwid = string.Join("", player.Player.SteamPlayer.playerID.hwid); await UniTask.SwitchToMainThread(); player.Player.Player.life.askDamage(101, Vector3.up * 101f, EDeathCause.KILL, ELimb.SKULL, (CSteamID)adminId, out _); await UniTask.SwitchToThreadPool(); } else if (pData != null) { steamId = (CSteamID)pData.Id; characterName = pData.CharacterName; ip = (uint)pData.Ip; hwid = pData.Hwid; } else { steamId = (CSteamID)pId; characterName = pId.ToString(); ip = 0; hwid = ""; } var server = await m_PlayerInfoRepository.GetCurrentServerAsync(); await m_GlobalBanRepository.BanPlayerAsync(server?.Id ?? 0, steamId.m_SteamID, ip, hwid, uint.MaxValue, adminId, reason); if (user is UnturnedUser) { await UniTask.SwitchToMainThread(); Provider.ban(steamId, reason, uint.MaxValue); await UniTask.SwitchToThreadPool(); } var translated = m_StringLocalizer["commands:ban:banned", new { Player = characterName, Reason = reason }]; await m_UserManager.BroadcastAsync(translated); await actor.PrintMessageAsync(translated); if (!(actor is ConsoleActor)) { m_Logger.LogInformation(translated); } if (m_Plugin.Instance != null) { await m_Plugin.Instance.SendWebhookAsync(WebhookType.Ban, characterName, actor.DisplayName, reason, steamId.ToString(), uint.MaxValue); } }