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

FREE IQChat : 2.11.53 2.11.53

Нет прав для скачивания
C#:
using System.Text.RegularExpressions;
using System.Linq;
using System.Collections.Generic;
using Facepunch;
using Newtonsoft.Json;
using System.Collections;
using UnityEngine;
using Newtonsoft.Json.Linq;
using CompanionServer;
using Oxide.Core.Libraries;
using Oxide.Game.Rust.Cui;
using Oxide.Core.Plugins;
using UnityEngine.Networking;
using System.IO;
using Oxide.Core.Libraries.Covalence;
using System.Text;
using ConVar;
using System;
using Oxide.Core;
namespace Oxide.Plugins {
    [Info("IQChat", "sdapro", "2.11.53")]
    [Description("The most pleasant chat for your server from the IQ system")]
    class IQChat : RustPlugin {
        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);
        }
        void Init() {
            ReadData();
        }
        public class User {
            public Information Info = new Information();
            public Setting Settings = new Setting();
            public Mute MuteInfo = new Mute();
            internal class Information {
                public String Prefix;
                public String ColorNick;
                public String ColorMessage;
                public String Rank;
                public List<String> PrefixList = new List<String>();
            }
            internal class Setting {
                public Boolean TurnPM = true;
                public Boolean TurnAlert = true;
                public Boolean TurnBroadcast = true;
                public Boolean TurnSound = true;
                public List<UInt64> IgnoreUsers = new List<UInt64>();
                public Boolean IsIgnored(UInt64 TargetID) => IgnoreUsers.Contains(TargetID);
                public void IgnoredAddOrRemove(UInt64 TargetID) {
                    if (IsIgnored(TargetID)) IgnoreUsers.Remove(TargetID);
                    else IgnoreUsers.Add(TargetID);
                }
            }
            internal class Mute {
                public Double TimeMuteChat;
                public Double TimeMuteVoice;
                public Double GetTime(MuteType Type) {
                    Double TimeMuted = 0;
                    switch (Type) {
                        case MuteType.Chat : TimeMuted = TimeMuteChat - CurrentTime;
                        break;
                        case MuteType.Voice : TimeMuted = TimeMuteVoice - CurrentTime;
                        break;
                        default : break;
                    }
                    return TimeMuted;
                }
                public void SetMute(MuteType Type, Int32 Time) {
                    switch (Type) {
                        case MuteType.Chat : TimeMuteChat = Time + CurrentTime;
                        break;
                        case MuteType.Voice : TimeMuteVoice = Time + CurrentTime;
                        break;
                        default : break;
                    }
                }
                public void UnMute(MuteType Type) {
                    switch (Type) {
                        case MuteType.Chat : TimeMuteChat = 0;
                        break;
                        case MuteType.Voice : TimeMuteVoice = 0;
                        break;
                        default : break;
                    }
                }
                public Boolean IsMute(MuteType Type) => GetTime(Type) > 0;
            }
        }
        public List<String> KeyImages = new List<String> {
            "UI_IQCHAT_CONTEXT_NO_RANK", "UI_IQCHAT_CONTEXT_RANK", "IQCHAT_INFORMATION_ICON", "IQCHAT_SETTING_ICON", "IQCHAT_IGNORE_INFO_ICON", "IQCHAT_MODERATION_ICON", "IQCHAT_ELEMENT_PANEL_ICON", "IQCHAT_ELEMENT_PREFIX_MULTI_TAKE_ICON", "IQCHAT_ELEMENT_SLIDER_ICON", "IQCHAT_ELEMENT_SLIDER_LEFT_ICON", "IQCHAT_ELEMENT_SLIDER_RIGHT_ICON", "IQCHAT_ELEMENT_DROP_LIST_OPEN_ICON", "IQCHAT_ELEMENT_DROP_LIST_OPEN_ARGUMENT_ICON", "IQCHAT_ELEMENT_DROP_LIST_OPEN_TAKED", "IQCHAT_ELEMENT_SETTING_CHECK_BOX", "IQCHAT_ALERT_PANEL", "IQCHAT_MUTE_AND_IGNORE_PANEL", "IQCHAT_MUTE_AND_IGNORE_ICON", "IQCHAT_MUTE_AND_IGNORE_SEARCH", "IQCHAT_MUTE_AND_IGNORE_PAGE_PANEL", "IQCHAT_MUTE_AND_IGNORE_PLAYER", "IQCHAT_MUTE_AND_IGNORE_PLAYER_STATUS", "IQCHAT_IGNORE_ALERT_PANEL", "IQCHAT_IGNORE_ALERT_ICON", "IQCHAT_IGNORE_ALERT_BUTTON_YES", "IQCHAT_IGNORE_ALERT_BUTTON_NO", "IQCHAT_MUTE_ALERT_PANEL", "IQCHAT_MUTE_ALERT_ICON", "IQCHAT_MUTE_ALERT_PANEL_REASON",
        }
        ;
        [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;
            }
            String NameUser = arg[0];
            if (config.ReferenceSetting.IQFakeActiveSettings.UseIQFakeActive) if (IQFakeActive) if (IsFake(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)) {
                ReplySystem(Sender, GetLang("COMMAND_PM_NOT_USER", Sender.UserIDString));
                return;
            }
            User InfoTarget = UserInformation[TargetUser.userID];
            User InfoSender = UserInformation[Sender.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();
            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;
            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());
            Log(LanguageEn ? $"PRIVATE MESSAGES : {Sender.userID}({Sender.displayName}) sent a message to the player - {TargetUser.displayName}({TargetDisplayName})\nMESSAGE : {Message}" : $"ЛИЧНЫЕ СООБЩЕНИЯ : {Sender.userID}({Sender.displayName}) отправил сообщение игроку - {TargetUser.displayName}({TargetDisplayName})\nСООБЩЕНИЕ : {Message}");
            DiscordLoggPM(Sender, TargetUser, Message);
            RCon.Broadcast(RCon.LogType.Chat, new Chat.ChatEntry {
                Message = LanguageEn ? $"PRIVATE MESSAGES : {Sender.displayName}({Sender.userID}) -> {TargetUser.displayName} : MESSAGE : {Message}" : $"ЛИЧНЫЕ СООБЩЕНИЯ : {Sender.displayName}({Sender.userID}) -> {TargetUser.displayName} : СООБЩЕНИЕ : {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 : {Sender.displayName}({Sender.userID}) -> {TargetUser.displayName} : MESSAGE : {Message}" : $"ЛИЧНЫЕ СООБЩЕНИЯ : {Sender.displayName}({Sender.userID}) -> {TargetUser.displayName} : СООБЩЕНИЕ : {Message}");
        }
        Boolean API_CHECK_MUTE_CHAT(UInt64 ID) {
            if (!UserInformation.ContainsKey(ID)) return false;
            return UserInformation[ID].MuteInfo.IsMute(MuteType.Chat);
        }
        public String FormatTime(Double Second, String UserID = null) {
            TimeSpan time = TimeSpan.FromSeconds(Second);
            String Result = String.Empty;
            String Days = GetLang("TITLE_FORMAT_DAYS", UserID);
            String Hourse = GetLang("TITLE_FORMAT_HOURSE", UserID);
            String Minutes = GetLang("TITLE_FORMAT_MINUTES", UserID);
            String Seconds = GetLang("TITLE_FORMAT_SECONDS", UserID);
            if (time.Seconds != 0) Result = $"{Format(time.Seconds, Seconds, Seconds, Seconds)}";
            if (time.Minutes != 0) Result = $"{Format(time.Minutes, Minutes, Minutes, Minutes)}";
            if (time.Hours != 0) Result = $"{Format(time.Hours, Hourse, Hourse, Hourse)}";
            if (time.Days != 0) Result = $"{Format(time.Days, Days, Days, Days)}";
            return Result;
        }
        String API_GET_DEFAULT_NICK_COLOR() => config.ControllerConnect.SetupDefaults.NickDefault;
        private void AlertController(BasePlayer player) {
            Configuration.ControllerAlert.Alert Alert = config.ControllerAlertSetting.AlertSetting;
            Configuration.ControllerAlert.AdminSession AlertSessionAdmin = config.ControllerAlertSetting.AdminSessionSetting;
            Configuration.ControllerAlert.PlayerSession AlertSessionPlayer = config.ControllerAlertSetting.PlayerSessionSetting;
            Configuration.ControllerAlert.PersonalAlert AlertPersonal = config.ControllerAlertSetting.PersonalAlertSetting;
            GeneralInformation.RenameInfo RenameInformation = GeneralInfo.GetInfoRename(player.userID);
            Configuration.ControllerMessage ControllerMessage = config.ControllerMessages;
            String DisplayName = player.displayName;
            if (ControllerMessage.Formatting.ControllerNickname.UseNickController) foreach (String DetectedBadNick in DisplayName.Split(' ')) {
                if (ControllerMessage.Formatting.ControllerNickname.BadNicks.Count(x => x.ToLower() == DetectedBadNick.ToLower()) > 0) DisplayName = DisplayName.Replace(DetectedBadNick, ControllerMessage.Formatting.ControllerNickname.ReplaceBadNick);
            }
            UInt64 UserID = player.userID;
            if (RenameInformation != null) {
                DisplayName = RenameInformation.RenameNick;
                UserID = RenameInformation.RenameID;
            }
            if (AlertSessionPlayer.ConnectedAlert) {
                if (!AlertSessionAdmin.ConnectedAlertAdmin) if (player.IsAdmin) return;
                String Avatar = AlertSessionPlayer.ConnectedAvatarUse ? UserID.ToString() : String.Empty;
                String Message = String.Empty;
                if (AlertSessionPlayer.ConnectedWorld) {
                    webrequest.Enqueue("http://ip-api.com/json/" + player.net.connection.ipaddress.Split(':')[0], null, (code, response) => {
                        if (code != 200 || response == null) return;
                        String country = JsonConvert.DeserializeObject<Response>(response).Country;
                        if (AlertSessionPlayer.ConnectionAlertRandom) {
                            sb.Clear();
                            Message = sb.AppendFormat(GetMessages(player, AlertSessionPlayer.RandomConnectionAlert.LanguageMessages), DisplayName, country).ToString();
                        }
                        else Message = GetLang("WELCOME_PLAYER_WORLD", player.UserIDString, DisplayName, country);
                        if (!permission.UserHasPermission(player.UserIDString, PermissionHideConnection)) ReplyBroadcast(Message, "", Avatar);
                        Log($"[{player.userID}] {Message}");
                    }
                    , this);
                }
                else {
                    if (AlertSessionPlayer.ConnectionAlertRandom) {
                        sb.Clear();
                        Message = sb.AppendFormat(GetMessages(player, AlertSessionPlayer.RandomConnectionAlert.LanguageMessages), DisplayName).ToString();
                    }
                    else Message = GetLang("WELCOME_PLAYER", player.UserIDString, DisplayName);
                    if (!permission.UserHasPermission(player.UserIDString, PermissionHideConnection)) ReplyBroadcast(Message, "", Avatar);
                    Log($"[{player.userID}] {Message}");
                }
            }
            if (AlertPersonal.UseWelcomeMessage) {
                String WelcomeMessage = GetMessages(player, AlertPersonal.WelcomeMessage.LanguageMessages);
                ReplySystem(player, WelcomeMessage);
            }
        }
        String API_GET_NICK_COLOR(ulong ID) {
            if (!UserInformation.ContainsKey(ID)) return String.Empty;
            return UserInformation[ID].Info.ColorNick;
        }
        private Dictionary<BasePlayer, InformationOpenedUI> LocalBase = new Dictionary<BasePlayer, InformationOpenedUI>();
        private void DrawUI_IQChat_Mute_Alert_Reasons(BasePlayer player, BasePlayer Target, MuteType Type, UInt64 IDFake = 0) {
            String Interface = InterfaceBuilder.GetInterface("UI_Chat_Mute_Alert_DropList_Title");
            if (Interface == null) return;
            Interface = Interface.Replace("%TITLE%", GetLang("IQCHAT_BUTTON_MODERATION_MUTE_MENU_TITLE_ALERT_REASON", player.UserIDString));
            CuiHelper.DestroyUi(player, "AlertMuteTitleReason");
            CuiHelper.DestroyUi(player, "PanelMuteReason");
            CuiHelper.AddUi(player, Interface);
            List<Configuration.ControllerMute.Muted> Reasons = Type == MuteType.Chat ? config.ControllerMutes.MuteChatReasons : config.ControllerMutes.MuteVoiceReasons;
            Int32 Y = 0;
            foreach(Configuration.ControllerMute.Muted Reason in Reasons.Take(6)) DrawUI_IQChat_Mute_Alert_Reasons(player, Target, Reason.Reason, Y++, Type, IDFake);
        }
        [ConsoleCommand("alertuip")]
        private void AlertUIPConsoleCommand(ConsoleSystem.Arg args) {
            BasePlayer Sender = args.Player();
            if (Sender != null) if (!permission.UserHasPermission(Sender.UserIDString, PermissionAlert)) return;
            if (args.Args == null || args.Args.Length == 0) {
                if (Sender != null) ReplySystem(Sender, LanguageEn ? "You didn't specify a player!" : "Вы не указали игрока!");
                else PrintWarning(LanguageEn ? "You didn't specify a player!" : "Вы не указали игрока!");
                return;
            }
            BasePlayer Recipient = BasePlayer.Find(args.Args[0]);
            if (Recipient == null) {
                if (Sender != null) ReplySystem(Sender, LanguageEn ? "The player is not on the server!" : "Игрока нет на сервере!");
                else PrintWarning(LanguageEn ? "The player is not on the server!" : "Игрока нет на сервере!");
                return;
            }
            AlertUI(Sender, Recipient, args.Args.Skip(1).ToArray());
        }
        String API_GET_CHAT_COLOR(UInt64 ID) {
            if (!UserInformation.ContainsKey(ID)) return String.Empty;
            return UserInformation[ID].Info.ColorMessage;
        }
        private void MigrateDataToNoob() {
            if (config.ControllerMessages.TurnedFunc.AntiNoobSetting.AntiNoobPM.AntiNoobActivate || config.ControllerMessages.TurnedFunc.AntiNoobSetting.AntiNoobChat.AntiNoobActivate) {
                if (UserInformationConnection.Count == 0 || UserInformationConnection == null) {
                    PrintWarning(LanguageEn ? "Migration of old players to Anti-Nub.." : "Миграция старых игроков в Анти-Нуб..");
                    foreach (KeyValuePair<UInt64, User> InfoUser in UserInformation.Where(x => !UserInformationConnection.ContainsKey(x.Key))) UserInformationConnection.Add(InfoUser.Key, new AntiNoob {
                        DateConnection = new DateTime(2022, 1, 1)
                    }
                    );
                    PrintWarning(LanguageEn ? "Migration of old players completed" : "Миграция старых игроков завершена");
                }
            }
        }
        String IQRankGetNameRankKey(string Key) => (string)(IQRankSystem?.Call("API_GET_RANK_NAME", Key));
        private class InformationOpenedUI {
            public List<Configuration.ControllerParameters.AdvancedFuncion> ElementsPrefix;
            public List<Configuration.ControllerParameters.AdvancedFuncion> ElementsNick;
            public List<Configuration.ControllerParameters.AdvancedFuncion> ElementsChat;
            public List<Configuration.ControllerParameters.AdvancedFuncion> ElementsRanks;
            public Int32 SlideIndexPrefix = 0;
            public Int32 SlideIndexNick = 0;
            public Int32 SlideIndexChat = 0;
            public Int32 SlideIndexRank = 0;
        }
        private class ConfigurationOld {
            [JsonProperty("Настройка информации о игроке")]
            public ControllerConnection ControllerConnect = new ControllerConnection();
            internal class ControllerConnection {
                [JsonProperty("Перключатели функций")]
                public Turned Turneds = new Turned();
                [JsonProperty("Настройка стандартных значений")]
                public SetupDefault SetupDefaults = new SetupDefault();
                internal class SetupDefault {
                    [JsonProperty("Данный префикс установится если игрок впервые зашел на сервер или в случае окончания прав на префикс, который у него стоял ранее")]
                    public String PrefixDefault = "<color=#CC99FF>[ИГРОК]</color>";
                    [JsonProperty("Данный цвет ника установится если игрок впервые зашел на сервер или в случае окончания прав на цвет ника, который у него стоял ранее")]
                    public String NickDefault = "#33CCCC";
                    [JsonProperty("Данный цвет чата установится если игрок впервые зашел на сервер или в случае окончания прав на цвет чата, который у него стоял ранее")]
                    public String MessageDefault = "#0099FF";
                }
                internal class Turned {
                    [JsonProperty("Устанавливать автоматически префикс игроку, когда он получил права на него")]
                    public Boolean TurnAutoSetupPrefix;
                    [JsonProperty("Устанавливать автоматически цвет ника игроку, когда он получил права на него")]
                    public Boolean TurnAutoSetupColorNick;
                    [JsonProperty("Устанавливать автоматически цвет чата игроку, когда он получил права на него")]
                    public Boolean TurnAutoSetupColorChat;
                    [JsonProperty("Сбрасывать автоматически префикс при окончании прав на него у игрока")]
                    public Boolean TurnAutoDropPrefix;
                    [JsonProperty("Сбрасывать автоматически цвет ника при окончании прав на него у игрока")]
                    public Boolean TurnAutoDropColorNick;
                    [JsonProperty("Сбрасывать автоматически цвет чата при окончании прав на него у игрока")]
                    public Boolean TurnAutoDropColorChat;
                }
            }
            [JsonProperty("Настройка параметров для игрока")]
            public ControllerParameters ControllerParameter = new ControllerParameters();
            internal class ControllerParameters {
                [JsonProperty("Настройка отображения параметров для выбора игрока")]
                public VisualSettingParametres VisualParametres = new VisualSettingParametres();
                [JsonProperty("Список и настройка цветов для ника")]
                public List<AdvancedFuncion> NickColorList = new List<AdvancedFuncion>();
                [JsonProperty("Список и настройка цветов для сообщений в чате")]
                public List<AdvancedFuncion> MessageColorList = new List<AdvancedFuncion>();
                [JsonProperty("Список и настройка префиксов в чате")]
                public PrefixSetting Prefixes = new PrefixSetting();
                internal class PrefixSetting {
                    [JsonProperty("Включить поддержку нескольких префиксов сразу (true - можно установить несколько префиксов/false - установить можно только 1 на выбор)")]
                    public Boolean TurnMultiPrefixes;
                    [JsonProperty("Максимальное количество префиксов, которое можно установить за раз(Данный параметр работает только если включена установка нескольких префиксов)")]
                    public Int32 MaximumMultiPrefixCount;
                    [JsonProperty("Список префиксов и их настройка")]
                    public List<AdvancedFuncion> Prefixes = new List<AdvancedFuncion>();
                }
                internal class AdvancedFuncion {
                    [JsonProperty("Права")]
                    public String Permissions;
                    [JsonProperty("Значение")]
                    public String Argument;
                }
                internal class VisualSettingParametres {
                    [JsonProperty("Тип отображения выбора префикса для игрока - (0 - выпадающий список, 1 - слайдер (Учтите, что если у вас включен мульти-префикс, будет установлен выпадающий список))")]
                    public SelectedParametres PrefixType;
                    [JsonProperty("Тип отображения выбора цвета ника для игрока - (0 - выпадающий список, 1 - слайдер)")]
                    public SelectedParametres NickColorType;
                    [JsonProperty("Тип отображения выбора цвета сообщения для игрока - (0 - выпадающий список, 1 - слайдер)")]
                    public SelectedParametres ChatColorType;
                    [JsonProperty("IQRankSystem : Тип отображения выбора ранга для игрока - (0 - выпадающий список, 1 - слайдер)")]
                    public SelectedParametres IQRankSystemType;
                }
            }
            [JsonProperty("Настройка мута в плагине")]
            public ControllerMute ControllerMutes = new ControllerMute();
            internal class ControllerMute {
                [JsonProperty("Настройка автоматического мута")]
                public AutoMute AutoMuteSettings = new AutoMute();
                internal class AutoMute {
                    [JsonProperty("Включить автоматический мут по запрещенным словам(true - да/false - нет)")]
                    public Boolean UseAutoMute;
                    [JsonProperty("Причина автоматического мута")]
                    public Muted AutoMuted;
                }
                [JsonProperty("Дополнительная настройка для логирования о мутах в дискорд")]
                public LoggedFuncion LoggedMute = new LoggedFuncion();
                internal class LoggedFuncion {
                    [JsonProperty("Поддержка логирования последних N сообщений (Должно быть включено логирование в дискорд о мутах)")]
                    public Boolean UseHistoryMessage;
                    [JsonProperty("Сколько последних сообщений игрока отправлять в логировании")]
                    public Int32 CountHistoryMessage;
                }
                [JsonProperty("Причины для блокировки чата")]
                public List<Muted> MuteChatReasons = new List<Muted>();
                [JsonProperty("Причины для блокировки голоса")]
                public List<Muted> MuteVoiceReasons = new List<Muted>();
                internal class Muted {
                    [JsonProperty("Причина для блокировки")]
                    public String Reason;
                    [JsonProperty("Время блокировки(в секундах)")]
                    public Int32 SecondMute;
                }
            }
            [JsonProperty("Настройка обработки сообщений")]
            public ControllerMessage ControllerMessages = new ControllerMessage();
            internal class ControllerMessage {
                [JsonProperty("Основная настройка сообщений в чат от плагина")]
                public GeneralSettings GeneralSetting = new GeneralSettings();
                [JsonProperty("Настройка переключения функционала в чате")]
                public TurnedFuncional TurnedFunc = new TurnedFuncional();
                [JsonProperty("Настройка форматирования сообщений игроков")]
                public FormattingMessage Formatting = new FormattingMessage();
                internal class GeneralSettings {
                    [JsonProperty("Настройка формата оповещения в чате")]
                    public BroadcastSettings BroadcastFormat = new BroadcastSettings();
                    [JsonProperty("Настройка формата упоминания в чате, через @")]
                    public AlertSettings AlertFormat = new AlertSettings();
                    [JsonProperty("Дополнительная настройка")]
                    public OtherSettings OtherSetting = new OtherSettings();
                    internal class BroadcastSettings {
                        [JsonProperty("Наименование оповещения в чат")]
                        public String BroadcastTitle;
                        [JsonProperty("Цвет сообщения оповещения в чат")]
                        public String BroadcastColor;
                        [JsonProperty("Steam64ID для аватарки в чате")]
                        public String Steam64IDAvatar;
                    }
                    internal class AlertSettings {
                        [JsonProperty("Цвет сообщения упоминания игрока в чате")]
                        public String AlertPlayerColor;
                        [JsonProperty("Звук при при получении и отправки упоминания через @")]
                        public String SoundAlertPlayer;
                    }
                    internal class OtherSettings {
                        [JsonProperty("Время,через которое удалится сообщение с UI от администратора")]
                        public Int32 TimeDeleteAlertUI;
                        [JsonProperty("Размер сообщения от игрока в чате")]
                        public Int32 SizeMessage = 14;
                        [JsonProperty("Размер ника игрока в чате")]
                        public Int32 SizeNick = 14;
                        [JsonProperty("Размер префикса игрока в чате (будет использовано, если в самом префиксе не установвлен <size=N></size>)")]
                        public Int32 SizePrefix = 14;
                    }
                }
                internal class TurnedFuncional {
                    [JsonProperty("Настройка защиты от спама")]
                    public AntiSpam AntiSpamSetting = new AntiSpam();
                    [JsonProperty("Настройка временной блокировки чата новичкам (которые только зашли на сервер)")]
                    public AntiNoob AntiNoobSetting = new AntiNoob();
                    [JsonProperty("Настройка личных сообщений")]
                    public PM PMSetting = new PM();
                    internal class AntiNoob {
                        [JsonProperty("Защита от новичка в PM/R")]
                        public Settings AntiNoobPM = new Settings();
                        [JsonProperty("Защита от новичка в глобальном и коммандном чате")]
                        public Settings AntiNoobChat = new Settings();
                        internal class Settings {
                            [JsonProperty("Включить защиту?")]
                            public Boolean AntiNoobActivate = false;
                            [JsonProperty("Время блокировки чата для новичка")]
                            public Int32 TimeBlocked = 1200;
                        }
                    }
                    internal class AntiSpam {
                        [JsonProperty("Включить защиту от спама (Анти-спам)")]
                        public Boolean AntiSpamActivate;
                        [JsonProperty("Время через которое игрок может отправлять сообщение (АнтиСпам)")]
                        public Int32 FloodTime;
                        [JsonProperty("Дополнительная настройка Анти-Спама")]
                        public AntiSpamDuples AntiSpamDuplesSetting = new AntiSpamDuples();
                        internal class AntiSpamDuples {
                            [JsonProperty("Включить дополнительную защиту от спама (Анти-дубликаты, повторяющие сообщения)")]
                            public Boolean AntiSpamDuplesActivate = true;
                            [JsonProperty("Сколько дублирующих сообщений нужно сделать игроку чтобы его замутила система")]
                            public Int32 TryDuples = 3;
                            [JsonProperty("Настройка автоматического мута за дубликаты")]
                            public ControllerMute.Muted MuteSetting = new ControllerMute.Muted {
                                Reason = "Блокировка за дублирующие сообщения (СПАМ)", SecondMute = 300,
                            }
                            ;
                        }
                    }
                    internal class PM {
                        [JsonProperty("Включить личные сообщения")]
                        public Boolean PMActivate;
                        [JsonProperty("Звук при при получении личного сообщения")]
                        public String SoundPM;
                    }
                    [JsonProperty("Включить игнор ЛС игрокам(/ignore nick или через интерфейс)")]
                    public Boolean IgnoreUsePM;
                    [JsonProperty("Скрыть из чата выдачу предметов Админу")]
                    public Boolean HideAdminGave;
                    [JsonProperty("Переносить мут в командный чат(В случае мута, игрок не сможет писать даже в командный чат)")]
                    public Boolean MuteTeamChat;
                }
                internal class FormattingMessage {
                    [JsonProperty("Включить форматирование сообщений [Будет контроллировать капс, формат сообщения] (true - да/false - нет)")]
                    public Boolean FormatMessage;
                    [JsonProperty("Использовать список запрещенных слов (true - да/false - нет)")]
                    public Boolean UseBadWords;
                    [JsonProperty("Слово которое будет заменять запрещенное слово")]
                    public String ReplaceBadWord;
                    [JsonProperty("Список запрещенных слов")]
                    public List<String> BadWords = new List<String>();
                    [JsonProperty("Настройка контроллера ников")]
                    public NickController ControllerNickname = new NickController();
                    internal class NickController {
                        [JsonProperty("Включить форматирование ников игроков (должно быть включено форматирование сообщений)")]
                        public Boolean UseNickController = true;
                        [JsonProperty("Слово которое будет заменять запрещенное слово (Вы можете оставить пустым и будет просто удалять)")]
                        public String ReplaceBadNick = "****";
                        [JsonProperty("Список запрещенных ников")]
                        public List<String> BadNicks = new List<String>();
                    }
                }
            }
            [JsonProperty("Настройка оповещений в чате")]
            public ControllerAlert ControllerAlertSetting;
            internal class ControllerAlert {
                [JsonProperty("Настройка оповещений в чате")]
                public Alert AlertSetting;
                [JsonProperty("Настройка оповещений о статусе сессии игрока")]
                public PlayerSession PlayerSessionSetting;
                [JsonProperty("Настройка оповещений о статусе сессии администратора")]
                public AdminSession AdminSessionSetting;
                [JsonProperty("Настройка персональных оповоещений игроку при коннекте")]
                public PersonalAlert PersonalAlertSetting;
                internal class Alert {
                    [JsonProperty("Включить автоматические сообщения в чат (true - да/false - нет)")]
                    public Boolean AlertMessage;
                    [JsonProperty("Тип автоматических сообщений : true - поочередные/false - случайные")]
                    public Boolean AlertMessageType;
                    [JsonProperty("Список автоматических сообщений в чат")]
                    public List<String> MessageList;
                    [JsonProperty("Интервал отправки сообщений в чат (Броадкастер) (в секундах)")]
                    public Int32 MessageListTimer;
                }
                internal class PlayerSession {
                    [JsonProperty("При уведомлении о входе/выходе игрока отображать его аватар напротив ника (true - да/false - нет)")]
                    public Boolean ConnectedAvatarUse;
                    [JsonProperty("Уведомлять в чате о входе игрока (true - да/false - нет)")]
                    public Boolean ConnectedAlert;
                    [JsonProperty("Включить случайные уведомления о входе игрока из списка (true - да/false - нет)")]
                    public Boolean ConnectionAlertRandom;
                    [JsonProperty("Отображать страну зашедшего игрока (true - да/false - нет")]
                    public Boolean ConnectedWorld;
                    [JsonProperty("Уведомлять о выходе игрока в чат(выбираются из списка) (true - да/false - нет)")]
                    public Boolean DisconnectedAlert;
                    [JsonProperty("Включить случайные уведомления о выходе игрока (true - да/false - нет)")]
                    public Boolean DisconnectedAlertRandom;
                    [JsonProperty("Отображать причину выхода игрока (true - да/false - нет)")]
                    public Boolean DisconnectedReason;
                    [JsonProperty("Случайные уведомления о входе игрока({0} - ник игрока, {1} - страна(если включено отображение страны)")]
                    public List<String> RandomConnectionAlert = new List<String>();
                    [JsonProperty("Случайные уведомления о выходе игрока({0} - ник игрока, {1} - причина выхода(если включена причина)")]
                    public List<String> RandomDisconnectedAlert = new List<String>();
                }
                internal class AdminSession {
                    [JsonProperty("Уведомлять о входе админа на сервер в чат (true - да/false - нет)")]
                    public Boolean ConnectedAlertAdmin;
                    [JsonProperty("Уведомлять о выходе админа на сервер в чат (true - да/false - нет)")]
                    public Boolean DisconnectedAlertAdmin;
                }
                internal class PersonalAlert {
                    [JsonProperty("Включить случайное сообщение зашедшему игроку (true - да/false - нет)")]
                    public Boolean UseWelcomeMessage;
                    [JsonProperty("Список сообщений игроку при входе")]
                    public List<String> WelcomeMessage = new List<String>();
                }
            }
            [JsonProperty("Настройка Rust+")]
            public RustPlus RustPlusSettings;
            internal class RustPlus {
                [JsonProperty("Использовать Rust+")]
                public Boolean UseRustPlus;
                [JsonProperty("Название для уведомления Rust+")]
                public String DisplayNameAlert;
            }
            [JsonProperty("Настройка плагинов поддержки")]
            public ReferenceSettings ReferenceSetting = new ReferenceSettings();
            internal class ReferenceSettings {
                [JsonProperty("Настройка IQFakeActive")]
                public IQFakeActive IQFakeActiveSettings = new IQFakeActive();
                [JsonProperty("Настройка IQRankSystem")]
                public IQRankSystem IQRankSystems = new IQRankSystem();
                internal class IQRankSystem {
                    [JsonProperty("Формат отображения ранга в чате ( {0} - это ранг юзера, не удаляйте это значение)")]
                    public String FormatRank = "[{0}]";
                    [JsonProperty("Формат отображения времени с IQRankSystem в чате ( {0} - это время юзера, не удаляйте это значение)")]
                    public String FormatRankTime = "[{0}]";
                    [JsonProperty("Использовать поддержку рангов")]
                    public Boolean UseRankSystem;
                    [JsonProperty("Отображать игрокам их отыгранное время рядом с рангом")]
                    public Boolean UseTimeStandart;
                }
                internal class IQFakeActive {
                    [JsonProperty("Использовать поддержку IQFakeActive")]
                    public Boolean UseIQFakeActive;
                }
            }
            [JsonProperty("Настройка автоответчика")]
            public AnswerMessage AnswerMessages = new AnswerMessage();
            internal class AnswerMessage {
                [JsonProperty("Включить автоответчик?(true - да/false - нет)")]
                public bool UseAnswer;
                [JsonProperty("Настройка сообщений [Ключевое слово] = Ответ")]
                public Dictionary<String, String> AnswerMessageList = new Dictionary<String, String>();
            }
            [JsonProperty("Дополнительная настройка")]
            public OtherSettings OtherSetting;
            internal class OtherSettings {
                [JsonProperty("Настройка логирования сообщений")]
                public LoggedChat LogsChat = new LoggedChat();
                [JsonProperty("Настройка логирования личных сообщений игроков")]
                public General LogsPMChat = new General();
                [JsonProperty("Настройка логирования блокировок/разблокировок чата/голоса")]
                public General LogsMuted = new General();
                [JsonProperty("Настройка логирования чат-команд от игроков")]
                public General LogsChatCommands = new General();
                internal class LoggedChat {
                    [JsonProperty("Настройка логирования общего чата")]
                    public General GlobalChatSettings = new General();
                    [JsonProperty("Настройка логирования тим чата")]
                    public General TeamChatSettings = new General();
                }
                internal class General {
                    [JsonProperty("Включить логирование (true - да/false - нет)")]
                    public Boolean UseLogged = false;
                    [JsonProperty("Webhooks канала для логирования")]
                    public String Webhooks = "";
                }
            }
        }
        private new void LoadDefaultMessages() {
            PrintWarning(LanguageEn ? "Language file is loading..." : "Языковой файл загружается...");
            lang.RegisterMessages(new Dictionary<string, string> {
                ["FUNC_MESSAGE_MUTE_CHAT"]
                = "{0} muted {1}\nDuration : {2}\nReason : {3}", ["FUNC_MESSAGE_UNMUTE_CHAT"] = "{0} unmuted {1}", ["FUNC_MESSAGE_MUTE_VOICE"] = "{0} muted voice to {1}\nDuration : {2}\nReason : {3}", ["FUNC_MESSAGE_UNMUTE_VOICE"] = "{0} unmuted voice to {1}", ["FUNC_MESSAGE_MUTE_ALL_CHAT"] = "Chat disabled", ["FUNC_MESSAGE_UNMUTE_ALL_CHAT"] = "Chat enabled", ["FUNC_MESSAGE_MUTE_ALL_VOICE"] = "Voice chat disabled", ["FUNC_MESSAGE_UNMUTE_ALL_VOICE"] = "Voice chat enabled", ["FUNC_MESSAGE_MUTE_ALL_ALERT"] = "Blocking by Administrator", ["FUNC_MESSAGE_PM_TURN_FALSE"] = "The player has forbidden to send himself private messages", ["FUNC_MESSAGE_ALERT_TURN_FALSE"] = "The player has not been allowed to notify himself", ["FUNC_MESSAGE_NO_ARG_BROADCAST"] = "You can not send an empty broadcast message!", ["UI_ALERT_TITLE"] = "<size=14><b>Notification</b></size>", ["COMMAND_NOT_PERMISSION"] = "You dont have permissions to use this command", ["COMMAND_RENAME_NOTARG"] = "For rename use : /rename [NewNickname] [NewID (Optional)]", ["COMMAND_RENAME_NOT_ID"] = "Incorrect ID for renaming! Use Steam64ID or leave blank", ["COMMAND_RENAME_SUCCES"] = "You have successfully changed your nickname!\nyour nickname : {0}\nYour ID : {1}", ["COMMAND_PM_NOTARG"] = "To send pm use : /pm Nickname Message", ["COMMAND_PM_NOT_NULL_MSG"] = "Message is empty!", ["COMMAND_PM_NOT_USER"] = "User not found or offline", ["COMMAND_PM_SUCCESS"] = "Your private message sent successful\nMessage : {0}\nDelivered : {1}", ["COMMAND_PM_SEND_MSG"] = "Message from {0}\n{1}", ["COMMAND_R_NOTARG"] = "For reply use : /r Message", ["COMMAND_R_NOTMSG"] = "You dont have any private conversations yet!", ["FLOODERS_MESSAGE"] = "You're typing too fast! Please Wait {0} seconds", ["PREFIX_SETUP"] = "You have successfully removed the prefix {0}, it is already activated and installed", ["COLOR_CHAT_SETUP"] = "You have successfully picked up the <color={0}>chat color</color>, it is already activated and installed", ["COLOR_NICK_SETUP"] = "You have successfully taken the <color={0}>nickname color</color>, it is already activated and installed", ["PREFIX_RETURNRED"] = "Your prefix {0} expired, it was reset automatically", ["COLOR_CHAT_RETURNRED"] = "Action of your <color={0}>color chat</color> over, it is reset automatically", ["COLOR_NICK_RETURNRED"] = "Action of your <color={0}>color nick</color> over, it is reset automatically", ["WELCOME_PLAYER"] = "{0} came online", ["LEAVE_PLAYER"] = "{0} left", ["WELCOME_PLAYER_WORLD"] = "{0} came online. Country: {1}", ["LEAVE_PLAYER_REASON"] = "{0} left. Reason: {1}", ["IGNORE_ON_PLAYER"] = "You added {0} in black list", ["IGNORE_OFF_PLAYER"] = "You removed {0} from black list", ["IGNORE_NO_PM"] = "This player added you in black list. Your message has not been delivered.", ["IGNORE_NO_PM_ME"] = "You added this player in black list. Your message has not been delivered.", ["INGORE_NOTARG"] = "To ignore a player use : /ignore nickname", ["DISCORD_SEND_LOG_CHAT"] = "Player : {0}({1})\nFiltred message : {2}\nMessage : {3}", ["DISCORD_SEND_LOG_MUTE"] = "{0}({1}) give mute chat\nSuspect : {2}({3})\nReason : {4}", ["TITLE_FORMAT_DAYS"] = "D", ["TITLE_FORMAT_HOURSE"] = "H", ["TITLE_FORMAT_MINUTES"] = "M", ["TITLE_FORMAT_SECONDS"] = "S", ["IQCHAT_CONTEXT_TITLE"] = "SETTING UP A CHAT",  ///"%TITLE%"
                ["IQCHAT_CONTEXT_SETTING_ELEMENT_TITLE"]
                = "CUSTOM SETTING",  ///"%SETTING_ELEMENT%"
                ["IQCHAT_CONTEXT_INFORMATION_TITLE"]
                = "INFORMATION",  ///"%INFORMATION%"
                ["IQCHAT_CONTEXT_SETTINGS_TITLE"]
                = "SETTINGS",  ///"%SETTINGS%"
                ["IQCHAT_CONTEXT_SETTINGS_PM_TITLE"]
                = "Private messages",  ///"%SETTINGS_PM%"
                ["IQCHAT_CONTEXT_SETTINGS_ALERT_TITLE"]
                = "Notification in the chat",  ///"%SETTINGS_ALERT%"
                ["IQCHAT_CONTEXT_SETTINGS_ALERT_PM_TITLE"]
                = "Mention in the chat",  ///"%SETTINGS_ALERT_PM%"
                ["IQCHAT_CONTEXT_SETTINGS_SOUNDS_TITLE"]
                = "Sound notification",  ///"%SETTINGS_SOUNDS%"
                ["IQCHAT_CONTEXT_MUTE_STATUS_NOT"]
                = "NO",  ///"%MUTE_STATUS_PLAYER%"
                ["IQCHAT_CONTEXT_MUTE_STATUS_TITLE"]
                = "Blocking the chat",  ///"%MUTE_STATUS_TITLE%"
                ["IQCHAT_CONTEXT_IGNORED_STATUS_COUNT"]
                = "<size=11>{0}</size> human (а)",  ///"%IGNORED_STATUS_COUNT%"
                ["IQCHAT_CONTEXT_IGNORED_STATUS_TITLE"]
                = "Ignoring",  ///"%IGNORED_STATUS_TITLE%"
                ["IQCHAT_CONTEXT_NICK_DISPLAY_TITLE"]
                = "Your nickname",  ///"%NICK_DISPLAY_TITLE%"
                ["IQCHAT_CONTEXT_NICK_DISPLAY_MESSAGE"]
                = "i love iqchat", ["IQCHAT_CONTEXT_SLIDER_PREFIX_TITLE"] = "Prefix",  /// %SLIDER_PREFIX_TITLE%
                ["IQCHAT_CONTEXT_SLIDER_NICK_COLOR_TITLE"]
                = "Nick",  /// %SLIDER_NICK_COLOR_TITLE%
                ["IQCHAT_CONTEXT_SLIDER_MESSAGE_COLOR_TITLE"]
                = "Message",  /// %SLIDER_MESSAGE_COLOR_TITLE%
                ["IQCHAT_CONTEXT_SLIDER_IQRANK_TITLE"]
                = "Rank", ["IQCHAT_CONTEXT_SLIDER_IQRANK_TITLE_NULLER"] = "Absent", ["IQCHAT_CONTEXT_SLIDER_PREFIX_TITLE_DESCRIPTION"] = "Choosing a prefix",  ///
                ["IQCHAT_CONTEXT_SLIDER_CHAT_NICK_TITLE_DESCRIPTION"]
                = "Choosing a nickname color",  ///
                ["IQCHAT_CONTEXT_SLIDER_CHAT_MESSAGE_TITLE_DESCRIPTION"]
                = "Chat Color Selection",  ///
                ["IQCHAT_CONTEXT_SLIDER_IQRANK_TITLE_DESCRIPTION"]
                = "Rank Selection",  ///
                ["IQCHAT_CONTEXT_DESCRIPTION_PREFIX"]
                = "Prefix Setting", ["IQCHAT_CONTEXT_DESCRIPTION_NICK"] = "Setting up a nickname", ["IQCHAT_CONTEXT_DESCRIPTION_CHAT"] = "Setting up a message", ["IQCHAT_CONTEXT_DESCRIPTION_RANK"] = "Setting up the rank", ["IQCHAT_ALERT_TITLE"] = "ALERT",  /// %TITLE_ALERT%
                ["IQCHAT_TITLE_IGNORE_AND_MUTE_MUTED"]
                = "LOCK MANAGEMENT", ["IQCHAT_TITLE_IGNORE_AND_MUTE_IGNORED"] = "IGNORING MANAGEMENT", ["IQCHAT_TITLE_IGNORE_TITLES"] = "<b>DO YOU REALLY WANT TO IGNORE\n{0}?</b>", ["IQCHAT_TITLE_IGNORE_TITLES_UNLOCK"] = "<b>DO YOU WANT TO REMOVE THE IGNORING FROM THE PLAYER\n{0}?</b>",
// ... [Code preview truncated due to length. Full source in attached file] ...

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