/// <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"); }
/// <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); }
/// <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); }