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); }
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); }