public async Task SetFlag(BotAccessLevel level, bool give = true, [Remainder] IUser user = null) { if (user == null) { user = Context.User; } using var Database = new SkuldDbContextFactory().CreateDbContext(); var dbUser = await Database.InsertOrGetUserAsync(user).ConfigureAwait(false); bool DidAny = false; switch (level) { case BotAccessLevel.BotOwner: if (give & !dbUser.Flags.IsBitSet(DiscordUtilities.BotCreator)) { dbUser.Flags += DiscordUtilities.BotCreator; DidAny = true; } else if (!give && dbUser.Flags.IsBitSet(DiscordUtilities.BotCreator)) { dbUser.Flags -= DiscordUtilities.BotCreator; DidAny = true; } break; case BotAccessLevel.BotAdmin: if (give && !dbUser.Flags.IsBitSet(DiscordUtilities.BotAdmin)) { dbUser.Flags += DiscordUtilities.BotAdmin; DidAny = true; } else if (!give && dbUser.Flags.IsBitSet(DiscordUtilities.BotAdmin)) { dbUser.Flags -= DiscordUtilities.BotAdmin; DidAny = true; } break; case BotAccessLevel.BotTester: if (give && !dbUser.Flags.IsBitSet(DiscordUtilities.BotTester)) { dbUser.Flags += DiscordUtilities.BotTester; DidAny = true; } else if (!give && dbUser.Flags.IsBitSet(DiscordUtilities.BotTester)) { dbUser.Flags -= DiscordUtilities.BotTester; DidAny = true; } break; case BotAccessLevel.BotDonator: if (give && !dbUser.IsDonator) { dbUser.Flags += DiscordUtilities.BotDonator; DidAny = true; } else if (!give && dbUser.IsDonator) { dbUser.Flags -= DiscordUtilities.BotDonator; DidAny = true; } break; } if (DidAny) { await Database.SaveChangesAsync().ConfigureAwait(false); } if (DidAny) { await $"{(give ? "Added" : "Removed")} flag `{level}` to {user.Mention}".QueueMessageAsync(Context).ConfigureAwait(false); } else { await $"{user.Mention} {(give ? "already has" : "doesn't have")} the flag `{level}`".QueueMessageAsync(Context).ConfigureAwait(false); } }
public RequireBotFlag(BotAccessLevel level) { Level = level; }