Exemplo n.º 1
0
        private Task OnMessageReceivedAsync(SocketMessage s)
        {
            _ = Task.Run(async() =>
            {
                if (!(s is SocketUserMessage msg))
                {
                    return;
                }

                var context   = new DogeyCommandContext(_discord, msg);
                string prefix = await _root.GetPrefixAsync(context.Guild);

                if (IsCommand(context, prefix, out int argPos))
                {
                    using (context.Channel.EnterTypingState())
                        await ExecuteAsync(context, _provider, context.Message.Content.Substring(argPos));
                }
            }, _cancellationToken);
            return(Task.CompletedTask);
        }
Exemplo n.º 2
0
        private Task OnMessageReceivedAsync(SocketMessage s)
        {
            _ = Task.Run(async() =>
            {
                //bool plonked = await _root.IsBannedAsync(msg.Author);
                //if (plonked || msg.Author.IsBot) return;

                if (!(s is SocketUserMessage msg))
                {
                    return;
                }
                if (msg.Author.IsBot)
                {
                    return;
                }

                var context   = new DogeyCommandContext(_discord, msg);
                string prefix = await _root.GetPrefixAsync(context.Guild);

                if (_commands.IsCommand(context, prefix, out int argPos))
                {
                    return;
                }

                var wallet = await _points.GetOrCreateWalletAsync(msg.Author);

                try
                {
                    int earning = 0;

                    // Bonus points for a prime id
                    if (MathHelper.IsPrime(msg.Id))
                    {
                        earning += 25;
                    }

                    // Add 3-5x points for concecutive numbers
                    for (int mult = 3; mult <= 5; mult++)
                    {
                        int repeats = StringHelper.RepeatingChars(msg.Id.ToString(), mult);
                        if (repeats > 0)
                        {
                            earning += repeats * (mult - 1);
                        }
                    }

                    if (wallet.Multiplier != null)
                    {
                        var multiplied = earning * wallet.Multiplier.Value;
                        earning       += (int)Math.Round(multiplied, MidpointRounding.AwayFromZero);
                    }

                    if (earning > 0)
                    {
                        var log = await _points.CreateAsync(new PointLog
                        {
                            Timestamp   = msg.Timestamp.DateTime,
                            UserId      = msg.Author.Id,
                            SenderId    = msg.Id,
                            EarningType = EarningType.Message,
                            Amount      = earning
                        });

                        wallet.Balance += log.Amount;
                        await _points.ModifyAsync(wallet);

                        foreach (var action in Actions.Values)
                        {
                            await action(log);
                        }
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogError("Unable to add points: {ex}", ex);
                }
            }, _cancellationToken);
            return(Task.CompletedTask);
        }