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

FREE STFU : 1.0.3 1.0.3

Нет прав для скачивания
C#:
using System.Collections.Generic;
using Newtonsoft.Json;
using UnityEngine;
using Oxide.Core;
using System;
using Oxide.Core.Plugins;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
namespace Oxide.Plugins {
    [Info("STFU", "MikeHawke", "1.0.3")]
    [Description("Player Muting Made Simple")]
    class STFU : RustPlugin {
        [PluginReference]
        private Plugin DiscordMessages;
        public Mutedata storedData;
        public class Mutedata {
            public Dictionary<ulong, Mutes> MutedPlayers = new Dictionary<ulong, Mutes>();
        }
        public class Mutes {
            public bool perm = false;
            public bool warned = false;
            public string reason = "";
            public DateTime unmute;
        }
        private ConfigData configData;
        class ConfigData {
            [JsonProperty(PropertyName = "Report to Discord")]
            public bool rp = false;
            [JsonProperty(PropertyName = "Discord Webhook")]
            public string wh = "Discordhook.";
        }
        private bool LoadConfigVariables() {
            try {
                configData = Config.ReadObject<ConfigData>();
            }
            catch {
                return false;
            }
            SaveConfig(configData);
            return true;
        }
        void Init() {
            permission.RegisterPermission("STFU.User", this);
            if (!LoadConfigVariables()) {
                Puts("Config file issue detected. Please delete file, or check syntax and fix.");
                return;
            }
        }
        protected override void LoadDefaultConfig() {
            Puts("Creating new config file.");
            configData = new ConfigData();
            SaveConfig(configData);
        }
        void SaveConfig(ConfigData config) {
            Config.WriteObject(config, true);
        }
        void Loaded() {
            JsonConvert.DefaultSettings = () => new JsonSerializerSettings {
                Formatting = Formatting.Indented, ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
            }
            ;
            storedData = Interface.Oxide.DataFileSystem.ReadObject<Mutedata>("STFU");
            Interface.Oxide.DataFileSystem.WriteObject("STFU", storedData);
            checkban();
        }
        void SaveData() {
            Interface.Oxide.DataFileSystem.WriteObject("STFU", storedData);
        }
        [ChatCommand("STFU")]
        void stfu(BasePlayer player, string cmd, string[] args) {
            if (!permission.UserHasPermission(player.userID.ToString(), "STFU.User")) {
                SendReply(player, "You do not have permission to use this command");
                return;
            }
            else if (!(args?.Length == 3) || args[0] == null || args[1] == null || args[2] == null) {
                SendReply(player, "Incorrect Sytax... /STFU <Target> <duration in mins> <reason>");
                return;
            }
            var target = FindPlayerByName(args[0]);
            if (target == null) {
                SendReply(player, $"{args[0]} not found, are they dead? is the name right?");
                return;
            }
            if (storedData.MutedPlayers.ContainsKey(target.userID)) {
                SendReply(player, $"{target.displayName} is already muted");
                return;
            }
            if (args[1].ToLower() == "perm") {
                addpermmute(player, target, args[2]);
                return;
            }
            TimeSpan timeSpan;
            if (!TryParseTimeSpan(args[1], out timeSpan)) {
                SendReply(player, "Invalid Time Span");
                return;
            }
            else {
                addmute(player, target, DateTime.UtcNow + timeSpan, args[2]);
            }
        }
        [ConsoleCommand("STFU")]
        void stfucon(ConsoleSystem.Arg arg) {
            if (!(arg.Player() == null || arg.Player()?.IsAdmin == true)) {
                return;
            }
            else if (!(arg.Args?.Length == 3) || arg.Args[0] == null || arg.Args[1] == null || arg.Args[2] == null) {
                Puts("Incorrect Sytax... STFU Target duration in mins reason");
                return;
            }
            var mutereason = arg.Args[2].ToString();
            var target = FindPlayerByName(arg.Args[0]);
            if (target == null) {
                Puts($"{arg.Args[0]} not found, are they dead? is the name right?");
                return;
            }
            if(storedData.MutedPlayers.ContainsKey(target.userID)) {
                Puts($"{target.displayName} is already muted");
                return;
            }
            if (arg.Args[1].ToLower() == "perm") {
                addpermmute(null, target, arg.Args[2]);
                return;
            }
            TimeSpan timeSpan;
            if (!TryParseTimeSpan(arg.Args[1], out timeSpan)) {
                Puts("Invalid Time Span");
                return;
            }
            else {
                addmute(null, target, DateTime.UtcNow + timeSpan, arg.Args[2]);
            }
        }
        [ChatCommand("Unshut")]
        void unshut(BasePlayer player, string cmd, string[] args) {
            if (!permission.UserHasPermission(player.userID.ToString(), "STFU.User")) {
                SendReply(player, "You do not have permission to use this command");
                return;
            }
            else if (!(args?.Length == 1) || args[0] == null) {
                SendReply(player, "Incorrect Sytax... /Unshut <Target>");
                return;
            }
            var target = FindPlayerByName(args[0]);
            if (target == null) {
                SendReply(player, $"{args[0]} not found, is the name right?");
                return;
            }
            if (!storedData.MutedPlayers.ContainsKey(target.userID)) {
                SendReply(player, $"{target.displayName} is not currently muted");
            }
            else {
                unmute(target, player);
            }
        }
        [ConsoleCommand("Unshut")]
        void unshutcon(ConsoleSystem.Arg arg) {
            if (!(arg.Player() == null || arg.Player()?.IsAdmin == true)) {
                return;
            }
            else if (!(arg.Args?.Length == 1) || arg.Args[0] == null) {
                Puts("Incorrect Sytax... Unshut Target");
                return;
            }
            var target = FindPlayerByName(arg.Args[0]);
            if (target == null) {
                Puts($"{arg.Args[0]} not found, is the name right?");
                return;
            }
            if (!storedData.MutedPlayers.ContainsKey(target.userID)) {
                Puts($"{target.displayName} is not currently muted");
            }
            else {
                unmute(target, null);
            }
        }
        void addpermmute(BasePlayer player, BasePlayer target, string reason) {
            Mutes value = new Mutes();
            storedData.MutedPlayers.Add(target.userID, value);
            storedData.MutedPlayers[target.userID].perm = true;
            storedData.MutedPlayers[target.userID].reason = reason;
            SendReply(target, $"You have been muted indefinitely for {reason}");
            PrintToChat("<color=#ff0e00>" + "STFU" + "</color>: " + $"{target.displayName} has been told to STFU indefinitely... for reason <color=#ff0e00>{reason}</color>");
            Puts($"{target.displayName} has been muted until indefinitely for {reason}");
            warn(target, player, "perm", reason);
            SaveData();
        }
        void addmute(BasePlayer player, BasePlayer target, DateTime time, string reason) {
            Mutes value = new Mutes();
            storedData.MutedPlayers.Add(target.userID, value);
            storedData.MutedPlayers[target.userID].unmute = time;
            storedData.MutedPlayers[target.userID].reason = reason;
            float time2 = (float)(time - DateTime.UtcNow).TotalSeconds;
            UpdateMute(time2, target);
            SendReply(target, $"You have been muted until {time} mins");
            PrintToChat("<color=#ff0e00>" + "STFU" + "</color>: " + $"{target.displayName} has been told to STFU until <color=#ff0e00>{time}</color> mins... reason {reason}");
            Puts($"{target.displayName} has been muted until {time} mins for {reason}");
            var timewarn = time.ToString();
            warn(target, player, timewarn, reason);
            SaveData();
        }
        void unmute(BasePlayer target, BasePlayer player) {
            storedData.MutedPlayers.Remove(target.userID);
            if (Timers.ContainsKey(target.userID)) {
                Timers[target.userID].Destroy();
            }
            Puts($"player {target.displayName} has been unmuted");
            PrintToChat("<color=#ff0e00>" + "STFU" + "</color>: " + $"{target.displayName} has been unmunted");
            if (player == null) {
                reversewarn(target, null);
                ;
            }
            else {
                reversewarn(target, player);
            }
            SaveData();
        }
        public Dictionary<ulong, Timer> Timers = new Dictionary<ulong, Timer>();
        void checkban() {
            if (storedData.MutedPlayers.ToList().Count() == 0) return;
            foreach (var entry in storedData.MutedPlayers.ToList()) {
                if (entry.Value.perm == true) return;
                var target = FindPlayerByName(entry.Key.ToString());
                if (target == null) return;
                if (entry.Value.unmute < DateTime.UtcNow) {
                    unmute(target, null);
                }
                else {
                    UpdateMute((float)(entry.Value.unmute - DateTime.UtcNow).TotalSeconds, target);
                }
            }
        }
        void UpdateMute(float time, BasePlayer target) {
            Timers[target.userID] = timer.Once(time, () => unmute(target, null));
        }
        static BasePlayer FindPlayerByName(string name) {
            BasePlayer result = null;
            foreach (BasePlayer current in BasePlayer.activePlayerList) {
                if (current.displayName.Equals(name, StringComparison.OrdinalIgnoreCase) || current.UserIDString.Contains(name, CompareOptions.OrdinalIgnoreCase) || current.displayName.Contains(name, CompareOptions.OrdinalIgnoreCase)) result = current;
            }
            return result;
        }
        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;
            }
        }
        void warn(BasePlayer target, BasePlayer player, string until, string reason) {
            if (configData.rp == false) return;
            {
                string reporter;
                if (player == null) {
                    reporter = "console";
                }
                else {
                    reporter = player.displayName;
                }
                List<Fields> fields = new List<Fields>();
                string json;
                fields.Add(new Fields("Target", $"[{target.displayName}](https://steamcommunity.com/profiles/{target.userID})", true));
                fields.Add(new Fields("Muted By", reporter, true));
                fields.Add(new Fields("Muted Untill", until, true));
                fields.Add(new Fields("Reson", reason, false));
                json = JsonConvert.SerializeObject(fields);
                DiscordMessages?.Call("API_SendFancyMessage", configData.wh, "STFU", 3329330, json, null);
            }
        }
        void reversewarn(BasePlayer target, BasePlayer player) {
            if (configData.rp == false) return;
            {
                string reporter;
                if (player == null) {
                    reporter = "Console Or Time Expired";
                }
                else {
                    reporter = player.displayName;
                }
                List<Fields> fields = new List<Fields>();
                string json;
                fields.Add(new Fields("Target", $"[{target.displayName}](https://steamcommunity.com/profiles/{target.userID})", true));
                fields.Add(new Fields("UnMuted by", reporter, true));
                fields.Add(new Fields("Reason", "Has been unmuted", false));
                json = JsonConvert.SerializeObject(fields);
                DiscordMessages?.Call("API_SendFancyMessage", configData.wh, "STFU", 3329330, json, null);
            }
        }
        [ConsoleCommand("STFUlookup")]
        void lookup(ConsoleSystem.Arg arg) {
            if (!(arg.Player() == null || arg.Player()?.IsAdmin == true)) {
                return;
            }
            else {
                foreach (var entry in storedData.MutedPlayers) {
                    var target = FindPlayerByName(entry.Key.ToString());
                    var reason = entry.Value.reason;
                    if (entry.Value.perm == true) {
                        Puts($"{target} was given a perm mute for reason {reason}");
                    }
                    else {
                        Puts($"{target} was given a mute for reason {reason} untill {entry.Value.unmute.ToString()}");
                    }
                }
            }
        }
        object OnPlayerVoice(BasePlayer player, Byte[] data) {
            if (storedData.MutedPlayers.ContainsKey(player.userID)) {
                if (storedData.MutedPlayers[player.userID].warned == false || storedData.MutedPlayers[player.userID].perm == true) {
                    SendReply(player, "You are muted.. no one can hear you");
                    storedData.MutedPlayers[player.userID].warned = true;
                    timer.Once(10, () => {
                        storedData.MutedPlayers[player.userID].warned = false;
                    }
                    );
                }
                return false;
            }
            else return null;
        }
        string FormatTime(TimeSpan time) => $"{(time.Days == 0 ? string.Empty : $" {
            time.Days
        }
        day(s)")}{(time.Days != 0 && time.Hours != 0 ? $", " : string.Empty)}{(time.Hours == 0 ? string.Empty : $" {
            time.Hours
        }
        hour(s)")}{(time.Hours != 0 && time.Minutes != 0 ? $", " : string.Empty)}{(time.Minutes == 0 ? string.Empty : $" {
            time.Minutes
        }
        minute(s)")}{(time.Minutes != 0 && time.Seconds != 0 ? $", " : string.Empty)}{(time.Seconds == 0 ? string.Empty : $" {
            time.Seconds
        }
        second(s)")}";
        private bool TryParseTimeSpan(string source, out TimeSpan timeSpan) {
            int seconds = 0, minutes = 0, hours = 0, days = 0;
            Match s = new Regex(@"(\d+?)s", RegexOptions.IgnoreCase).Match(source);
            Match m = new Regex(@"(\d+?)m", RegexOptions.IgnoreCase).Match(source);
            Match h = new Regex(@"(\d+?)h", RegexOptions.IgnoreCase).Match(source);
            Match d = new Regex(@"(\d+?)d", RegexOptions.IgnoreCase).Match(source);
            if (s.Success) seconds = Convert.ToInt32(s.Groups[1].ToString());
            if (m.Success) minutes = Convert.ToInt32(m.Groups[1].ToString());
            if (h.Success) hours = Convert.ToInt32(h.Groups[1].ToString());
            if (d.Success) days = Convert.ToInt32(d.Groups[1].ToString());
            source = source.Replace($"{seconds}s", string.Empty);
            source = source.Replace($"{minutes}m", string.Empty);
            source = source.Replace($"{hours}h", string.Empty);
            source = source.Replace($"{days}d", string.Empty);
            if (!string.IsNullOrEmpty(source) || (!s.Success && !m.Success && !h.Success && !d.Success)) {
                timeSpan = default(TimeSpan);
                return false;
            }
            timeSpan = new TimeSpan(days, hours, minutes, seconds);
            return true;
        }
    }
}

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