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

FREE VendingMachineLogs : 1.0.5 1.0.5

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Oxide.Core.Libraries;
namespace Oxide.Plugins {
    [Info("Vending Machine Logs", "Ryz0r", "1.0.5"), Description("Logs vending machine transactions to Discord.")]
    public class VendingMachineLogs : RustPlugin {
        private const string BypassPerm = "vendingmachinelogs.bypass";
#region Configuration
        private Configuration _config;
        private class Configuration {
            [JsonProperty(PropertyName = "Discord Webhook URL")]
            public string WebhookURL = "https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks";
            [JsonProperty(PropertyName = "Ignore Non-Player Vending Machines")]
            public bool IgnoreNonPlayer = false;
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                _config = Config.ReadObject<Configuration>();
                if (_config == null) throw new Exception();
                SaveConfig();
            }
            catch {
                PrintError("Your configuration file contains an error.Using default configuration values.");
                LoadDefaultConfig();
            }
        }
        protected override void LoadDefaultConfig() {
            PrintWarning("A new configuration file is being generated.");
            _config = new Configuration();
        }
        protected override void SaveConfig() {
            Config.WriteObject(_config);
        }
#endregion
#region Hooks
        private void Init() {
            permission.RegisterPermission(BypassPerm, this);
        }
        private void OnVendingTransaction(VendingMachine machine, BasePlayer player, int sellOrderId, int numberOfTransactions) {
            if (permission.UserHasPermission(player.UserIDString, BypassPerm)) return;
            if (_config.IgnoreNonPlayer && machine.OwnerID == 0) return;
            var sellOrder = machine.sellOrders.sellOrders[sellOrderId];
            var currency = sellOrder.currencyID;
            var currencyAmount = sellOrder.currencyAmountPerItem * numberOfTransactions;
            var currencyName = ItemManager.FindItemDefinition(currency).displayName.english;
            var item = sellOrder.itemToSellID;
            var itemAmount = sellOrder.itemToSellAmount * numberOfTransactions;
            var itemName = ItemManager.FindItemDefinition(item).displayName.english;
            SendDiscordMessage(player.displayName, player.UserIDString, itemName, item, currencyName, currency, machine.shopName, itemAmount, currencyAmount, machine.OwnerID.ToString());
        }
#endregion
#region Functions
        private void SendDiscordMessage(string customerName, string customerID, string soldItem, int soldItemID, string currencyItem, int currencyItemID, string shopName, int soldQuantity, int currencyQuantity, string machineOwner) {
            var embed = new Embed().AddField("Customer:", customerName + " (" + customerID + ")", true).AddField("Shop Name:", shopName, true).AddField("Shop Owner ID:", machineOwner, true).AddField("Sold Item:", soldItem, true).AddField("Sold Item ID:", soldItemID.ToString(), true).AddField("Amount Sold:", soldQuantity.ToString(), true).AddField("Currency Item:", currencyItem, true).AddField("Currency Item ID:", currencyItemID.ToString(), true).AddField("Amount Spent:", currencyQuantity.ToString(), true).SetColor("#00FFFF");
            var headers = new Dictionary<string, string>() {
                {
                    "Content-Type", "application/json"
                }
            }
            ;
            const float timeout = 500f;
            webrequest.Enqueue(_config.WebhookURL, new DiscordMessage("", embed).ToJson(), GetCallback, this, RequestMethod.POST, headers, timeout);
        }
        private void GetCallback(int code, string response) {
            if (response != null && code == 204) return;
            Puts($"Error: {code} - Couldn't get an answer from server.");
        }
#endregion
#region Discord Stuff
        private class DiscordMessage {
            public DiscordMessage(string content, params Embed[] embeds) {
                Content = content;
                Embeds = embeds.ToList();
            }
            [JsonProperty("content")]
            public string Content {
                get;
                set;
            }
            [JsonProperty("embeds")]
            public List<Embed> Embeds {
                get;
                set;
            }
            public string ToJson() => JsonConvert.SerializeObject(this);
        }
        private class Embed {
            [JsonProperty("fields")]
            public List<Field> Fields {
                get;
                set;
            }
            = new List<Field>();
            [JsonProperty("color")]
            public int Color {
                get;
                set;
            }
            public Embed AddField(string name, string value, bool inline) {
                Fields.Add(new Field(name, Regex.Replace(value, "<.*?>", string.Empty), inline));
                return this;
            }
            public Embed SetColor(string color) {
                var replace = color.Replace("#", "");
                var decValue = int.Parse(replace, System.Globalization.NumberStyles.HexNumber);
                Color = decValue;
                return this;
            }
        }
        private class Field {
            public Field(string name, string value, bool inline) {
                Name = name;
                Value = value;
                Inline = inline;
            }
            [JsonProperty("name")]
            public string Name {
                get;
                set;
            }
            [JsonProperty("value")]
            public string Value {
                get;
                set;
            }
            [JsonProperty("inline")]
            public bool Inline {
                get;
                set;
            }
        }
#endregion
    }
}

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