public synchronized static Guild getGuild(IGuild discordGuild, boolean forceCache){ Guild guild = getGuilds().get(discordGuild.getStringID()); if (guild == null && forceCache){ guild = new Guild(discordGuild.getStringID(), discordGuild.getName(), Constants.defaultLanguage); guild.addToDatabase(); } return guild; }
/** * Builds the invite URL with the configuration specified by the builder. * * @return The invite URL with the configuration specified by the builder. */ public String build() { String url = DiscordEndpoints.AUTHORIZE+"?client_id=%s&scope=bot"; if (permissions != null) url += "&permissions="+Permissions.generatePermissionsNumber(permissions); if (guild != null) url += "&guild_id="+guild.getStringID(); try { return String.format(url, clientIDOverride == null ? client.getApplicationClientID() : clientIDOverride); } catch (DiscordException e) { Discord4J.LOGGER.error(LogMarkers.UTIL, "Discord4J Internal Exception", e); } return null; }
/** * Sends a request to edit the role. * * @param request The request object describing the changes to make. */ private void edit(RoleEditRequest request) { PermissionUtils.requireHierarchicalPermissions(guild, getClient().getOurUser(), Collections.singletonList(this), Permissions.MANAGE_ROLES); try { DiscordUtils.getRoleFromJSON(guild, DiscordUtils.MAPPER.readValue( ((DiscordClientImpl) getClient()).REQUESTS.PATCH.makeRequest( DiscordEndpoints.GUILDS + guild.getStringID() + "/roles/" + id, DiscordUtils.MAPPER_NO_NULLS.writeValueAsString(request)), RoleObject.class)); } catch (IOException e) { Discord4J.LOGGER.error(LogMarkers.HANDLE, "Discord4J Internal Exception", e); } }
@Override public void delete() { PermissionUtils.requireHierarchicalPermissions(guild, getClient().getOurUser(), Collections.singletonList(this), Permissions.MANAGE_ROLES); ((DiscordClientImpl) getClient()).REQUESTS.DELETE.makeRequest(DiscordEndpoints.GUILDS+guild.getStringID()+"/roles/"+id); }
@Override public void onWebSocketConnect(Session sess) { super.onWebSocketConnect(sess); Discord4J.LOGGER.info(LogMarkers.VOICE_WEBSOCKET, "Voice Websocket Connected."); send(VoiceOps.IDENTIFY, new VoiceIdentifyRequest(guild.getStringID(), shard.getClient().getOurUser().getStringID(), shard.ws.sessionId, token)); }
@Override public void removeRole(IRole role) { PermissionUtils.requireHierarchicalPermissions(role.getGuild(), client.getOurUser(), Collections.singletonList(role), Permissions.MANAGE_ROLES); ((DiscordClientImpl) client).REQUESTS.DELETE.makeRequest(DiscordEndpoints.GUILDS + role.getGuild().getStringID() + "/members/" + id + "/roles/" + role.getStringID()); }
public synchronized static Map<String, PortalTracker> getPortalTrackers(Guild guild){ Map<String, PortalTracker> portalTrackers = new HashMap<>(); Connexion connexion = Connexion.getInstance(); Connection connection = connexion.getConnection(); try { PreparedStatement query = connection.prepareStatement("SELECT id_guild, id_chan FROM Portal_Tracker WHERE id_guild = ?;"); query.setString(1, guild.getId()); ResultSet resultSet = query.executeQuery(); while (resultSet.next()){ String idChan = resultSet.getString("id_chan"); String idGuild = resultSet.getString("id_guild"); IChannel chan = ClientConfig.DISCORD().getChannelByID(Long.parseLong(idChan)); if (chan != null && ! chan.isDeleted()) portalTrackers.put(chan.getStringID(), new PortalTracker(chan.getGuild().getStringID(), chan.getStringID())); else { PortalTracker.removeToDatabase(idGuild, idChan); LOG.info("Chan deleted : " + idChan); } } } catch (SQLException e) { Reporter.report(e); LOG.error("getPortalTrackers", e); } return portalTrackers; }
@Override public void addRole(IRole role) { PermissionUtils.requireHierarchicalPermissions(role.getGuild(), client.getOurUser(), Collections.singletonList(role), Permissions.MANAGE_ROLES); ((DiscordClientImpl) client).REQUESTS.PUT.makeRequest(DiscordEndpoints.GUILDS + role.getGuild().getStringID() + "/members/" + id + "/roles/" + role.getStringID()); }
@Override public void request(IMessage message, Matcher m, Language lg) { if (isUserHasEnoughRights(message)) { if (m.group(1).matches("\\s+true") || m.group(1).matches("\\s+0") || m.group(1).matches("\\s+on")) if (!AlmanaxCalendar.getAlmanaxCalendars().containsKey(message.getChannel().getStringID())) { new AlmanaxCalendar(message.getGuild().getStringID(), message.getChannel().getStringID()).addToDatabase(); Message.sendText(message.getChannel(), Translator.getLabel(lg, "almanax-auto.request.1")); } else Message.sendText(message.getChannel(), Translator.getLabel(lg, "almanax-auto.request.2")); else if (m.group(1).matches("\\s+false") || m.group(1).matches("\\s+1") || m.group(1).matches("\\s+off")) if (AlmanaxCalendar.getAlmanaxCalendars().containsKey(message.getChannel().getStringID())) { AlmanaxCalendar.getAlmanaxCalendars().get(message.getChannel().getStringID()).removeToDatabase(); Message.sendText(message.getChannel(), Translator.getLabel(lg, "almanax-auto.request.3")); } else Message.sendText(message.getChannel(), Translator.getLabel(lg, "almanax-auto.request.4")); } else BasicDiscordException.NO_ENOUGH_RIGHTS.throwException(message, this, lg); }
@Override public void changeName(String name) { PermissionUtils.requirePermissions(getGuild(), getClient().getOurUser(), Permissions.MANAGE_EMOJIS); EmojiObject response = ((DiscordClientImpl) getClient()).REQUESTS.PATCH.makeRequest( DiscordEndpoints.GUILDS + getGuild().getStringID() + "/emojis/" + getStringID(), new EmojiEditRequest(name, getRoles().toArray(new IRole[getRoles().size()])), EmojiObject.class); IEmoji emoji = DiscordUtils.getEmojiFromJSON(getGuild(), response); }
private void ready(ReadyResponse ready) { Discord4J.LOGGER.info(LogMarkers.WEBSOCKET, "Connected to Discord Gateway v{}. Receiving {} guilds.", ready.v, ready.guilds.length); ws.state = DiscordWS.State.READY; ws.hasReceivedReady = true; // Websocket received actual ready event if (client.ourUser == null) client.ourUser = DiscordUtils.getUserFromJSON(shard, ready.user); client.getDispatcher().dispatch(new LoginEvent(shard)); new RequestBuilder(client).setAsync(true).doAction(() -> { ws.sessionId = ready.session_id; Set<UnavailableGuildObject> waitingGuilds = ConcurrentHashMap.newKeySet(ready.guilds.length); waitingGuilds.addAll(Arrays.asList(ready.guilds)); final AtomicInteger loadedGuilds = new AtomicInteger(0); client.getDispatcher().waitFor((GuildCreateEvent e) -> { waitingGuilds.removeIf(g -> g.id.equals(e.getGuild().getStringID())); return loadedGuilds.incrementAndGet() >= ready.guilds.length; }, (long) Math.ceil(Math.sqrt(2 * ready.guilds.length)), TimeUnit.SECONDS); waitingGuilds.forEach(guild -> client.getDispatcher().dispatch(new GuildUnavailableEvent(Long.parseUnsignedLong(guild.id)))); return true; }).andThen(() -> { if (this.shard.getInfo()[0] == 0) { // pms are only sent to shard 0 for (ChannelObject pmObj : ready.private_channels) { IPrivateChannel pm = (IPrivateChannel) DiscordUtils.getChannelFromJSON(shard, null, pmObj); shard.privateChannels.put(pm); } } ws.isReady = true; client.getDispatcher().dispatch(new ShardReadyEvent(shard)); // All information for this shard has been received return true; }).execute(); }
@EventSubscriber public void onReady(ChannelDeleteEvent event) { try { if (RSSFinder.getRSSFinders().containsKey(event.getChannel().getStringID())) RSSFinder.getRSSFinders().get(event.getChannel().getStringID()).removeToDatabase(); if (TwitterFinder.getTwitterChannels().containsKey(event.getChannel().getLongID())) TwitterFinder.getTwitterChannels().get(event.getChannel().getLongID()).removeToDatabase(); LOG.info(event.getGuild().getStringID() + " - Salon \"" + event.getChannel().getName() + "\" supprimé"); } catch(Exception e){ Reporter.report(e, event.getGuild(), event.getChannel()); LOG.error("onReady", e); } } }
@Override public void moveToVoiceChannel(IVoiceChannel channel) { IVoiceChannel oldChannel = getVoiceStateForGuild(channel.getGuild()).getChannel(); if (oldChannel == null) throw new DiscordException("User must already be in a voice channel before they can be moved to another."); // client must have permission to both move members and connect to the channel. PermissionUtils.requirePermissions(channel, client.getOurUser(), Permissions.VOICE_MOVE_MEMBERS, Permissions.VOICE_CONNECT); try { ((DiscordClientImpl) client).REQUESTS.PATCH.makeRequest( DiscordEndpoints.GUILDS + channel.getGuild().getStringID() + "/members/" + id, DiscordUtils.MAPPER_NO_NULLS.writeValueAsString(new MemberEditRequest.Builder().channel(channel.getStringID()).build())); } catch (JsonProcessingException e) { Discord4J.LOGGER.error(LogMarkers.HANDLE, "Discord4J Internal Exception", e); } }
@Override public void deleteEmoji() { PermissionUtils.requirePermissions(getGuild(), getClient().getOurUser(), Permissions.MANAGE_EMOJIS); ((DiscordClientImpl) getClient()).REQUESTS.DELETE.makeRequest( DiscordEndpoints.GUILDS + getGuild().getStringID() + "/emojis/" + getStringID()); ((Guild) guild).emojis.remove(this); }
public WebGuild fromGuild(IGuild g) { id = g.getStringID(); name = g.getName(); iconUrl = g.getIconURL(); botNick = g.getClient().getOurUser().getNicknameForGuild(g); settings = DatabaseManager.getManager().getSettings(g.getLongID()); //Handle lists and stuffs for (IRole r : g.getRoles()) { roles.add(new WebRole().fromRole(r, settings)); } WebChannel all = new WebChannel(); all.setId(0); all.setName("All Channels"); all.setDiscalChannel(settings.getDiscalChannel().equalsIgnoreCase("all")); channels.add(all); for (IChannel c : g.getChannels()) { channels.add(new WebChannel().fromChannel(c, settings)); } announcements.addAll(DatabaseManager.getManager().getAnnouncements(g.getLongID())); calendar = new WebCalendar().fromCalendar(DatabaseManager.getManager().getMainCalendar(Long.valueOf(id)), settings); return this; }
@Override public void mute(IGuild guild, boolean isSelfMuted) { VoiceState voiceState = (VoiceState) ourUser.getVoiceStateForGuild(guild); String channelID = null; long connectingID = ((Guild) guild).connectingVoiceChannelID; if (connectingID != 0) { channelID = Long.toUnsignedString(connectingID); } else if (voiceState.getChannel() != null) { channelID = voiceState.getChannel().getStringID(); } voiceState.setSelfMuted(isSelfMuted); ((ShardImpl) guild.getShard()).ws.send(GatewayOps.VOICE_STATE_UPDATE, new VoiceStateUpdateRequest( guild.getStringID(), channelID, isSelfMuted, voiceState.isSelfDeafened())); }
@Override public void deafen(IGuild guild, boolean isSelfDeafened) { VoiceState voiceState = (VoiceState) ourUser.getVoiceStateForGuild(guild); String channelID = null; long connectingID = ((Guild) guild).connectingVoiceChannelID; if (connectingID != 0) { channelID = Long.toUnsignedString(connectingID); } else if (voiceState.getChannel() != null) { channelID = voiceState.getChannel().getStringID(); } voiceState.setSelfDeafened(isSelfDeafened); ((ShardImpl) guild.getShard()).ws.send(GatewayOps.VOICE_STATE_UPDATE, new VoiceStateUpdateRequest( guild.getStringID(), channelID, voiceState.isSelfMuted(), isSelfDeafened)); }
@Override public void changeRoles(IRole[] roles) { PermissionUtils.requirePermissions(getGuild(), getClient().getOurUser(), Permissions.MANAGE_EMOJIS); EmojiObject response = ((DiscordClientImpl) getClient()).REQUESTS.PATCH.makeRequest( DiscordEndpoints.GUILDS + getGuild().getStringID() + "/emojis/" + getStringID(), new EmojiEditRequest(getName(), roles), EmojiObject.class); IEmoji emoji = DiscordUtils.getEmojiFromJSON(getGuild(), response); }
@Override public void join() { getShard().checkReady("join voice channel"); if (isConnected()) return; PermissionUtils.requirePermissions(this, client.getOurUser(), Permissions.VOICE_CONNECT); IVoiceState voiceState = getClient().getOurUser().getVoiceStateForGuild(getGuild()); boolean isSelfMuted = voiceState != null && voiceState.isSelfMuted(); boolean isSelfDeafened = voiceState != null && voiceState.isSelfDeafened(); ((ShardImpl) getShard()).ws.send(GatewayOps.VOICE_STATE_UPDATE, new VoiceStateUpdateRequest(getGuild().getStringID(), getStringID(), isSelfMuted, isSelfDeafened)); ((Guild) guild).connectingVoiceChannelID = getLongID(); }
@Override public void leave() { getShard().checkReady("leave voice channel"); if (!isConnected()) return; VoiceState voiceState = (VoiceState) getClient().getOurUser().getVoiceStateForGuild(getGuild()); boolean isSelfMuted = voiceState.isSelfMuted(); boolean isSelfDeafened = voiceState.isSelfDeafened(); ((ShardImpl) getShard()).ws.send(GatewayOps.VOICE_STATE_UPDATE, new VoiceStateUpdateRequest(getGuild().getStringID(), null, isSelfMuted, isSelfDeafened)); DiscordVoiceWS vWS = ((ShardImpl) getShard()).voiceWebSockets.get(getGuild().getLongID()); if (vWS != null) { vWS.disconnect(VoiceDisconnectedEvent.Reason.LEFT_CHANNEL); } voiceState.setChannel(null); }