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); }
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); }
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); }
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); }