Ejemplo n.º 1
0
        private async Task DiscordReactionAdded(DiscordClient sender, MessageReactionAddEventArgs e)
        {
            await Task.Delay(0);

            if (!e.User.IsCurrent && !e.User.IsBot)
            {
                if (MessageReactionListeners.TryGetValue(e.Guild.Id, out var guildMessageReactionListeners))
                {
                    if (guildMessageReactionListeners.TryGetValue(e.Message.Id, out var reactionListeners))
                    {
                        foreach (var listener in reactionListeners)
                        {
                            try {
                                await listener.OnReactionAdd(e);
                            } catch (Exception exc) {
                                await SendException(this, new SendExceptionEventArgs {
                                    Exception        = exc,
                                    Channel          = e.Channel,
                                    LogExceptionType = "GenericExceptionNotCaught"
                                });
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
 public void AddReactionListener(object sender, ulong guildId, ulong messageId, IReactionListener reactionListener)
 {
     if (!MessageReactionListeners.ContainsKey(guildId))
     {
         MessageReactionListeners.Add(guildId, new Dictionary <ulong, List <IReactionListener> >());
     }
     if (!MessageReactionListeners[guildId].ContainsKey(messageId))
     {
         MessageReactionListeners[guildId].Add(messageId, new List <IReactionListener> {
             reactionListener
         });
     }
     else
     {
         MessageReactionListeners[guildId][messageId].Add(reactionListener);
     }
 }
Ejemplo n.º 3
0
 public void RemoveReactionListener(object sender, ulong guildId, ulong messageId, IReactionListener reactionListener)
 {
     if (MessageReactionListeners.ContainsKey(guildId) && MessageReactionListeners[guildId].ContainsKey(messageId))
     {
         MessageReactionListeners[guildId][messageId].Remove(reactionListener);
         if (MessageReactionListeners[guildId][messageId].Count == 0)
         {
             MessageReactionListeners[guildId].Remove(messageId);
         }
         if (MessageReactionListeners[guildId].Count == 0)
         {
             MessageReactionListeners.Remove(guildId);
         }
     }
     if (reactionListener is IDisposable disposable)
     {
         disposable.Dispose();
     }
 }
Ejemplo n.º 4
0
        public async Task RemoveCommand(object o, ulong guildId, string classTerm)
        {
            var command = GuildCommands[guildId][classTerm];
            int messageListenerCount  = 0;
            int reactionListenerCount = 0;

            if (GuildMessageListeners.ContainsKey(guildId))
            {
                foreach (var messageListener in GuildMessageListeners[guildId].Where(ml => ml.Command == command).ToList())
                {
                    RemoveMessageListener(o, guildId, messageListener);
                    ++messageListenerCount;
                }
            }
            if (MessageReactionListeners.ContainsKey(guildId))
            {
                foreach (var messageId in MessageReactionListeners[guildId].Keys.ToList())
                {
                    foreach (var reactionListener in MessageReactionListeners[guildId][messageId].Where(rl => rl.Command == command).ToList())
                    {
                        RemoveReactionListener(o, guildId, messageId, reactionListener);
                        ++reactionListenerCount;
                    }
                }
            }
            GuildCommands[guildId].Remove(classTerm);
            if (command is IDisposable disposable)
            {
                disposable.Dispose();
            }
            Log(this, new LogEventArgs {
                Type    = LogType.Log,
                Message = $"Successfully unloaded module {command.GetType().FullName}, {messageListenerCount} message listener{(messageListenerCount == 1 ? string.Empty : "s")}, and {reactionListenerCount} reaction listener{(reactionListenerCount == 1 ? string.Empty : "s")}"
            });
            await Task.Delay(0);
        }