/// <summary> Load the configuration from the path specified in FileName. </summary> public static async Task <DiscordClientConfiguration> LoadAsync() { string filePath = Path.Combine(AppContext.BaseDirectory, fileName); string json = await MonkeyHelpers.ReadTextAsync(filePath).ConfigureAwait(false); DiscordClientConfiguration config = JsonConvert.DeserializeObject <DiscordClientConfiguration>(json); return(config); }
public async static Task <AccessLevel> GetPermissionAsync(CommandContext ctx) { if (ctx.User.IsBot) // Prevent other bots from executing commands. { return(AccessLevel.Blocked); } DiscordClientConfiguration config = await DiscordClientConfiguration.LoadAsync(); IReadOnlyList <ulong> owners = config.Owners; if (owners != null && owners.Contains(ctx.User.Id)) // Give configured owners special access. { return(AccessLevel.BotOwner); } // Check if the context is in a guild. if (ctx.Guild != null) { if (ctx.Guild.Owner.Id == ctx.User.Id) // Check if the user is the guild owner. { return(AccessLevel.ServerOwner); } if (ctx.Guild.Permissions.HasValue && ctx.Guild.Permissions.Value.HasPermission(Permissions.Administrator)) { return(AccessLevel.ServerAdmin); } if (ctx.Guild.Permissions.HasValue && ctx.Guild.Permissions.Value.HasPermission(Permissions.ManageMessages) && ctx.Guild.Permissions.Value.HasPermission(Permissions.BanMembers) && ctx.Guild.Permissions.Value.HasPermission(Permissions.KickMembers)) { return(AccessLevel.ServerMod); } } return(AccessLevel.User); // If nothing else, return a default permission. }
/// <summary>Makes sure that a config file exists and asks for the token on first run</summary> public static async Task EnsureExistsAsync() { string file = Path.Combine(AppContext.BaseDirectory, fileName); if (!File.Exists(file)) { string path = Path.GetDirectoryName(file); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } var config = new DiscordClientConfiguration(); // Get the token await Console.Out.WriteLineAsync("Please enter the bot's access token: ").ConfigureAwait(false); config.Token = await Console.In.ReadLineAsync().ConfigureAwait(false);; // Get owner await Console.Out.WriteLineAsync("Please enter the Discord Id of the Bot owner (leave blank for default): ").ConfigureAwait(false); string sOwnerId = await Console.In.ReadLineAsync().ConfigureAwait(false); if (ulong.TryParse(sOwnerId, out ulong ownerId) && ownerId > 0) { config.AddOwner(ownerId); } else { config.AddOwner(327885109560737793); } // Get cloudinary credentials await Console.Out.WriteLineAsync("Do you want to setup cloudinary? (y/n)").ConfigureAwait(false); string ans = await Console.In.ReadLineAsync().ConfigureAwait(false); if (ans.StartsWith("y", StringComparison.OrdinalIgnoreCase)) { CloudinaryCredentials creds = new CloudinaryCredentials(); await Console.Out.WriteLineAsync("Enter your cloud id").ConfigureAwait(false); ans = await Console.In.ReadLineAsync().ConfigureAwait(false); creds.Cloud = ans; await Console.Out.WriteLineAsync("Enter your Api Key").ConfigureAwait(false); ans = await Console.In.ReadLineAsync().ConfigureAwait(false); creds.ApiKey = ans; await Console.Out.WriteLineAsync("Enter your Api Secret").ConfigureAwait(false); ans = await Console.In.ReadLineAsync().ConfigureAwait(false); creds.ApiSecret = ans; config.CloudinaryCredentials = creds; } await config.SaveAsync().ConfigureAwait(false); // Save the new configuration object to file. } await Console.Out.WriteLineAsync("Configuration Loaded").ConfigureAwait(false); }