/// <summary>
        /// Delete emote from reaction if it exists
        /// Do not save emote if it does not belong to guild
        /// </summary>
        /// <param name="todoReaction"></param>
        /// <returns></returns>
        public async Task <bool> RemoveEmoteReaction(ReactionCommandPayload todoReaction)
        {
            try
            {
                var emoji    = todoReaction.Emoji;
                var guild    = todoReaction.Guild;
                var message  = todoReaction.Message;
                var username = todoReaction.User.Username;
                var userId   = todoReaction.User.Id;

                _logger.LogDebug($"Remove reaction: {username} -> {emoji.Name}");

                if (!IsValidEmote(emoji, guild))
                {
                    _logger.LogDebug($"{emoji.Name} is not valid");
                    return(true);
                }

                var emoteEntity = _emoteBuilder.BuildFromUserReaction(message, emoji, userId, guild.Id);

                _logger.LogDebug($"Removing reaction emote {emoteEntity}");

                await _kattbotRepo.RemoveEmoteEntity(emoteEntity);

                return(true);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "RemoveEmoteReaction");
                return(false);
            }
        }
        private async Task OnMessageReactionAdded(DiscordClient client, MessageReactionAddEventArgs eventArgs)
        {
            try
            {
                var channel = eventArgs.Channel;
                var emoji   = eventArgs.Emoji;
                var message = eventArgs.Message;
                var guild   = eventArgs.Guild;
                var user    = eventArgs.User;

                if (IsPrivateMessageChannel(channel))
                {
                    return;
                }

                if (!IsRelevantReaction(user))
                {
                    return;
                }

                var todoReaction = new ReactionCommandPayload(message, emoji, user, guild);

                var command = new CreateReactionCommand(todoReaction);

                _emoteCommandQueue.Enqueue(command);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, nameof(OnMessageReactionAdded));

                var eventContextError = new EventErrorContext()
                {
                    EventName = nameof(OnMessageReactionAdded),
                    User      = eventArgs.User,
                    Channel   = eventArgs.Channel,
                    Guild     = eventArgs.Guild
                };

                await _discordErrorLogger.LogDiscordError(eventContextError, ex.ToString());
            }
        }
Exemple #3
0
 public async Task <bool> DeleteReaction(ReactionCommandPayload todoReaction)
 {
     return(await _emoteMessageService.RemoveEmoteReaction(todoReaction));
 }
 public DeleteReactionCommand(ReactionCommandPayload todoReaction)
 {
     _todoReaction = todoReaction;
 }
Exemple #5
0
 public CreateReactionCommand(ReactionCommandPayload todoReaction)
 {
     _todoReaction = todoReaction;
 }