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

FREE TPBotbonus : 4.0.1 4.0.1

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using Oxide.Core;
using Oxide.Core.Configuration;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using UnityEngine;
namespace Oxide.Plugins {
    [Info("TPBotbonus", "Sempai#3239", "4.0.1")]
    class TPBotbonus : RustPlugin {
        [PluginReference]
        Plugin Duel, ImageLibrary;
        static string apiver = "v=5.92";
        private bool OxideUpdateSended = false;
        private System.Random random = new System.Random();
        private bool NewWipe = false;
        JsonSerializerSettings jsonsettings;
        private List<string> allowedentity = new List<string>() {
            "door", "wall.window.bars.metal", "wall.window.bars.toptier", "wall.external", "gates.external.high", "floor.ladder", "embrasure", "floor.grill", "wall.frame.fence", "wall.frame.cell", "foundation", "floor.frame", "floor.triangle", "floor", "foundation.steps", "foundation.triangle", "roof", "stairs.l", "stairs.u", "wall.doorway", "wall.frame", "wall.half", "wall.low", "wall.window", "wall", "wall.external.high.stone"
        }
        ;
        List<string> ExplosiveList = new List<string>() {
            "explosive.satchel.deployed", "grenade.f1.deployed", "grenade.beancan.deployed", "explosive.timed.deployed"
        }
        ;
        private List<ulong> BDayPlayers = new List<ulong>();
        class GiftItem {
            public string shortname;
            public ulong skinid;
            public int count;
        }
        class ServerInfo {
            public string name;
            public string online;
            public string slots;
            public string sleepers;
            public string map;
        }
        private Dictionary<BasePlayer, DateTime> GiftsList = new Dictionary<BasePlayer, DateTime>();
        private ConfigData config;
        private class ConfigData {
            [JsonProperty(PropertyName = "Ключи VK API, ID группы")]
            public VKAPITokens VKAPIT;
            [JsonProperty(PropertyName = "Награда за вступление в группу")]
            public GroupGifts GrGifts;
            [JsonProperty(PropertyName = "Оповещения при вайпе")]
            public WipeSettings WipeStg;
            public class VKAPITokens {
                [JsonProperty(PropertyName = "VK Token группы (для сообщений)")]
                public string VKToken = "vk1.a.OdN7gCS7swWRnK4ypRBdPObwJOyUpa-fOSJQFOupnOnYVTi0vLlrMFAFz3lOVbDmhfi6puF3amFAGE43KHh-JCaexjteVScr8SzW0UFTaxjLYkAu423ssvVUwQqsdeqEKcSSo4u69f2RORMjTEey7tkxVG8ZfiuvrPHq_KtqIhELYRu-JP12jJQ-ZOMx0X1weBlqOrOcWPWmb6IX7lMHEg";
                [JsonProperty(PropertyName = "VK Token приложения (для записей на стене и статуса)")]
                public string VKTokenApp = "";
                [JsonProperty(PropertyName = "VKID группы")]
                public string GroupID = "223960721";
            }
            public class GroupGifts {
                [JsonProperty(PropertyName = "Выдавать подарок игроку за вступление в группу ВК?")]
                public bool VKGroupGifts = true;
                [JsonProperty(PropertyName = "Подарок за вступление в группу (команда, если стоит none выдаются предметы из файла data/TPBotbonus.json).Пример: grantperm {steamid} vkraidalert.allow 7d")]
                public string VKGroupGiftCMD = "none";
                [JsonProperty(PropertyName = "Описание команды")]
                public string GiftCMDdesc = "Оповещения о рейде на 7 дней";
                [JsonProperty(PropertyName = "Ссылка на группу ВК")]
                public string VKGroupUrl = "https://vk.com/rustage_su";
                [JsonProperty(PropertyName = "Оповещения в общий чат о получении награды")]
                public bool GiftsBool = true;
                [JsonProperty(PropertyName = "Включить оповещения для игроков не получивших награду за вступление в группу?")]
                public bool VKGGNotify = true;
                [JsonProperty(PropertyName = "Интервал оповещений для игроков не получивших награду за вступление в группу (в минутах)")]
                public int VKGGTimer = 30;
                [JsonProperty(PropertyName = "Выдавать награду каждый вайп?")]
                public bool GiftsWipe = true;
            }
            public class WipeSettings {
                [JsonProperty(PropertyName = "Отправлять пост в группу после вайпа?")]
                public bool WPostB = true;
                [JsonProperty(PropertyName = "Текст поста о вайпе")]
                public string WPostMsg = "RUSTAGE | WIPE {wipedate}";
                [JsonProperty(PropertyName = "Добавить изображение к посту о вайпе?")]
                public bool WPostAttB = false;
                [JsonProperty(PropertyName = "Отправлять сообщение администратору о вайпе?")]
                public bool WPostMsgAdmin = true;
                [JsonProperty(PropertyName = "Ссылка на изображение к посту о вайпе вида 'photo-1_265827614' (изображение должно быть в альбоме группы)")]
                public string WPostAtt = "photo-223960721_456239064";
                [JsonProperty(PropertyName = "Отправлять игрокам сообщение о вайпе автоматически?")]
                public bool WMsgPlayers = true;
                [JsonProperty(PropertyName = "Текст сообщения игрокам о вайпе (сообщение отправляется только тем кто подтвердил профиль)")]
                public string WMsgText = "Сервер вайпнут! Залетай скорее!";
                [JsonProperty(PropertyName = "Игнорировать тех кто подтвердил профиль? (если включено, сообщение о вайпе будет отправляться всем)")]
                public bool WCMDIgnore = false;
                [JsonProperty(PropertyName = "Смена названия группы после вайпа")]
                public bool GrNameChange = false;
                [JsonProperty(PropertyName = "Название группы (переменная {wipedate} отображает дату последнего вайпа)")]
                public string GrName = "ServerName | WIPE {wipedate}";
            }
        }
        private void LoadVariables() {
            bool changed = false;
            Config.Settings.DefaultValueHandling = DefaultValueHandling.Populate;
            config = Config.ReadObject<ConfigData>();
            if (config.GrGifts == null) {
                config.GrGifts = new ConfigData.GroupGifts();
                changed = true;
            }
            if (config.WipeStg == null) {
                config.WipeStg = new ConfigData.WipeSettings();
                changed = true;
            }
            if (changed) PrintWarning("Конфигурационный файл обновлен");
        }
        protected override void LoadDefaultConfig() {
            var configData = new ConfigData {
                VKAPIT = new ConfigData.VKAPITokens(), GrGifts = new ConfigData.GroupGifts(), WipeStg = new ConfigData.WipeSettings()
            }
            ;
            Config.WriteObject(configData, true);
        }
        class DataStorageStats {
            public int WoodGath;
            public int SulfureGath;
            public int Rockets;
            public int Blueprints;
            public int Explosive;
            public int Reports;
            public List<GiftItem> Gifts;
            public DataStorageStats() {
            }
        }
        class DataStorageUsers {
            public Dictionary<ulong, VKUDATA> VKUsersData = new Dictionary<ulong, VKUDATA>();
            public DataStorageUsers() {
            }
        }
        class VKUDATA {
            public ulong UserID;
            public string Name;
            public string VkID;
            public string VkOwnerID;
            public int ConfirmCode;
            public bool Confirmed;
            public bool GiftRecived;
            public string LastRaidNotice;
            public bool WipeMsg;
            public string Bdate;
            public int Raids;
            public int Kills;
            public int Farm;
            public string LastSeen;
        }
        class DataStorageReports {
            public Dictionary<int, REPORT> VKReportsData = new Dictionary<int, REPORT>();
            public DataStorageReports() {
            }
        }
        class REPORT {
            public ulong UserID;
            public string Name;
            public string Text;
        }
        DataStorageStats statdata;
        DataStorageUsers usersdata;
        DataStorageReports reportsdata;
        private DynamicConfigFile VKBData;
        private DynamicConfigFile StatData;
        private DynamicConfigFile ReportsData;
        void LoadData() {
            try {
                statdata = Interface.GetMod().DataFileSystem.ReadObject<DataStorageStats>("TPBotbonus");
                usersdata = Interface.GetMod().DataFileSystem.ReadObject<DataStorageUsers>("TPBotbonusUsers");
                reportsdata = Interface.GetMod().DataFileSystem.ReadObject<DataStorageReports>("TPBotbonusReports");
            }
            catch {
                statdata = new DataStorageStats();
                usersdata = new DataStorageUsers();
                reportsdata = new DataStorageReports();
            }
        }
        private void OnServerInitialized() {
            PrintWarning("\n-----------------------------\n " +" Author - Sempai#3239\n " +" VK - https://vk.com/rustnastroika\n " +" Forum - https://topplugin.ru\n " +" Discord - https://discord.gg/5DPTsRmd3G\n" +"-----------------------------");
            LoadVariables();
            VKBData = Interface.Oxide.DataFileSystem.GetFile("TPBotbonusUsers");
            StatData = Interface.Oxide.DataFileSystem.GetFile("TPBotbonus");
            ReportsData = Interface.Oxide.DataFileSystem.GetFile("TPBotbonusReports");
            ImageLibrary.Call("AddImage", VkICO, ".VkICO");
            ImageLibrary.Call("AddImage", GiftICO, ".GiftICO");
            ImageLibrary.Call("AddImage", AlertICO, ".AlertICO");
            ImageLibrary.Call("AddImage", "https://rustage.su/img/server/ui/bonus_bg.png", "BackgroundImage");
            ImageLibrary.Call("AddImage", "https://rustage.su/img/server/ui/bonus_btn_block.png", "ButtonBlock");
            ImageLibrary.Call("AddImage", "https://rustage.su/img/server/ui/bonus_modal_connect.png", "alerts");
            ImageLibrary.Call("AddImage", "https://rustage.su/img/server/ui/bonus_modal_connect.png", "alerts1");
            ImageLibrary.Call("AddImage", "https://rustage.su/img/server/ui/bonus_modal_field.png", "alertvkback");
            ImageLibrary.Call("AddImage", "https://rustage.su/img/server/ui/bonus_modal_delete.png", "vkdeleteback");
            ImageLibrary.Call("AddImage", "https://rustage.su/img/server/ui/bonus_modal_getbonus.png", "giftrewardback");
            permission.RegisterPermission(AlertPermission, this);
            string msg2 = null;
            msg2 = $"[TPBotbonus] Сервер успешно загружен.";
            LoadData();
            if (NewWipe) WipeFunctions();
            if (statdata.Gifts == null) {
                statdata.Gifts = new List<GiftItem>() {
                    new GiftItem {
                        shortname = "supply.signal", count = 1, skinid = 0
                    }
                    , new GiftItem {
                        shortname = "pookie.bear", count = 2, skinid = 0
                    }
                }
                ;
                StatData.WriteObject(statdata);
            }
            if (config.GrGifts.VKGGNotify) timer.Repeat(config.GrGifts.VKGGTimer * 60, 0, GiftNotifier);
        }
        private void Init() {
            cmd.AddChatCommand("regvk", this, "VKcommand");
            cmd.AddConsoleCommand("updatestatus", this, "UStatus");
            cmd.AddConsoleCommand("updatewidget", this, "UWidget");
            cmd.AddConsoleCommand("updatelabel", this, "ULabel");
            cmd.AddConsoleCommand("sendmsgadmin", this, "MsgAdmin");
            cmd.AddConsoleCommand("wipealerts", this, "WipeAlerts");
            cmd.AddConsoleCommand("userinfo", this, "GetUserInfo");
            cmd.AddConsoleCommand("report.answer", this, "ReportAnswer");
            cmd.AddConsoleCommand("reports.list", this, "ReportList");
            cmd.AddConsoleCommand("report.wipe", this, "ReportClear");
            cmd.AddConsoleCommand("usersdata.update", this, "UpdateUsersData");
            jsonsettings = new JsonSerializerSettings();
            jsonsettings.Converters.Add(new KeyValuePairConverter());
        }
        private void Loaded() => LoadMessages();
        private void Unload() {
            UnloadAllGUI();
        }
        private void OnNewSave(string filename) => NewWipe = true;
        private void OnPlayerInit(BasePlayer player) {
            if (usersdata.VKUsersData.ContainsKey(player.userID) && usersdata.VKUsersData[player.userID].Name != player.displayName) {
                usersdata.VKUsersData[player.userID].Name = player.displayName;
                VKBData.WriteObject(usersdata);
            }
        }
        private void OnPlayerDisconnected(BasePlayer player, string reason) {
            if (usersdata.VKUsersData.ContainsKey(player.userID)) {
                usersdata.VKUsersData[player.userID].LastSeen = DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss");
                VKBData.WriteObject(usersdata);
            }
        }
        private void UpdateUsersData(ConsoleSystem.Arg arg) {
            if (arg.IsAdmin != true) return;
            DeleteOldUsers(arg.Args?[0]);
        }
        private void CheckVkUser(BasePlayer player, string url) {
            string Userid = null;
            string[] arr1 = url.Split('/');
            string vkname = arr1[arr1.Length - 1];
            webrequest.Enqueue("https://api.vk.com/method/users.get?user_ids=" + vkname + "&" + apiver + "&fields=bdate&access_token=" + config.VKAPIT.VKToken, null, (code, response) => {
                if (!response.Contains("error")) {
                    var json = JObject.Parse(response);
                    Userid = (string)json["response"][0]["id"];
                    string bdate = (string)json["response"][0]["bdate"] ?? "noinfo";
                    if (Userid != null) AddVKUser(player, Userid, bdate);
                    else PrintToChat(player, "Ошибка обработки вашей ссылки ВК, обратитесь к администратору.");
                }
                else {
                    PrintWarning($"Ошибка проверки ВК профиля игрока {player.displayName} ({player.userID}).URL - {url}");
                    Log("checkresponce", $"Ошибка проверки ВК профиля игрока {player.displayName} ({player.userID}).URL - {url}.Ответ сервера ВК: {response}");
                }
            }
            , this);
        }
        private void AddVKUser(BasePlayer player, string Userid, string bdate) {
            if (!usersdata.VKUsersData.ContainsKey(player.userID)) {
                usersdata.VKUsersData.Add(player.userID, new VKUDATA() {
                    UserID = player.userID, Name = player.displayName, VkID = Userid, ConfirmCode = random.Next(1, 9999999), Confirmed = false, GiftRecived = false, Bdate = bdate, Farm = 0, Kills = 0, Raids = 0, LastSeen = DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")
                }
                );
                VKBData.WriteObject(usersdata);
                SendConfCode(usersdata.VKUsersData[player.userID].VkID, $"Для подтверждения вашего ВК профиля введите в игровой чат команду /regvk confirm {usersdata.VKUsersData[player.userID].ConfirmCode}", player);
            }
            else {
                if (Userid == usersdata.VKUsersData[player.userID].VkID && usersdata.VKUsersData[player.userID].Confirmed) {
                    PrintToChat(player, string.Format(GetMsg("ПрофильДобавленИПодтвержден")));
                    return;
                }
                if (Userid == usersdata.VKUsersData[player.userID].VkID && !usersdata.VKUsersData[player.userID].Confirmed) {
                    PrintToChat(player, string.Format(GetMsg("ПрофильДобавлен")));
                    return;
                }
                usersdata.VKUsersData[player.userID].Name = player.displayName;
                usersdata.VKUsersData[player.userID].VkID = Userid;
                usersdata.VKUsersData[player.userID].Confirmed = false;
                usersdata.VKUsersData[player.userID].ConfirmCode = random.Next(1, 9999999);
                usersdata.VKUsersData[player.userID].Bdate = bdate;
                VKBData.WriteObject(usersdata);
                SendConfCode(usersdata.VKUsersData[player.userID].VkID, $"Для подтверждения вашего ВК профиля введите в игровой чат команду /regvk confirm {usersdata.VKUsersData[player.userID].ConfirmCode}", player);
            }
        }
        private void VKcommand(BasePlayer player, string cmd, string[] args) {
            Effect Confirmed = new Effect("assets/prefabs/misc/easter/painted eggs/effects/gold_open.prefab", player, 0, new Vector3(), new Vector3());
            if (args.Length > 0) {
                if (args[0] == "add") {
                    if (args.Length == 1) {
                        PrintToChat(player, string.Format(GetMsg("Подсказка")));
                        return;
                    }
                    if (!args[1].Contains("vk.com/")) {
                        PrintToChat(player, string.Format(GetMsg("НеправильнаяСсылка")));
                        return;
                    }
                    CheckVkUser(player, args[1]);
                }
                if (args[0] == "confirm") {
                    if (args.Length >= 2) {
                        if (usersdata.VKUsersData.ContainsKey(player.userID)) {
                            if (usersdata.VKUsersData[player.userID].Confirmed) {
                                PrintToChat(player, string.Format(GetMsg("ПрофильДобавленИПодтвержден")));
                                return;
                            }
                            if (args[1] == usersdata.VKUsersData[player.userID].ConfirmCode.ToString()) {
                                usersdata.VKUsersData[player.userID].Confirmed = true;
                                VKBData.WriteObject(usersdata);
                                PrintToChat(player, string.Format(GetMsg("ПрофильПодтвержден")));
                                EffectNetwork.Send(Confirmed, player.Connection);
                                if (config.GrGifts.VKGroupGifts) PrintToChat(player, string.Format(GetMsg("ОповещениеОПодарках"), config.GrGifts.VKGroupUrl));
                            }
                            else PrintToChat(player, string.Format(GetMsg("НеверныйКод")));
                        }
                        else PrintToChat(player, string.Format(GetMsg("ПрофильНеДобавлен")));
                    }
                    else {
                        if (!usersdata.VKUsersData.ContainsKey(player.userID)) {
                            PrintToChat(player, string.Format(GetMsg("ПрофильНеДобавлен")));
                            return;
                        }
                        if (usersdata.VKUsersData[player.userID].Confirmed) {
                            PrintToChat(player, string.Format(GetMsg("ПрофильДобавленИПодтвержден")));
                            return;
                        }
                        SendConfCode(usersdata.VKUsersData[player.userID].VkID, $"Для подтверждения вашего ВК профиля введите в игровой чат команду /regvk confirm {usersdata.VKUsersData[player.userID].ConfirmCode}", player);
                    }
                }
                if (args[0] == "gift") FixedGifts(player);
                if (args[0] == "wipealerts") WAlert(player);
                if (args[0] != "add" && args[0] != "gift" && args[0] != "confirm") {
                    PrintToChat(player, string.Format(GetMsg("ДоступныеКоманды")));
                    if (config.GrGifts.VKGroupGifts) PrintToChat(player, string.Format(GetMsg("ОповещениеОПодарках"), config.GrGifts.VKGroupUrl));
                }
            }
            else PrintToChat(player, string.Format(GetMsg("ДоступныеКоманды")));
        }
        private void WAlert(BasePlayer player) {
            if (!usersdata.VKUsersData.ContainsKey(player.userID)) {
                PrintToChat(player, string.Format(GetMsg("ПрофильНеДобавлен")));
                return;
            }
            if (!usersdata.VKUsersData[player.userID].Confirmed) {
                PrintToChat(player, string.Format(GetMsg("ПрофильНеПодтвержден")));
                return;
            }
            if (usersdata.VKUsersData[player.userID].WipeMsg) {
                usersdata.VKUsersData[player.userID].WipeMsg = false;
                VKBData.WriteObject(usersdata);
                PrintToChat(player, string.Format(GetMsg("ПодпискаОтключена")));
            }
            else {
                usersdata.VKUsersData[player.userID].WipeMsg = true;
                VKBData.WriteObject(usersdata);
                PrintToChat(player, string.Format(GetMsg("ПодпискаВключена")));
            }
        }
        private void VKGift(BasePlayer player) {
            if (config.GrGifts.VKGroupGifts) {
                if (!usersdata.VKUsersData.ContainsKey(player.userID)) {
                    PrintToChat(player, string.Format(GetMsg("ПрофильНеДобавлен")));
                    return;
                }
                if (!usersdata.VKUsersData[player.userID].Confirmed) {
                    PrintToChat(player, string.Format(GetMsg("ПрофильНеПодтвержден")));
                    return;
                }
                if (usersdata.VKUsersData[player.userID].GiftRecived) {
                    PrintToChat(player, string.Format(GetMsg("НаградаУжеПолучена")));
                    return;
                }
                webrequest.Enqueue($"https://api.vk.com/method/groups.isMember?group_id={config.VKAPIT.GroupID}&user_id={usersdata.VKUsersData[player.userID].VkID}&" + apiver + $"&access_token={config.VKAPIT.VKToken}", null, (code, response) => {
                    if (response == null || !response.Contains("response")) return;
                    var json = JObject.Parse(response);
                    if (json == null) return;
                    string Result = (string)json["response"];
                    if (Result == null) return;
                    GetGift(code, Result, player);
                }
                , this);
            }
            else PrintToChat(player, string.Format(GetMsg("ФункцияОтключена")));
        }
        private void GetGift(int code, string Result, BasePlayer player) {
            string msg2 = null;
            msg2 = $"[TPBotbonus] Игрок {player.displayName} ({player.userID}) получил награду за подписку!";
            Effect Gift = new Effect("assets/prefabs/misc/xmas/presents/effects/unwrap.prefab", player, 0, new Vector3(), new Vector3());
            if (Result == "1") {
                if (config.GrGifts.VKGroupGiftCMD == "none") {
                    if ((24 - player.inventory.containerMain.itemList.Count) >= statdata.Gifts.Count) {
                        usersdata.VKUsersData[player.userID].GiftRecived = true;
                        VKBData.WriteObject(usersdata);
                        PrintToChat(player, string.Format(GetMsg("НаградаПолучена")));
                        if (config.GrGifts.GiftsBool) Server.Broadcast(string.Format(GetMsg("ПолучилНаграду"), player.displayName, config.GrGifts.VKGroupUrl));
                        foreach (GiftItem gf in statdata.Gifts) {
                            Item gift = ItemManager.CreateByName(gf.shortname, gf.count, gf.skinid);
                            gift.MoveToContainer(player.inventory.containerMain, -1, false);
                        }
                        EffectNetwork.Send(Gift, player.Connection);
                    }
                    else PrintToChat(player, string.Format(GetMsg("НетМеста")));
                }
                else {
                    string cmd = config.GrGifts.VKGroupGiftCMD.Replace("{steamid}", player.userID.ToString());
                    rust.RunServerCommand(cmd);
                    usersdata.VKUsersData[player.userID].GiftRecived = true;
                    VKBData.WriteObject(usersdata);
                    PrintToChat(player, string.Format(GetMsg("НаградаПолученаКоманда"), config.GrGifts.GiftCMDdesc));
                    if (config.GrGifts.GiftsBool) Server.Broadcast(string.Format(GetMsg("ПолучилНаграду"), player.displayName, config.GrGifts.VKGroupUrl));
                    EffectNetwork.Send(Gift, player.Connection);
                }
            }
            else PrintToChat(player, string.Format(GetMsg("НеВступилВГруппу"), config.GrGifts.VKGroupUrl));
        }
        private void GiftNotifier() {
            if (config.GrGifts.VKGroupGifts) {
                foreach (var pl in BasePlayer.activePlayerList) {
                    if (!usersdata.VKUsersData.ContainsKey(pl.userID)) PrintToChat(pl, string.Format(GetMsg("ОповещениеОПодарках"), config.GrGifts.VKGroupUrl));
                    else {
                        if (!usersdata.VKUsersData[pl.userID].GiftRecived) PrintToChat(pl, string.Format(GetMsg("ОповещениеОПодарках"), config.GrGifts.VKGroupUrl));
                    }
                }
            }
        }
        void WipeFunctions() {
            if (config.WipeStg.WPostMsgAdmin) {
                if (config.WipeStg.WPostB) {
                    if (config.WipeStg.WPostAttB) SendVkWall($"{config.WipeStg.WPostMsg}&attachments={config.WipeStg.WPostAtt}");
                    else SendVkWall($"{config.WipeStg.WPostMsg}");
                }
                if (config.GrGifts.GiftsWipe) {
                    if (usersdata.VKUsersData.Count != 0) {
                        for (int i = 0; i < usersdata.VKUsersData.Count; i++) {
                            usersdata.VKUsersData.ElementAt(i).Value.GiftRecived = false;
                        }
                        VKBData.WriteObject(usersdata);
                    }
                }
                if (config.WipeStg.WMsgPlayers) WipeAlertsSend();
                if (config.WipeStg.GrNameChange) {
                    string wipedate = WipeDate();
                    string text = config.WipeStg.GrName.Replace("{wipedate}", wipedate);
                    webrequest.Enqueue("https://api.vk.com/method/groups.edit?group_id=" + config.VKAPIT.GroupID + "&title=" + text + "&" + apiver + "&access_token=" + config.VKAPIT.VKTokenApp, null, (code, response) => {
                        var json = JObject.Parse(response);
                        string Result = (string)json["response"];
                        if (Result == "1") PrintWarning($"Новое имя группы - {text}");
                        else {
                            PrintWarning("Ошибка смены имени группы.Логи - /oxide/logs/TPBotbonus/");
                            Log("Errors", $"group title not changed.Error: {response}");
                        }
                    }
                    , this);
                }
            }
        }
        private void WipeAlertsSend() {
            List<string> UserList = new List<string>();
            string userlist = "";
            int usercount = 0;
            if (usersdata.VKUsersData.Count != 0) {
                for (int i = 0; i < usersdata.VKUsersData.Count; i++) {
                    if (config.WipeStg.WCMDIgnore || usersdata.VKUsersData.ElementAt(i).Value.WipeMsg) {
                        if (!ServerUsers.BanListString().Contains(usersdata.VKUsersData.ElementAt(i).Value.UserID.ToString())) {
                            if (usercount == 100) {
                                UserList.Add(userlist);
                                userlist = "";
                                usercount = 0;
                            }
                            if (usercount > 0) userlist = userlist + ", ";
                            userlist = userlist + usersdata.VKUsersData.ElementAt(i).Value.VkID;
                            usercount++;
                        }
                    }
                }
            }
            if (userlist == "" && UserList.Count == 0) {
                PrintWarning($"Список адресатов рассылки о вайпе пуст.");
                return;
            }
            if (UserList.Count > 0) {
                foreach (var list in UserList) SendVkMessage(list, config.WipeStg.WMsgText);
            }
            SendVkMessage(userlist, config.WipeStg.WMsgText);
        }
        private void SendConfCode(string reciverID, string msg, BasePlayer player) => webrequest.Enqueue("https://api.vk.com/method/messages.send?user_ids=" + reciverID + "&message=" + msg + "&" + apiver + "&random_id=" + RandomId() + "&access_token=" + config.VKAPIT.VKToken, null, (code, response) => GetCallback(code, response, "Код подтверждения", player), this);
        private void SendVkMessage(string reciverID, string msg) => webrequest.Enqueue("https://api.vk.com/method/messages.send?user_ids=" + reciverID + "&message=" + URLEncode(msg) + "&"+apiver + "&random_id=" + RandomId() + "&access_token=" + config.VKAPIT.VKToken, null, (code, response) => GetCallback(code, response, "Сообщение"), this);
        private void SendVkWall(string msg) => webrequest.Enqueue("https://api.vk.com/method/wall.post?owner_id=-" + config.VKAPIT.GroupID + "&message=" + URLEncode(msg) + "&from_group=1&"+apiver+"&access_token=" + config.VKAPIT.VKTokenApp, null, (code, response) => GetCallback(code, response, "Пост"), this);
        private void SendVkStatus(string msg) => webrequest.Enqueue("https://api.vk.com/method/status.set?group_id=" + config.VKAPIT.GroupID + "&text=" + URLEncode(msg) + "&" + apiver + "&access_token=" + config.VKAPIT.VKTokenApp, null, (code, response) => GetCallback(code, response, "Статус"), this);
        private void AddComentToBoard(string topicid, string msg) => webrequest.Enqueue("https://api.vk.com/method/board.createComment?group_id=" + config.VKAPIT.GroupID + "&topic_id=" + URLEncode(topicid) + "&from_group=1&message=" + msg + "&"+apiver+"&access_token=" + config.VKAPIT.VKTokenApp, null, (code, response) => GetCallback(code, response, "Комментарий в обсуждения"), this);
        private string RandomId() => random.Next(Int32.MinValue, Int32.MaxValue).ToString();
        string GetUserVKId(ulong userid) {
            if (!usersdata.VKUsersData.ContainsKey(userid) || !usersdata.VKUsersData[userid].Confirmed) return null;
            if (BannedUsers.Contains(userid.ToString())) return null;
            return usersdata.VKUsersData[userid].VkID;
        }
        string GetUserLastNotice(ulong userid) {
            if (!usersdata.VKUsersData.ContainsKey(userid) || !usersdata.VKUsersData[userid].Confirmed) return null;
            return usersdata.VKUsersData[userid].LastRaidNotice;
        }
        private void VKAPISaveLastNotice(ulong userid, string lasttime) {
            if (usersdata.VKUsersData.ContainsKey(userid)) {
                usersdata.VKUsersData[userid].LastRaidNotice = lasttime;
                VKBData.WriteObject(usersdata);
            }
        }
        private void VKAPIWall(string text, string attachments, bool atimg) {
            if (atimg) {
                SendVkWall($"{text}&attachments={attachments}");
                Log("tpbotbonusapi", $"Отправлен новый пост на стену: ({text}&attachments={attachments})");
            }
            else {
                SendVkWall($"{text}");
                Log("tpbotbonusapi", $"Отправлен новый пост на стену: ({text})");
            }
        }
        private void VKAPIMsg(string text, string attachments, string reciverID, bool atimg) {
            if (atimg) {
                SendVkMessage(reciverID, $"{text}&attachment={attachments}");
                Log("tpbotbonusapi", $"Отправлено новое сообщение пользователю {reciverID}: ({text}&attachments={attachments})");
            }
            else {
                SendVkMessage(reciverID, $"{text}");
                Log("tpbotbonusapi", $"Отправлено новое сообщение пользователю {reciverID}: ({text})");
            }
        }
        private void VKAPIStatus(string msg) {
            StatusCheck(msg);
            SendVkStatus(msg);
            Log("tpbotbonusapi", $"Отправлен новый статус: {msg}");
        }
        void Log(string filename, string text) => LogToFile(filename, $"[{DateTime.Now}] {text}", this);
        void GetCallback(int code, string response, string type, BasePlayer player = null) {
            if (!response.Contains("error")) {
                Puts($"{type} отправлен(о): {response}");
                if (type == "Код подтверждения" && player != null) StartCodeSendedGUI(player);
                PrintToChat(player, string.Format(GetMsg("СообщениеОтправлено")));
            }
            else {
                if (type == "Код подтверждения") {
                    if (response.Contains("Can't send messages for users without permission") && player != null) {
                        StartTPBotbonusHelpVKGUI(player);
                        PrintToChat(player, string.Format(GetMsg("СообщениеНеОтправлено")));
                    }
                    else Log("errorconfcode", $"Ошибка отправки кода подтверждения.Ответ сервера ВК: {response}");
                }
                else {
                    PrintWarning($"{type} не отправлен(о).Файлы лога: /oxide/logs/TPBotbonus/");
                    Log("Errors", $"{type} не отправлен(о).Ошибка: " + response);
                }
            }
        }
        private string EmojiCounters(string counter) {
            var chars = counter.ToCharArray();
            List<object> digits = new List<object>() {
                "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
            }
            ;
            string emoji = "";
            for (int ctr = 0; ctr < chars.Length; ctr++) {
                if (digits.Contains(chars[ctr].ToString())) {
                    string replace = chars[ctr] + "⃣";
                    emoji = emoji + replace;
                }
                else emoji = emoji + chars[ctr];
            }
            return emoji;
        }
        private string WipeDate() => SaveRestore.SaveCreatedTime.ToLocalTime().ToString("dd.MM");
        private string URLEncode(string input) {
            if (input.Contains("#")) input = input.Replace("#", "%23");
            if (input.Contains("$")) input = input.Replace("$", "%24");
            if (input.Contains("+")) input = input.Replace("+", "%2B");
            if (input.Contains("/")) input = input.Replace("/", "%2F");
            if (input.Contains(":")) input = input.Replace(":", "%3A");
            if (input.Contains(";")) input = input.Replace(";", "%3B");
            if (input.Contains("?")) input = input.Replace("?", "%3F");
            if (input.Contains("@")) input = input.Replace("@", "%40");
            return input;
        }
        private void StatusCheck(string msg) {
            if (msg.Length > 140) PrintWarning($"Текст статуса слишком длинный.Измените формат статуса чтобы текст отобразился полностью.Лимит символов в статусе - 140.Длина текста - {msg.Length.ToString()}");
        }
        private bool IsNPC(BasePlayer player) {
            if (player is NPCPlayer) return true;
            if (!(player.userID >= 76560000000000000L || player.userID <= 0L)) return true;
            return false;
        }
        private static string GetColor(string hex) {
            if (string.IsNullOrEmpty(hex)) hex = "#FFFFFFFF";
            var str = hex.Trim('#');
            if (str.Length == 6) str += "FF";
            if (str.Length != 8) {
                throw new Exception(hex);
                throw new InvalidOperationException("Cannot convert a wrong format.");
            }
            var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
            var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
            var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
            var a = byte.Parse(str.Substring(6, 2), NumberStyles.HexNumber);
            Color color = new Color32(r, g, b, a);
            return $"{color.r:F2} {color.g:F2} {color.b:F2} {color.a:F2}";
        }
        private void DeleteOldUsers(string days = null) {
            int ddays = 30;
            int t;
            if (days != null && Int32.TryParse(days, out t)) ddays = t;
            int deleted = 0;
            List<ulong> ForDelete = new List<ulong>();
            foreach (var user in usersdata.VKUsersData) {
                if (user.Value.LastSeen == null) ForDelete.Add(user.Key);
                else {
                    DateTime LNT;
                    if (DateTime.TryParseExact(user.Value.LastSeen, "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out LNT) && DateTime.Now.Subtract(LNT).Days >= ddays) ForDelete.Add(user.Key);
                }
            }
            foreach (var d in ForDelete) {
                usersdata.VKUsersData.Remove(d);
                deleted++;
            }
            if (deleted > 0) {
                PrintWarning($"Удалено устаревших профилей игроков из базы TPBotbonus: {deleted}");
                VKBData.WriteObject(usersdata);
            }
            else PrintWarning($"Нет профилей для удаления.");
        }
        private void CheckOxideUpdate() {
            string currentver = Manager.GetPlugin("RustCore").Version.ToString();
            webrequest.Enqueue("https://umod.org/games/rust.json", null, (code, response) => {
                if (code == 200 || response != null) {
                    var json = JObject.Parse(response);
                    if (json == null) return;
                    string latestver = (string)json["latest_release_version"];
                    if (latestver == null) return;
                    if (latestver != currentver && !OxideUpdateSended) {
                        OxideUpdateSended = true;
                    }
                }
            }
            , this);
            timer.Once(3600f, () => {
                CheckOxideUpdate();
            }
            );
        }
        private string BannedUsers = ServerUsers.BanListString();
        private CuiElement BPanel(string name, string color, string anMin, string anMax, string parent = "Hud", bool cursor = false, float fade = 1f) {
            var Element = new CuiElement() {
                Name = name, Parent = parent, Components = {
                    new CuiImageComponent {
                        Material = "assets/content/ui/uibackgroundblur.mat", FadeIn = fade, Color = color
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = anMin, AnchorMax = anMax
                    }
                }
            }
            ;
            if (cursor) Element.Components.Add(new CuiNeedsCursorComponent());
            return Element;
        }
        private CuiElement Panel(string name, string color, string anMin, string anMax, string parent = "Hud", bool cursor = false, float fade = 1f) {
            var Element = new CuiElement() {
                Name = name, Parent = parent, Components = {
                    new CuiImageComponent {
                        FadeIn = fade, Color = color
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = anMin, AnchorMax = anMax
                    }
                }
            }
            ;
            if (cursor) Element.Components.Add(new CuiNeedsCursorComponent());
            return Element;
        }
        private CuiElement Text(string parent, string color, string text, TextAnchor pos, int fsize, string anMin = "0 0", string anMax = "1 1", string fname = "robotocondensed-bold.ttf", float fade = 3f) {
            var Element = new CuiElement() {
                Parent = parent, Components = {
                    new CuiTextComponent() {
                        Color = color, Text = text, Align = pos, Font = fname, FontSize = fsize, FadeIn = fade
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = anMin, AnchorMax = anMax
                    }
                }
            }
            ;
            return Element;
        }
        private CuiElement Button(string name, string parent, string command, string color, string anMin, string anMax, float fade = 3f) {
            var Element = new CuiElement() {
                Name = name, Parent = parent, Components = {
                    new CuiButtonComponent {
                        Command = command, Color = color, FadeIn = fade
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = anMin, AnchorMax = anMax
                    }
                }
            }
            ;
            return Element;
        }
        private CuiElement Image(string parent, string url, string anMin, string anMax, float fade = 3f, string color = "1 1 1 1") {
            var Element = new CuiElement {
                Parent = parent, Components = {
                    new CuiRawImageComponent {
                        Color = color, Url = url, FadeIn = fade
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = anMin, AnchorMax = anMax
                    }
                }
            }
            ;
            return Element;
        }
        private CuiElement Input(string name, string parent, int fsize, string command, string anMin = "0 0", string anMax = "1 1", TextAnchor pos = TextAnchor.MiddleCenter, int chlimit = 300, bool psvd = false, float fade = 3f) {
            string text = "";
            var Element = new CuiElement {
                Name = name, Parent = parent, Components = {
                    new CuiInputFieldComponent {
                        Align = pos, CharsLimit = chlimit, FontSize = fsize, Command = command + text, IsPassword = psvd, Text = text
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = anMin, AnchorMax = anMax
                    }
                }
            }
            ;
            return Element;
        }
        private void UnloadAllGUI() {
            foreach (var player in BasePlayer.activePlayerList) {
                CuiHelper.DestroyUi(player, VkWait);
                CuiHelper.DestroyUi(player, VkHelp);
                CuiHelper.DestroyUi(player, VkConnect);
                CuiHelper.DestroyUi(player, MainLayer);
                CuiHelper.DestroyUi(player, VkReward);
                CuiHelper.DestroyUi(player, VkAlert);
            }
        }
        private string UserName(string name) {
            if (name.Length > 15) name = name.Remove(12) + "...";
            return name;
        }
        private void StartTPBotbonusAddVKGUI(BasePlayer player) {
            CuiHelper.DestroyUi(player, VkConnect);
            var container = new CuiElementContainer();
            container.Add(new CuiPanel() {
                CursorEnabled = true, RectTransform = {
                    AnchorMin = "0.35 0.38", AnchorMax = "0.65 0.62", OffsetMin = "0 0", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "0 0 0 0"
                }
            }
            , MainLayer, VkConnect);
            container.Add(new CuiElement {
                Parent = VkConnect, Components = {
                    new CuiRawImageComponent {
                        Png = (string)ImageLibrary.Call("GetImage", "alertvkback")
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"
                    }
                    ,
                }
            }
            );
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0.93 0.81", AnchorMax = "1 1"
                }
                , Button = {
                    Close = VkConnect, Color = "0 0 0 0"
                }
                , Text = {
                    Text = ""
                }
            }
            , VkConnect);
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = "0 0.86", AnchorMax = "0.93 1"
                }
                , Text = {
                    Text = "     Привязка страницы вк", FontSize = 12, Color = "1 1 1 0.6", Font = "robotocondensed-regular.ttf", Align = TextAnchor.MiddleLeft
                }
            }
            , VkConnect);
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = "0.1 0.57", AnchorMax = "0.9 0.9", OffsetMin = "0 0", OffsetMax = "1 1"
                }
                , Text = {
                    Text = "Укажите ссылку на страницу ВК\nв поле ниже и нажмите ENTER", Color = "1 1 1 0.6", FontSize = 14, Font = "robotocondensed-regular.ttf", Align = TextAnchor.MiddleCenter
                }
            }
            , VkConnect);
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = "0 0.53", AnchorMax = "1 0.63", OffsetMin = "0 0", OffsetMax = "1 1"
                }
                , Text = {
                    Text = "пример vk.com/nickname", Color = "1 1 1 0.3", FontSize = 10, Font = "robotocondensed-regular.ttf", Align = TextAnchor.MiddleCenter
                }
            }
            , VkConnect);
            container.Add(new CuiElement {
                Parent = VkConnect, Name = "Input", Components = {
                    new CuiImageComponent {
                        Color = "0 0 0 0"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.21 0.35", AnchorMax = "0.79 0.48", OffsetMin = "0 0", OffsetMax = "1 1"
                    }
                    , new CuiOutlineComponent {
                        Color = "1 1 1 0.4", UseGraphicAlpha = true
                    }
                }
            }
            );
            container.Add(new CuiElement {
                Parent = "Input", Components = {
                    new CuiInputFieldComponent {
                        Text = "", FontSize = 12, Command = "vk.menugui46570981 addvkgui.addvk", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", Color = "1 1 1 0.4", CharsLimit = 34
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "0 0", OffsetMax = "1 1"
                    }
                    , new CuiOutlineComponent {
                        Color = "0.4 0.4 0.4 0.8", Distance = "0.4 -0.4", UseGraphicAlpha = true
                    }
                }
            }
            );
            CuiHelper.AddUi(player, container);
        }
        public string GetImage(string shortname, ulong skin = 0) => (string)ImageLibrary?.Call("GetImage", s
// ... [Code preview truncated due to length. Full source in attached file] ...

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