Reorganized files, moved DiscordRestClient to Rest.DiscordClient, added RestProvider to config
This commit is contained in:
@@ -95,76 +95,76 @@
|
||||
<Compile Include="API\Rest\ModifyVoiceChannelParams.cs" />
|
||||
<Compile Include="DiscordConfig.cs" />
|
||||
<Compile Include="API\DiscordRawClient.cs" />
|
||||
<Compile Include="DiscordRestClient.cs" />
|
||||
<Compile Include="Entities\Common\Guilds\IGuildEmbed.cs" />
|
||||
<Compile Include="Entities\Common\Guilds\IIntegrationAccount.cs" />
|
||||
<Compile Include="Entities\Common\Users\IConnection.cs" />
|
||||
<Compile Include="Entities\Common\Guilds\IGuildIntegration.cs" />
|
||||
<Compile Include="Entities\Common\Invites\IPublicInvite.cs" />
|
||||
<Compile Include="Entities\Common\Messages\Attachment.cs" />
|
||||
<Compile Include="Entities\Common\Channels\IChannel.cs" />
|
||||
<Compile Include="Entities\Common\Channels\IDMChannel.cs" />
|
||||
<Compile Include="Entities\Common\Channels\IGuildChannel.cs" />
|
||||
<Compile Include="Entities\Common\Channels\IMessageChannel.cs" />
|
||||
<Compile Include="Entities\Common\Channels\ITextChannel.cs" />
|
||||
<Compile Include="Entities\Common\Channels\IVoiceChannel.cs" />
|
||||
<Compile Include="Entities\Common\Channels\ChannelType.cs" />
|
||||
<Compile Include="Entities\Common\Roles\Color.cs" />
|
||||
<Compile Include="Entities\Common\Messages\Direction.cs" />
|
||||
<Compile Include="Entities\Common\Messages\Embed.cs" />
|
||||
<Compile Include="Entities\Common\Messages\EmbedProvider.cs" />
|
||||
<Compile Include="Entities\Common\Messages\EmbedThumbnail.cs" />
|
||||
<Compile Include="Entities\Common\Guilds\Emoji.cs" />
|
||||
<Compile Include="Entities\Common\Guilds\IUserGuild.cs" />
|
||||
<Compile Include="Entities\Common\IDeletable.cs" />
|
||||
<Compile Include="Entities\Common\IEntity.cs" />
|
||||
<Compile Include="Entities\Common\Guilds\IGuild.cs" />
|
||||
<Compile Include="Entities\Common\IMentionable.cs" />
|
||||
<Compile Include="Entities\Common\Messages\IMessage.cs" />
|
||||
<Compile Include="Entities\Common\Invites\IGuildInvite.cs" />
|
||||
<Compile Include="Entities\Common\Invites\IInvite.cs" />
|
||||
<Compile Include="Entities\Common\Roles\IRole.cs" />
|
||||
<Compile Include="Entities\Common\ISnowflakeEntity.cs" />
|
||||
<Compile Include="Entities\Common\IUpdateable.cs" />
|
||||
<Compile Include="Entities\Common\Guilds\IVoiceRegion.cs" />
|
||||
<Compile Include="Entities\Common\Permissions\ChannelPermission.cs" />
|
||||
<Compile Include="Entities\Common\Permissions\GuildPermission.cs" />
|
||||
<Compile Include="Entities\Common\Permissions\ChannelPermissions.cs" />
|
||||
<Compile Include="Entities\Common\Permissions\GuildPermissions.cs" />
|
||||
<Compile Include="Entities\Common\Permissions\Overwrite.cs" />
|
||||
<Compile Include="Entities\Common\Permissions\OverwritePermissions.cs" />
|
||||
<Compile Include="Entities\Common\Permissions\PermissionUtilities.cs" />
|
||||
<Compile Include="Entities\Common\Permissions\PermissionTarget.cs" />
|
||||
<Compile Include="Entities\Common\Permissions\PermValue.cs" />
|
||||
<Compile Include="Entities\Common\Users\UserStatus.cs" />
|
||||
<Compile Include="Entities\Common\Users\IDMUser.cs" />
|
||||
<Compile Include="Entities\Common\Users\IGuildUser.cs" />
|
||||
<Compile Include="Entities\Common\Users\ISelfUser.cs" />
|
||||
<Compile Include="Entities\Common\Users\IUser.cs" />
|
||||
<Compile Include="Entities\Rest\Guilds\Guild.cs" />
|
||||
<Compile Include="Entities\Rest\Channels\GuildChannel.cs" />
|
||||
<Compile Include="Entities\Rest\Channels\TextChannel.cs" />
|
||||
<Compile Include="Entities\Rest\Channels\VoiceChannel.cs" />
|
||||
<Compile Include="Entities\Rest\Guilds\GuildEmbed.cs" />
|
||||
<Compile Include="Entities\Rest\Guilds\GuildIntegration.cs" />
|
||||
<Compile Include="Entities\Rest\Guilds\IntegrationAccount.cs" />
|
||||
<Compile Include="Entities\Rest\Users\Connection.cs" />
|
||||
<Compile Include="Entities\Shared\Helpers\PermissionHelper.cs" />
|
||||
<Compile Include="Entities\Rest\Invites\GuildInvite.cs" />
|
||||
<Compile Include="Entities\Rest\Invites\Invite.cs" />
|
||||
<Compile Include="Entities\Rest\Invites\PublicInvite.cs" />
|
||||
<Compile Include="Entities\Rest\Message.cs" />
|
||||
<Compile Include="Entities\Rest\Role.cs" />
|
||||
<Compile Include="Entities\Rest\Guilds\UserGuild.cs" />
|
||||
<Compile Include="Entities\Rest\Users\DMUser.cs" />
|
||||
<Compile Include="Entities\Rest\Users\GuildUser.cs" />
|
||||
<Compile Include="Entities\Rest\Users\PublicUser.cs" />
|
||||
<Compile Include="Entities\Rest\Guilds\VoiceRegion.cs" />
|
||||
<Compile Include="Events\LogMessageEventArgs.cs" />
|
||||
<Compile Include="Events\SentRequestEventArgs.cs" />
|
||||
<Compile Include="Helpers\DateTimeHelper.cs" />
|
||||
<Compile Include="Helpers\EventExtensions.cs" />
|
||||
<Compile Include="Helpers\MentionHelper.cs" />
|
||||
<Compile Include="Rest\DiscordClient.cs" />
|
||||
<Compile Include="Common\Entities\Guilds\IGuildEmbed.cs" />
|
||||
<Compile Include="Common\Entities\Guilds\IIntegrationAccount.cs" />
|
||||
<Compile Include="Common\Entities\Users\IConnection.cs" />
|
||||
<Compile Include="Common\Entities\Guilds\IGuildIntegration.cs" />
|
||||
<Compile Include="Common\Entities\Invites\IPublicInvite.cs" />
|
||||
<Compile Include="Common\Entities\Messages\Attachment.cs" />
|
||||
<Compile Include="Common\Entities\Channels\IChannel.cs" />
|
||||
<Compile Include="Common\Entities\Channels\IDMChannel.cs" />
|
||||
<Compile Include="Common\Entities\Channels\IGuildChannel.cs" />
|
||||
<Compile Include="Common\Entities\Channels\IMessageChannel.cs" />
|
||||
<Compile Include="Common\Entities\Channels\ITextChannel.cs" />
|
||||
<Compile Include="Common\Entities\Channels\IVoiceChannel.cs" />
|
||||
<Compile Include="Common\Entities\Channels\ChannelType.cs" />
|
||||
<Compile Include="Common\Entities\Roles\Color.cs" />
|
||||
<Compile Include="Common\Entities\Messages\Direction.cs" />
|
||||
<Compile Include="Common\Entities\Messages\Embed.cs" />
|
||||
<Compile Include="Common\Entities\Messages\EmbedProvider.cs" />
|
||||
<Compile Include="Common\Entities\Messages\EmbedThumbnail.cs" />
|
||||
<Compile Include="Common\Entities\Guilds\Emoji.cs" />
|
||||
<Compile Include="Common\Entities\Guilds\IUserGuild.cs" />
|
||||
<Compile Include="Common\Entities\IDeletable.cs" />
|
||||
<Compile Include="Common\Entities\IEntity.cs" />
|
||||
<Compile Include="Common\Entities\Guilds\IGuild.cs" />
|
||||
<Compile Include="Common\Entities\IMentionable.cs" />
|
||||
<Compile Include="Common\Entities\Messages\IMessage.cs" />
|
||||
<Compile Include="Common\Entities\Invites\IGuildInvite.cs" />
|
||||
<Compile Include="Common\Entities\Invites\IInvite.cs" />
|
||||
<Compile Include="Common\Entities\Roles\IRole.cs" />
|
||||
<Compile Include="Common\Entities\ISnowflakeEntity.cs" />
|
||||
<Compile Include="Common\Entities\IUpdateable.cs" />
|
||||
<Compile Include="Common\Entities\Guilds\IVoiceRegion.cs" />
|
||||
<Compile Include="Common\Entities\Permissions\ChannelPermission.cs" />
|
||||
<Compile Include="Common\Entities\Permissions\GuildPermission.cs" />
|
||||
<Compile Include="Common\Entities\Permissions\ChannelPermissions.cs" />
|
||||
<Compile Include="Common\Entities\Permissions\GuildPermissions.cs" />
|
||||
<Compile Include="Common\Entities\Permissions\Overwrite.cs" />
|
||||
<Compile Include="Common\Entities\Permissions\OverwritePermissions.cs" />
|
||||
<Compile Include="Common\Entities\Permissions\PermissionUtilities.cs" />
|
||||
<Compile Include="Common\Entities\Permissions\PermissionTarget.cs" />
|
||||
<Compile Include="Common\Entities\Permissions\PermValue.cs" />
|
||||
<Compile Include="Common\Entities\Users\UserStatus.cs" />
|
||||
<Compile Include="Common\Entities\Users\IDMUser.cs" />
|
||||
<Compile Include="Common\Entities\Users\IGuildUser.cs" />
|
||||
<Compile Include="Common\Entities\Users\ISelfUser.cs" />
|
||||
<Compile Include="Common\Entities\Users\IUser.cs" />
|
||||
<Compile Include="Rest\Entities\Guilds\Guild.cs" />
|
||||
<Compile Include="Rest\Entities\Channels\GuildChannel.cs" />
|
||||
<Compile Include="Rest\Entities\Channels\TextChannel.cs" />
|
||||
<Compile Include="Rest\Entities\Channels\VoiceChannel.cs" />
|
||||
<Compile Include="Rest\Entities\Guilds\GuildEmbed.cs" />
|
||||
<Compile Include="Rest\Entities\Guilds\GuildIntegration.cs" />
|
||||
<Compile Include="Rest\Entities\Guilds\IntegrationAccount.cs" />
|
||||
<Compile Include="Rest\Entities\Users\Connection.cs" />
|
||||
<Compile Include="Common\Helpers\PermissionHelper.cs" />
|
||||
<Compile Include="Rest\Entities\Invites\GuildInvite.cs" />
|
||||
<Compile Include="Rest\Entities\Invites\Invite.cs" />
|
||||
<Compile Include="Rest\Entities\Invites\PublicInvite.cs" />
|
||||
<Compile Include="Rest\Entities\Message.cs" />
|
||||
<Compile Include="Rest\Entities\Role.cs" />
|
||||
<Compile Include="Rest\Entities\Guilds\UserGuild.cs" />
|
||||
<Compile Include="Rest\Entities\Users\DMUser.cs" />
|
||||
<Compile Include="Rest\Entities\Users\GuildUser.cs" />
|
||||
<Compile Include="Rest\Entities\Users\PublicUser.cs" />
|
||||
<Compile Include="Rest\Entities\Guilds\VoiceRegion.cs" />
|
||||
<Compile Include="Common\Events\LogMessageEventArgs.cs" />
|
||||
<Compile Include="Common\Events\SentRequestEventArgs.cs" />
|
||||
<Compile Include="Common\Helpers\DateTimeHelper.cs" />
|
||||
<Compile Include="Common\Helpers\EventExtensions.cs" />
|
||||
<Compile Include="Common\Helpers\MentionHelper.cs" />
|
||||
<Compile Include="IDiscordClient.cs" />
|
||||
<Compile Include="Logging\ILogger.cs" />
|
||||
<Compile Include="Logging\Logger.cs" />
|
||||
@@ -186,13 +186,13 @@
|
||||
<Compile Include="Net\Rest\MultipartFile.cs" />
|
||||
<Compile Include="Net\Rest\RestClientProvider.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Entities\Rest\Channels\DMChannel.cs" />
|
||||
<Compile Include="Entities\Rest\Users\SelfUser.cs" />
|
||||
<Compile Include="Entities\Rest\Users\User.cs" />
|
||||
<Compile Include="Rest\Entities\Channels\DMChannel.cs" />
|
||||
<Compile Include="Rest\Entities\Users\SelfUser.cs" />
|
||||
<Compile Include="Rest\Entities\Users\User.cs" />
|
||||
<Compile Include="TokenType.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Entities\Common\Users\IVoiceState.cs.old" />
|
||||
<None Include="Common\Entities\Users\IVoiceState.cs.old" />
|
||||
<None Include="project.json" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Reflection;
|
||||
using Discord.Net.Rest;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Discord
|
||||
{
|
||||
@@ -23,5 +24,8 @@ namespace Discord
|
||||
|
||||
/// <summary> Gets or sets the minimum log level severity that will be sent to the LogMessage event. </summary>
|
||||
public LogSeverity LogLevel { get; set; } = LogSeverity.Info;
|
||||
|
||||
/// <summary> Gets or sets the provider used to generate new REST connections. </summary>
|
||||
public RestClientProvider RestClientProvider { get; set; } = (url, ct) => new DefaultRestClient(url, ct);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
using Discord.API.Rest;
|
||||
using Discord.Logging;
|
||||
using Discord.Net.Rest;
|
||||
using Discord.Rest;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -10,9 +9,9 @@ using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Discord
|
||||
namespace Discord.Rest
|
||||
{
|
||||
public sealed class DiscordRestClient : IDiscordClient, IDisposable
|
||||
public sealed class DiscordClient : IDiscordClient, IDisposable
|
||||
{
|
||||
public event EventHandler<LogMessageEventArgs> Log;
|
||||
public event EventHandler LoggedIn, LoggedOut;
|
||||
@@ -28,12 +27,12 @@ namespace Discord
|
||||
internal API.DiscordRawClient BaseClient { get; private set; }
|
||||
internal SelfUser CurrentUser { get; private set; }
|
||||
|
||||
public DiscordRestClient(DiscordConfig config = null)
|
||||
public DiscordClient(DiscordConfig config = null)
|
||||
{
|
||||
if (config == null)
|
||||
config = new DiscordConfig();
|
||||
|
||||
_restClientProvider = (baseUrl, cancelToken) => new DefaultRestClient(baseUrl, cancelToken);
|
||||
_restClientProvider = config.RestClientProvider;
|
||||
|
||||
_connectionLock = new SemaphoreSlim(1, 1);
|
||||
_log = new LogManager(config.LogLevel);
|
||||
@@ -13,7 +13,7 @@ namespace Discord.Rest
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public ulong Id { get; }
|
||||
internal DiscordRestClient Discord { get; }
|
||||
internal DiscordClient Discord { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public DMUser Recipient { get; private set; }
|
||||
@@ -23,7 +23,7 @@ namespace Discord.Rest
|
||||
/// <inheritdoc />
|
||||
public IEnumerable<IUser> Users => ImmutableArray.Create<IUser>(Discord.CurrentUser, Recipient);
|
||||
|
||||
internal DMChannel(DiscordRestClient discord, Model model)
|
||||
internal DMChannel(DiscordClient discord, Model model)
|
||||
{
|
||||
Id = model.Id;
|
||||
Discord = discord;
|
||||
@@ -26,7 +26,7 @@ namespace Discord.Rest
|
||||
public DateTime CreatedAt => DateTimeHelper.FromSnowflake(Id);
|
||||
/// <inheritdoc />
|
||||
public IReadOnlyDictionary<ulong, Overwrite> PermissionOverwrites => _overwrites;
|
||||
internal DiscordRestClient Discord => Guild.Discord;
|
||||
internal DiscordClient Discord => Guild.Discord;
|
||||
|
||||
internal GuildChannel(Guild guild, Model model)
|
||||
{
|
||||
@@ -19,7 +19,7 @@ namespace Discord.Rest
|
||||
|
||||
/// <inheritdoc />
|
||||
public ulong Id { get; }
|
||||
internal DiscordRestClient Discord { get; }
|
||||
internal DiscordClient Discord { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Name { get; private set; }
|
||||
@@ -56,7 +56,7 @@ namespace Discord.Rest
|
||||
/// <summary> Gets a collection of all roles in this guild. </summary>
|
||||
public IEnumerable<Role> Roles => _roles?.Select(x => x.Value) ?? Enumerable.Empty<Role>();
|
||||
|
||||
internal Guild(DiscordRestClient discord, Model model)
|
||||
internal Guild(DiscordClient discord, Model model)
|
||||
{
|
||||
Id = model.Id;
|
||||
Discord = discord;
|
||||
@@ -12,12 +12,12 @@ namespace Discord.Rest
|
||||
/// <inheritdoc />
|
||||
public ulong? ChannelId { get; private set; }
|
||||
|
||||
internal DiscordRestClient Discord { get; }
|
||||
internal DiscordClient Discord { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public DateTime CreatedAt => DateTimeHelper.FromSnowflake(Id);
|
||||
|
||||
internal GuildEmbed(DiscordRestClient discord, Model model)
|
||||
internal GuildEmbed(DiscordClient discord, Model model)
|
||||
{
|
||||
Discord = discord;
|
||||
Update(model);
|
||||
@@ -32,7 +32,7 @@ namespace Discord.Rest
|
||||
public User User { get; private set; }
|
||||
/// <inheritdoc />
|
||||
public IntegrationAccount Account { get; private set; }
|
||||
internal DiscordRestClient Discord => Guild.Discord;
|
||||
internal DiscordClient Discord => Guild.Discord;
|
||||
|
||||
internal GuildIntegration(Guild guild, Model model)
|
||||
{
|
||||
@@ -10,7 +10,7 @@ namespace Discord.Rest
|
||||
|
||||
/// <inheritdoc />
|
||||
public ulong Id { get; }
|
||||
internal DiscordRestClient Discord { get; }
|
||||
internal DiscordClient Discord { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Name { get; private set; }
|
||||
@@ -22,7 +22,7 @@ namespace Discord.Rest
|
||||
/// <inheritdoc />
|
||||
public string IconUrl => API.CDN.GetGuildIconUrl(Id, _iconId);
|
||||
|
||||
internal UserGuild(DiscordRestClient discord, Model model)
|
||||
internal UserGuild(DiscordClient discord, Model model)
|
||||
{
|
||||
Discord = discord;
|
||||
Id = model.Id;
|
||||
@@ -21,7 +21,7 @@ namespace Discord.Rest
|
||||
/// <inheritdoc />
|
||||
public int Uses { get; private set; }
|
||||
|
||||
internal override DiscordRestClient Discord => Guild.Discord;
|
||||
internal override DiscordClient Discord => Guild.Discord;
|
||||
|
||||
internal GuildInvite(Guild guild, Model model)
|
||||
: base(model)
|
||||
@@ -17,7 +17,7 @@ namespace Discord.Rest
|
||||
/// <inheritdoc />
|
||||
public string XkcdUrl => XkcdCode != null ? $"{DiscordConfig.InviteUrl}/{XkcdCode}" : null;
|
||||
|
||||
internal abstract DiscordRestClient Discord { get; }
|
||||
internal abstract DiscordClient Discord { get; }
|
||||
|
||||
internal Invite(Model model)
|
||||
{
|
||||
@@ -15,9 +15,9 @@ namespace Discord.Rest
|
||||
/// <inheritdoc />
|
||||
public ulong ChannelId => _channelId;
|
||||
|
||||
internal override DiscordRestClient Discord { get; }
|
||||
internal override DiscordClient Discord { get; }
|
||||
|
||||
internal PublicInvite(DiscordRestClient discord, Model model)
|
||||
internal PublicInvite(DiscordClient discord, Model model)
|
||||
: base(model)
|
||||
{
|
||||
Discord = discord;
|
||||
@@ -43,7 +43,7 @@ namespace Discord.Rest
|
||||
public DateTime CreatedAt => DateTimeHelper.FromSnowflake(Id);
|
||||
/// <inheritdoc />
|
||||
public bool IsAuthor => Discord.CurrentUser.Id == Author.Id;
|
||||
internal DiscordRestClient Discord => (Channel as TextChannel)?.Discord ?? (Channel as DMChannel).Discord;
|
||||
internal DiscordClient Discord => (Channel as TextChannel)?.Discord ?? (Channel as DMChannel).Discord;
|
||||
|
||||
internal Message(IMessageChannel channel, Model model)
|
||||
{
|
||||
@@ -33,7 +33,7 @@ namespace Discord.Rest
|
||||
public bool IsEveryone => Id == Guild.Id;
|
||||
/// <inheritdoc />
|
||||
public string Mention => MentionHelper.Mention(this);
|
||||
internal DiscordRestClient Discord => Guild.Discord;
|
||||
internal DiscordClient Discord => Guild.Discord;
|
||||
|
||||
internal Role(Guild guild, Model model)
|
||||
{
|
||||
@@ -7,7 +7,7 @@ namespace Discord.Rest
|
||||
/// <inheritdoc />
|
||||
public DMChannel Channel { get; }
|
||||
|
||||
internal override DiscordRestClient Discord => Channel.Discord;
|
||||
internal override DiscordClient Discord => Channel.Discord;
|
||||
|
||||
internal DMUser(DMChannel channel, Model model)
|
||||
: base(model)
|
||||
@@ -24,7 +24,7 @@ namespace Discord.Rest
|
||||
|
||||
/// <inheritdoc />
|
||||
public IReadOnlyList<Role> Roles => _roles;
|
||||
internal override DiscordRestClient Discord => Guild.Discord;
|
||||
internal override DiscordClient Discord => Guild.Discord;
|
||||
|
||||
internal GuildUser(Guild guild, Model model)
|
||||
: base(model.User)
|
||||
@@ -4,9 +4,9 @@ namespace Discord.Rest
|
||||
{
|
||||
public class PublicUser : User
|
||||
{
|
||||
internal override DiscordRestClient Discord { get; }
|
||||
internal override DiscordClient Discord { get; }
|
||||
|
||||
internal PublicUser(DiscordRestClient discord, Model model)
|
||||
internal PublicUser(DiscordClient discord, Model model)
|
||||
: base(model)
|
||||
{
|
||||
Discord = discord;
|
||||
@@ -7,14 +7,14 @@ namespace Discord.Rest
|
||||
{
|
||||
public class SelfUser : User, ISelfUser
|
||||
{
|
||||
internal override DiscordRestClient Discord { get; }
|
||||
internal override DiscordClient Discord { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Email { get; private set; }
|
||||
/// <inheritdoc />
|
||||
public bool IsVerified { get; private set; }
|
||||
|
||||
internal SelfUser(DiscordRestClient discord, Model model)
|
||||
internal SelfUser(DiscordClient discord, Model model)
|
||||
: base(model)
|
||||
{
|
||||
Discord = discord;
|
||||
@@ -11,7 +11,7 @@ namespace Discord.Rest
|
||||
|
||||
/// <inheritdoc />
|
||||
public ulong Id { get; }
|
||||
internal abstract DiscordRestClient Discord { get; }
|
||||
internal abstract DiscordClient Discord { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public ushort Discriminator { get; private set; }
|
||||
Reference in New Issue
Block a user