Иконка ресурса

FREE IQChat : 2.72.60 2.72.60

Нет прав для скачивания
C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using CompanionServer;
using Object = System.Object;
using Oxide.Game.Rust.Cui;
using System.Text.RegularExpressions;
using System.Text;
using Newtonsoft.Json;
using ConVar;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Pool = Facepunch.Pool;
using Oxide.Core.Libraries;
using System.IO;
using Oxide.Core;
using System;
using Newtonsoft.Json.Linq;
using UnityEngine.Networking;
namespace Oxide.Plugins {
    [Info("IQChat", "Mercury", "2.72.60")]
    [Description("The most pleasant chat for your server from the IQ system")]
    class IQChat : RustPlugin {
        private void DrawUI_IQChat_Update_Check_Box(BasePlayer player, ElementsSettingsType Type, String OffsetMin, String OffsetMax, Boolean StatusCheckBox) {
            String Interface = InterfaceBuilder.GetInterface("UI_Chat_Context_CheckBox");
            User Info = UserInformation[player.userID];
            if (Info == null || Interface == null) return;
            String Name = $"{Type}";
            Interface = Interface.Replace("%NAME_CHECK_BOX%", Name);
            Interface = Interface.Replace("%COLOR%", !StatusCheckBox ? "0.4716981 0.4716981 0.4716981 1" : "0.6040971 0.4198113 1 1");
            Interface = Interface.Replace("%OFFSET_MIN%", OffsetMin);
            Interface = Interface.Replace("%OFFSET_MAX%", OffsetMax);
            Interface = Interface.Replace("%COMMAND_TURNED%", $"newui.cmd checkbox.controller {Type}");
            CuiHelper.DestroyUi(player, Name);
            CuiHelper.AddUi(player, Interface);
        }
        private List<String> ConvertStringToList(String input) {
            String pattern = @"[,\.\;\:\s]+";
            return Regex.Split(input, pattern) .Select(item => item.Trim()) .Where(item => !string.IsNullOrEmpty(item)) .Take(10) .ToList();
        }
        String API_GET_DEFAULT_PREFIX() => config.ControllerConnect.SetupDefaults.PrefixDefault;
        [ChatCommand("hunmute")]
        void HideUnMute(BasePlayer Moderator, string cmd, string[] arg) {
            if (!IsModerator(Moderator)) return;
            if (arg == null || arg.Length != 1 || arg.Length > 1) {
                ReplySystem(Moderator, LanguageEn ? "Invalid syntax, please use : hunmute Steam64ID/Nick" : "Неверный синтаксис,используйте : hunmute Steam64ID/Ник");
                return;
            }
            string NameOrID = arg[0];
            BasePlayer target = GetPlayerNickOrID(NameOrID);
            if (target == null) {
                UInt64 Steam64ID = 0;
                if (UInt64.TryParse(NameOrID, out Steam64ID)) {
                    if (UserInformation.ContainsKey(Steam64ID)) {
                        User Info = UserInformation[Steam64ID];
                        if (Info == null) return;
                        if (!Info.MuteInfo.IsMute(MuteType.Chat)) {
                            ReplySystem(Moderator, LanguageEn ? "The player does not have a chat lock" : "У игрока нет блокировки чата");
                            return;
                        }
                        if (!Moderator.IsAdmin && Moderator.userID == Steam64ID) {
                            ReplySystem(Moderator, GetLang("FUNC_MESSAGE_UNMUTE_YOURSELF", Moderator.UserIDString));
                            return;
                        }
                        Info.MuteInfo.UnMute(MuteType.Chat);
                        ReplySystem(Moderator, LanguageEn ? "You have unblocked the offline chat to the player" : "Вы разблокировали чат offline игроку");
                        return;
                    }
                    else {
                        ReplySystem(Moderator, LanguageEn ? "This player is not on the server" : "Такого игрока нет на сервере");
                        return;
                    }
                }
                else {
                    ReplySystem(Moderator, LanguageEn ? "This player is not on the server" : "Такого игрока нет на сервере");
                    return;
                }
            }
            UnmutePlayer(target, MuteType.Chat, Moderator, true, true);
        }
        private void DrawUI_IQChat_Alert(BasePlayer player, String Description, String Title = null) {
            if (_interface == null) {
                PrintWarning("Генерируем интерфейс, ожидайте сообщения об успешной генерации");
                return;
            }
            String Interface = InterfaceBuilder.GetInterface("UI_Chat_Alert");
            if (Interface == null) return;
            Interface = Interface.Replace("%TITLE%", Title ?? GetLang("IQCHAT_ALERT_TITLE", player.UserIDString));
            Interface = Interface.Replace("%DESCRIPTION%", Description);
            CuiHelper.DestroyUi(player, InterfaceBuilder.UI_Chat_Alert);
            CuiHelper.AddUi(player, Interface);
            player.Invoke(() => {
                CuiHelper.DestroyUi(player, InterfaceBuilder.UI_Chat_Alert);
            }
            , config.ControllerMessages.GeneralSetting.OtherSetting.TimeDeleteAlertUI);
        }
        [ChatCommand("unmute")]
        void UnMuteCustomChat(BasePlayer Moderator, string cmd, string[] arg) {
            if (!IsModerator(Moderator)) return;
            if (arg == null || arg.Length != 1 || arg.Length > 1) {
                ReplySystem(Moderator, LanguageEn ? "Invalid syntax, please use : unmute Steam64ID" : "Неверный синтаксис,используйте : unmute Steam64ID");
                return;
            }
            string NameOrID = arg[0];
            if (IsFakeUser(NameOrID)) {
                List<FakePlayer> playerList = GetCombinedPlayerList();
                if (playerList != null) {
                    FakePlayer fakeUser = playerList.FirstOrDefault(x => x.userId.Equals(NameOrID) || x.displayName.ToLower().Contains(NameOrID.ToLower()));
                    if (fakeUser != null) UnmutePlayer(null, MuteType.Chat, Moderator, false, true, fakeUser.userId);
                }
                return;
            }
            BasePlayer target = GetPlayerNickOrID(NameOrID);
            if (target == null) {
                UInt64 Steam64ID = 0;
                if (UInt64.TryParse(NameOrID, out Steam64ID)) {
                    if (UserInformation.ContainsKey(Steam64ID)) {
                        User Info = UserInformation[Steam64ID];
                        if (Info == null) return;
                        if (!Info.MuteInfo.IsMute(MuteType.Chat)) {
                            ReplySystem(Moderator, LanguageEn ? "The player does not have a chat lock" : "У игрока нет блокировки чата");
                            return;
                        }
                        if (!Moderator.IsAdmin && Moderator.userID == Steam64ID) {
                            ReplySystem(Moderator, GetLang("FUNC_MESSAGE_UNMUTE_YOURSELF", Moderator.UserIDString));
                            return;
                        }
                        Info.MuteInfo.UnMute(MuteType.Chat);
                        ReplySystem(Moderator, LanguageEn ? "You have unblocked the offline chat to the player" : "Вы разблокировали чат offline игроку");
                        return;
                    }
                    else {
                        ReplySystem(Moderator, LanguageEn ? "This player is not on the server" : "Такого игрока нет на сервере");
                        return;
                    }
                }
                else {
                    ReplySystem(Moderator, LanguageEn ? "This player is not on the server" : "Такого игрока нет на сервере");
                    return;
                }
            }
            UnmutePlayer(target, MuteType.Chat, Moderator, false, true);
        }
        private void DrawUI_IQChat_Mute_Alert_Reasons(BasePlayer player, BasePlayer Target, String Reason, Int32 Y, MuteType Type, UInt64 IDFake = 0) {
            String Interface = InterfaceBuilder.GetInterface("UI_Chat_Mute_Alert_DropList_Reason");
            if (Interface == null) return;
            Interface = Interface.Replace("%OFFSET_MIN%", $"-147.5 {85.42 - (Y * 40)}");
            Interface = Interface.Replace("%OFFSET_MAX%", $"147.5 {120.42 - (Y * 40)}");
            Interface = Interface.Replace("%REASON%", Reason);
            Interface = Interface.Replace("%COMMAND_REASON%", $"newui.cmd action.mute.ignore ignore.and.mute.controller {SelectedAction.Mute} confirm.yes {((IsReadyIQFakeActive() && Target == null && IDFake != 0) ? IDFake : Target.userID)} {Type} {Y}");
            CuiHelper.AddUi(player, Interface);
        }
        public void BroadcastAuto() {
            Configuration.ControllerAlert.Alert Broadcast = config.ControllerAlertSetting.AlertSetting;
            if (Broadcast.AlertMessage) {
                Int32 IndexBroadkastNow = 0;
                String RandomMsg = String.Empty;
                timer.Every(Broadcast.MessageListTimer, () => {
                    if (Broadcast.AlertMessageType) {
                        foreach (BasePlayer p in BasePlayer.activePlayerList) {
                            List<String> MessageList = GetMesagesList(p, Broadcast.MessageList.LanguageMessages);
                            if (MessageList.Count == 0) continue;
                            if (IndexBroadkastNow >= MessageList.Count) IndexBroadkastNow = 0;
                            RandomMsg = MessageList[IndexBroadkastNow];
                            ReplySystem(p, RandomMsg);
                        }
                        IndexBroadkastNow++;
                    }
                    else {
                        foreach (BasePlayer p in BasePlayer.activePlayerList) {
                            String templateText = GetMessages(p, Broadcast.MessageList.LanguageMessages);
                            if(String.IsNullOrWhiteSpace(templateText)) continue;
                            ReplySystem(p, templateText);
                        }
                    }
                }
                );
            }
        }
        [ChatCommand("adminalert")]
        private void AdminAlertChatCommand(BasePlayer Sender, String cmd, String[] args) {
            if (!permission.UserHasPermission(Sender.UserIDString, PermissionAlert)) return;
            Alert(Sender, args, true);
        }
        [ChatCommand("chat")]
        private void ChatCommandOpenedUI(BasePlayer player) {
            if (_interface == null) {
                PrintWarning(LanguageEn ? "We generate the interface, wait for a message about successful generation" : "Генерируем интерфейс, ожидайте сообщения об успешной генерации");
                return;
            }
            if (player == null) return;
            Configuration.ControllerParameters ControllerParameters = config.ControllerParameter;
            if (!LocalBase.ContainsKey(player)) LocalBase.Add(player, new InformationOpenedUI {
            }
            );
            LocalBase[player].ElementsPrefix = ControllerParameters.Prefixes.Prefixes.OrderByDescending(arg => arg.Argument.Length).Where(p => permission.UserHasPermission(player.UserIDString, p.Permissions) && !p.IsBlockSelected).ToList();
            LocalBase[player].ElementsNick = ControllerParameters.NickColorList.Where(n => permission.UserHasPermission(player.UserIDString, n.Permissions) && !n.IsBlockSelected).ToList();
            LocalBase[player].ElementsChat = ControllerParameters.MessageColorList.Where(m => permission.UserHasPermission(player.UserIDString, m.Permissions) && !m.IsBlockSelected).ToList();
            if (IQRankSystem && config.ReferenceSetting.IQRankSystems.UseRankSystem) {
                List<Configuration.ControllerParameters.AdvancedFuncion> RankList = new List<Configuration.ControllerParameters.AdvancedFuncion>();
                foreach (String Rank in IQRankListKey(player)) RankList.Add(new Configuration.ControllerParameters.AdvancedFuncion {
                    Argument = Rank, Permissions = String.Empty
                }
                );
                LocalBase[player].ElementsRanks = RankList;
            }
            DrawUI_IQChat_Context(player);
        }
        void API_ALERT_PLAYER(BasePlayer player, String Message, String CustomPrefix = null, String CustomAvatar = null, String CustomHex = null) => ReplySystem(player, Message, CustomPrefix, CustomAvatar, CustomHex);
        public class FakePlayer {
            public Boolean isMuted;
            [JsonProperty("userId")]
            public String userId;
            [JsonProperty("displayName")]
            public String displayName;
        }
        [ChatCommand("mutevoice")]
        void MuteVoiceCustomChat(BasePlayer Moderator, string cmd, string[] arg) {
            if (!IsModerator(Moderator)) return;
            if (arg == null || arg.Length != 3 || arg.Length > 3) {
                ReplySystem(Moderator, LanguageEn ? "Invalid syntax, use : mutevoice Steam64ID/Nick Reason Time(seconds)" : "Неверный синтаксис, используйте : mutevoice Steam64ID/Ник Причина Время(секунды)");
                return;
            }
            string NameOrID = arg[0];
            string Reason = arg[1];
            Int32 TimeMute = 0;
            if (!Int32.TryParse(arg[2], out TimeMute)) {
                ReplySystem(Moderator, LanguageEn ? "Enter time in numbers!" : "Введите время цифрами!");
                return;
            }
            if (IsFakeUser(NameOrID)) {
                List<FakePlayer> playerList = GetCombinedPlayerList();
                if (playerList != null) {
                    FakePlayer fakeUser = playerList.FirstOrDefault(x => x.userId.Equals(NameOrID) || x.displayName.ToLower().Contains(NameOrID.ToLower()));
                    if (fakeUser != null) MutePlayer(null, MuteType.Voice, 0, Moderator, Reason, TimeMute, false, true, fakeUser.userId);
                }
                return;
            }
            BasePlayer target = GetPlayerNickOrID(NameOrID);
            if (target == null) {
                UInt64 Steam64ID = 0;
                if (UInt64.TryParse(NameOrID, out Steam64ID)) {
                    if (UserInformation.ContainsKey(Steam64ID)) {
                        User Info = UserInformation[Steam64ID];
                        if (Info == null) return;
                        if (Info.MuteInfo.IsMute(MuteType.Voice)) {
                            ReplySystem(Moderator, LanguageEn ? "The player already has a voice lock" : "Игрок уже имеет блокировку голосового чата");
                            return;
                        }
                        Info.MuteInfo.SetMute(MuteType.Voice, TimeMute);
                        ReplySystem(Moderator, LanguageEn ? "Voice blocking issued to offline player" : "Блокировка глосового чата выдана offline-игроку");
                        return;
                    }
                    else {
                        ReplySystem(Moderator, LanguageEn ? "This player is not on the server" : "Такого игрока нет на сервере");
                        return;
                    }
                }
                else {
                    ReplySystem(Moderator, LanguageEn ? "This player is not on the server" : "Такого игрока нет на сервере");
                    return;
                }
            }
            MutePlayer(target, MuteType.Voice, 0, Moderator, Reason, TimeMute, false, true);
        }
        void IQRankSetRank(BasePlayer player, string RankKey) => IQRankSystem?.Call("API_SET_ACTIVE_RANK", player.userID.Get(), RankKey);
        void OnUserGroupAdded(string id, string groupName) {
            String[] PermissionsGroup = permission.GetGroupPermissions(groupName);
            if (PermissionsGroup == null) return;
            foreach (String permName in PermissionsGroup) SetupParametres(id, permName);
        }
        private void DrawUI_IQChat_DropList(BasePlayer player, String OffsetMin, String OffsetMax, String Title, TakeElementUser ElementType) {
            String Interface = InterfaceBuilder.GetInterface("UI_Chat_DropList");
            if (Interface == null) return;
            Interface = Interface.Replace("%TITLE%", Title);
            Interface = Interface.Replace("%OFFSET_MIN%", OffsetMin);
            Interface = Interface.Replace("%OFFSET_MAX%", OffsetMax);
            Interface = Interface.Replace("%BUTTON_DROP_LIST_CMD%", $"newui.cmd droplist.controller open {ElementType}");
            CuiHelper.AddUi(player, Interface);
        }
        public class Fields {
            public string name {
                get;
                set;
            }
            public string value {
                get;
                set;
            }
            public bool inline {
                get;
                set;
            }
            public Fields(string name, string value, bool inline) {
                this.name = name;
                this.value = value;
                this.inline = inline;
            }
        }
        /// <summary>
        /// - Исправление после обновления игры
        /// TODO: https://codefling.com/files/support/19272-add-a-rename-command-with-permission/
        /// TODO: https://codefling.com/files/support/14625-assigning-permissions-to-groups/
        /// TODO: clan.enabled "True" (поддержка кланов)
        /// TODO: Добавить отображение канала-чата в консоли лога чата [IQChat] Player : bla bla
        /// TODO: Добавить возможность отключения переводчика (по команде прст)
        /// Обновление
        /// </summary>
        [PluginReference]
        Plugin ImageLibrary, IQStaff, IQFakeActive, IQRankSystem, XLevels, Clans, XPrison, TranslationAPI, RustApp, SkillTree, PlayerRanks;
        Boolean API_CHECK_VOICE_CHAT(UInt64 ID) {
            if (!UserInformation.ContainsKey(ID)) return false;
            return UserInformation[ID].MuteInfo.IsMute(MuteType.Voice);
        }
        private void RustApp_NotifyUnMute(UInt64 targetID, MuteType muteType, BasePlayer moderator) {
            if (!RustApp) return;
            String messageNotify = LanguageEn ? $"Moderator {(moderator == null ? "Server" : $" {
                moderator.userID
            }
            ")} has unblocked the player's {(muteType == MuteType.Chat ? "text" : "voice")} chat {targetID}" : $"Модератор {(moderator == null ? "Server" : $" {
                moderator.userID
            }
            ")} разблокировал {(muteType == MuteType.Chat ? "текстовый" : "голосовой")} чат игроку {targetID}";
            RustApp.Call("RA_CreateAlert", this, messageNotify, null, null);
        }
        String API_GET_CHAT_COLOR(UInt64 ID) {
            if (!UserInformation.ContainsKey(ID)) return String.Empty;
            return UserInformation[ID].Info.ColorMessage;
        }
        [ConsoleCommand("rename")]
        private void ConsoleCommandRename(ConsoleSystem.Arg args) {
            BasePlayer Renamer = args.Player();
            if (Renamer == null) {
                PrintWarning(LanguageEn ? "You can only use this command while on the server" : "Вы можете использовать эту команду только находясь на сервере");
                return;
            }
            if (!permission.UserHasPermission(Renamer.UserIDString, PermissionRename)) return;
            GeneralInformation General = GeneralInfo;
            if (General == null) return;
            if (args.Args.Length == 0 || args == null) {
                ReplySystem(Renamer, lang.GetMessage("COMMAND_RENAME_NOTARG", this, Renamer.UserIDString));
                return;
            }
            String Name = args.Args[0];
            UInt64 ID = Renamer.userID;
            if (args.Args.Length == 2 && args.Args[1] != null && !String.IsNullOrWhiteSpace(args.Args[1])) if (!UInt64.TryParse(args.Args[1], out ID)) {
                ReplySystem(Renamer, lang.GetMessage("COMMAND_RENAME_NOT_ID", this, Renamer.UserIDString));
                return;
            }
            if (General.RenameList.ContainsKey(Renamer.userID)) {
                General.RenameList[Renamer.userID].RenameNick = Name;
                General.RenameList[Renamer.userID].RenameID = ID;
            }
            else General.RenameList.Add(Renamer.userID, new GeneralInformation.RenameInfo {
                RenameNick = Name, RenameID = ID
            }
            );
            ReplySystem(Renamer, GetLang("COMMAND_RENAME_SUCCES", Renamer.UserIDString, Name, ID));
            RenameUpdate(Renamer, Name);
        }
        [ChatCommand("pm")]
        void PmChat(BasePlayer Sender, String cmd, String[] arg) {
            Configuration.ControllerMessage ControllerMessages = config.ControllerMessages;
            if (!ControllerMessages.TurnedFunc.PMSetting.PMActivate) return;
            if (arg.Length == 0 || arg == null) {
                ReplySystem(Sender, lang.GetMessage("COMMAND_PM_NOTARG", this, Sender.UserIDString));
                return;
            }
            Configuration.ControllerMessage.TurnedFuncional.AntiNoob.Settings antiNoob = config.ControllerMessages.TurnedFunc.AntiNoobSetting.AntiNoobPM;
            if (antiNoob.AntiNoobActivate) if (IsNoob(Sender.userID, antiNoob.TimeBlocked)) {
                ReplySystem(Sender, GetLang("IQCHAT_INFO_ANTI_NOOB_PM", Sender.UserIDString, FormatTime(UserInformationConnection[Sender.userID].LeftTime(antiNoob.TimeBlocked), Sender.UserIDString)));
                return;
            }
            User InfoSender = UserInformation[Sender.userID];
            if(config.ControllerMutes.mutedPM) if (InfoSender.MuteInfo.IsMute(MuteType.Chat)) {
                ReplySystem(Sender, GetLang("IQCHAT_FUNCED_NO_SEND_CHAT_MUTED", Sender.UserIDString, FormatTime(InfoSender.MuteInfo.GetTime(MuteType.Chat), Sender.UserIDString)));
                return;
            }
            String NameUser = arg[0];
            if (IsReadyIQFakeActive() && IsFakeUser(NameUser)) {
                ReplySystem(Sender, GetLang("COMMAND_PM_SUCCESS", Sender.UserIDString, string.Join(" ", arg.ToArray()).Replace(NameUser, ""), NameUser));
                return;
            }
            BasePlayer TargetUser = GetPlayerNickOrID(NameUser);
            if (TargetUser == null || NameUser == null || !UserInformation.ContainsKey(TargetUser.userID) || TargetUser == Sender) {
                ReplySystem(Sender, GetLang("COMMAND_PM_NOT_USER", Sender.UserIDString));
                return;
            }
            User InfoTarget = UserInformation[TargetUser.userID];
            if (!InfoTarget.Settings.TurnPM) {
                ReplySystem(Sender, GetLang("FUNC_MESSAGE_PM_TURN_FALSE", Sender.UserIDString));
                return;
            }
            if (ControllerMessages.TurnedFunc.IgnoreUsePM) {
                if (InfoTarget.Settings.IsIgnored(Sender.userID)) {
                    ReplySystem(Sender, GetLang("IGNORE_NO_PM", Sender.UserIDString));
                    return;
                }
                if (InfoSender.Settings.IsIgnored(TargetUser.userID)) {
                    ReplySystem(Sender, GetLang("IGNORE_NO_PM_ME", Sender.UserIDString));
                    return;
                }
            }
            String Message = GetMessageInArgs(Sender, arg.Skip(1).ToArray());
            if (Message == null || Message.Length <= 0) {
                ReplySystem(Sender, GetLang("COMMAND_PM_NOT_NULL_MSG", Sender.UserIDString));
                return;
            }
            Message = Message.EscapeRichText();
            Message = RemoveLinkText(Message);
            if (Message.Length > 125) return;
            PMHistory[TargetUser] = Sender;
            PMHistory[Sender] = TargetUser;
            GeneralInformation.RenameInfo RenamerSender = GeneralInfo.GetInfoRename(Sender.userID);
            GeneralInformation.RenameInfo RenamerTarget = GeneralInfo.GetInfoRename(TargetUser.userID);
            String DisplayNameSender = RenamerSender != null ? RenamerSender.RenameNick ?? Sender.displayName : Sender.displayName;
            String TargetDisplayName = RenamerTarget != null ? RenamerTarget.RenameNick ?? TargetUser.displayName : TargetUser.displayName;
            if (TranslationAPI && config.ReferenceSetting.translationApiSettings.useTranslationApi && config.ReferenceSetting.translationApiSettings.translatePmChat) ReplyTranslationPM(Sender, TargetUser, Message, DisplayNameSender, TargetDisplayName);
            else {
                ReplySystem(TargetUser, GetLang("COMMAND_PM_SEND_MSG", TargetUser.UserIDString, DisplayNameSender, Message));
                ReplySystem(Sender, GetLang("COMMAND_PM_SUCCESS", Sender.UserIDString, Message, TargetDisplayName));
            }
            if (InfoTarget.Settings.TurnSound) Effect.server.Run(ControllerMessages.TurnedFunc.PMSetting.SoundPM, TargetUser.GetNetworkPosition());
            Interface.Oxide.CallHook("OnSendedPersonalMessage", Sender, TargetUser, Message);
            RustApp_HandlerPM(Sender.UserIDString, TargetUser.UserIDString, Message);
            Log(LanguageEn ? $"PRIVATE MESSAGES : {DisplayNameSender}({Sender.userID}) sent a message to the player - {TargetDisplayName}({TargetUser.userID})\nMESSAGE : {Message}" : $"ЛИЧНЫЕ СООБЩЕНИЯ : {DisplayNameSender}({Sender.userID}) отправил сообщение игроку - {TargetDisplayName}({TargetUser.userID})\nСООБЩЕНИЕ : {Message}");
            DiscordLoggPM(Sender, TargetUser, Message);
            if (!config.disableRconBroadcast) {
                Chat.Record(new Chat.ChatEntry {
                    Message = LanguageEn ? $"PRIVATE MESSAGES : {DisplayNameSender}({Sender.userID}) -> {TargetDisplayName}({TargetUser.userID}) : MESSAGE : {Message}" : $"ЛИЧНЫЕ СООБЩЕНИЯ : {DisplayNameSender}({Sender.userID}) -> {TargetDisplayName}({TargetUser.userID}) : СООБЩЕНИЕ : {Message}", UserId = Sender.UserIDString, Username = Sender.displayName, Channel = Chat.ChatChannel.Global, Time = (DateTime.UtcNow.Hour * 3600) + (DateTime.UtcNow.Minute * 60), Color = "#3f4bb8",
                }
                );
            }
            PrintWarning(LanguageEn ? $"PRIVATE MESSAGES : {DisplayNameSender}({Sender.userID}) -> {TargetDisplayName}({TargetUser.userID}) : MESSAGE : {Message}" : $"ЛИЧНЫЕ СООБЩЕНИЯ : {DisplayNameSender}({Sender.userID}) -> {TargetDisplayName}({TargetUser.userID}) : СООБЩЕНИЕ : {Message}");
        }
        private List<FakePlayer> GetCombinedPlayerList() {
            if (!IsReadyIQFakeActive()) return null;
            JObject jsonData = IQFakeActive.Call<JObject>("GetListPlayers");
            if (!jsonData.TryGetValue("players", out JToken playersToken)) return null;
            List<FakePlayer> playerList = playersToken.ToObject<List<FakePlayer>>();
            return playerList.Where(p => !permission.UserHasPermission(p.userId, PermissionIgnoreMute)).ToList();
        }
        private void AddHistoryMessage(BasePlayer player, String Message) {
            if (!LastMessagesChat.ContainsKey(player)) LastMessagesChat.Add(player, new List<String> {
                Message
            }
            );
            else LastMessagesChat[player].Add(Message);
        }
        private const String PermissionUseCmdMsg = "iqchat.cmsg";
        public String GetMessages(BasePlayer player, Dictionary<String, List<String>> LanguageMessages) {
            String LangPlayer = _.lang.GetLanguage(player.UserIDString);
            if (LanguageMessages.ContainsKey(LangPlayer)) return LanguageMessages[LangPlayer].GetRandom();
            else if (LanguageMessages.ContainsKey("en")) return LanguageMessages["en"].GetRandom();
            else return LanguageMessages.FirstOrDefault().Value.GetRandom();
        }
        private void DiscordLoggPM(BasePlayer Sender, BasePlayer Reciepter, String MessageLogged) {
            Configuration.OtherSettings.General PMChat = config.OtherSetting.LogsPMChat;
            if (PMChat == null || !PMChat.UseLogged || String.IsNullOrWhiteSpace(PMChat.Webhooks)) return;
            if (Sender == null || Reciepter == null) return;
            GeneralInformation.RenameInfo SenderRename = GeneralInfo.GetInfoRename(Sender.userID);
            GeneralInformation.RenameInfo ReciepterRename = GeneralInfo.GetInfoRename(Reciepter.userID);
            UInt64 UserIDSender = SenderRename != null ? SenderRename.RenameID == 0 ? Sender.userID : SenderRename.RenameID : Sender.userID;
            UInt64 UserIDReciepter = ReciepterRename != null ? ReciepterRename.RenameID == 0 ? Reciepter.userID : ReciepterRename.RenameID : Reciepter.userID;
            String SenderName = SenderRename != null ? ReciepterRename.RenameNick ?? Sender.displayName : Sender.displayName;
            String ReciepterName = ReciepterRename != null ? ReciepterRename.RenameNick ?? Reciepter.displayName : Reciepter.displayName;
            List<Fields> fields = new List<Fields> {
                new Fields(LanguageEn ? "Sender" : "Отправитель", $"{SenderName}({UserIDSender})", true), new Fields(LanguageEn ? "Recipient" : "Получатель", $"{ReciepterName}({UserIDReciepter})", true), new Fields(LanguageEn ? "Message" : "Сообщение", MessageLogged, false),
            }
            ;
            FancyMessage newMessage = new FancyMessage(null, false, new FancyMessage.Embeds[1] {
                new FancyMessage.Embeds(null, 16608621, fields, new Authors("IQChat PM-History", null, "https://i.postimg.cc/SshGgy52/xiwsg5m.png", null), null)
            }
            );
            Request($"{PMChat.Webhooks}", newMessage.toJSON());
        }
        void ReplyBroadcast(String CustomPrefix = null, String CustomAvatar = null, Boolean AdminAlert = false, String LangKey = "", params object[] args) {
            foreach (BasePlayer p in !AdminAlert ? BasePlayer.activePlayerList.Where(p => UserInformation[p.userID].Settings.TurnBroadcast) : BasePlayer.activePlayerList) ReplySystem(p, GetLang(LangKey, p.UserIDString, args), CustomPrefix, CustomAvatar);
        }
        public Dictionary<UInt64, FlooderInfo> Flooders = new Dictionary<UInt64, FlooderInfo>();
        private void ReplyTranslationPM(BasePlayer Sender, BasePlayer TargetUser, String Message, String DisplayNameSender, String TargetDisplayName) {
            if (!String.IsNullOrWhiteSpace(config.ReferenceSetting.translationApiSettings.codeLanguagePrimary)) {
                Action<String> callback = translation => {
                    ReplySystem(TargetUser, GetLang("COMMAND_PM_SEND_MSG", TargetUser.UserIDString, DisplayNameSender, !permission.UserHasPermission(TargetUser.UserIDString, PermissionTranslationIgnore) ? translation : Message));
                    ReplySystem(Sender, GetLang("COMMAND_PM_SUCCESS", Sender.UserIDString, Message, TargetDisplayName));
                }
                ;
                TranslationAPI.Call("Translate", Message, config.ReferenceSetting.translationApiSettings.codeLanguagePrimary, "auto", callback);
            }
            else {
                String codeResult = lang.GetLanguage(TargetUser.UserIDString);
                saveTranslate.TryAdd(codeResult, new TranslationState());
                Action<String> callback = translation => {
                    saveTranslate[codeResult].IsProcessed = true;
                    saveTranslate[codeResult].Translation = translation;
                    saveTranslate[codeResult].DoTranslation = Message;
                    ReplySystem(TargetUser, GetLang("COMMAND_PM_SEND_MSG", TargetUser.UserIDString, DisplayNameSender, !permission.UserHasPermission(TargetUser.UserIDString, PermissionTranslationIgnore) ? translation : Message));
                    ReplySystem(Sender, GetLang("COMMAND_PM_SUCCESS", Sender.UserIDString, Message, TargetDisplayName));
                }
                ;
                if (lang.GetLanguage(Sender.UserIDString) == codeResult) {
                    ReplySystem(TargetUser, GetLang("COMMAND_PM_SEND_MSG", TargetUser.UserIDString, DisplayNameSender, Message));
                    ReplySystem(Sender, GetLang("COMMAND_PM_SUCCESS", Sender.UserIDString, Message, TargetDisplayName));
                }
                else if (saveTranslate[codeResult].IsProcessed && !string.IsNullOrWhiteSpace(saveTranslate[codeResult].Translation) && Message == saveTranslate[codeResult].DoTranslation) {
                    ReplySystem(TargetUser, GetLang("COMMAND_PM_SEND_MSG", TargetUser.UserIDString, DisplayNameSender, saveTranslate[codeResult].Translation));
                    ReplySystem(Sender, GetLang("COMMAND_PM_SUCCESS", Sender.UserIDString, Message, TargetDisplayName));
                }
                else TranslationAPI.Call("Translate", Message, codeResult, "auto", callback);
            }
        }
        private static InterfaceBuilder _interface;
        [ConsoleCommand("adminalert")]
        private void AdminAlertConsoleCommand(ConsoleSystem.Arg args) {
            BasePlayer Sender = args.Player();
            if (Sender != null) if (!permission.UserHasPermission(Sender.UserIDString, PermissionAlert)) return;
            Alert(Sender, args.Args, true);
        }
        Boolean API_CHECK_MUTE_CHAT(UInt64 ID) {
            if (!UserInformation.ContainsKey(ID)) return false;
            return UserInformation[ID].MuteInfo.IsMute(MuteType.Chat);
        }
        private String JoinStringList(List<String> inputList) => String.Join(", ", inputList);
        private void SaveLogChat(BasePlayer player, Chat.ChatChannel Channel, String MessageLogged) {
            String channel = Channel == Chat.ChatChannel.Global ? (LanguageEn ? "Global" : "Глобальный чат") : Channel == Chat.ChatChannel.Local ? (LanguageEn ? "Local" : "Локальный чат") : Channel == Chat.ChatChannel.Cards ? (LanguageEn ? "Poker" : "Покерный чат") : (LanguageEn ? "Team" : "Командный чат");
            String messageResult = $"[{DateTime.Now:HH:mm:ss}] [{channel}] {player.displayName} ({player.userID}) : {MessageLogged}";
            if (Channel == Chat.ChatChannel.Team) lastLogsTeamChat.Add(messageResult);
            else lastLogsGlobalChat.Add(messageResult);
        }
        private void DiscordLoggMuted(BasePlayer Target, MuteType Type, String Reason = null, String TimeBlocked = null, BasePlayer Moderator = null) {
            Configuration.OtherSettings.General MuteChat = config.OtherSetting.LogsMuted;
            if (!MuteChat.UseLogged || String.IsNullOrWhiteSpace(MuteChat.Webhooks)) return;
            Configuration.ControllerMute.LoggedFuncion ControllerMuted = config.ControllerMutes.LoggedMute;
            String ActionReason = String.Empty;
            GeneralInformation.RenameInfo RenameSender = GeneralInfo.GetInfoRename(Target.userID);
            UInt64 UserIDModeration = 0;
            String NickModeration = GetLang("IQCHAT_FUNCED_ALERT_TITLE_SERVER", Target.UserIDString);
            if (Moderator != null) {
                GeneralInformation.RenameInfo RenameModerator = GeneralInfo.GetInfoRename(Moderator.userID);
                UserIDModeration = RenameModerator != null ? RenameModerator.RenameID == 0 ? Moderator.userID : RenameModerator.RenameID : Moderator.userID;
                NickModeration = RenameModerator != null ? $"{RenameModerator.RenameNick ?? Moderator.displayName}" : Moderator.displayName;
            }
            String NickTarget = RenameSender != null ? $"{RenameSender.RenameNick ?? Target.displayName}" : Target.displayName;
            UInt64 UserIDTarget = RenameSender != null ? RenameSender.RenameID == 0 ? Target.userID : RenameSender.RenameID : Target.userID;
            List<Fields> fields;
            switch (Type) {
                case MuteType.Chat : {
                    if (Reason != null) ActionReason = LanguageEn ? "Mute chat" : "Блокировка чата";
                    else ActionReason = LanguageEn ? "Unmute chat" : "Разблокировка чата";
                    break;
                }
                case MuteType.Voice : {
                    if (Reason != null) ActionReason = LanguageEn ? "Mute voice" : "Блокировка голоса";
                    else ActionReason = LanguageEn ? "Unmute voice" : "Разблокировка голоса";
                    break;
                }
                default : break;
            }
            Int32 Color = 0;
            if (Reason != null) {
                fields = new List<Fields> {
                    new Fields(LanguageEn ? "Nickname of the moderator" : "Ник модератора", NickModeration, true), new Fields(LanguageEn ? "Steam64ID Moderator" : "Steam64ID модератора", $"{UserIDModeration}", true), new Fields(LanguageEn ? "Action" : "Действие", ActionReason, false), new Fields(LanguageEn ? "Reason" : "Причина", Reason, false), new Fields(LanguageEn ? "Time" : "Время", TimeBlocked, false), new Fields(LanguageEn ? "Nick blocked" : "Ник заблокированного", NickTarget, true), new Fields(LanguageEn ? "Steam64ID blocked" : "Steam64ID заблокированного", $"{UserIDTarget}", true),
                }
                ;
                if (ControllerMuted.UseHistoryMessage) {
                    String Messages = GetLastMessage(Target, ControllerMuted.CountHistoryMessage);
                    if (Messages != null && !String.IsNullOrWhiteSpace(Messages)) fields.Insert(fields.Count, new Fields(LanguageEn ? $"The latter {ControllerMuted.CountHistoryMessage} messages" : $"Последние {ControllerMuted.CountHistoryMessage} сообщений", Messages, false));
                }
                Color = 14357781;
            }
            else {
                fields = new List<Fields> {
                    new Fields(LanguageEn ? "Nickname of the moderator" : "Ник модератора", NickModeration, true), new Fields(LanguageEn ? "Steam64ID moderator" : "Steam64ID модератора", $"{UserIDModeration}", true), new Fields(LanguageEn ? "Action" : "Действие", ActionReason, false), new Fields(LanguageEn ? "Nick blocked" : "Ник заблокированного", NickTarget, true), new Fields(LanguageEn ? "Steam64ID blocked" : "Steam64ID заблокированного", $"{UserIDTarget}", true),
                }
                ;
                Color = 1432346;
            }
            FancyMessage newMessage = new FancyMessage(null, false, new FancyMessage.Embeds[1] {
                new FancyMessage.Embeds(null, Color, fields, new Authors("IQChat Mute-History", null, "https://i.postimg.cc/SshGgy52/xiwsg5m.png", null), null)
            }
            );
            Request($"{MuteChat.Webhooks}", newMessage.toJSON());
        }
        [ChatCommand("hmute")]
        void HideMute(BasePlayer Moderator, string cmd, string[] arg) {
            if (!IsModerator(Moderator)) return;
            if (arg == null || arg.Length != 3 || arg.Length > 3) {
                ReplySystem(Moderator, LanguageEn ? "Invalid syntax, use : hmute Steam64ID/Nick Reason Time(seconds)" : "Неверный синтаксис,используйте : hmute Steam64ID/Ник Причина Время(секунды)");
                return;
            }
            string NameOrID = arg[0];
            string Reason = arg[1];
            Int32 TimeMute = 0;
            if (!Int32.TryParse(arg[2], out TimeMute)) {
                ReplySystem(Moderator, LanguageEn ? "Enter the time in numbers!" : "Введите время цифрами!");
                return;
            }
            BasePlayer target = GetPlayerNickOrID(NameOrID);
            if (target == null) {
                UInt64 Steam64ID = 0;
                if (UInt64.TryParse(NameOrID, out Steam64ID)) {
                    if (UserInformation.ContainsKey(Steam64ID)) {
                        User Info = UserInformation[Steam64ID];
                        if (Info == null) return;
                        if (Info.MuteInfo.IsMute(MuteType.Chat)) {
                            ReplySystem(Moderator, LanguageEn ? "The player already has a chat lock" : "Игрок уже имеет блокировку чата");
                            return;
                        }
                        Info.MuteInfo.SetMute(MuteType.Chat, TimeMute);
                        ReplySystem(Moderator, LanguageEn ? "Chat blocking issued to offline player" : "Блокировка чата выдана offline-игроку");
                        return;
                    }
                    else {
                        ReplySystem(Moderator, LanguageEn ? "This player is not on the server" : "Такого игрока нет на сервере");
                        return;
                    }
                }
                else {
                    ReplySystem(Moderator, LanguageEn ? "This player is not on the server" : "Такого игрока нет на сервере");
                    return;
                }
            }
            MutePlayer(target, MuteType.Chat, 0, Moderator, Reason, TimeMute, true, true);
        }
        private void SendDiscordLogChats() {
            Configuration.OtherSettings.General TeamChat = config.OtherSetting.LogsChat.TeamChatSettings;
            if (TeamChat.UseLogged && !String.IsNullOrWhiteSpace(TeamChat.Webhooks) && lastLogsTeamChat.Count > 0) {
                List<String> logsToSend = Pool.Get<List<String>>();
                Int32 count = Math.Min(10, lastLogsTeamChat.Count);
                for (Int32 i = 0; i < count; i++) logsToSend.Add(lastLogsTeamChat[i]);
                String resultLogs = String.Join("\n", logsToSend);
                FancyMessage newMessage = new FancyMessage(resultLogs, false, null);
                Request($"{TeamChat.Webhooks}", newMessage.toJSON());
                lastLogsTeamChat.RemoveRange(0, count);
                Pool.FreeUnmanaged(ref logsToSend);
            }
            Configuration.OtherSettings.General GlobalChat = config.OtherSetting.LogsChat.GlobalChatSettings;
            if (GlobalChat.UseLogged && !String.IsNullOrWhiteSpace(GlobalChat.Webhooks) && lastLogsGlobalChat.Count > 0) {
                List<String> logsToSend = Pool.Get<List<String>>();
                Int32 count = Math.Min(10, lastLogsGlobalChat.Count);
                for (Int32 i = 0; i < count; i++) logsToSend.Add(lastLogsGlobalChat[i]);
                String resultLogs = String.Join("\n", logsToSend);
                FancyMessage newMessage = new FancyMessage(resultLogs, false, null);
                Request($"{GlobalChat.Webhooks}", newMessage.toJSON());
                lastLogsGlobalChat.RemoveRange(0, count);
                Pool.FreeUnmanaged(ref logsToSend);
            }
        }
        private object OnServerMessage(String message, String name) {
            if (config.ControllerMessages.TurnedFunc.HideAdminGave) if (message.Contains("gave") && name == "SERVER") return true;
            return null;
        }
        private const String PermissionHideConnection = "iqchat.hideconnection";
        public class TranslationState {
            public Boolean IsProcessed {
                get;
                set;
            }
            public String Translation {
                get;
                set;
            }
            public String DoTranslation {
                get;
                set;
            }
        }
        [ChatCommand("alertuip")]
        private void AlertUIPChatCommand(BasePlayer Sender, String cmd, String[] args) {
            if (!permission.UserHasPermission(Sender.UserIDString, PermissionAlert)) return;
            if (args == null || args.Length == 0) {
                ReplySystem(Sender, LanguageEn ? "You didn't specify a player!" : "Вы не указали игрока!");
                return;
            }
            BasePlayer Recipient = BasePlayer.Find(args[0]);
            if (Recipient == null) {
                ReplySystem(Sender, LanguageEn ? "The player is not on the server!" : "Игрока нет на сервере!");
                return;
            }
            AlertUI(Sender, Recipient, args.Skip(1).ToArray());
        }
        private const String PermissionAlert = "iqchat.alertuse";
        String IQRankGetTimeGame(BasePlayer player) => (string)(IQRankSystem?.Call("API_GET_TIME_GAME", player.userID.Get()));
        public void AnwserMessage(BasePlayer player, String Message) {
            Configuration.AnswerMessage Anwser = config.AnswerMessages;
            if (!Anwser.UseAnswer) return;
            foreach (KeyValuePair<String, Configuration.LanguageController> Anwsers in Anwser.AnswerMessageList) if (Message.Contains(Anwsers.Key.ToLower())) {
                String templateText = GetMessages(player, Anwsers.Value.LanguageMessages);
                if(String.IsNullOrWhiteSpace(templateText)) continue;
                ReplySystem(player, templateText);
            }
        }
        private void DrawUI_IQChat_Sliders(BasePlayer player, String Name, String OffsetMin, String OffsetMax, TakeElementUser ElementType) {
            String Interface = InterfaceBuilder.GetInterface("UI_Chat_Slider");
            if (Interface == null) return;
            Interface = Interface.Replace("%OFFSET_MIN%", OffsetMin);
            Interface = Interface.Replace("%OFFSET_MAX%", OffsetMax);
            Interface = Interface.Replace("%NAME%", Name);
            Interface = Interface.Replace("%COMMAND_LEFT_SLIDE%", $"newui.cmd slider.controller {ElementType} -");
            Interface = Interface.Replace("%COMMAND_RIGHT_SLIDE%", $"newui.cmd slider.controller {ElementType} +");
            CuiHelper.DestroyUi(player, Name);
            CuiHelper.AddUi(player, Interface);
            DrawUI_IQChat_Slider_Update_Argument(player, ElementType);
        }
        String API_GET_DEFAULT_MESSAGE_COLOR() => config.ControllerConnect.SetupDefaults.MessageDefault;
        private void DrawUI_IQChat_Mute_And_Ignore_Player_Panel(BasePlayer player, SelectedAction Action, Int32 Page = 0, String SearchName = null) {
            String Interface = InterfaceBuilder.GetInterface("UI_Chat_Mute_And_Ignore_Panel_Content");
            if (Interface == null) return;
            CuiHelper.DestroyUi(player, "MuteIgnorePanelContent");
            CuiHelper.AddUi(player, Interface);
            if (IsReadyIQFakeActive()) {
                List<FakePlayer> filteredPlayers = GetFilteredPlayers(SearchName);
                DrawUI_IQChat_Mute_And_Ignore_Pages(player, HasMorePages(filteredPlayers, Page), Action, Page);
                DrawUI_IQChat_Mute_And_Ignore_Player(player, Action, null, GetPageOfPlayers(filteredPlayers, Page));
            }
            else {
                IOrderedEnumerable<BasePlayer> playerList = GetPlayerList(SearchName, Action);
                DrawUI_IQChat_Mute_And_Ignore_Pages(player, HasMorePages(playerList, Page), Action, Page);
                DrawUI_IQChat_Mute_And_Ignore_Player(player, Action, playerList.Skip(18 * Page).Take(18));
            }
        }
        private void DrawUI_IQChat_Update_MuteVoice_All(BasePlayer player) {
            if (!permission.UserHasPermission(player.UserIDString, PermissionMutedAdmin)) return;
            String InterfaceAdministratorVoice = InterfaceBuilder.GetInterface("UI_Chat_Administation_AllVoce");
            if (InterfaceAdministratorVoice == null) return;
            InterfaceAdministratorVoice = InterfaceAdministratorVoice.Replace("%TEXT_MUTE_ALLVOICE%", GetLang(!GeneralInfo.TurnMuteAllVoice ? "IQCHAT_BUTTON_MODERATION_MUTE_ALL_VOICE" : "IQCHAT_BUTTON_MODERATION_UNMUTE_ALL_VOICE", player.UserIDString));
            InterfaceAdministratorVoice = InterfaceAdministratorVoice.Replace("%COMMAND_MUTE_ALLVOICE%", $"newui.cmd action.mute.ignore mute.controller {SelectedAction.Mute} mute.all.voice");
            CuiHelper.DestroyUi(player, "ModeratorMuteAllVoi
// ... [Code preview truncated due to length. Full source in attached file] ...

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху