public virtual async Task DisableFeatureCommand(CommandContext context, params T[] features)
    {
        if (!features.Any())
        {
            return;
        }
        this.Logger.LogInformation("Trying to disable {Features} feature for {Username}", features, context.Member.DisplayName);
        try
        {
            await this.UserFeaturesService.DisableFeaturesAsync(features, context.User.Id).ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            var embed = ex is UserFeaturesException ufe
                                ? EmbedTemplate.ErrorEmbed(context, ufe.Message, $"Failed disabling {features.Humanize().ToLowerInvariant()}")
                                : EmbedTemplate.UnknownErrorEmbed(context);

            await context.RespondAsync(embed : embed.Build()).ConfigureAwait(false);

            this.Logger.LogError(ex, "Failed to disable {Features} for {Username}", features, context.Member.DisplayName);
            throw;
        }

        this.Logger.LogInformation("Successfully disabled {Features} feature for {Username}", features, context.Member.DisplayName);
        await context.RespondAsync(embed : EmbedTemplate.SuccessEmbed(context,
                                                                      $"Successfully disabled {features.Humanize()} for you")).ConfigureAwait(false);
    }
    public virtual async Task RemoveUserHereCommand(CommandContext ctx)
    {
        try
        {
            await this.UserService.RemoveUserHereAsync(ctx.User.Id, ctx.Guild.Id).ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            var embed = ex is UserProcessingException?EmbedTemplate.ErrorEmbed(ctx, ex.Message) : EmbedTemplate.UnknownErrorEmbed(ctx);

            await ctx.RespondAsync(embed : embed).ConfigureAwait(false);

            throw;
        }

        await ctx.RespondAsync(embed : EmbedTemplate.SuccessEmbed(ctx, $"Now your updates won't appear in this server")).ConfigureAwait(false);
    }
    public virtual async Task RemoveUserInGuildCommand(CommandContext ctx)
    {
        this.Logger.LogInformation("Trying to remove {Member} from {Name} update provider", ctx.Member, UserService.Name);
        BaseUser user;

        try
        {
            user = await this.UserService.RemoveUserAsync(ctx.User.Id).ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            var embed = ex is UserProcessingException?EmbedTemplate.ErrorEmbed(ctx, ex.Message) : EmbedTemplate.UnknownErrorEmbed(ctx);

            await ctx.RespondAsync(embed : embed).ConfigureAwait(false);

            this.Logger.LogError(ex, "Failed to remove {Member} from {Name} update provider", ctx.Member, UserService.Name);

            throw;
        }
        this.Logger.LogInformation("Successfully removed {Member} from {Name} update provider", ctx.Member, UserService.Name);

        await ctx.RespondAsync(embed : EmbedTemplate.SuccessEmbed(ctx,
                                                                  $"Successfully removed {user.Username} from {this.UserService.Name} update checker")).ConfigureAwait(false);
    }
    public virtual async Task AddUserCommand(CommandContext ctx, [RemainingText][Description("Your username")]
                                             string username)
    {
        this.Logger.LogInformation("Trying to add {ProviderUsername} {Member} to {Name} update provider", username, ctx.Member, UserService.Name);
        BaseUser user;

        try
        {
            user = await this.UserService.AddUserAsync(username, ctx.Member.Id, ctx.Member.Guild.Id).ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            var embed = ex is UserProcessingException?EmbedTemplate.ErrorEmbed(ctx, ex.Message) : EmbedTemplate.UnknownErrorEmbed(ctx);

            await ctx.RespondAsync(embed : embed.Build()).ConfigureAwait(false);

            this.Logger.LogError(ex, "Failed to add {ProviderUsername} {Member} to {Name} update provider", username, ctx.Member, UserService.Name);
            throw;
        }

        this.Logger.LogInformation("Successfully added {ProviderUsername} {Member} to {Name} update provider", username, ctx.Member, UserService.Name);

        await ctx.RespondAsync(embed : EmbedTemplate.SuccessEmbed(ctx,
                                                                  $"Successfully added {user.Username} to {this.UserService.Name} update checker")).ConfigureAwait(false);
    }
    public virtual async Task ListUsersCommand(CommandContext ctx)
    {
        var sb = new StringBuilder();

        try
        {
            var i = 1;
            await foreach (var user in this.UserService.ListUsersAsync(ctx.Guild.Id))
            {
                if (sb.Length + user.Username.Length > 2048)
                {
                    if (sb.Length + "...".Length > 2048)
                    {
                        break;
                    }

                    sb.Append("...");
                    break;
                }

                sb.AppendLine(
                    $"{i++.ToString()}{user.Username} {(user.DiscordUser == null ? "" : Helpers.ToDiscordMention(user.DiscordUser.DiscordUserId))}");
            }
        }
        catch (Exception ex)
        {
            var embed = ex is UserProcessingException?EmbedTemplate.ErrorEmbed(ctx, ex.Message) : EmbedTemplate.UnknownErrorEmbed(ctx);

            await ctx.RespondAsync(embed : embed).ConfigureAwait(false);

            throw;
        }

        await ctx.RespondAsync(embed : EmbedTemplate.SuccessEmbed(ctx, "Users").WithDescription(sb.ToString())).ConfigureAwait(false);
    }
Exemplo n.º 6
0
    public async Task UpdateChannelCommand(CommandContext ctx, [Description("New channel where updates should be posted")]
                                           DiscordChannel?channel = null)
    {
        if (channel == null)
        {
            channel = ctx.Channel;
        }
        try
        {
            var perms = channel.PermissionsFor(ctx.Guild.CurrentMember);
            if (!perms.HasPermission(Permissions.SendMessages))
            {
                throw new GuildManagementException(
                          $"Bot wouldn't be able to send updates to channel {channel} because it lacks permission to send messages");
            }
            await this._managementService.UpdateChannelAsync(channel.GuildId !.Value, channel.Id).ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            var embed = ex is GuildManagementException?EmbedTemplate.ErrorEmbed(ctx, ex.Message) : EmbedTemplate.UnknownErrorEmbed(ctx);

            await ctx.RespondAsync(embed : embed).ConfigureAwait(false);

            throw;
        }

        await ctx.RespondAsync(embed : EmbedTemplate.SuccessEmbed(ctx, $"Successfully updated to {channel}")).ConfigureAwait(false);
    }
Exemplo n.º 7
0
    public async Task ForceRemoveUserCommand(CommandContext ctx, [Description("Discord user's id which should be to removed from being tracked")]
                                             ulong userId)
    {
        try
        {
            await this._managementService.RemoveUserAsync(ctx.Guild.Id, userId).ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            var embed = ex is GuildManagementException?EmbedTemplate.ErrorEmbed(ctx, ex.Message) : EmbedTemplate.UnknownErrorEmbed(ctx);

            await ctx.RespondAsync(embed : embed).ConfigureAwait(false);

            throw;
        }

        await ctx.RespondAsync(embed : EmbedTemplate.SuccessEmbed(ctx, $"Successfully removed {userId.ToString()} this server from being tracked"))
        .ConfigureAwait(false);
    }
Exemplo n.º 8
0
    public async Task RemoveGuildCommand(CommandContext ctx)
    {
        try
        {
            await this._managementService.RemoveGuildAsync(ctx.Guild.Id).ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            var embed = ex is GuildManagementException?EmbedTemplate.ErrorEmbed(ctx, ex.Message) : EmbedTemplate.UnknownErrorEmbed(ctx);

            await ctx.RespondAsync(embed : embed).ConfigureAwait(false);

            throw;
        }

        await ctx.RespondAsync(embed : EmbedTemplate.SuccessEmbed(ctx, "Successfully removed this server from being tracked"))
        .ConfigureAwait(false);
    }