use of io.discloader.discloader.common.exceptions.PermissionsException in project DiscLoader by R3alCl0ud.
the class Guild method createTextChannel.
@Override
public CompletableFuture<IGuildTextChannel> createTextChannel(String name, IChannelCategory category, IOverwrite... overwrites) {
CompletableFuture<IGuildTextChannel> future = new CompletableFuture<>();
if (!hasPermission(Permissions.MANAGE_CHANNELS)) {
PermissionsException ex = new PermissionsException("Insufficient Permissions");
future.completeExceptionally(ex);
// return early
return future;
}
ChannelPayload data = new ChannelPayload(name, ChannelTypes.TEXT, overwrites);
data.setParent(category);
CompletableFuture<ChannelJSON> cf = getLoader().rest.request(Methods.POST, Endpoints.guildChannels(getID()), new RESTOptions(data), ChannelJSON.class);
cf.thenAcceptAsync(channelJSON -> {
IGuildTextChannel channel = (IGuildTextChannel) EntityBuilder.getChannelFactory().buildChannel(channelJSON, getLoader(), this, false);
future.complete(channel);
});
cf.exceptionally(ex -> {
future.completeExceptionally(ex);
return null;
});
return future;
}
use of io.discloader.discloader.common.exceptions.PermissionsException in project DiscLoader by R3alCl0ud.
the class GuildEmoji method setName.
@Override
public CompletableFuture<IGuildEmoji> setName(String name) {
if (!guild.hasPermission(Permissions.MANAGE_EMOJIS)) {
throw new PermissionsException("Insufficient Permissions: \"MANAGE_EMOJIS\" is required to use this endpoint");
}
CompletableFuture<IGuildEmoji> future = new CompletableFuture<>();
JSONObject payload = new JSONObject().put("name", name);
IEventListener el = new EventListenerAdapter() {
@Override
public void GuildEmojiUpdate(GuildEmojiUpdateEvent event) {
if (getID() == event.getEmoji().getID()) {
future.complete(event.getEmoji());
getLoader().removeEventListener(this);
}
}
};
getLoader().addEventListener(el).rest.request(Methods.PATCH, Endpoints.guildEmoji(getGuild().getID(), getID()), new RESTOptions(payload), EmojiJSON.class).exceptionally(ex -> {
future.completeExceptionally(ex);
getLoader().removeEventListener(el);
return null;
});
return future;
}
use of io.discloader.discloader.common.exceptions.PermissionsException in project DiscLoader by R3alCl0ud.
the class Message method edit.
/**
* Edit's the messages content. Only possible if the {@link DiscLoader loader}
* is the message's {@link #author}
*
* @param content
* The new content of the message
* @param embed
* The new embed for the message
* @return A Future that completes with {@literal this} when sucessfull
*/
@Override
public CompletableFuture<IMessage> edit(String content, RichEmbed embed) {
CompletableFuture<IMessage> future = new CompletableFuture<>();
if (!canEdit()) {
future.completeExceptionally(new PermissionsException("Only messages author by you can be editted"));
return future;
}
SendableMessage sendable = null;
Attachment attachment = null;
File file = null;
if (embed != null) {
if ((embed.getThumbnail() != null && embed.getThumbnail().resource != null)) {
attachment = new Attachment(embed.getThumbnail().resource.getName());
}
if (embed.getThumbnail() != null && embed.getThumbnail().file != null) {
attachment = new Attachment(embed.getThumbnail().file.getName());
}
if ((embed.getImage() != null && embed.getImage().resource != null)) {
attachment = new Attachment(embed.getImage().resource.getName());
}
if (embed.getImage() != null && embed.getImage().file != null) {
attachment = new Attachment(embed.getImage().file.getName());
}
}
sendable = new SendableMessage(content, false, embed, attachment, file);
CompletableFuture<MessageJSON> cf = loader.rest.request(Methods.PATCH, Endpoints.message(getChannel().getID(), getID()), new RESTOptions(sendable), MessageJSON.class);
cf.thenAcceptAsync(messageJSON -> {
future.complete(EntityBuilder.getChannelFactory().buildMessage(channel, messageJSON));
});
cf.exceptionally(ex -> {
future.completeExceptionally(ex);
return null;
});
return future;
}
use of io.discloader.discloader.common.exceptions.PermissionsException in project DiscLoader by R3alCl0ud.
the class Message method deleteAllReactions.
@Override
public CompletableFuture<IMessage> deleteAllReactions() {
CompletableFuture<IMessage> future = new CompletableFuture<>();
if (channel instanceof IGuildChannel) {
if (!((IGuildChannel) channel).permissionsOf(guild.getCurrentMember()).hasPermission(Permissions.MANAGE_MESSAGES)) {
future.completeExceptionally(new PermissionsException());
return future;
}
}
CompletableFuture<Void> cf = loader.rest.request(Methods.DELETE, Endpoints.messageReactions(getChannel().getID(), getID()), new RESTOptions(), Void.class);
cf.thenAcceptAsync(Null -> {
future.complete(this);
});
cf.exceptionally(ex -> {
future.completeExceptionally(ex);
return null;
});
return future;
}
use of io.discloader.discloader.common.exceptions.PermissionsException in project DiscLoader by R3alCl0ud.
the class RESTQueue method handle.
public void handle() {
try {
if (waiting || queue.size() == 0 || globalLimit) {
return;
}
waiting = true;
final APIRequest apiRequest = queue.get(0);
BaseRequest request = apiRequest.createRequest();
request = addHeaders(request, apiRequest.auth, apiRequest.multi);
request.asStringAsync(new Callback<String>() {
@Override
public void cancelled() {
apiRequest.future.completeExceptionally(new Throwable());
}
@Override
public void completed(HttpResponse<String> response) {
Map<String, List<String>> headers = response.getHeaders();
headers.forEach((name, value) -> {
switch(name) {
case "X-RateLimit-Limit":
rateLimit = Integer.parseInt(value.get(0), 10);
break;
case "X-RateLimit-Remaining":
remaining = Integer.parseInt(value.get(0), 10);
break;
case "x-ratelimit-reset":
case "X-RateLimit-Reset":
resetTime = (Long.parseLong(value.get(0), 10) * 1000L);
break;
case "X-RateLimit-Global":
globalLimit = Boolean.parseBoolean(value.get(0));
break;
}
});
RawEvent event = new RawEvent(loader, response);
DateFormat df = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z");
try {
timeDifference = Date.from(Instant.now()).getTime() - df.parse(headers.get("Date").get(0)).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
int code = response.getStatus();
if (code == 429) {
Thread wait = new Thread("Ratelimit resetting - " + apiRequest.url) {
@Override
public void run() {
try {
Thread.sleep(Integer.parseInt(headers.get("Retry-After").get(0), 10) + 500);
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
waiting = false;
globalLimit = false;
handle();
}
};
wait.setPriority((Thread.NORM_PRIORITY + Thread.MAX_PRIORITY) / 2);
wait.setDaemon(true);
wait.start();
return;
} else if (code != 200 && code != 201 && code != 204 && code != 304) {
queue.remove(apiRequest);
loader.emit(event);
loader.emit("RawPacket", event);
ExceptionJSON data = gson.fromJson(response.getBody(), ExceptionJSON.class);
switch(code) {
case 401:
apiRequest.future.completeExceptionally(new UnauthorizedException(response.getBody()));
break;
case 403:
switch(data.code) {
case 20002:
apiRequest.future.completeExceptionally(new AccountTypeException(data));
break;
case 50013:
apiRequest.future.completeExceptionally(new PermissionsException(data));
break;
default:
apiRequest.future.completeExceptionally(new UnauthorizedException(response.getBody()));
break;
}
break;
default:
apiRequest.future.completeExceptionally(new DiscordException(data));
break;
}
} else {
queue.remove(apiRequest);
loader.emit(event);
loader.emit("RawPacket", event);
apiRequest.future.complete(response.getBody());
}
globalLimit = false;
long waitTime = ((resetTime - System.currentTimeMillis()) + timeDifference + 500);
if (remaining == 0 && waitTime > 0) {
Thread wait = new Thread("REST Waiting - " + apiRequest.url) {
@Override
public void run() {
try {
Thread.sleep(waitTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
waiting = false;
handle();
}
};
wait.setPriority((Thread.NORM_PRIORITY + Thread.MAX_PRIORITY) / 2);
wait.setDaemon(true);
wait.start();
} else {
waiting = false;
handle();
}
}
@Override
public void failed(UnirestException e) {
apiRequest.future.completeExceptionally(e);
handle();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
Aggregations