public async Task <bool> RemoveBinding(IEntity <ulong> binding) { using (var db = new ImageSpamContext(dbOptions)) { var entities = db.ImageSpamBindings.Where(b => b.ChannelId == binding.Id); if (!entities.Any()) { return(false); } db.ImageSpamBindings.RemoveRange(entities); await db.SaveChangesAsync(); return(true); } }
public async Task <bool> AddBinding(IMessageChannel channel) { using (var db = new ImageSpamContext(dbOptions)) { if (db.ImageSpamBindings.Any(b => b.ChannelId == channel.Id)) { return(false); } db.ImageSpamBindings.Add(new ImageSpamBinding { ChannelId = channel.Id, }); await db.SaveChangesAsync(); return(true); } }
private async Task Handler(SocketMessage msg) { try { using (var db = new ImageSpamContext(dbOptions)) { if (msg.Author is IGuildUser user && !db.ImageSpamBindings.Any(b => b.ChannelId == msg.Channel.Id) && msg.Attachments.Count > 0) { var messages = await msg.Channel.GetMessagesAsync(limit : 50).Flatten(); var imagesCounter = (from message in messages.ToList().OrderByDescending(o => o.Timestamp) let timeDifference = DateTimeOffset.Now - message.Timestamp where timeDifference.TotalSeconds < 15 && message.Attachments.Count > 0 && message.Author.Id == msg.Author.Id select message).Count(); if (imagesCounter > 2) { await msg.DeleteAsync(); await msg.Channel.SendMessageAsync($"{user.Mention} Your message has been removed for being image spam. You have been preventively muted."); var mutedRole = user.Guild.Roles.FirstOrDefault(role => role.Name.ToLower().Contains("muted")); await user.AddRoleAsync(mutedRole); await Task.Delay(5 * 60 * 1000); await user.RemoveRoleAsync(mutedRole); await msg.Channel.SendMessageAsync($"User {user.Mention} has been unmuted automatically."); } } } } catch (HttpException) { } }
public bool CheckBinding(IMessageChannel channel) { using (var db = new ImageSpamContext(dbOptions)) return(db.ImageSpamBindings.Any(b => b.ChannelId == channel.Id)); }