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

FREE DiscordAuthLogger : 1.0.6 1.0.6

Нет прав для скачивания
C#:
using Newtonsoft.Json;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Ext.Discord.Clients;
using Oxide.Ext.Discord.Entities;
using System.Collections.Generic;
using System;
using Oxide.Ext.Discord.Constants;
using System.Linq;
using Oxide.Core.Libraries;
using Oxide.Ext.Discord.Connections;
using Oxide.Ext.Discord.Interfaces;
using Oxide.Ext.Discord.Libraries;

namespace Oxide.Plugins
{
    [Info("Discord Auth Logger", "YaMang -w-", "1.0.6")]
    [Description("Discord Auth, Core Linked, UnLink Message Alarm")]
    internal class DiscordAuthLogger : RustPlugin, IDiscordPlugin
    {
        #region Class Fields
        public DiscordClient Client { get; set; }

        private DiscordGuild _guild;
        private readonly BotConnection _discordSettings = new BotConnection();
        #endregion


        [HookMethod(DiscordExtHooks.OnDiscordGatewayReady)]
        private void OnDiscordGatewayReady(GatewayReadyEvent ready)
        {
            Puts($"Bot connected to:{ready.Guilds.FirstOrDefault().Value.Name}");

            DiscordGuild guild = null;
            if (ready.Guilds.Count == 1)
            {
                guild = ready.Guilds.Values.FirstOrDefault();
            }

            if (guild == null)
            {
                guild = ready.Guilds[_config.guildId];
            }

            if (guild == null)
            {
                PrintError("Failed to find a matching guild for the Discord Server Id. " +
                           "Please make sure your guild Id is correct and the bot is in the discord server.");
                return;
            }

            _guild = guild;
        }
        #region Hook
        private void OnServerInitialized()
        {
            if (string.IsNullOrEmpty(_config.token))
            {
                PrintWarning("Need a discord bot token\nNot loaded");
                return;
            }
            _discordSettings.ApiToken = _config.token;
            _discordSettings.Intents = GatewayIntents.GuildMessages | GatewayIntents.Guilds | GatewayIntents.GuildMembers;
            _discordSettings.LogLevel = Ext.Discord.Logging.DiscordLogLevel.Info;
            Client.Connect(_discordSettings);
        }
        void OnDiscordPlayerLinked(IPlayer player, DiscordUser discord)
        {
            webrequest.Enqueue(SteamApi(player.Id), null, (code, response) =>
            {
                var summaries = Deserialise<Summaries>(response);

                if (summaries == null)
                {
                    PrintWarning($"(Connect Devloper)Api Response Can't Deserialise:\n{response}");
                    return;
                }

                DiscordEmbed embed = new DiscordEmbed();

                embed.Author = new EmbedAuthor(player.Name, $"https://steamcommunity.com/profiles/{player.Id}/", GetAvatarFull(summaries));
                embed.Description = Format(_config.AuthMsg.descriptionmsg, player, discord);
                List<EmbedField> fields = new List<EmbedField>();
                fields.Clear();
                foreach (var field in _config.AuthMsg.EmbedsFields)
                {
                    var value = Format(field.Value, player, discord);

                    fields.Add(new EmbedField()
                    {
                        Name = field.Name,
                        Value = value,
                        Inline = field.Inline
                    });
                }

                embed.Fields = fields;
                if (!string.IsNullOrEmpty(_config.AuthMsg.footermsg))
                    embed.Footer = new EmbedFooter()
                    {
                        Text = _config.AuthMsg.footermsg,
                        IconUrl = _config.AuthMsg.footericon
                    };

                _guild.Channels[_config.AuthMsg.channelId].CreateMessage(Client, embed);


            }, this, RequestMethod.GET);

        }

        void OnDiscordPlayerUnlinked(IPlayer player, DiscordUser discord)
        {
            webrequest.Enqueue(SteamApi(player.Id), null, (code, response) =>
            {
                var summaries = Deserialise<Summaries>(response);

                if (summaries == null)
                {
                    PrintWarning($"(Connect Devloper)Api Response Can't Deserialise:\n{response}");
                    return;
                }

                DiscordEmbed embed = new DiscordEmbed();

                embed.Author = new EmbedAuthor(player.Name, $"https://steamcommunity.com/profiles/{player.Id}/", GetAvatarFull(summaries));
                embed.Description = Format(_config.DeAuthMsg.descriptionmsg, player, discord);
                List<EmbedField> fields = new List<EmbedField>();
                fields.Clear();
                foreach (var field in _config.DeAuthMsg.EmbedsFields)
                {
                    var value = Format(field.Value, player, discord);

                    fields.Add(new EmbedField()
                    {
                        Name = field.Name,
                        Value = value,
                        Inline = field.Inline
                    });
                }

                embed.Fields = fields;
                if (!string.IsNullOrEmpty(_config.DeAuthMsg.footermsg))
                    embed.Footer = new EmbedFooter()
                    {
                        Text = _config.DeAuthMsg.footermsg,
                        IconUrl = _config.DeAuthMsg.footericon
                    };

                _guild.Channels[_config.DeAuthMsg.channelId].CreateMessage(Client, embed);


            }, this, RequestMethod.GET);
        }

        #endregion

        #region Helper

        private string SteamApi(string id)
        {
            return $"http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key={_config.steamApiKey}&steamids={id}";
        }

        private string SteamGetAvatarUrl(IPlayer player)
        {
            string url = "";

            webrequest.Enqueue(string.Format(SteamApi(player.Id)), null, (code, response) =>
            {
                if (code != 200)
                {
                    PrintWarning($"Steam Api Can't {response}");
                    return;
                }

                var summaries = Deserialise<Summaries>(response);
                url = GetAvatarFull(summaries);
            }, this, RequestMethod.GET);

            return url;
        }
        private string Format(string msg, IPlayer player, DiscordUser discord)
        {
            msg = msg
                .Replace("{steamId}", player.Id)
                .Replace("{steamName}", player.Name)
                .Replace("{steamGetAvatarUrl}", SteamGetAvatarUrl(player))
                .Replace("{discordId}", discord.Id)
                .Replace("{discordName}", discord.DisplayName.Replace("#0", ""))
                .Replace("{discordGetAvatarUrl}", discord.GetAvatarUrl)
                .Replace("{datetime}", DateTime.Now.ToString(_config.TimeFormat));

            return msg;
        }
        #endregion
        #region Config
        private ConfigData _config;
        private class ConfigData
        {
            [JsonProperty(PropertyName = "Discord Token (Auth, Core Same Token recommended)")] public string token { get; set; }
            [JsonProperty(PropertyName = "Steam API Key (https://steamcommunity.com/dev/apikey)")] public string steamApiKey { get; set; }
            [JsonProperty(PropertyName = "Auth (Linked) Message Embed")] public Embed AuthMsg { get; set; }
            [JsonProperty(PropertyName = "DeAuth (UnLinked) Message Embed")] public Embed DeAuthMsg { get; set; }
            [JsonProperty(PropertyName = "Time Formatting")] public string TimeFormat { get; set; }
            [JsonProperty(PropertyName = "Guild Id")] public Snowflake guildId { get; set; }


            public Oxide.Core.VersionNumber Version { get; set; }
        }

        public class Embed
        {
            [JsonProperty(PropertyName = "Channel Logger Id")] public Snowflake channelId { get; set; }
            [JsonProperty(PropertyName = "Description")] public string descriptionmsg { get; set; }
            [JsonProperty(PropertyName = "Footer Message")] public string footermsg { get; set; }
            [JsonProperty(PropertyName = "Footer Icon")] public string footericon { get; set; }
            [JsonProperty(PropertyName = "Embed Field")] public List<EmbedField> EmbedsFields { get; set; }

        }



        protected override void LoadConfig()
        {
            base.LoadConfig();
            _config = Config.ReadObject<ConfigData>();

            if (_config.Version < Version)
                UpdateConfigValues();

            Config.WriteObject(_config, true);
        }

        protected override void LoadDefaultConfig() => _config = GetBaseConfig();

        private ConfigData GetBaseConfig()
        {
            return new ConfigData
            {
                token = "",
                steamApiKey = "",
                TimeFormat = "MM/dd/yyyy hh:mm:ss tt",
                guildId = new Snowflake(),
                AuthMsg = new Embed
                {
                    channelId = new Snowflake(),
                    descriptionmsg = "Linked",
                    footermsg = "Linked",
                    footericon = "",
                    EmbedsFields = new List<EmbedField>()
                    {
                        new EmbedField()
                        {
                            Name = "Steam",
                            Value = "[{steamName}](https://steamcommunity.com/profiles/{steamId}) ({steamId})"
                        },
                        new EmbedField()
                        {
                            Name = "Discord",
                            Value = "<@{discordId}> ({discordName} | {discordId})"
                        }
                    },
                },
                DeAuthMsg = new Embed
                {
                    channelId = new Snowflake(),
                    descriptionmsg = "Unlinked",
                    footermsg = "Unlinked",
                    footericon = "",
                    EmbedsFields = new List<EmbedField>()
                    {
                        new EmbedField()
                        {
                            Name = "Steam",
                            Value = "[{steamName}](https://steamcommunity.com/profiles/{steamId}) ({steamId})"
                        },
                        new EmbedField()
                        {
                            Name = "Discord",
                            Value = "<@{discordId}> ({discordName} | {discordId})"
                        }
                    },
                },
                Version = Version
            };
        }

        protected override void SaveConfig() => Config.WriteObject(_config, true);

        private void UpdateConfigValues()
        {
            PrintWarning("Config update detected! Updating config values...");

            _config.Version = Version;
            PrintWarning("Config update completed!");
        }

        #endregion

        #region SteamAPI

        private T Deserialise<T>(string json) => JsonConvert.DeserializeObject<T>(json);

        private string GetAvatarFull(Summaries s) => s.Response.Players[0].AvatarFull;
        private class Summaries
        {
            [JsonProperty("response")]
            public Content Response;

            public class Content
            {
                [JsonProperty("players")]
                public Player[] Players;

                public class Player
                {
                    [JsonProperty("steamid")]
                    public string SteamId;

                    [JsonProperty("communityvisibilitystate")]
                    public int CommunityVisibilityState;

                    [JsonProperty("profilestate")]
                    public int ProfileState;

                    [JsonProperty("personaname")]
                    public string PersonaName;

                    [JsonProperty("lastlogoff")]
                    public double LastLogOff;

                    [JsonProperty("commentpermission")]
                    public int CommentPermission;

                    [JsonProperty("profileurl")]
                    public string ProfileUrl;

                    [JsonProperty("avatar")]
                    public string Avatar;

                    [JsonProperty("avatarmedium")]
                    public string AvatarMedium;

                    [JsonProperty("avatarfull")]
                    public string AvatarFull;

                    [JsonProperty("personastate")]
                    public int PersonaState;

                    [JsonProperty("realname")]
                    public string RealName;

                    [JsonProperty("primaryclanid")]
                    public string PrimaryClanId;

                    [JsonProperty("timecreated")]
                    public double TimeCreated;

                    [JsonProperty("personastateflags")]
                    public int PersonaStateFlags;

                    [JsonProperty("loccountrycode")]
                    public string LocCountryCode;

                    [JsonProperty("locstatecode")]
                    public string LocStateCode;
                }
            }
        }
        #endregion
    }
}

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