예제 #1
0
        /// <summary>
        /// Adds a link plugin to be the plugin used with the Discord Link library
        /// </summary>
        /// <param name="plugin"></param>
        public void AddLinkPlugin(IDiscordLinkPlugin plugin)
        {
            if (plugin == null)
            {
                throw new ArgumentNullException(nameof(plugin));
            }

            if (!_linkPlugins.Contains(plugin))
            {
                _linkPlugins.Add(plugin);
            }

            IDictionary <string, Snowflake> data = plugin.GetSteamToDiscordIds();

            if (data == null)
            {
                _logger.Error($"{plugin.Title} returned null when {nameof(plugin.GetSteamToDiscordIds)} was called");
                return;
            }

            _pluginLinks[plugin.Title] = data;

            foreach (KeyValuePair <string, Snowflake> pair in data)
            {
                _steamIdToDiscordId[pair.Key]   = pair.Value;
                _discordIdToSteamId[pair.Value] = pair.Key;
                _steamIds.Add(pair.Key);
                _discordIds.Add(pair.Value);
            }

            _logger.Debug($"{plugin.Title} registered as a DiscordLink plugin");
        }
예제 #2
0
        /// <summary>
        /// Called by a link plugin when an unlink occured
        /// </summary>
        /// <param name="plugin">Plugin that is unlinking</param>
        /// <param name="player">Player being unlinked</param>
        /// <param name="discord">DiscordUser being unlinked</param>
        public void OnUnlinked(Plugin plugin, IPlayer player, DiscordUser discord)
        {
            if (player == null)
            {
                throw new ArgumentNullException(nameof(player));
            }
            if (discord == null)
            {
                throw new ArgumentNullException(nameof(discord));
            }

            IDiscordLinkPlugin link = plugin as IDiscordLinkPlugin;

            if (link == null)
            {
                _logger.Error($"{plugin.Name} tried to unlink but is not registered as a link plugin");
            }

            if (!_linkPlugins.Contains(link))
            {
                _logger.Error($"{plugin.Name} has not been added as a link plugin and cannot unlink");
                return;
            }

            _pluginLinks[plugin.Title].Remove(player.Id);

            _discordIdToSteamId.Remove(discord.Id);
            _steamIdToDiscordId.Remove(player.Id);
            _steamIds.Remove(player.Id);
            _discordIds.Remove(discord.Id);
            Interface.Oxide.CallHook(DiscordExtHooks.OnDiscordPlayerUnlinked, player, discord);
        }
예제 #3
0
        /// <summary>
        /// Removes a link plugin from the Discord Link library
        /// </summary>
        /// <param name="plugin"></param>
        public void RemoveLinkPlugin(IDiscordLinkPlugin plugin)
        {
            if (plugin == null)
            {
                throw new ArgumentNullException(nameof(plugin));
            }

            IDictionary <string, Snowflake> pluginData = _pluginLinks[plugin.Title];

            if (pluginData != null)
            {
                foreach (KeyValuePair <string, Snowflake> linkData in pluginData)
                {
                    _steamIdToDiscordId.Remove(linkData.Key);
                    _discordIdToSteamId.Remove(linkData.Value);
                    _steamIds.Remove(linkData.Key);
                    _discordIds.Remove(linkData.Value);
                }
            }

            _linkPlugins.Remove(plugin);
        }