private async Task OnMessageUpdated(DiscordClient client, MessageUpdateEventArgs eventArgs)
        {
            try
            {
                var message = eventArgs.Message;
                var channel = eventArgs.Channel;
                var guild   = eventArgs.Guild;

                if (message == null)
                {
                    throw new Exception($"{nameof(eventArgs.Message)} is null");
                }

                // issues caused by Threads feature
                if (message.Author == null)
                {
                    return;
                }

                if (!IsReleventMessage(message))
                {
                    return;
                }

                if (IsPrivateMessageChannel(channel))
                {
                    return;
                }

                var todoMessage = new MessageCommandPayload(message, guild);

                var command = new UpdateMessageCommand(todoMessage);

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

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

                await _discordErrorLogger.LogDiscordError(eventContextError, ex.ToString());
            }
        }
        /// <summary>
        /// Delete all messsage emotes for this message
        /// Extract emotes from message text
        /// If message contains emotes, save each emote
        /// Do save emote if it does not belong to guild
        /// </summary>
        /// <param name="todoMessage"></param>
        /// <returns></returns>
        public async Task <bool> UpdateEmoteMessage(MessageCommandPayload todoMessage)
        {
            try
            {
                var message = todoMessage.Message;
                var guild   = todoMessage.Guild;

                var messageId      = message.Id;
                var messageContent = message.Content;
                var username       = message.Author.Username;

                _logger.LogDebug($"Update emote message: {username} -> {messageContent}");

                var guildId = guild.Id;

                await _kattbotRepo.RemoveEmotesForMessage(messageId);

                var emotes = _emoteBuilder.BuildFromSocketUserMessage(message, guildId);

                if (emotes.Count > 0)
                {
                    _logger.LogDebug($"Message contains {emotes.Count} emotes", emotes);

                    foreach (var emote in emotes)
                    {
                        if (!IsValidEmote(emote, guild))
                        {
                            _logger.LogDebug($"{emote} is not valid");
                            continue;
                        }

                        _logger.LogDebug($"Saving message emote {emote}");

                        await _kattbotRepo.CreateEmoteEntity(emote);
                    }
                }
                else
                {
                    _logger.LogDebug("Message contains no emotes");
                }

                return(true);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "UpdateEmoteMessage");
                return(false);
            }
        }
        private async Task OnMessageCreated(DiscordClient client, MessageCreateEventArgs eventArgs)
        {
            try
            {
                var message = eventArgs.Message;
                var guild   = eventArgs.Guild;

                if (MessageIsCommand(message.Content))
                {
                    return;
                }

                if (!IsReleventMessage(message))
                {
                    return;
                }

                if (IsPrivateMessageChannel(message.Channel))
                {
                    await message.Channel.SendMessageAsync("https://cdn.discordapp.com/emojis/740563346599968900.png?v=1");

                    return;
                }

                var todoMessage = new MessageCommandPayload(message, guild);

                var command = new CreateMessageCommand(todoMessage);

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

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

                await _discordErrorLogger.LogDiscordError(eventContextError, ex.ToString());
            }
        }
Esempio n. 4
0
 public async Task <bool> UpdateMessage(MessageCommandPayload todoMessage)
 {
     return(await _emoteMessageService.UpdateEmoteMessage(todoMessage));
 }
Esempio n. 5
0
 public CreateMessageCommand(MessageCommandPayload todoMessage)
 {
     _todoMessage = todoMessage;
 }