use of org.javacord.api.entity.server.Server in project Javacord by BtoBastian.
the class MessageDeleteBulkHandler method handle.
@Override
public void handle(JsonNode packet) {
long channelId = Long.parseLong(packet.get("channel_id").asText());
Optional<TextChannel> optionalChannel = api.getTextChannelById(channelId);
if (optionalChannel.isPresent()) {
TextChannel channel = optionalChannel.get();
for (JsonNode messageIdJson : packet.get("ids")) {
long messageId = messageIdJson.asLong();
MessageDeleteEvent event = new MessageDeleteEventImpl(api, messageId, channel);
api.getCachedMessageById(messageId).ifPresent(((MessageCacheImpl) channel.getMessageCache())::removeMessage);
api.removeMessageFromCache(messageId);
Optional<Server> optionalServer = channel.asServerChannel().map(ServerChannel::getServer);
api.getEventDispatcher().dispatchMessageDeleteEvent(optionalServer.map(DispatchQueueSelector.class::cast).orElse(api), messageId, optionalServer.orElse(null), channel, event);
}
} else {
LoggerUtil.logMissingChannel(logger, channelId);
}
}
use of org.javacord.api.entity.server.Server in project Javacord by BtoBastian.
the class MessageReactionRemoveAllHandler method handle.
@Override
public void handle(JsonNode packet) {
long messageId = packet.get("message_id").asLong();
Optional<Message> message = api.getCachedMessageById(messageId);
message.ifPresent(msg -> ((MessageImpl) msg).removeAllReactionsFromCache());
long channelId = packet.get("channel_id").asLong();
TextChannel channel = api.getTextChannelById(channelId).orElse(null);
if (channel == null) {
if (packet.hasNonNull("guild_id")) {
// we don't know anything about the channel as it is part of a server and not cached
LoggerUtil.logMissingChannel(logger, channelId);
return;
}
// channel is a private channel:
channel = PrivateChannelImpl.dispatchPrivateChannelCreateEvent(api, new PrivateChannelImpl(api, channelId, null, null));
}
ReactionRemoveAllEvent event = new ReactionRemoveAllEventImpl(api, messageId, channel);
Optional<Server> optionalServer = channel.asServerChannel().map(ServerChannel::getServer);
api.getEventDispatcher().dispatchReactionRemoveAllEvent(optionalServer.map(DispatchQueueSelector.class::cast).orElse(api), messageId, optionalServer.orElse(null), channel, event);
}
use of org.javacord.api.entity.server.Server in project Javacord by BtoBastian.
the class ThreadDeleteHandler method dispatchThreadDeleteEvent.
/**
* Dispatches a thread delete event.
*
* @param serverThreadChannel The thread of the event.
*/
private void dispatchThreadDeleteEvent(final ServerThreadChannel serverThreadChannel) {
final ThreadDeleteEvent event = new ThreadDeleteEventImpl(serverThreadChannel);
final Server server = serverThreadChannel.getServer();
api.getEventDispatcher().dispatchThreadDeleteEvent((DispatchQueueSelector) server, serverThreadChannel, event);
}
use of org.javacord.api.entity.server.Server in project Javacord by BtoBastian.
the class DiscordWebSocketAdapter method onDisconnected.
@Override
public void onDisconnected(WebSocket websocket, WebSocketFrame serverCloseFrame, WebSocketFrame clientCloseFrame, boolean closedByServer) {
Optional<WebSocketFrame> closeFrameOptional = Optional.ofNullable(closedByServer ? serverCloseFrame : clientCloseFrame);
String closeReason = closeFrameOptional.map(WebSocketFrame::getCloseReason).orElse("unknown");
String closeCodeString = closeFrameOptional.map(closeFrame -> {
int code = closeFrame.getCloseCode();
return WebSocketCloseCode.fromCode(code).map(closeCode -> closeCode + " (" + code + ")").orElseGet(() -> String.valueOf(code));
}).orElse("'unknown'");
logger.info("Websocket closed with reason '{}' and code {} by {}!", closeReason, closeCodeString, closedByServer ? "server" : "client");
LostConnectionEvent lostConnectionEvent = new LostConnectionEventImpl(api);
api.getEventDispatcher().dispatchLostConnectionEvent(null, lostConnectionEvent);
// Squash it, until it stops beating
heart.squash();
if (!ready.isDone()) {
ready.complete(false);
return;
}
// Reconnect
if (reconnect) {
reconnectingOrResumingLock.lock();
try {
reconnectAttempt.incrementAndGet();
} finally {
reconnectingOrResumingLock.unlock();
}
logger.info("Trying to reconnect/resume in {} seconds!", api.getReconnectDelay(reconnectAttempt.get()));
// Reconnect after a (short?) delay depending on the amount of reconnect attempts
api.getThreadPool().getScheduler().schedule(this::connect, api.getReconnectDelay(reconnectAttempt.get()), TimeUnit.SECONDS);
}
}
use of org.javacord.api.entity.server.Server in project Javacord by BtoBastian.
the class ChannelPinsUpdateHandler method handle.
@Override
public void handle(JsonNode packet) {
long channelId = packet.get("channel_id").asLong();
Optional<TextChannel> optionalChannel = api.getTextChannelById(channelId);
if (optionalChannel.isPresent()) {
TextChannel channel = optionalChannel.get();
Instant lastPinTimestamp = packet.hasNonNull("last_pin_timestamp") ? OffsetDateTime.parse(packet.get("last_pin_timestamp").asText()).toInstant() : null;
ChannelPinsUpdateEvent event = new ChannelPinsUpdateEventImpl(channel, lastPinTimestamp);
Optional<Server> optionalServer = channel.asServerChannel().map(ServerChannel::getServer);
api.getEventDispatcher().dispatchChannelPinsUpdateEvent(optionalServer.map(DispatchQueueSelector.class::cast).orElse(api), optionalServer.orElse(null), channel, event);
} else {
LoggerUtil.logMissingChannel(logger, channelId);
}
}
Aggregations