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

FREE IQChat : 0.3.4 0.3.4

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CompanionServer;
using ConVar;
using Facepunch;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Oxide.Core;
using Oxide.Core.Libraries;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;
namespace Oxide.Plugins {
    [Info("IQChat", "Mercury", "0.3.4")]
    [Description("Самый приятный чат для вашего сервера из ветки IQ")]
    class IQChat : RustPlugin {
#region Reference
        [PluginReference]
        Plugin IQPersonal, IQFakeActive, XDNotifications, IQRankSystem;
#region IQPersonal
        public void SetMute(BasePlayer player) => IQPersonal?.CallHook("API_SET_MUTE", player.userID);
        public void BadWords(BasePlayer player) => IQPersonal?.CallHook("API_DETECTED_BAD_WORDS", player.userID);
#endregion
#region XDNotifications
        private void AddNotify(BasePlayer player, string title, string description, string command = "", string cmdyes = "", string cmdno = "") {
            if (!XDNotifications) return;
            var Setting = config.ReferenceSetting.XDNotificationsSettings;
            Interface.Oxide.CallHook("AddNotify", player, title, description, Setting.Color, Setting.AlertDelete, Setting.SoundEffect, command, cmdyes, cmdno);
        }
#endregion
#region IQFakeActive
        public bool IsFake(string DisplayName) => (bool)IQFakeActive?.Call("IsFake", DisplayName);
        void SyncReservedFinish() {
            if (!config.ReferenceSetting.IQFakeActiveSettings.UseIQFakeActive) return;
            PrintWarning("IQChat - успешно синхронизирована с IQFakeActive");
            PrintWarning("=============SYNC==================");
        }
#endregion
#region IQRankSystem
        string IQRankGetRank(ulong userID) => (string)(IQRankSystem?.Call("API_GET_RANK_NAME", userID));
        string IQRankGetTimeGame(ulong userID) => (string)(IQRankSystem?.Call("API_GET_TIME_GAME", userID));
        List<string> IQRankListKey(ulong userID) => (List<string>)(IQRankSystem?.Call("API_RANK_USER_KEYS", userID));
        string IQRankGetNameRankKey(string Key) => (string)(IQRankSystem?.Call("API_GET_RANK_NAME", Key));
        void IQRankSetRank(ulong userID, string RankKey) => IQRankSystem?.Call("API_SET_ACTIVE_RANK", userID, RankKey);
        bool IQRankUserAcces(ulong userID, string RankKey) => (bool)IQRankSystem?.Call("API_GET_RANK_ACCESS", userID, RankKey);
#endregion
#endregion
#region Vars
        public Dictionary<BasePlayer, BasePlayer> PMHistory = new Dictionary<BasePlayer, BasePlayer>();
        public string PermMuteMenu = "iqchat.muteuse";
        class Response {
            [JsonProperty("country")]
            public string Country {
                get;
                set;
            }
        }
        public static StringBuilder sb = new StringBuilder();
        public string GetLang(string LangKey, string userID = null, params object[] args) {
            sb.Clear();
            if (args != null) {
                sb.AppendFormat(lang.GetMessage(LangKey, this, userID), args);
                return sb.ToString();
            }
            return lang.GetMessage(LangKey, this, userID);
        }
#endregion
#region Configuration
        private static Configuration config = new Configuration();
        private class Configuration {
            [JsonProperty("Права для смены ника")]
            public string RenamePermission;
            [JsonProperty("Настройка префиксов")]
            public List<AdvancedFuncion> PrefixList = new List<AdvancedFuncion>();
            [JsonProperty("Настройка цветов для ников")]
            public List<AdvancedFuncion> NickColorList = new List<AdvancedFuncion>();
            [JsonProperty("Настройка цветов для сообщений")]
            public List<AdvancedFuncion> MessageColorList = new List<AdvancedFuncion>();
            [JsonProperty("Настройка сообщений в чате")]
            public MessageSettings MessageSetting;
            [JsonProperty("Настройка причин блокировок чата")]
            public List<ReasonMuteChat> ReasonListChat = new List<ReasonMuteChat>();
            [JsonProperty("Настройка интерфейса")]
            public InterfaceSettings InterfaceSetting;
            [JsonProperty("Настройка оповещения")]
            public AlertSetting AlertSettings;
            [JsonProperty("Настройка привилегий")]
            public AutoSetups AutoSetupSetting;
            [JsonProperty("Настройка Rust+")]
            public RustPlus RustPlusSettings;
            [JsonProperty("Дополнительная настройка")]
            public OtherSettings OtherSetting;
            [JsonProperty("Настройка автоответчика")]
            public AnswerMessage AnswerMessages = new AnswerMessage();
            [JsonProperty("Настройка плагинов поддержки")]
            public ReferenceSettings ReferenceSetting = new ReferenceSettings();
            internal class AdvancedFuncion {
                [JsonProperty("Права")]
                public string Permissions;
                [JsonProperty("Значение")]
                public string Argument;
            }
            internal class AnswerMessage {
                [JsonProperty("Включить автоответчик?(true - да/false - нет)")]
                public bool UseAnswer;
                [JsonProperty("Настройка сообщений [Ключевое слово] = Ответ")]
                public Dictionary<string, string> AnswerMessageList = new Dictionary<string, string>();
            }
            internal class RustPlus {
                [JsonProperty("Использовать Rust+")]
                public bool UseRustPlus;
                [JsonProperty("Название для уведомления Rust+")]
                public string DisplayNameAlert;
            }
            internal class ReasonMuteChat {
                [JsonProperty("Причина мута")]
                public string Reason;
                [JsonProperty("Время мута")]
                public int TimeMute;
            }
            internal class ReferenceSettings {
                [JsonProperty("Настройка XDNotifications")]
                public XDNotifications XDNotificationsSettings = new XDNotifications();
                [JsonProperty("Настройка IQFakeActive")]
                public IQFakeActive IQFakeActiveSettings = new IQFakeActive();
                [JsonProperty("Настройка IQRankSystem")]
                public IQRankSystem IQRankSystems = new IQRankSystem();
                internal class XDNotifications {
                    [JsonProperty("Включить поддержку XDNotifications(UI уведомления будут заменены на уведомление с XDNotifications)")]
                    public bool UseXDNotifications;
                    [JsonProperty("Цвет заднего фона уведомления(HEX)")]
                    public string Color;
                    [JsonProperty("Через сколько удалиться уведомление")]
                    public int AlertDelete;
                    [JsonProperty("Звуковой эффект")]
                    public string SoundEffect;
                }
                internal class IQRankSystem {
                    [JsonProperty("Использовать поддержку рангов")]
                    public bool UseRankSystem;
                    [JsonProperty("Отображать игрокам их отыгранное время рядом с рангом")]
                    public bool UseTimeStandart;
                }
                internal class IQFakeActive {
                    [JsonProperty("Использовать поддержку IQFakeActive")]
                    public bool UseIQFakeActive;
                }
            }
            internal class AutoSetups {
                [JsonProperty("Настройки сброса привилегий")]
                public ReturnDefault ReturnDefaultSetting = new ReturnDefault();
                [JsonProperty("Автоматической установки префиксов/цвета ника/цвета чата")]
                public SetupAuto SetupAutoSetting = new SetupAuto();
                internal class ReturnDefault {
                    [JsonProperty("Сбрасывать автоматически префикс при окончании его прав")]
                    public bool UseDropPrefix;
                    [JsonProperty("Сбрасывать автоматически цвет ника при окончании его прав")]
                    public bool UseDropColorNick;
                    [JsonProperty("Сбрасывать автоматически цвет чата при окончании его прав")]
                    public bool UseDropColorChat;
                    [JsonProperty("При окончании префикса, установится данный префикс")]
                    public string PrefixDefault;
                    [JsonProperty("При окончании цвета ника, установится данный цвет")]
                    public string NickDefault;
                    [JsonProperty("При окончании цвета сообщения, установится данный цвета")]
                    public string MessageDefault;
                }
                internal class SetupAuto {
                    [JsonProperty("Устанавливать автоматически префикс при получении его прав")]
                    public bool UseSetupAutoPrefix;
                    [JsonProperty("Устанавливать автоматически цвет ника при получении его прав")]
                    public bool UseSetupAutoColorNick;
                    [JsonProperty("Устанавливать автоматически цвет чата при получении его прав")]
                    public bool UseSetupAutoColorChat;
                }
            }
            internal class MessageSettings {
                [JsonProperty("Включить форматирование сообщений")]
                public bool FormatingMessage;
                [JsonProperty("Включить личные сообщения")]
                public bool PMActivate;
                [JsonProperty("Включить игнор ЛС игрокам(/ignore nick)")]
                public bool IgnoreUsePM;
                [JsonProperty("Включить Анти-Спам")]
                public bool AntiSpamActivate;
                [JsonProperty("Скрыть из чата выдачу предметов Админу")]
                public bool HideAdminGave;
                [JsonProperty("Использовать список запрещенных слов?")]
                public bool UseBadWords;
                [JsonProperty("Включить возможность использовать несколько префиксов сразу")]
                public bool MultiPrefix;
                [JsonProperty("Переносить мут в командный чат(В случае мута,игрок не сможет писать даже в командный чат)")]
                public bool MuteTeamChat;
                [JsonProperty("Пермишенс для иммунитета к антиспаму")]
                public string PermAdminImmunitetAntispam;
                [JsonProperty("Наименование оповещения в чат")]
                public string BroadcastTitle;
                [JsonProperty("Цвет сообщения оповещения в чат")]
                public string BroadcastColor;
                [JsonProperty("На какое сообщение заменять плохие слова")]
                public string ReplaceBadWord;
                [JsonProperty("Звук при при получении личного сообщения")]
                public string SoundPM;
                [JsonProperty("Время,через которое удалится сообщение с UI от администратора")]
                public int TimeDeleteAlertUI;
                [JsonProperty("Steam64ID для аватарки в чате")]
                public ulong Steam64IDAvatar;
                [JsonProperty("Время через которое игрок может отправлять сообщение (АнтиСпам)")]
                public int FloodTime;
                [JsonProperty("Список плохих слов")]
                public List<string> BadWords = new List<string>();
            }
            internal class InterfaceSettings {
                [JsonProperty("Значения для плавного появления")]
                public float FadeIn;
                [JsonProperty("Основной цвет UI")]
                public string MainColor;
                [JsonProperty("Дополнительный цвет UI")]
                public string TwoMainColor;
                [JsonProperty("Цвет кнопок")]
                public string ButtonColor;
                [JsonProperty("Цвет текста")]
                public string LabelColor;
                [JsonProperty("Цвет UI уведомления")]
                public string AlertColor;
                [JsonProperty("Настройка расположения UI уведомления")]
                public AlertInterfaceSettings AlertInterfaceSetting;
                internal class AlertInterfaceSettings {
                    [JsonProperty("AnchorMin")]
                    public string AnchorMin;
                    [JsonProperty("AnchorMax")]
                    public string AnchorMax;
                    [JsonProperty("OffsetMin")]
                    public string OffsetMin;
                    [JsonProperty("OffsetMax")]
                    public string OffsetMax;
                }
            }
            internal class AlertSetting {
                [JsonProperty("Включить случайное сообщение зашедшему игроку")]
                public bool WelcomeMessageUse;
                [JsonProperty("Список сообщений игроку при входе")]
                public List<string> WelcomeMessage = new List<string>();
                [JsonProperty("Уведомлять о входе игрока в чат")]
                public bool ConnectedAlert;
                [JsonProperty("Включить случайные уведомления о входе игрока из списка")]
                public bool ConnectionAlertRandom;
                [JsonProperty("Случайные уведомления о входе игрока({0} - ник игрока, {1} - страна(если включено отображение страны)")]
                public List<string> RandomConnectionAlert = new List<string>();
                [JsonProperty("Отображать страну зашедшего игрока")]
                public bool ConnectedWorld;
                [JsonProperty("Уведомлять о выходе игрока в чат из списка")]
                public bool DisconnectedAlert;
                [JsonProperty("Включить случайные уведомления о входе игрока")]
                public bool DisconnectedAlertRandom;
                [JsonProperty("Случайные уведомления о входе игрока({0} - ник игрока, {1} - причина выхода(если включена причина)")]
                public List<string> RandomDisconnectedAlert = new List<string>();
                [JsonProperty("Отображать причину выхода игрока")]
                public bool DisconnectedReason;
                [JsonProperty("При уведомлении о входе/выходе игрока отображать его аватар напротив ника")]
                public bool ConnectedAvatarUse;
                [JsonProperty("Включить автоматические сообщения в чат")]
                public bool AlertMessage;
                [JsonProperty("Настройка отправки автоматических сообщений в чат")]
                public List<string> MessageList;
                [JsonProperty("Интервал отправки сообщений в чат(Броадкастер)")]
                public int MessageListTimer;
            }
            internal class OtherSettings {
                [JsonProperty("Использовать дискорд")]
                public bool UseDiscord;
                [JsonProperty("Вебхук для логирования чата в дискорд")]
                public string WebhooksChatLog;
                [JsonProperty("Вебхук для логирования информации о мутах в дискорде")]
                public string WebhooksMuteInfo;
            }
            public static Configuration GetNewConfiguration() {
                return new Configuration {
                    PrefixList = new List<AdvancedFuncion> {
                        new AdvancedFuncion {
                            Permissions = "iqchat.default", Argument = "<color=yellow><b>[+]</b></color>",
                        }
                        , new AdvancedFuncion {
                            Permissions = "iqchat.default", Argument = "<color=yellow><b>[ИГРОК]</b></color>",
                        }
                        , new AdvancedFuncion {
                            Permissions = "iqchat.vip", Argument = "<color=yellow><b>[VIP]</b></color>",
                        }
                        ,
                    }
                    , NickColorList = new List<AdvancedFuncion> {
                        new AdvancedFuncion {
                            Permissions = "iqchat.default", Argument = "#DBEAEC",
                        }
                        , new AdvancedFuncion {
                            Permissions = "iqchat.default", Argument = "#FFC428",
                        }
                        , new AdvancedFuncion {
                            Permissions = "iqchat.vip", Argument = "#45AAB4",
                        }
                        ,
                    }
                    , MessageColorList = new List<AdvancedFuncion> {
                        new AdvancedFuncion {
                            Permissions = "iqchat.default", Argument = "#DBEAEC",
                        }
                        , new AdvancedFuncion {
                            Permissions = "iqchat.default", Argument = "#FFC428",
                        }
                        , new AdvancedFuncion {
                            Permissions = "iqchat.vip", Argument = "#45AAB4",
                        }
                        ,
                    }
                    , AutoSetupSetting = new AutoSetups {
                        ReturnDefaultSetting = new AutoSetups.ReturnDefault {
                            UseDropColorChat = true, UseDropColorNick = true, UseDropPrefix = true, PrefixDefault = "", NickDefault = "", MessageDefault = "",
                        }
                        , SetupAutoSetting = new AutoSetups.SetupAuto {
                            UseSetupAutoColorChat = true, UseSetupAutoColorNick = true, UseSetupAutoPrefix = true,
                        }
                    }
                    , RustPlusSettings = new RustPlus {
                        UseRustPlus = true, DisplayNameAlert = "СУПЕР СЕРВЕР",
                    }
                    , MessageSetting = new MessageSettings {
                        UseBadWords = true, HideAdminGave = true, IgnoreUsePM = true, MuteTeamChat = true, PermAdminImmunitetAntispam = "iqchat.adminspam", BroadcastTitle = "<color=#007FFF><b>[ОПОВЕЩЕНИЕ]</b></color>", BroadcastColor = "#74ade1", ReplaceBadWord = "Ругаюсь матом", Steam64IDAvatar = 0, TimeDeleteAlertUI = 5, PMActivate = true, SoundPM = "assets/bundled/prefabs/fx/notice/stack.world.fx.prefab", AntiSpamActivate = true, FloodTime = 5, FormatingMessage = true, MultiPrefix = true, BadWords = new List<string> {
                            "хуй", "гей", "говно", "бля", "тварь"
                        }
                    }
                    , ReasonListChat = new List<ReasonMuteChat> {
                        new ReasonMuteChat {
                            Reason = "Оскорбление родителей", TimeMute = 1200,
                        }
                        , new ReasonMuteChat {
                            Reason = "Оскорбление игроков", TimeMute = 100
                        }
                    }
                    , RenamePermission = "iqchat.renameuse", AlertSettings = new AlertSetting {
                        MessageListTimer = 60, WelcomeMessageUse = true, ConnectionAlertRandom = false, DisconnectedAlertRandom = false, RandomConnectionAlert = new List<string> {
                            "{0} влетел как дурачок из {1}", "{0} залетел на сервер из {1}, соболезнуем", "{0} прыгнул на сервачок"
                        }
                        , RandomDisconnectedAlert = new List<string> {
                            "{0} ушел в мир иной", "{0} вылетел с сервера с причиной {1}", "{0} пошел на другой сервачок"
                        }
                        , ConnectedAlert = true, ConnectedWorld = true, DisconnectedAlert = true, DisconnectedReason = true, AlertMessage = true, ConnectedAvatarUse = true, MessageList = new List<string> {
                            "Автоматическое сообщение #1", "Автоматическое сообщение #2", "Автоматическое сообщение #3", "Автоматическое сообщение #4", "Автоматическое сообщение #5", "Автоматическое сообщение #6",
                        }
                        , WelcomeMessage = new List<string> {
                            "Добро пожаловать на сервер SUPERSERVER\nРады,что выбрал именно нас!", "С возвращением на сервер!\nЖелаем тебе удачи", "Добро пожаловать на сервер\nУ нас самые лучшие плагины",
                        }
                        ,
                    }
                    , InterfaceSetting = new InterfaceSettings {
                        FadeIn = 0.2f, MainColor = "#000000C0", TwoMainColor = "#762424FF", ButtonColor = "#802A2AFF", LabelColor = "#D1C7BEFF", AlertColor = "#802A2AFF", AlertInterfaceSetting = new InterfaceSettings.AlertInterfaceSettings {
                            AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "0 -90", OffsetMax = "320 -20"
                        }
                    }
                    , OtherSetting = new OtherSettings {
                        UseDiscord = false, WebhooksChatLog = "", WebhooksMuteInfo = "",
                    }
                    , AnswerMessages = new AnswerMessage {
                        UseAnswer = true, AnswerMessageList = new Dictionary<string, string> {
                            ["вайп"]
                            = "Вайп будет 27.06", ["wipe"] = "Вайп будет 27.06", ["читер"] = "Нашли читера?Напиши /report и отправь жалобу"
                        }
                    }
                    , ReferenceSetting = new ReferenceSettings {
                        XDNotificationsSettings = new ReferenceSettings.XDNotifications {
                            UseXDNotifications = false, AlertDelete = 5, Color = "#762424FF", SoundEffect = "",
                        }
                        , IQFakeActiveSettings = new ReferenceSettings.IQFakeActive {
                            UseIQFakeActive = true,
                        }
                        , IQRankSystems = new ReferenceSettings.IQRankSystem {
                            UseRankSystem = false, UseTimeStandart = true
                        }
                    }
                }
                ;
            }
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<Configuration>();
                if (config == null) LoadDefaultConfig();
            }
            catch {
                PrintWarning("Ошибка #132" + $"чтения конфигурации 'oxide/config/{Name}', создаём новую конфигурацию!!");
                LoadDefaultConfig();
            }
            NextTick(SaveConfig);
        }
        void RegisteredPermissions() {
            for (int MsgColor = 0; MsgColor < config.MessageColorList.Count; MsgColor++) if (!permission.PermissionExists(config.MessageColorList[MsgColor].Permissions, this)) permission.RegisterPermission(config.MessageColorList[MsgColor].Permissions, this);
            for (int NickColorList = 0; NickColorList < config.NickColorList.Count; NickColorList++) if (!permission.PermissionExists(config.NickColorList[NickColorList].Permissions, this)) permission.RegisterPermission(config.NickColorList[NickColorList].Permissions, this);
            for (int PrefixList = 0; PrefixList < config.PrefixList.Count; PrefixList++) if (!permission.PermissionExists(config.PrefixList[PrefixList].Permissions, this)) permission.RegisterPermission(config.PrefixList[PrefixList].Permissions, this);
            permission.RegisterPermission(config.RenamePermission, this);
            permission.RegisterPermission(PermMuteMenu, this);
            permission.RegisterPermission(config.MessageSetting.PermAdminImmunitetAntispam, this);
            PrintWarning("Permissions - completed");
        }
        protected override void LoadDefaultConfig() => config = Configuration.GetNewConfiguration();
        protected override void SaveConfig() => Config.WriteObject(config);
#endregion
#region Data
        [JsonProperty("Дата с настройкой чата игрока")]
        public Dictionary<ulong, SettingUser> ChatSettingUser = new Dictionary<ulong, SettingUser>();
        [JsonProperty("Дата с Административной настройкой")]
        public AdminSettings AdminSetting = new AdminSettings();
        public class SettingUser {
            public string ChatPrefix;
            public List<string> MultiPrefix = new List<string>();
            public string NickColor;
            public string MessageColor;
            public double MuteChatTime;
            public double MuteVoiceTime;
            public List<ulong> IgnoredUsers = new List<ulong>();
        }
        public class AdminSettings {
            public bool MuteChatAll;
            public bool MuteVoiceAll;
            public Dictionary<ulong, string> RenameList = new Dictionary<ulong, string>();
        }
        void ReadData() {
            ChatSettingUser = Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, SettingUser>>("IQChat/IQUser");
            AdminSetting = Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<AdminSettings>("IQChat/AdminSetting");
        }
        void WriteData() {
            Oxide.Core.Interface.Oxide.DataFileSystem.WriteObject("IQChat/IQUser", ChatSettingUser);
            Oxide.Core.Interface.Oxide.DataFileSystem.WriteObject("IQChat/AdminSetting", AdminSetting);
        }
        void RegisteredDataUser(BasePlayer player) {
            if (!ChatSettingUser.ContainsKey(player.userID)) ChatSettingUser.Add(player.userID, new SettingUser {
                ChatPrefix = config.AutoSetupSetting.ReturnDefaultSetting.PrefixDefault, NickColor = config.AutoSetupSetting.ReturnDefaultSetting.NickDefault, MessageColor = config.AutoSetupSetting.ReturnDefaultSetting.MessageDefault, MuteChatTime = 0, MuteVoiceTime = 0, MultiPrefix = new List<string> {
                }
                , IgnoredUsers = new List<ulong> {
                }
                ,
            }
            );
        }
#endregion
#region Hooks
        private bool OnPlayerChat(BasePlayer player, string message, Chat.ChatChannel channel) {
            if (Interface.Oxide.CallHook("CanChatMessage", player, message) != null) return false;
            SeparatorChat(channel, player, message);
            return false;
        }
        private object OnServerMessage(string message, string name) {
            if (config.MessageSetting.HideAdminGave) if (message.Contains("gave") && name == "SERVER") return true;
            return null;
        }
        void OnUserPermissionGranted(string id, string permName) => AutoSetupData(id, permName);
        private void OnUserGroupAdded(string id, string groupName) {
            var PermissionsGroup = permission.GetGroupPermissions(groupName);
            if (PermissionsGroup == null) return;
            foreach (var permName in PermissionsGroup) AutoSetupData(id, permName);
        }
        void OnUserPermissionRevoked(string id, string permName) => AutoReturnDefaultData(id, permName);
        void OnUserGroupRemoved(string id, string groupName) {
            var PermissionsGroup = permission.GetGroupPermissions(groupName);
            if (PermissionsGroup == null) return;
            foreach (var permName in PermissionsGroup) AutoReturnDefaultData(id, permName);
        }
        object OnPlayerVoice(BasePlayer player, Byte[] data) {
            var DataPlayer = ChatSettingUser[player.userID];
            bool IsMuted = DataPlayer.MuteVoiceTime > CurrentTime() ? true : false;
            if (IsMuted) return false;
            return null;
        }
        private void OnServerInitialized() {
            ReadData();
            foreach (var p in BasePlayer.activePlayerList) RegisteredDataUser(p);
            RegisteredPermissions();
            WriteData();
            BroadcastAuto();
        }
        void OnPlayerConnected(BasePlayer player) {
            RegisteredDataUser(player);
            var Alert = config.AlertSettings;
            if (Alert.ConnectedAlert) {
                string Avatar = Alert.ConnectedAvatarUse ? player.UserIDString : "";
                string Message = string.Empty;
                if (config.AlertSettings.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 (Alert.ConnectionAlertRandom) {
                            sb.Clear();
                            int RandomIndex = UnityEngine.Random.Range(0, Alert.RandomConnectionAlert.Count);
                            Message = sb.AppendFormat(Alert.RandomConnectionAlert[RandomIndex], player.displayName, country).ToString();
                        }
                        else Message = GetLang("WELCOME_PLAYER_WORLD", player.UserIDString, player.displayName, country);
                        ReplyBroadcast(Message, "", Avatar);
                    }
                    , this);
                }
                else {
                    if (Alert.ConnectionAlertRandom) {
                        sb.Clear();
                        int RandomIndex = UnityEngine.Random.Range(0, Alert.RandomConnectionAlert.Count);
                        Message = sb.AppendFormat(Alert.RandomConnectionAlert[RandomIndex], player.displayName).ToString();
                    }
                    else Message = GetLang("WELCOME_PLAYER", player.UserIDString, player.displayName);
                    ReplyBroadcast(Message);
                }
            }
            if (Alert.WelcomeMessageUse) {
                int RandomMessage = UnityEngine.Random.Range(0, Alert.WelcomeMessage.Count);
                string WelcomeMessage = Alert.WelcomeMessage[RandomMessage];
                ReplySystem(Chat.ChatChannel.Global, player, WelcomeMessage);
            }
        }
        void Unload() => WriteData();
        void OnPlayerDisconnected(BasePlayer player, string reason) {
            var Alert = config.AlertSettings;
            if (Alert.DisconnectedAlert) {
                string Avatar = Alert.ConnectedAvatarUse ? player.UserIDString : "";
                string Message = string.Empty;
                if (Alert.DisconnectedAlertRandom) {
                    sb.Clear();
                    int RandomIndex = UnityEngine.Random.Range(0, Alert.RandomDisconnectedAlert.Count);
                    Message = sb.AppendFormat(Alert.RandomDisconnectedAlert[RandomIndex], player.displayName, reason).ToString();
                }
                else Message = config.AlertSettings.DisconnectedReason ? GetLang("LEAVE_PLAYER_REASON", player.UserIDString, player.displayName, reason) : GetLang("LEAVE_PLAYER", player.UserIDString, player.displayName);
                ReplyBroadcast(Message, "", Avatar);
            }
        }
#endregion
#region DiscordFunc
#region FancyDiscord
        public class FancyMessage {
            public string content {
                get;
                set;
            }
            public bool tts {
                get;
                set;
            }
            public Embeds[] embeds {
                get;
                set;
            }
            public class Embeds {
                public string title {
                    get;
                    set;
                }
                public int color {
                    get;
                    set;
                }
                public List<Fields> fields {
                    get;
                    set;
                }
                public Footer footer {
                    get;
                    set;
                }
                public Authors author {
                    get;
                    set;
                }
                public Embeds(string title, int color, List<Fields> fields, Authors author, Footer footer) {
                    this.title = title;
                    this.color = color;
                    this.fields = fields;
                    this.author = author;
                    this.footer = footer;
                }
            }
            public FancyMessage(string content, bool tts, Embeds[] embeds) {
                this.content = content;
                this.tts = tts;
                this.embeds = embeds;
            }
            public string toJSON() => JsonConvert.SerializeObject(this);
        }
        public class Footer {
            public string text {
                get;
                set;
            }
            public string icon_url {
                get;
                set;
            }
            public string proxy_icon_url {
                get;
                set;
            }
            public Footer(string text, string icon_url, string proxy_icon_url) {
                this.text = text;
                this.icon_url = icon_url;
                this.proxy_icon_url = proxy_icon_url;
            }
        }
        public class Authors {
            public string name {
                get;
                set;
            }
            public string url {
                get;
                set;
            }
            public string icon_url {
                get;
                set;
            }
            public string proxy_icon_url {
                get;
                set;
            }
            public Authors(string name, string url, string icon_url, string proxy_icon_url) {
                this.name = name;
                this.url = url;
                this.icon_url = icon_url;
                this.proxy_icon_url = proxy_icon_url;
            }
        }
        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;
            }
        }
        private void Request(string url, string payload, Action<int> callback = null) {
            Dictionary<string, string> header = new Dictionary<string, string>();
            header.Add("Content-Type", "application/json");
            webrequest.Enqueue(url, payload, (code, response) => {
                if (code != 200 && code != 204) {
                    if (response != null) {
                        try {
                            JObject json = JObject.Parse(response);
                            if (code == 429) {
                                float seconds = float.Parse(Math.Ceiling((double)(int)json["retry_after"] / 1000).ToString());
                            }
                            else {
                                PrintWarning($" Discord rejected that payload! Responded with \"{json["message"].ToString()}\" Code: {code}");
                            }
                        }
                        catch {
                            PrintWarning($"Failed to get a valid response from discord! Error: \"{response}\" Code: {code}");
                        }
                    }
                    else {
                        PrintWarning($"Discord didn't respond (down?) Code: {code}");
                    }
                }
                try {
                    callback?.Invoke(code);
                }
                catch (Exception ex) {
                }
            }
            , this, RequestMethod.POST, header);
        }
#endregion
        void DiscordSendMessage(string key, string WebHooks, ulong userID = 0, params object[] args) {
            if (!config.OtherSetting.UseDiscord) return;
            if (String.IsNullOrWhiteSpace(WebHooks)) return;
            List<Fields> fields = new List<Fields> {
                new Fields("IQChat", key, true),
            }
            ;
            FancyMessage newMessage = new FancyMessage(null, false, new FancyMessage.Embeds[1] {
                new FancyMessage.Embeds(null, 635133, fields, new Authors("IQChat", "https://vk.com/mir_inc", "https://i.imgur.com/ILk3uJc.png", null), new Footer("Author: Mercury[vk.com/mir_inc]", "https://i.imgur.com/ILk3uJc.png", null))
            }
            );
            Request($"{WebHooks}", newMessage.toJSON());
        }
#endregion
#region Func
        public bool IsMutedUser(ulong userID) {
            var DataPlayer = ChatSettingUser[userID];
            return DataPlayer.MuteChatTime > CurrentTime() ? true : false;
        }
        private void SeparatorChat(Chat.ChatChannel channel, BasePlayer player, string Message) {
            var DataPlayer = ChatSettingUser[player.userID];
            if (IsMutedUser(player.userID)) {
                ReplySystem(Chat.ChatChannel.Global, player, GetLang("FUNC_MESSAGE_ISMUTED_TRUE", player.UserIDString, FormatTime(TimeSpan.FromSeconds(DataPlayer.MuteChatTime - CurrentTime()))));
                return;
            }
            var RankSettings = config.ReferenceSetting.IQRankSystems;
            var MessageSettings = config.MessageSetting;
            string OutMessage = Message;
            string PrefxiPlayer = "";
            string MessageSeparator = "";
            string ColorNickPlayer = DataPlayer.NickColor;
            string ColorMessagePlayer = DataPlayer.MessageColor;
            string DisplayName = AdminSetting.RenameList.ContainsKey(player.userID) ? AdminSetting.RenameList[player.userID] : player.displayName;
            if (MessageSettings.FormatingMessage) OutMessage = $"{Message.ToLower().Substring(0, 1).ToUpper()}{Message.Remove(0, 1).ToLower()}";
            if (MessageSettings.UseBadWords) foreach (var DetectedMessage in OutMessage.Split(' ')) if (MessageSettings.BadWords.Contains(DetectedMessage.ToLower())) {
                OutMessage = OutMessage.Replace(DetectedMessage, MessageSettings.ReplaceBadWord);
                BadWords(player);
            }
            if (MessageSettings.MultiPrefix) {
                if (DataPlayer.MultiPrefix != null) for (int i = 0; i < DataPlayer.MultiPrefix.Count; i++) PrefxiPlayer += DataPlayer.MultiPrefix[i];
            }
            else PrefxiPlayer = DataPlayer.ChatPrefix;
            string ModifiedNick = string.IsNullOrWhiteSpace(ColorNickPlayer) ? player.IsAdmin ? $"<color=#a8fc55>{DisplayName}</color>" : $"<color=#54aafe>{DisplayName}</color>" : $"<color={ColorNickPlayer}>{DisplayName}</color>";
            string ModifiedMessage = string.IsNullOrWhiteSpace(ColorMessagePlayer) ? OutMessage : $"<color={ColorMessagePlayer}>{OutMessage}</color>";
            string ModifiedChannel = channel == Chat.ChatChannel.Team ? "<color=#a5e664>[Team]</color>" : "";
            string Rank = string.Empty;
            string RankTime = string.Empty;
            if (IQRankSystem) if (RankSettings.UseRankSystem) {
                if (RankSettings.UseTimeStandart) RankTime = $"{IQRankGetTimeGame(player.userID)}";
                Rank = $"{IQRankGetRank(player.userID)}";
            }
            MessageSeparator = !String.IsNullOrWhiteSpace(Rank) && !String.IsNullOrWhiteSpace(RankTime) ? $"{ModifiedChannel} [{RankTime}] [{Rank}] {PrefxiPlayer} {ModifiedNick}: {ModifiedMessage}" : !String.IsNullOrWhiteSpace(RankTime) ? $"{ModifiedChannel} [{RankTime}] {PrefxiPlayer} {ModifiedNick}: {ModifiedMessage}" : !String.IsNullOrWhiteSpace(Rank) ? $"{ModifiedChannel} [{Rank}] {PrefxiPlayer} {ModifiedNick}: {ModifiedMessage}" : $"{ModifiedChannel} {PrefxiPlayer} {ModifiedNick}: {ModifiedMessage}";
            if (config.RustPlusSettings.UseRustPlus) if (channel == Chat.ChatChannel.Team) {
                RelationshipManager.PlayerTeam Team = RelationshipManager.Instance.FindTeam(player.currentTeam);
                if (Team == null) return;
                Util.BroadcastTeamChat(player.Team, player.userID, player.displayName, OutMessage, DataPlayer.MessageColor);
            }
            ReplyChat(channel, player, MessageSeparator);
            AnwserMessage(player, MessageSeparator.ToLower());
            Puts($"{player}: {OutMessage}");
            Log($"СООБЩЕНИЕ В ЧАТ : {player}: {ModifiedChannel} {OutMessage}");
            DiscordSendMessage(GetLang("DISCORD_SEND_LOG_CHAT", player.UserIDString, player.displayName, player.UserIDString, OutMessage, Message), config.OtherSetting.WebhooksChatLog, player.userID);
            RCon.Broadcast(RCon.LogType.Chat, new Chat.ChatEntry {
                Message = $"{player.displayName} : {OutMessage}", UserId = player.UserIDString, Username = player.displayName, Channel = channel, Time = (DateTime.UtcNow.Hour * 3600) + (DateTime.UtcNow.Minute * 60),
            }
            );
        }
        public void AutoSetupData(string id, string perm) {
            var AutoSetup = config.AutoSetupSetting.SetupAutoSetting;
            if (String.IsNullOrWhiteSpace(id)) return;
            if (String.IsNullOrWhiteSpace(perm)) return;
            ulong userID;
            if (!ulong.TryParse(id, out userID)) return;
            if (!ChatSettingUser.ContainsKey(userID)) return;
            var DataPlayer = ChatSettingUser[userID];
            var Prefix = config.PrefixList.FirstOrDefault(x => x.Permissions == perm);
            var ColorChat = config.MessageColorList.FirstOrDefault(x => x.Permissions == perm);
            var ColorNick = config.NickColorList.FirstOrDefault(x => x.Permissions == perm);
            if (AutoSetup.UseSetupAutoPrefix) if (Prefix != null) {
                if (!config.MessageSetting.MultiPrefix) DataPlayer.ChatPrefix = Prefix.Argument;
                else DataPlayer.MultiPrefix.Add(Prefix.Argument);
                BasePlayer player = BasePlayer.FindByID(userID);
                if (player != null) ReplySystem(Chat.ChatChannel.Global, player, GetLang("PREFIX_SETUP", player.UserIDString, Prefix.Argument));
            }
            if (AutoSetup.UseSetupAutoColorChat) if (ColorChat != null) {
                DataPlayer.MessageColor = ColorChat.Argument;
                BasePlayer player = BasePlayer.FindByID(userID);
                if (player != null) ReplySystem(Chat.ChatChannel.Global, player, GetLang("COLOR_CHAT_SETUP", player.UserIDString, ColorChat.Argument));
            }
            if (AutoSetup.UseSetupAutoColorNick) if (ColorNick != null) {
                DataPlayer.NickColor = ColorNick.Argument;
                BasePlayer player = BasePlayer.FindByID(userID);
                if (player != null) ReplySystem(Chat.ChatChannel.Global, player, GetLang("COLOR_NICK_SETUP", player.UserIDString, ColorNick.Argument));
            }
        }
        public void AutoReturnDefaultData(string id, string perm) {
            var AutoReturn = config.AutoSetupSetting.ReturnDefaultSetting;
            if (String.IsNullOrWhiteSpace(id)) return;
            if (String.IsNullOrWhiteSpace(perm)) return;
            ulong userID;
            if (!ulong.TryParse(id, out userID)) return;
            if (!userID.IsSteamId()) return;
            if (!ChatSettingUser.ContainsKey(userID)) return;
            var DataPlayer = ChatSettingUser[userID];
            var Prefix = config.PrefixList.FirstOrDefault(x => x.Permissions == perm);
            var ColorChat = config.MessageColorList.FirstOrDefault(x => x.Permissions == perm);
            var ColorNick = config.NickColorList.FirstOrDefault(x => x.Permissions == perm);
            if (AutoReturn.UseDropPrefix) if (Prefix != null) {
                if (config.MessageSetting.MultiPrefix) {
                    if (DataPlayer.MultiPrefix.Contains(Prefix.Argument)) {
                        DataPlayer.MultiPrefix.Remove(Prefix.Argument);
                        BasePlayer player = BasePlayer.FindByID(userID);
                        if (player != null) ReplySystem(Chat.ChatChannel.Global, player, GetLang("PREFIX_RETURNRED", player.UserIDString, Prefix.Argument));
                    }
                }
                else if (DataPlayer.ChatPrefix == Prefix.Argument) {
                    DataPlayer.ChatPrefix = AutoReturn.PrefixDefault;
                    BasePlayer player = BasePlayer.FindByID(userID);
                    if (player != null) ReplySystem(Chat.ChatChannel.Global, player, GetLang("PREFIX_RETURNRED", player.UserIDString, Prefix.Argument));
                }
            }
            if (AutoReturn.UseDropColorChat) if (ColorChat != null) if (DataPlayer.MessageColor == ColorChat.Argument) {
                DataPlayer.MessageColor = AutoReturn.MessageDefault;
                BasePlayer player = BasePlayer.FindByID(userID);
                if (player != null) ReplySystem(Chat.ChatChannel.Global, player, GetLang("COLOR_CHAT_RETURNRED", player.UserIDString, ColorChat.Argument));
            }
            if (AutoReturn.UseDropColorNick) if (ColorNick != null) if (DataPlayer.NickColor == ColorNick.Argument) {
                DataPlayer.NickColor = AutoReturn.NickDefault;
                BasePlayer player = BasePlayer.FindByID(userID);
                if (player != null) ReplySystem(Chat.ChatChannel.Global, player, GetLang("COLOR_NICK_RETURNRED", player.UserIDString, ColorNick.Argument));
            }
        }
        public void AnwserMessage(BasePlayer player, string Message) {
            var Anwser = config.AnswerMessages;
            if (!Anwser.UseAnswer) return;
            foreach (var Anwsers in Anwser.AnswerMessageList) if (Message.Contains(Anwsers.Key.ToLower())) ReplySystem(Chat.ChatChannel.Global, player, Anwsers.Value);
        }
        public void BroadcastAuto() {
            var Alert = config.AlertSettings;
            if (Alert.AlertMessage) {
                timer.Every(Alert.MessageListTimer, () => {
                    var RandomMsg = Alert.MessageList[UnityEngine.Random.Range(0, Alert.MessageList.Count)];
                    ReplyBroadcast(RandomMsg);
                }
                );
            }
        }
        public void MutePlayer(BasePlayer player, string Format, int ReasonIndex, string ResonCustom = "", string TimeCustom = "", BasePlayer Initiator = null) {
            var cfg = config.ReasonListChat[ReasonIndex];
            string Reason = string.IsNullOrEmpty(ResonCustom) ? cfg.Reason : ResonCustom;
            float TimeMute = string.IsNullOrEmpty(TimeCustom) ? cfg.TimeMute : Convert.ToInt32(TimeCustom);
            string DisplayInititator = Initiator == null ? "Администратор" : Initiator.displayName;
            ulong UserIdInitiator = Initiator == null ? 0 : Initiator.userID;
            switch (Format) {
                case "mutechat" : {
                    ChatSettingUser[player.userID].MuteChatTime = TimeMute + CurrentTime();
                    ReplyBroadcast(GetLang("FUNC_MESSAGE_MUTE_CHAT", player.UserIDString, DisplayInititator, player.displayName, FormatTime(TimeSpan.FromSeconds(TimeMute)), Reason));
                    if (Initiator != null) SetMute(Initiator);
                    DiscordSendMessage(GetLang("DISCORD_SEND_LOG_MUTE", player.UserIDString, DisplayInititator, UserIdInitiator, player.displayName, player.userID, Reason), config.OtherSetting.WebhooksMuteInfo);
                    break;
                }
               
// ... [Code preview truncated due to length. Full source in attached file] ...

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