Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        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.
        }
Esempio n. 3
0
        /// <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);
        }