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

FREE ClansWebhook : 1.0.5 1.0.5

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using System;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;

namespace Oxide.Plugins
{
    [Info("ClansWebhook", "locks", "1.0.5")]
    [Description("Sends clan events to a Discord webhook and provides an admin command to post all clans")]

    class ClansWebhook : CovalencePlugin
    {
        #region Configuration

        private Configuration config;

        public class Configuration
        {
            [JsonProperty("Webhook URL")]
            public string WebhookUrl { get; set; }
        }

        protected override void LoadDefaultConfig()
        {
            Config.WriteObject(new Configuration
            {
                WebhookUrl = "YOUR_DISCORD_WEBHOOK_URL_HERE"
            }, true);
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();
            config = Config.ReadObject<Configuration>();
        }

        #endregion

        #region Hooks

        private void OnClanCreate(string clanTag)
        {
            var clanInfo = GetClanInfo(clanTag);
            if (clanInfo != null)
            {
                SendWebhook(clanInfo);
            }
        }

        private void OnClanUpdate(string clanTag)
        {
            var clanInfo = GetClanInfo(clanTag);
            if (clanInfo != null)
            {
                SendWebhook(clanInfo);
            }
        }

        private void OnClanDestroy(string clanTag)
        {
            var message = new
            {
                embeds = new[]
                {
                    new
                    {
                        author = new { name = $"Clan Disbanded: {clanTag}" },
                        description = $"Time: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}",
                        footer = new { text = "developed by herbs.acab" }
                    }
                }
            };

            SendWebhook(JsonConvert.SerializeObject(message));
        }

        private void OnClanChat(IPlayer player, string message)
        {
            var webhookMessage = new
            {
                embeds = new[]
                {
                    new
                    {
                        author = new { name = $"Clan Chat from {player.Name}" },
                        description = $"{message}\n\nTime: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}",
                        footer = new { text = "developed by herbs.acab" }
                    }
                }
            };

            SendWebhook(JsonConvert.SerializeObject(webhookMessage));
        }

        private void OnClanMemberJoined(string userID, List<string> memberUserIDs)
        {
            var player = covalence.Players.FindPlayerById(userID);
            if (player == null)
            {
                Puts($"Player with ID {userID} not found in OnClanMemberJoined hook");
                return;
            }

            var message = new
            {
                embeds = new[]
                {
                    new
                    {
                        author = new { name = "Player Joined Clan" },
                        description = $"{player.Name} ({player.Id})\nTime: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}",
                        footer = new { text = "developed by herbs.acab" }
                    }
                }
            };

            SendWebhook(JsonConvert.SerializeObject(message));
        }

        private void OnClanMemberJoined(string userID, string clanTag)
        {
            var player = covalence.Players.FindPlayerById(userID);
            if (player == null)
            {
                Puts($"Player with ID {userID} not found in OnClanMemberJoined hook");
                return;
            }

            var message = new
            {
                embeds = new[]
                {
                    new
                    {
                        author = new { name = $"Player Joined Clan {clanTag}" },
                        description = $"{player.Name} ({player.Id})\nTime: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}",
                        footer = new { text = "developed by herbs.acab" }
                    }
                }
            };

            SendWebhook(JsonConvert.SerializeObject(message));
        }

        private void OnClanMemberGone(string userID, List<string> memberUserIDs)
        {
            var player = covalence.Players.FindPlayerById(userID);
            if (player == null)
            {
                Puts($"Player with ID {userID} not found in OnClanMemberGone hook");
                return;
            }

            var message = new
            {
                embeds = new[]
                {
                    new
                    {
                        author = new { name = "Player Left Clan" },
                        description = $"{player.Name} ({player.Id})\nTime: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}",
                        footer = new { text = "developed by herbs.acab" }
                    }
                }
            };

            SendWebhook(JsonConvert.SerializeObject(message));
        }

        private void OnClanMemberGone(string userID, string clanTag)
        {
            var player = covalence.Players.FindPlayerById(userID);
            if (player == null)
            {
                Puts($"Player with ID {userID} not found in OnClanMemberGone hook");
                return;
            }

            var message = new
            {
                embeds = new[]
                {
                    new
                    {
                        author = new { name = $"Player Left Clan {clanTag}" },
                        description = $"{player.Name} ({player.Id})\nTime: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}",
                        footer = new { text = "developed by herbs.acab" }
                    }
                }
            };

            SendWebhook(JsonConvert.SerializeObject(message));
        }

        private void OnClanDisbanded(List<string> memberUserIDs)
        {
            var memberList = memberUserIDs != null ? string.Join(", ", memberUserIDs) : "No members found";
            var message = new
            {
                embeds = new[]
                {
                    new
                    {
                        author = new { name = "Clan Disbanded" },
                        description = $"Members: {memberList}\nTime: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}",
                        footer = new { text = "developed by herbs.acab" }
                    }
                }
            };

            SendWebhook(JsonConvert.SerializeObject(message));
        }

        private void OnClanDisbanded(string clanTag, List<string> memberUserIDs)
        {
            var memberList = memberUserIDs != null ? string.Join(", ", memberUserIDs) : "No members found";
            var message = new
            {
                embeds = new[]
                {
                    new
                    {
                        author = new { name = $"Clan {clanTag} Disbanded" },
                        description = $"Members: {memberList}\nTime: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}",
                        footer = new { text = "developed by herbs.acab" }
                    }
                }
            };

            SendWebhook(JsonConvert.SerializeObject(message));
        }

        #endregion

        #region Webhook

        private void SendWebhook(string message)
        {
            if (string.IsNullOrEmpty(config.WebhookUrl))
            {
                Puts("Discord webhook URL is not set in the configuration.");
                return;
            }

            webrequest.Enqueue(config.WebhookUrl, message, (code, response) =>
            {
                if (code != 204)
                {
                    Puts($"Failed to send webhook: {code} - {response}");
                }
            }, this, Core.Libraries.RequestMethod.POST, new Dictionary<string, string>
            {
                ["Content-Type"] = "application/json"
            });
        }

        #endregion

        #region Commands

        [Command("postclans")]
        private void PostClansCommand(IPlayer player, string command, string[] args)
        {
            if (!player.IsAdmin)
            {
                player.Reply("You are not authorized to use this command.");
                return;
            }

            var clansPlugin = plugins.Find("Clans") as Plugin;
            if (clansPlugin == null)
            {
                player.Reply("Clans plugin not found.");
                return;
            }

            var clans = GetAllClans(clansPlugin);
            foreach (var clan in clans)
            {
                var clanInfo = GetClanInfo(clansPlugin, clan);
                SendWebhook(clanInfo);
            }
            player.Reply("Posted all clans to the webhook.");
        }

        #endregion

        #region Helpers

        private List<string> GetAllClans(Plugin clansPlugin)
        {
            var result = clansPlugin.Call("GetAllClans") as JArray;
            return result?.ToObject<List<string>>() ?? new List<string>();
        }

        private string GetClanInfo(Plugin clansPlugin, string clanTag)
        {
            var clan = clansPlugin.Call("GetClan", clanTag) as JObject;
            if (clan == null) return $"Clan {clanTag} not found.";

            var clanInfo = new
            {
                embeds = new[]
                {
                    new
                    {
                        author = new { name = $"Clan: {clan["tag"]}" },
                        description = $"Members:\n{GetClanMembers(clan)}\nTime: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}",
                        footer = new { text = "developed by herbs.acab" }
                    }
                }
            };

            return JsonConvert.SerializeObject(clanInfo);
        }

        private string GetClanMembers(JObject clan)
        {
            var members = clan["members"] as JArray;
            var owner = clan["owner"]?.ToString();
            var memberList = new List<string>();

            if (owner != null)
            {
                var ownerPlayer = covalence.Players.FindPlayerById(owner);
                if (ownerPlayer != null)
                {
                    memberList.Add($"{ownerPlayer.Name} (Owner) ({ownerPlayer.Id})");
                }
            }

            if (members != null)
            {
                foreach (var memberId in members)
                {
                    var player = covalence.Players.FindPlayerById(memberId.ToString());
                    if (player != null && player.Id != owner)
                    {
                        memberList.Add($"{player.Name} ({player.Id})");
                    }
                }
            }

            return string.Join("\n", memberList);
        }

        private string GetClanInfo(string clanTag)
        {
            var clansPlugin = plugins.Find("Clans") as Plugin;
            if (clansPlugin == null)
            {
                Puts("Clans plugin not found.");
                return null;
            }

            return GetClanInfo(clansPlugin, clanTag);
        }

        #endregion
    }
}

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