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

FREE SteamGroups : 0.2.0 0.2.0

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

namespace Oxide.Plugins
{
    [Info("SteamGroups", "Wulf/lukespragg", "0.2.0", ResourceId = 2085)]
    [Description("Automatically adds members of Steam group(s) to permissions group")]

    class SteamGroups : CovalencePlugin
    {
        // Do NOT edit this file, instead edit SteamGroups.json in oxide/config

        #region Initialization

        int updateInterval;
        string permGroup;
        List<object> steamGroups;

        protected override void LoadDefaultConfig()
        {
            Config["PermissionsGroup"] = permGroup = GetConfig("PermissionsGroup", "steam");
            Config["SteamGroups"] = steamGroups = GetConfig("SteamGroups", new List<object> { "CitizenSO", "OxideMod" });
            Config["UpdateInterval"] = updateInterval = GetConfig("UpdateInterval", 300);
            SaveConfig();
        }

        void OnServerInitialized()
        {
            LoadDefaultConfig();
            UpdateMembers();
            timer.Every(updateInterval, UpdateMembers);
        }

        #endregion

        #region Steam Members

        static readonly Regex IdPattern = new Regex(@"<steamID64>(?<steamid>.+)</steamID64>");
        HashSet<string> members = new HashSet<string>();

        void UpdateMembers()
        {
            if (string.IsNullOrEmpty(permGroup) || steamGroups.Count < 1)
            {
                PrintWarning("Plugin is not configured, please check the config");
                return;
            }

            foreach (var group in steamGroups)
            {
                var url = "http://steamcommunity.com/{0}/{1}/memberslistxml/?xml=1";
                ulong result;
                url = string.Format(url, ulong.TryParse(group.ToString(), out result) ? "gid" : "groups", group);

                // Get Steam group members
                webrequest.EnqueueGet(url, (code, response) =>
                {
                    if (code != 200 || response == null)
                    {
                        Puts($"Checking for Steam group members failed! ({code})");
                        Puts("Retrying in 5 seconds...");
                        timer.Once(5f, UpdateMembers);
                        return;
                    }

                    var newMembers = 0;
                    foreach (Match match in IdPattern.Matches(response))
                    {
                        var id = match.Groups["steamid"].Value;

                        // Create group if it doesn't already exist
                        if (!permission.GroupExists(permGroup)) permission.CreateGroup(permGroup, permGroup, 0);

                        // Add Steam ID to permissions group if needed
                        if (!permission.UserHasGroup(id, permGroup))
                        {
                            permission.AddUserGroup(id, permGroup);
                            //Puts($"{id} from '{group}' added to '{permGroup}' group");
                        }

                        // Check if list contains Steam ID, else add
                        if (members.Contains(id)) continue;
                        members.Add(id);
                        newMembers++;
                    }
                    //Puts($"{IdPattern.Matches(response).Count} members in group '{group}'");
                    if (newMembers > 0) Puts($"{newMembers} new member{(newMembers == 1 ? "" : "s")} from group '{group}'");

                    // Remove user if no longer in Steam group
                    foreach (var user in permission.GetUsersInGroup(permGroup))
                    {
                        var id = Regex.Replace(user, "[^0-9]", "");
                        if (!members.Contains(id)) permission.RemoveUserGroup(id, permGroup);
                    }
                }, this);
            }
        }

        [Command("steammembers")]
        void UpdateCommand(IPlayer player, string command, string[] args) => UpdateMembers();

        #endregion

        #region API Calls

        bool InSteamGroup(string id) => members.Contains(id);

        #endregion

        #region Helpers

        T GetConfig<T>(string name, T value) => Config[name] == null ? value : (T)Convert.ChangeType(Config[name], typeof(T));

        #endregion
    }
}

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