use of net.dv8tion.jda.api.sharding.ShardManager in project Bean by Xirado.
the class GuildDataRoute method handle.
@Override
public Object handle(Request request, Response response) throws Exception {
String authHeader = request.headers("authorization");
if (authHeader == null || !authHeader.startsWith("Token ")) {
response.status(401);
return DataObject.empty().put("code", 401).put("message", "Unauthorized").toString();
}
String token = authHeader.substring(7);
byte[] tokenBytes = token.getBytes(StandardCharsets.UTF_8);
if (!Bean.getInstance().getAuthenticator().isAuthenticated(tokenBytes)) {
response.status(401);
return DataObject.empty().put("code", 401).put("message", "Invalid token (Try logging out and in again)").toString();
}
DataObject user = Bean.getInstance().getAuthenticator().getUser(tokenBytes);
DataObject body = DataObject.fromJson(request.bodyAsBytes());
if (body.isNull("guild") || body.isNull("data")) {
response.status(400);
return DataObject.empty().put("code", 400).put("message", "Bad request").toString();
}
long guildId = Long.parseUnsignedLong(body.getString("guild"));
long userId = user.getLong("id");
ShardManager manager = Bean.getInstance().getShardManager();
Guild guild = manager.getGuildById(guildId);
if (guild == null) {
response.status(401);
return DataObject.empty().put("code", 401).put("message", "Unauthorized").toString();
}
Member member;
try {
member = guild.retrieveMemberById(userId).complete();
} catch (ErrorResponseException ex) {
response.status(401);
return DataObject.empty().put("code", 401).put("message", ex.getMessage()).toString();
}
if (!member.hasPermission(Permission.ADMINISTRATOR)) {
response.status(401);
return DataObject.empty().put("code", 401).put("message", "Unauthorized").toString();
}
GuildData guildData = GuildManager.getGuildData(guild);
// Stuff to update
DataObject updatedData = body.getObject("data");
// old data
DataObject currentData = guildData.toData();
for (String key : updatedData.keys()) {
if (ALLOWED_SETTINGS.contains(key))
currentData.put(key, updatedData.get(key));
}
guildData.update();
return user.toString();
}
use of net.dv8tion.jda.api.sharding.ShardManager in project Bean by Xirado.
the class GuildsRoute method handle.
@Override
public Object handle(Request request, Response response) throws Exception {
String authHeader = request.headers("authorization");
if (authHeader == null || !authHeader.startsWith("Token ")) {
response.status(401);
return DataObject.empty().put("code", 401).put("message", "Unauthorized").toString();
}
String token = authHeader.substring(7);
byte[] tokenBytes = token.getBytes(StandardCharsets.UTF_8);
Authenticator authenticator = Bean.getInstance().getAuthenticator();
if (!authenticator.isAuthenticated(tokenBytes)) {
response.status(401);
return DataObject.empty().put("code", 401).put("message", "Invalid token (Try logging out and in again)").toString();
}
if (authenticator.isAccessTokenExpired(tokenBytes))
authenticator.refreshAccessToken(tokenBytes);
DataObject object = authenticator.getData(tokenBytes);
DiscordCredentials credentials = authenticator.getCredentials(tokenBytes);
String accessToken = credentials.getAccessToken();
DataObject guilds = WebServer.retrieveGuilds(accessToken);
if (guilds.isNull("guilds")) {
DataObject o = DataObject.empty();
o.put("http_code", guilds.getInt("http_code"));
if (!guilds.isNull("code"))
o.put("code", guilds.getInt("code"));
if (!guilds.isNull("message"))
o.put("message", guilds.getString("message"));
return o.toString();
}
ShardManager shardManager = Bean.getInstance().getShardManager();
List<DataObject> adminGuilds = guilds.getArray("guilds").stream(DataArray::getObject).filter(obj -> Permission.getPermissions(obj.getLong("permissions")).contains(Permission.ADMINISTRATOR) || obj.getBoolean("owner")).collect(Collectors.toList());
DataArray guildArray = DataArray.empty();
List<DataObject> nonInvitedGuilds = new ArrayList<>();
for (DataObject guild : adminGuilds) {
String name = guild.getString("name");
long id = guild.getLong("id");
String iconHash = guild.isNull("icon") ? null : guild.getString("icon");
boolean botJoined = shardManager.getGuildById(id) != null;
DataObject o = DataObject.empty();
o.put("name", name);
o.put("id", id + "");
if (iconHash != null)
o.put("icon", DiscordUtils.getIconUrl(id + "", iconHash));
o.put("bot_joined", botJoined);
StringBuilder initials = new StringBuilder();
for (String s : name.split("\\s+")) {
initials.append(s.charAt(0));
}
o.put("initials", initials.toString());
if (botJoined)
guildArray.add(o);
else
nonInvitedGuilds.add(o);
}
guildArray.addAll(nonInvitedGuilds);
return DataObject.empty().put("guilds", guildArray).put("base_invite_url", InviteURLRoute.getInviteURL()).put("http_code", guilds.getInt("http_code")).toString();
}
use of net.dv8tion.jda.api.sharding.ShardManager in project cjda-util by RainbowDashLabs.
the class DiscordResolver method getUser.
/**
* Get a user object by id, name or tag.
*
* @param userString string for lookup
*
* @return user object or null if no user is found
*/
public static Optional<User> getUser(ShardManager shardManager, String userString) {
if (userString == null) {
return Optional.empty();
}
User user = null;
var idRaw = getIdRaw(userString);
if (idRaw.isPresent()) {
user = byId(userString, shardManager::getUserById);
}
if (user == null && DISCORD_TAG.matcher(userString).matches()) {
user = shardManager.getUserByTag(userString);
}
if (user == null) {
return shardManager.getUserCache().stream().filter(cu -> cu.getName().toLowerCase().startsWith(userString.toLowerCase())).findFirst();
}
return Optional.of(user);
}
use of net.dv8tion.jda.api.sharding.ShardManager in project Utility by anweisen.
the class DiscordBot method init.
protected final void init() throws Exception {
if (initialized)
throw new IllegalStateException("init() was already called");
initialized = true;
builder = builder().validate();
DiscordBotBuilder.logger.debug("Building bot with following configuration:" + "\n\t" + config + "\n\t" + builder + "\n\t" + (builder.databaseConfig == null ? "BotDatabaseConfig{null}" : builder.databaseConfig));
boolean requireDatabase = builder.databaseConfig != null || !builder.tables.isEmpty() || builder.requireDatabase;
if (builder.databaseConfig == null) {
builder.databaseConfig = new BotDatabaseConfig("guilds", "guildId", null, null, null);
}
if (requireDatabase) {
database = config.createDatabase();
database.connect();
builder.tables.forEach((ExceptionallyBiConsumer<String, SQLColumn[]>) database::createTable);
} else {
database = Database.unsupported();
}
builder.fileLanguages.addAll(config.getLanguageFiles());
commandManager = new DefaultCommandManager(builder.databaseConfig.getPrefixColumn() == null ? new ConstantPrefixProvider(config.getDefaultPrefix()) : new DatabasePrefixProvider(config.getDefaultPrefix(), database, builder.databaseConfig.getGuildTable(), builder.databaseConfig.getGuildKeyColumn(), builder.databaseConfig.getPrefixColumn())).setUseEmbeds(builder.useEmbeds);
if (builder.databaseConfig.getTeamRoleColumn() != null) {
commandManager.setTeamRoleManager(new DatabaseTeamRoleManager(database, builder.databaseConfig.getGuildTable(), builder.databaseConfig.getGuildKeyColumn(), builder.databaseConfig.getTeamRoleColumn()));
}
if (builder.databaseConfig.getLanguageColumn() != null) {
LanguageManager languageManager = new DatabaseLanguageManager(database, builder.databaseConfig.getGuildTable(), builder.databaseConfig.getGuildKeyColumn(), builder.databaseConfig.getLanguageColumn());
commandManager.setLanguageManager(languageManager);
for (String filename : builder.fileLanguages) languageManager.readFile(filename);
for (String filename : builder.resourceLanguages) languageManager.readResource(filename);
languageManager.setDefaultLanguage(config.getDefaultLanguage());
} else if (!builder.fileLanguages.isEmpty() || !builder.resourceLanguages.isEmpty()) {
DiscordBotBuilder.logger.warn("Languages were registered but no database for language management is setup!");
LanguageManager languageManager = new ConstantLanguageManager();
commandManager.setLanguageManager(languageManager);
for (String filename : builder.fileLanguages) languageManager.readFile(filename);
for (String filename : builder.resourceLanguages) languageManager.readResource(filename);
languageManager.setDefaultLanguage(config.getDefaultLanguage());
}
builder.parsers.forEach((key, parser) -> commandManager.getParserContext().registerParser(key, parser.getFirst(), parser.getSecond()));
commandManager.register(builder.commands);
builder.taskCommands.forEach(pair -> commandManager.register(pair.getFirst(), pair.getSecond()));
List<GatewayIntent> intents = Arrays.asList(builder.intents);
if (!intents.contains(GatewayIntent.DIRECT_MESSAGES))
DiscordBotBuilder.logger.warn("Missing GatewayIntent.DIRECT_MESSAGES, no commands will be available in private chats");
if (!intents.contains(GatewayIntent.GUILD_MESSAGES))
DiscordBotBuilder.logger.warn("Missing GatewayIntent.GUILD_MESSAGES, no commands will be available in guild chats");
DefaultShardManagerBuilder shardManagerBuilder = DefaultShardManagerBuilder.create(config.getToken(), intents).setCallbackPoolProvider(newThreadPoolProvider("Callback")).setEventPoolProvider(newThreadPoolProvider("Events")).setShardsTotal(config.getShards()).setMemberCachePolicy(builder.memberCachePolicy).setEventManagerProvider(shardId -> eventManager).setStatusProvider(shardId -> config.getOnlineStatus()).addEventListeners(new CommandListener(commandManager), this);
if (builder.chunkingFilter != null)
shardManagerBuilder.setChunkingFilter(builder.chunkingFilter);
builder.builderSettings.forEach(action -> action.accept(shardManagerBuilder));
builder.listener.forEach(shardManagerBuilder::addEventListeners);
for (CacheFlag cache : CacheFlag.values()) {
if (builder.cacheFlags.contains(cache)) {
shardManagerBuilder.enableCache(cache);
} else {
shardManagerBuilder.disableCache(cache);
}
}
shardManager = shardManagerBuilder.build();
builder.shardManagerSettings.forEach(action -> action.accept(shardManager));
if (!builder.customSlashCommands.isEmpty())
getJDA().updateCommands().addCommands(builder.customSlashCommands).queue();
else if (!builder.disableAutoSlashCommands)
commandManager.setupSlashCommands(getJDA());
getJDA().retrieveApplicationInfo().queue(applicationInfo -> this.applicationInfo = applicationInfo);
onStart();
if (!builder.activities.isEmpty()) {
new Timer("BotActivityChanger").schedule(new TimerTask() {
private int index = 0;
@Override
public void run() {
if (index >= builder.activities.size()) {
index = 0;
}
Supplier<? extends Activity> activitySupplier = builder.activities.get(index);
Activity activity = activitySupplier.get();
shardManager.setActivity(activity);
index++;
}
}, 3000, builder.activityUpdateRate * 1000L);
}
}
use of net.dv8tion.jda.api.sharding.ShardManager in project SkyBot by duncte123.
the class ShardInfoCommand method embedTable.
private void embedTable(CommandContext ctx) {
final EmbedBuilder embedBuilder = new EmbedBuilder();
final int currentShard = ctx.getJDA().getShardInfo().getShardId();
final ShardManager shardManager = ctx.getJDA().getShardManager();
final ShardCacheView shardCache = shardManager.getShardCache();
final List<JDA> shards = new ArrayList<>(shardCache.asList());
Collections.reverse(shards);
for (final JDA shard : shards) {
final StringBuilder valueBuilder = new StringBuilder();
final LongLongPair channelStats = getConnectedVoiceChannels(shard);
valueBuilder.append("**Status:** ").append(getShardStatus(shard)).append("\n**Ping:** ").append(shard.getGatewayPing()).append("\n**Guilds:** ").append(shard.getGuildCache().size()).append("\n**VCs:** ").append(channelStats.getFirst()).append(" / ").append(channelStats.getSecond());
final int shardId = shard.getShardInfo().getShardId();
embedBuilder.addField(String.format("Shard #%s%s", shardId, shardId == currentShard ? " (current)" : ""), valueBuilder.toString(), true);
}
final long connectedShards = shardCache.applyStream((s) -> s.filter((shard) -> shard.getStatus() == JDA.Status.CONNECTED).count());
final String avgPing = new DecimalFormat("###").format(shardManager.getAverageGatewayPing());
final long guilds = shardManager.getGuildCache().size();
final LongLongPair channelStats = getConnectedVoiceChannels(shardManager);
embedBuilder.addField("Total/Average", String.format("**Connected:** %s\n**Ping:** %s\n**Guilds:** %s\n**VCs:** %s / %s", connectedShards, avgPing, guilds, channelStats.getFirst(), channelStats.getSecond()), false);
sendEmbed(ctx, embedBuilder);
}
Aggregations