Пример #1
0
        private async ValueTask HandleMessageReceived(object sender, MessageReceivedEventArgs e)
        {
            BotMessageReceivedEventArgs args = null;

            if (MessageReceivedServices.Length > 0)
            {
                args = new BotMessageReceivedEventArgs(e);
                foreach (var service in MessageReceivedServices)
                {
                    try
                    {
                        await service.OnMessageReceived(args).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        Logger.LogError(ex, "An exception occurred while executing {0}.{1}().", service.GetType().Name, nameof(DiscordBotService.OnMessageReceived));
                    }
                }
            }

            if ((args == null || args.ProcessCommands) && e.Message is IGatewayUserMessage message)
            {
                var isCommand = await Bot.ProcessCommandsAsync(message, e.Channel).ConfigureAwait(false);

                if (isCommand)
                {
                    return;
                }
            }

            if (NonCommandReceivedServices.Length > 0)
            {
                args ??= new BotMessageReceivedEventArgs(e);
                foreach (var service in NonCommandReceivedServices)
                {
                    try
                    {
                        await service.OnNonCommandReceived(args).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        Logger.LogError(ex, "An exception occurred while executing {0}.{1}().", service.GetType().Name, nameof(DiscordBotService.OnNonCommandReceived));
                    }
                }
            }
        }
 /// <summary>
 ///     Fires after a message is received and is known not to be a command, i.e.
 ///     messages sent by bots, messages without a prefix, system messages, etc.
 ///     This also fires for messages with <see cref="BotMessageReceivedEventArgs.ProcessCommands"/> set to <see langword="false"/>.
 /// </summary>
 /// <param name="e"> The event data. </param>
 /// <returns>
 ///     A <see cref="ValueTask"/> representing the handler work.
 /// </returns>
 /// <seealso cref="BotMessageReceivedEventArgs.ProcessCommands"/>
 protected internal virtual ValueTask OnNonCommandReceived(BotMessageReceivedEventArgs e)
 => default;