async Task ProcessMessage(SocketMessage socketMsg) { if (!(socketMsg is SocketUserMessage message)) { return; } if (message.Author.IsBot) { return; } if (Settings.App.MaintenanceMode && !RiftBot.IsDeveloper(message.Author) && !RiftBot.IsAdmin(message.Author) && !await RiftBot.IsModeratorAsync(message.Author)) { return; } if (await DB.Toxicity.HasBlockingAsync(message.Author.Id)) { return; } var context = new CommandContext(client, message); if (context.IsPrivate) { return; } if (await HandleCommand(context)) { return; } await HandlePlainText(context); }
static async Task HandlePlainText(CommandContext context) { if (context.Message.Channel.Id != Settings.ChannelId.Chat) { return; } if (Settings.Chat.AttachmentFilterEnabled && !RiftBot.IsAdmin(context.Message.Author)) { if (context.Message.Attachments != null && context.Message.Attachments.Count > 0) { await context.Message.DeleteAsync(); } } if (Settings.Chat.CapsFilterEnabled && await HasCaps(context.Message.Content)) { await context.Message.DeleteAsync(); var eb = new EmbedBuilder() .WithDescription($":no_entry_sign: {context.Message.Author.Mention} капсить на сервере запрещено!"); await context.User.SendEmbedAsync(eb); return; } if (Settings.Chat.UrlFilterEnabled && HasUrl(context.Message.Content)) { await context.Message.DeleteAsync(); var eb = new EmbedBuilder() .WithDescription($":no_entry_sign: {context.Message.Author.Mention} ссылки на сервере запрещены!"); await context.User.SendEmbedAsync(eb); return; } if (Settings.Chat.ProcessUserNames) { if (context.User is SocketGuildUser sgUser) { var name = string.IsNullOrWhiteSpace(sgUser.Nickname) ? sgUser.Username : sgUser.Nickname; if (IsIncorrectName(name, out var editedName)) { if (string.IsNullOrWhiteSpace(editedName)) { editedName = $"tempname{DateTime.UtcNow.Millisecond.ToString()}"; } await sgUser.ModifyAsync(x => { x.Nickname = editedName; }); } } } await DB.Statistics.AddAsync(context.User.Id, new StatisticData { MessagesSent = 1u }); if (HasMinimumLength(context.Message.Content) && IsEligibleForEconomy(context.User.Id)) { await dailyService.CheckAsync(context.User.Id); await economyService.ProcessMessageAsync(context.User.Id).ConfigureAwait(false); } }