Migrate to D4j v3.1.0-SNAPSHOT

Massive changes to the bot and d4j required migrating to the latest
snapshot. So far everything seems to work well, but will be tested later
on this week. Hopefully this is one step closer to being able to deploy
this to production in order to make the bot more stable and responsive.
This commit is contained in:
NovaFox161
2020-04-13 01:28:17 -05:00
parent 5d89cf60af
commit 1c9eb49e95
71 changed files with 368 additions and 282 deletions
@@ -33,24 +33,27 @@ import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import discord4j.core.DiscordClient;
import discord4j.core.DiscordClientBuilder;
import discord4j.core.GatewayDiscordClient;
import discord4j.core.event.domain.channel.TextChannelDeleteEvent;
import discord4j.core.event.domain.lifecycle.ReadyEvent;
import discord4j.core.event.domain.role.RoleDeleteEvent;
import discord4j.core.object.data.stored.GuildBean;
import discord4j.core.object.data.stored.MessageBean;
import discord4j.core.object.presence.Activity;
import discord4j.core.object.presence.Presence;
import discord4j.core.shard.ShardingStrategy;
import discord4j.discordjson.json.GuildData;
import discord4j.discordjson.json.MessageData;
import discord4j.store.api.mapping.MappingStoreService;
import discord4j.store.api.service.StoreService;
import discord4j.store.jdk.JdkStoreService;
import discord4j.store.redis.RedisStoreService;
import io.lettuce.core.RedisClient;
import io.lettuce.core.RedisURI;
import reactor.core.publisher.Mono;
@SpringBootApplication(exclude = SessionAutoConfiguration.class)
public class DisCalClient {
private static DiscordClient client;
private static GatewayDiscordClient client;
public static void main(String[] args) throws IOException {
//Get settings
@@ -58,28 +61,6 @@ public class DisCalClient {
p.load(new FileReader(new File("settings.properties")));
BotSettings.init(p);
//Handle client setup
client = createClient();
//Register discord events
client.getEventDispatcher().on(ReadyEvent.class).subscribe(ReadyEventListener::handle);
client.getEventDispatcher().on(TextChannelDeleteEvent.class).subscribe(ChannelDeleteListener::handle);
client.getEventDispatcher().on(RoleDeleteEvent.class).subscribe(RoleDeleteListener::handle);
//Register commands
CommandExecutor executor = CommandExecutor.getExecutor().enable();
executor.registerCommand(new HelpCommand());
executor.registerCommand(new DisCalCommand());
executor.registerCommand(new CalendarCommand());
executor.registerCommand(new AddCalendarCommand());
executor.registerCommand(new TimeCommand());
executor.registerCommand(new LinkCalendarCommand());
executor.registerCommand(new EventListCommand());
executor.registerCommand(new EventCommand());
executor.registerCommand(new RsvpCommand());
executor.registerCommand(new AnnouncementCommand());
executor.registerCommand(new DevCommand());
//Start Google authorization daemon
Authorization.getAuth().init();
@@ -93,9 +74,6 @@ public class DisCalClient {
TimeManager.getManager().init();
//Login
client.login().subscribe();
//Start Spring
if (BotSettings.RUN_API.get().equalsIgnoreCase("true")) {
try {
@@ -118,46 +96,86 @@ public class DisCalClient {
AnnouncementThreader.getThreader().shutdown();
DatabaseManager.disconnectFromMySQL();
client.logout().block();
client.logout().subscribe();
}));
//Login
DiscordClientBuilder.create(BotSettings.TOKEN.get())
.build().gateway()
.setSharding(getStrategy())
.setStoreService(getStores())
.setInitialStatus(shard -> Presence.online(Activity.playing("Booting Up!")))
.withGateway(client -> {
DisCalClient.client = client;
//Register listeners
Mono<Void> onReady = client.getEventDispatcher()
.on(ReadyEvent.class)
.map(e -> {
ReadyEventListener.handle(e);
return Mono.empty();
}).then();
Mono<Void> onTextChannelDelete = client.getEventDispatcher()
.on(TextChannelDeleteEvent.class)
.map(e -> {
ChannelDeleteListener.handle(e);
return Mono.empty();
}).then();
Mono<Void> onRoleDelete = client.getEventDispatcher()
.on(RoleDeleteEvent.class)
.map(e -> {
RoleDeleteListener.handle(e);
return Mono.empty();
}).then();
//Register commands
CommandExecutor executor = CommandExecutor.getExecutor().enable();
executor.registerCommand(new HelpCommand());
executor.registerCommand(new DisCalCommand());
executor.registerCommand(new CalendarCommand());
executor.registerCommand(new AddCalendarCommand());
executor.registerCommand(new TimeCommand());
executor.registerCommand(new LinkCalendarCommand());
executor.registerCommand(new EventListCommand());
executor.registerCommand(new EventCommand());
executor.registerCommand(new RsvpCommand());
executor.registerCommand(new AnnouncementCommand());
executor.registerCommand(new DevCommand());
return Mono.when(onReady, onTextChannelDelete, onRoleDelete);
}).block();
}
/**
* Creates the DisCal bot client.
*
* @return The client if successful, otherwise <code>null</code>.
*/
private static DiscordClient createClient() {
DiscordClientBuilder clientBuilder = new DiscordClientBuilder(BotSettings.TOKEN.get());
//Handle shard count and index for multiple java instances
clientBuilder.setShardIndex(Integer.valueOf(BotSettings.SHARD_INDEX.get()));
clientBuilder.setShardCount(Integer.valueOf(BotSettings.SHARD_COUNT.get()));
clientBuilder.setInitialPresence(Presence.online(Activity.playing("Booting Up!")));
private static ShardingStrategy getStrategy() {
return ShardingStrategy.builder()
.count(Integer.parseInt(BotSettings.SHARD_COUNT.get()))
.indices(Integer.parseInt(BotSettings.SHARD_INDEX.get()))
.build();
}
//Redis info + store service for caching
private static StoreService getStores() {
if (BotSettings.USE_REDIS_STORES.get().equalsIgnoreCase("true")) {
RedisURI uri = RedisURI.Builder
.redis(BotSettings.REDIS_HOSTNAME.get(), Integer.parseInt(BotSettings.REDIS_PORT.get()))
.withPassword(BotSettings.REDIS_PASSWORD.get())
.build();
.redis(BotSettings.REDIS_HOSTNAME.get(), Integer.parseInt(BotSettings.REDIS_PORT.get()))
.withPassword(BotSettings.REDIS_PASSWORD.get())
.build();
RedisStoreService rss = new RedisStoreService(RedisClient.create(uri));
RedisStoreService rss = new RedisStoreService.Builder()
.redisClient(RedisClient.create(uri))
.build();
MappingStoreService mss = MappingStoreService.create()
.setMappings(rss, GuildBean.class, MessageBean.class)
.setFallback(new JdkStoreService());
clientBuilder.setStoreService(mss);
return MappingStoreService.create()
.setMappings(rss, GuildData.class, MessageData.class)
.setFallback(new JdkStoreService());
} else {
clientBuilder.setStoreService(new JdkStoreService());
return new JdkStoreService();
}
return clientBuilder.build();
}
//Public stuffs
public static DiscordClient getClient() {
public static GatewayDiscordClient getClient() {
return client;
}
@@ -14,7 +14,7 @@ import java.util.UUID;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.Message;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 3/4/2017.
@@ -25,7 +25,7 @@ import discord4j.core.object.util.Snowflake;
public class AnnouncementCreator {
private static AnnouncementCreator instance;
private ArrayList<Announcement> announcements = new ArrayList<>();
private final ArrayList<Announcement> announcements = new ArrayList<>();
private AnnouncementCreator() {
} //Prevent initialization
@@ -19,14 +19,14 @@ import java.util.ArrayList;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.Message;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 1/4/2017.
* Website: www.cloudcraftgaming.com
* For Project: DisCal
*/
@SuppressWarnings({"ConstantConditions", "Duplicates", "OptionalGetWithoutIsPresent"})
@SuppressWarnings({"ConstantConditions", "Duplicates"})
public class CalendarCreator {
private static CalendarCreator instance;
@@ -24,14 +24,14 @@ import java.util.Arrays;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.Message;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 1/3/2017.
* Website: www.cloudcraftgaming.com
* For Project: DisCal
*/
@SuppressWarnings({"Duplicates", "ConstantConditions", "OptionalGetWithoutIsPresent"})
@SuppressWarnings({"Duplicates", "ConstantConditions"})
public class EventCreator {
private static EventCreator instance;
@@ -3,7 +3,7 @@ package org.dreamexposure.discal.client.listeners.discord;
import org.dreamexposure.discal.core.database.DatabaseManager;
import discord4j.core.event.domain.channel.TextChannelDeleteEvent;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
import reactor.core.publisher.Mono;
public class ChannelDeleteListener {
@@ -7,7 +7,7 @@ import org.dreamexposure.discal.core.logger.object.LogObject;
import org.dreamexposure.discal.core.utils.GlobalConst;
import discord4j.core.event.domain.lifecycle.ReadyEvent;
import discord4j.core.object.util.Image;
import discord4j.rest.util.Image;
/**
* @author NovaFox161
@@ -22,11 +22,8 @@ public class ReadyEventListener {
public static void handle(ReadyEvent event) {
try {
GlobalConst.iconUrl = DisCalClient.getClient()
.getApplicationInfo().
block()
.getIcon(Image.Format.PNG)
.get();
GlobalConst.iconUrl = DisCalClient.getClient().getApplicationInfo()
.map(info -> info.getIconUrl(Image.Format.PNG)).block().get();
MessageManager.reloadLangs();
@@ -3,7 +3,7 @@ package org.dreamexposure.discal.client.listeners.discord;
import org.dreamexposure.discal.core.database.DatabaseManager;
import discord4j.core.event.domain.role.RoleDeleteEvent;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
import reactor.core.publisher.Mono;
public class RoleDeleteListener {
@@ -23,11 +23,11 @@ import java.util.function.Consumer;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.entity.Member;
import discord4j.core.object.entity.Role;
import discord4j.core.object.entity.TextChannel;
import discord4j.core.object.entity.User;
import discord4j.core.object.util.Image;
import discord4j.core.object.util.Snowflake;
import discord4j.core.object.entity.channel.TextChannel;
import discord4j.core.spec.EmbedCreateSpec;
import discord4j.rest.util.Image;
import discord4j.rest.util.Snowflake;
import reactor.core.publisher.Mono;
/**
@@ -1,10 +1,7 @@
package org.dreamexposure.discal.client.message;
import com.google.api.services.calendar.model.Calendar;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.util.Image;
import discord4j.core.object.util.Snowflake;
import discord4j.core.spec.EmbedCreateSpec;
import org.dreamexposure.discal.client.DisCalClient;
import org.dreamexposure.discal.core.object.GuildSettings;
import org.dreamexposure.discal.core.object.calendar.PreCalendar;
@@ -12,6 +9,11 @@ import org.dreamexposure.discal.core.utils.GlobalConst;
import java.util.function.Consumer;
import discord4j.core.object.entity.Guild;
import discord4j.core.spec.EmbedCreateSpec;
import discord4j.rest.util.Image;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 11/10/17.
* Website: www.cloudcraftgaming.com
@@ -27,8 +27,8 @@ import java.util.function.Consumer;
import javax.annotation.Nullable;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.util.Image;
import discord4j.core.spec.EmbedCreateSpec;
import discord4j.rest.util.Image;
/**
* Created by Nova Fox on 1/3/2017.
@@ -14,8 +14,8 @@ import java.util.function.Consumer;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.Message;
import discord4j.core.object.entity.TextChannel;
import discord4j.core.object.entity.User;
import discord4j.core.object.entity.channel.TextChannel;
import discord4j.core.spec.EmbedCreateSpec;
import reactor.core.publisher.Mono;
@@ -25,7 +25,7 @@ import java.util.HashMap;
import java.util.List;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@SuppressWarnings({"WeakerAccess", "Duplicates"})
public class AnnouncementThread extends Thread {
@@ -45,7 +45,7 @@ public class AnnouncementThread extends Thread {
public void run() {
try {
//Verify the client is logged in
if (DisCalClient.getClient() == null || !DisCalClient.getClient().isConnected())
if (DisCalClient.getClient() == null)
return;
//Get the default stuff.
@@ -26,12 +26,12 @@ import java.util.function.Consumer;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.entity.GuildChannel;
import discord4j.core.object.entity.Member;
import discord4j.core.object.entity.Message;
import discord4j.core.object.entity.Role;
import discord4j.core.object.util.Snowflake;
import discord4j.core.object.entity.channel.GuildChannel;
import discord4j.core.spec.EmbedCreateSpec;
import discord4j.rest.util.Snowflake;
import reactor.core.publisher.Mono;
/**
@@ -1,9 +1,9 @@
package org.dreamexposure.discal.client.module.command;
import org.dreamexposure.discal.client.DisCalClient;
import org.dreamexposure.discal.core.database.DatabaseManager;
import org.dreamexposure.discal.core.logger.LogFeed;
import org.dreamexposure.discal.core.logger.object.LogObject;
import org.dreamexposure.discal.core.object.BotSettings;
import org.dreamexposure.discal.core.object.GuildSettings;
import org.dreamexposure.discal.core.utils.PermissionChecker;
@@ -27,8 +27,8 @@ class CommandListener {
*/
static void onMessageEvent(MessageCreateEvent event) {
try {
if (event.getMessage().getContent().isPresent() && !event.getMessage().getContent().get().isEmpty() && event.getMember().isPresent() && !event.getMember().get().isBot()) {
String content = event.getMessage().getContent().get();
if (!event.getMessage().getContent().isEmpty() && event.getMember().isPresent() && !event.getMember().get().isBot()) {
String content = event.getMessage().getContent();
//Message is a valid guild message (not DM and not from a bot). Check if in correct channel.
GuildSettings settings = DatabaseManager.getSettings(event.getGuildId().get()).block();
if (content.startsWith(settings.getPrefix())) {
@@ -46,7 +46,7 @@ class CommandListener {
CommandExecutor.getExecutor().issueCommand(argsOr[0].replace(settings.getPrefix(), ""), new String[0], event, settings);
}
}
} else if (!event.getMessage().mentionsEveryone() && !content.contains("@here") && (content.startsWith("<@" + DisCalClient.getClient().getSelfId().get().asString() + ">") || content.startsWith("<@!" + DisCalClient.getClient().getSelfId().get().asString() + ">"))) {
} else if (!event.getMessage().mentionsEveryone() && !content.contains("@here") && (content.startsWith("<@" + BotSettings.ID.get() + ">") || content.startsWith("<@!" + BotSettings.ID.get() + ">"))) {
if (PermissionChecker.isCorrectChannel(event, settings).blockOptional().orElse(false)) {
String[] argsOr = content.split("\\s+");
if (argsOr.length > 2) {
@@ -67,7 +67,7 @@ class CommandListener {
}
} catch (Exception e) {
LogFeed.log(LogObject
.forException("Command error", event.getMessage().getContent().get(), e,
.forException("Command error", event.getMessage().getContent(), e,
CommandListener.class));
}
}
@@ -22,14 +22,14 @@ import java.util.function.Consumer;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import discord4j.core.DiscordClient;
import discord4j.core.GatewayDiscordClient;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.entity.Member;
import discord4j.core.object.entity.Message;
import discord4j.core.object.entity.MessageChannel;
import discord4j.core.object.util.Snowflake;
import discord4j.core.object.entity.channel.MessageChannel;
import discord4j.core.spec.EmbedCreateSpec;
import discord4j.rest.util.Snowflake;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
@@ -205,9 +205,9 @@ public class DevCommand implements ICommand {
Guild guild = event.getGuild().block();
Member user = event.getMember().get();
Message message = event.getMessage();
DiscordClient client = event.getClient();
GatewayDiscordClient client = event.getClient();
MessageChannel channel = event.getMessage().getChannel().block();
String input = message.getContent().get().substring(message.getContent().get().indexOf("eval") + 5).replaceAll("`", "");
String input = message.getContent().substring(message.getContent().indexOf("eval") + 5).replaceAll("`", "");
Object o = null;
factory.put("guild", guild);
factory.put("channel", channel);
@@ -17,11 +17,11 @@ import java.util.function.Consumer;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.entity.GuildChannel;
import discord4j.core.object.entity.Member;
import discord4j.core.object.entity.Role;
import discord4j.core.object.util.Image;
import discord4j.core.object.entity.channel.GuildChannel;
import discord4j.core.spec.EmbedCreateSpec;
import discord4j.rest.util.Image;
/**
* Created by Nova Fox on 1/5/2017.
@@ -17,8 +17,8 @@ import java.util.function.Consumer;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.entity.Member;
import discord4j.core.object.util.Image;
import discord4j.core.spec.EmbedCreateSpec;
import discord4j.rest.util.Image;
/**
* Created by Nova Fox on 8/31/17.
@@ -21,15 +21,15 @@ import java.util.function.Consumer;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.util.Image;
import discord4j.core.spec.EmbedCreateSpec;
import discord4j.rest.util.Image;
/**
* Created by Nova Fox on 6/16/17.
* Website: www.cloudcraftgaming.com
* For Project: DisCal
*/
@SuppressWarnings({"OptionalGetWithoutIsPresent", "ConstantConditions"})
@SuppressWarnings({"ConstantConditions"})
public class TimeCommand implements ICommand {
/**
@@ -40,17 +40,20 @@ public class StatusChanger extends TimerTask {
@Override
public void run() {
String status = statuses.get(index);
status = status.replace("%guCount%", DisCalClient.getClient().getGuilds().count().block() + "");
status = status.replace("%calCount%", DatabaseManager.getCalendarCount().block() + "");
status = status.replace("%annCount%", DatabaseManager.getAnnouncementCount().block() + "");
status = status.replace("%shards%", BotSettings.SHARD_COUNT.get());
if (DisCalClient.getClient() != null) {
DisCalClient.getClient().updatePresence(Presence.online(Activity.playing(status))).subscribe();
//Set new index.
if (index + 1 >= statuses.size())
index = 0;
else
index++;
String status = statuses.get(index);
status = status.replace("%guCount%", DisCalClient.getClient().getGuilds().count().block() + "");
status = status.replace("%calCount%", DatabaseManager.getCalendarCount().block() + "");
status = status.replace("%annCount%", DatabaseManager.getAnnouncementCount().block() + "");
status = status.replace("%shards%", BotSettings.SHARD_COUNT.get());
DisCalClient.getClient().updatePresence(Presence.online(Activity.playing(status))).subscribe();
//Set new index.
if (index + 1 >= statuses.size())
index = 0;
else
index++;
}
}
}
@@ -37,7 +37,7 @@ public class KeepAliveHandler {
JSONObject data = new JSONObject();
data.put("index", Integer.parseInt(BotSettings.SHARD_INDEX.get()));
if (DisCalClient.getClient() != null && DisCalClient.getClient().isConnected())
if (DisCalClient.getClient() != null)
data.put("guilds", DisCalClient.getClient().getGuilds().count().block());
else
data.put("guilds", 0);
@@ -1,32 +0,0 @@
package org.dreamexposure.discal.client.utils;
import org.dreamexposure.discal.client.DisCalClient;
import org.dreamexposure.discal.core.object.BotSettings;
import java.util.Optional;
import discord4j.core.ServiceMediator;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.util.Snowflake;
public class GuildFinder {
public static Optional<Guild> findGuild(Snowflake guildId) {
if ((guildId.asLong() >> 22) % Integer.parseInt(BotSettings.SHARD_COUNT.get()) == DisCalClient.clientId()) {
ServiceMediator med = DisCalClient.getClient().getServiceMediator();
return med.getStateHolder().getGuildStore()
.find(guildId.asLong())
.blockOptional()
.map(bean -> new Guild(med, bean));
}
return Optional.empty();
}
public static Optional<Guild> getGuild(Snowflake guildId) {
ServiceMediator med = DisCalClient.getClient().getServiceMediator();
return med.getStateHolder().getGuildStore()
.find(guildId.asLong())
.blockOptional()
.map(bean -> new Guild(med, bean));
}
}
@@ -21,7 +21,7 @@ import java.util.Map;
import java.util.UUID;
import java.util.function.Function;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
import io.r2dbc.pool.ConnectionPool;
import io.r2dbc.pool.ConnectionPoolConfiguration;
import io.r2dbc.spi.Connection;
@@ -900,7 +900,7 @@ public class DatabaseManager {
+ " WHERE ENABLED = 1 AND GUILD_ID = ?";
return Mono.from(c.createStatement(query)
.bind(0, guildId)
.bind(0, guildId.asString())
.execute());
}).flatMapMany(res -> res.map((row, rowMetadata) -> {
UUID announcementId = UUID.fromString(row.get("ANNOUNCEMENT_ID", String.class));
@@ -1,15 +1,16 @@
package org.dreamexposure.discal.core.filter;
import org.slf4j.Marker;
import java.util.Arrays;
import java.util.List;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.turbo.TurboFilter;
import ch.qos.logback.core.spi.FilterReply;
import discord4j.discordjson.json.gateway.Opcode;
import discord4j.gateway.json.GatewayPayload;
import discord4j.gateway.json.Opcode;
import org.slf4j.Marker;
import java.util.Arrays;
import java.util.List;
@SuppressWarnings("unused")
public class GatewayEventFilter extends TurboFilter {
@@ -5,7 +5,7 @@ import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Collections;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 11/10/17.
@@ -10,7 +10,7 @@ import java.util.Collections;
import java.util.UUID;
import discord4j.core.object.entity.Message;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 11/10/17.
@@ -2,7 +2,7 @@ package org.dreamexposure.discal.core.object.calendar;
import org.json.JSONObject;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 11/10/17.
@@ -1,8 +1,9 @@
package org.dreamexposure.discal.core.object.calendar;
import com.google.api.services.calendar.model.Calendar;
import discord4j.core.object.entity.Message;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 11/10/17.
@@ -2,7 +2,7 @@ package org.dreamexposure.discal.core.object.event;
import org.json.JSONObject;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 11/10/17.
@@ -15,7 +15,7 @@ import org.dreamexposure.discal.core.object.calendar.CalendarData;
import org.dreamexposure.discal.core.utils.TimeUtils;
import discord4j.core.object.entity.Message;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 11/10/17.
@@ -6,7 +6,7 @@ import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Collections;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 11/10/17.
@@ -3,7 +3,7 @@ package org.dreamexposure.discal.core.object.web;
import org.dreamexposure.discal.core.object.GuildSettings;
import org.json.JSONObject;
import discord4j.core.object.entity.TextChannel;
import discord4j.core.object.entity.channel.TextChannel;
/**
* Created by Nova Fox on 1/6/18.
@@ -13,9 +13,13 @@ import java.util.List;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.entity.Member;
import discord4j.core.object.entity.TextChannel;
import discord4j.core.object.util.Image;
import discord4j.core.object.util.Snowflake;
import discord4j.core.object.entity.channel.TextChannel;
import discord4j.discordjson.json.GuildUpdateData;
import discord4j.discordjson.json.MemberData;
import discord4j.discordjson.possible.Possible;
import discord4j.rest.entity.RestGuild;
import discord4j.rest.util.Image;
import discord4j.rest.util.Snowflake;
import reactor.core.publisher.Mono;
import reactor.function.TupleUtils;
@@ -25,6 +29,53 @@ import reactor.function.TupleUtils;
* For Project: DisCal-Discord-Bot
*/
public class WebGuild {
public static WebGuild fromGuild(RestGuild g) {
GuildUpdateData data = g.getData().block();
Snowflake id = Snowflake.of(data.id());
String name = data.name();
String iconUrl = data.icon().orElse("");
Mono<String> botNick = g.member(Long.parseLong(BotSettings.ID.get()))
.getData()
.map(MemberData::nick)
.map(Possible::flatOpt)
.flatMap(Mono::justOrEmpty)
.defaultIfEmpty("DisCal");
Mono<GuildSettings> settings = DatabaseManager.getSettings(id).cache();
Mono<List<WebRole>> roles = settings.flatMapMany(s ->
g.getRoles().map(role -> WebRole.fromRole(role, s)))
.collectList();
Mono<List<WebChannel>> webChannels = settings.flatMapMany(s ->
g.getChannels()
.ofType(TextChannel.class)
.map(channel -> WebChannel.fromChannel(channel, s)))
.collectList();
Mono<List<Announcement>> announcements = DatabaseManager.getAnnouncements(id);
Mono<WebCalendar> calendar = settings.flatMap(s ->
DatabaseManager.getMainCalendar(id)
.flatMap(d -> Mono.just(WebCalendar.fromCalendar(d, s)))
);
return Mono.zip(botNick, settings, roles, webChannels, announcements, calendar)
.map(TupleUtils.function((bn, s, r, wc, a, c) -> {
WebGuild wg = new WebGuild(id.asLong(), name, iconUrl, s, bn, false, false, c);
wg.getChannels().add(WebChannel.all(s));
wg.getRoles().addAll(r);
wg.getChannels().addAll(wc);
wg.getAnnouncements().addAll(a);
return wg;
})).block();
}
public static WebGuild fromGuild(Guild g) {
long id = g.getId().asLong();
String name = g.getName();
@@ -99,10 +150,6 @@ public class WebGuild {
return webGuild;
}
public static WebGuild fromPartialGuild(long id, String name, String icon) {
return new WebGuild(id, name, icon, null, null, false, false, null);
}
private final long id;
private final String name;
private final String iconUrl;
@@ -4,6 +4,7 @@ import org.dreamexposure.discal.core.object.GuildSettings;
import org.json.JSONObject;
import discord4j.core.object.entity.Role;
import discord4j.discordjson.json.RoleData;
/**
* Created by Nova Fox on 1/6/18.
@@ -22,6 +23,18 @@ public class WebRole {
return new WebRole(r.getId().asLong(), r.getName(), r.isManaged(), controlRole, r.isEveryone());
}
public static WebRole fromRole(RoleData r, GuildSettings settings) {
boolean controlRole;
boolean everyone = r.id().equals(settings.getGuildID().asString());
if (everyone && settings.getControlRole().equalsIgnoreCase("everyone"))
controlRole = true;
else
controlRole = settings.getControlRole().equalsIgnoreCase(r.id());
return new WebRole(Long.parseLong(r.id()), r.name(), r.managed(), controlRole, everyone);
}
public static WebRole fromJson(JSONObject data) {
long id = Long.parseLong(data.getString("id"));
String name = data.getString("name");
@@ -4,7 +4,7 @@ import org.dreamexposure.discal.core.database.DatabaseManager;
import java.util.UUID;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 11/10/17.
@@ -2,7 +2,7 @@ package org.dreamexposure.discal.core.utils;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.entity.TextChannel;
import discord4j.core.object.entity.channel.TextChannel;
/**
* Created by Nova Fox on 3/29/2017.
@@ -12,7 +12,7 @@ import org.dreamexposure.discal.core.object.GuildSettings;
import org.dreamexposure.discal.core.object.calendar.CalendarData;
import org.dreamexposure.discal.core.object.event.PreEvent;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
import reactor.core.publisher.Mono;
/**
@@ -1,9 +1,9 @@
package org.dreamexposure.discal.core.utils;
import discord4j.core.object.util.Snowflake;
import okhttp3.MediaType;
import java.awt.Color;
import java.awt.*;
import discord4j.rest.util.Snowflake;
import okhttp3.MediaType;
public class GlobalConst {
public static final String version = "3.0.0";
@@ -2,7 +2,7 @@ package org.dreamexposure.discal.core.utils;
import org.dreamexposure.discal.core.object.BotSettings;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 11/6/17.
@@ -3,12 +3,21 @@ package org.dreamexposure.discal.core.utils;
import org.dreamexposure.discal.core.object.BotSettings;
import org.dreamexposure.discal.core.object.GuildSettings;
import java.util.function.Predicate;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.Channel;
import discord4j.core.object.entity.Member;
import discord4j.core.object.entity.Role;
import discord4j.core.object.util.Permission;
import discord4j.core.object.util.Snowflake;
import discord4j.core.object.entity.channel.Channel;
import discord4j.discordjson.json.GuildUpdateData;
import discord4j.discordjson.json.MemberData;
import discord4j.discordjson.json.RoleData;
import discord4j.rest.entity.RestGuild;
import discord4j.rest.entity.RestMember;
import discord4j.rest.util.Permission;
import discord4j.rest.util.PermissionSet;
import discord4j.rest.util.Snowflake;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
/**
@@ -44,6 +53,15 @@ public class PermissionChecker {
);
}
public static Mono<Boolean> hasSufficientRole(RestMember member, GuildSettings settings) {
if (settings.getControlRole().equalsIgnoreCase("everyone"))
return Mono.just(true);
return member.getData()
.map(MemberData::roles)
.map(roles -> roles.contains(settings.getControlRole()));
}
public static Mono<Boolean> hasManageServerRole(MessageCreateEvent event) {
return Mono.justOrEmpty(event.getMember())
.flatMap(Member::getBasePermissions)
@@ -59,6 +77,25 @@ public class PermissionChecker {
);
}
public static Mono<Boolean> hasManageServerRole(RestMember m, RestGuild g) {
return hasPermissions(m, g, permissions ->
permissions.contains(Permission.MANAGE_GUILD)
|| permissions.contains(Permission.ADMINISTRATOR));
}
public static Mono<Boolean> hasPermissions(RestMember m, RestGuild g,
Predicate<PermissionSet> pred) {
return m.getData().flatMap(memberData ->
g.getData().map(GuildUpdateData::roles)
.flatMapMany(Flux::fromIterable)
.filter(roleData -> memberData.roles().contains(roleData.id()))
.map(RoleData::permissions)
.reduce(0L, (perm, accumulator) -> accumulator | perm)
.map(PermissionSet::of)
.map(pred::test)
);
}
/**
* Checks if the user sent the command in a DisCal channel (if set).
*
@@ -1,15 +1,15 @@
package org.dreamexposure.discal.core.utils;
import java.util.ArrayList;
import java.util.List;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.entity.Message;
import discord4j.core.object.entity.Role;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
import reactor.core.publisher.Mono;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Nova Fox on 3/29/2017.
* Website: www.cloudcraftgaming.com
@@ -65,4 +65,6 @@ public class RoleUtils {
return null;
}
}
@@ -1,14 +1,14 @@
package org.dreamexposure.discal.core.utils;
import java.util.ArrayList;
import java.util.List;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.entity.Member;
import discord4j.core.object.entity.Message;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
import reactor.core.publisher.Mono;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Nova Fox on 3/29/2017.
* Website: www.cloudcraftgaming.com
+24 -24
View File
@@ -5,38 +5,38 @@
"description": "A Discord bot that integrates Google Calendar into Discord",
"homepage": "https://www.discalbot.com",
"bugs": {
"url": "https://github.com/DreamExposure/DisCal-Discord-Bot/issues"
"url": "https://github.com/DreamExposure/DisCal-Discord-Bot/issues"
},
"license": "LGPL-3.0",
"author": "NovaFox161",
"contributors": [],
"repository": {
"type": "git",
"url": "https://github.com/DreamExposure/DisCal-Discord-Bot.git"
"type": "git",
"url": "https://github.com/DreamExposure/DisCal-Discord-Bot.git"
},
"devDependencies": {
"@types/jquery": "^3.3.33",
"browser-sync": "2.26.7",
"del": "^5.1.0",
"gulp": "4.0.2",
"gulp-autoprefixer": "6.1.0",
"gulp-clean": "0.4.0",
"gulp-clean-css": "4.2.0",
"gulp-header": "2.0.7",
"gulp-rename": "1.4.0",
"gulp-sass": "4.0.2",
"webpack": "^4.42.0",
"webpack-cli": "^3.3.11",
"ts-loader": "^6.2.1"
"@types/jquery": "^3.3.33",
"browser-sync": "2.26.7",
"del": "^5.1.0",
"gulp": "4.0.2",
"gulp-autoprefixer": "6.1.0",
"gulp-clean": "0.4.0",
"gulp-clean-css": "4.2.0",
"gulp-header": "2.0.7",
"gulp-rename": "1.4.0",
"gulp-sass": "4.0.2",
"webpack": "^4.42.0",
"webpack-cli": "^3.3.11",
"ts-loader": "^6.2.1"
},
"dependencies": {
"@fortawesome/fontawesome-free": "5.9.0",
"bootstrap": "4.3.1",
"typescript": "^3.8.3",
"chart.js": "2.8.0",
"datatables.net-bs4": "1.10.19",
"jquery": "3.4.1",
"jquery.easing": "1.4.1",
"what-input": "5.2.3"
"@fortawesome/fontawesome-free": "5.9.0",
"bootstrap": "4.3.1",
"typescript": "^3.8.3",
"chart.js": "2.8.0",
"datatables.net-bs4": "1.10.19",
"jquery": "3.4.1",
"jquery.easing": "1.4.1",
"what-input": "5.2.3"
}
}
+31 -2
View File
@@ -22,8 +22,8 @@
<spring.version>2.1.5.RELEASE</spring.version>
<spring.security.version>5.1.5.RELEASE</spring.security.version>
<discord4j.version>3.0.13</discord4j.version>
<discord4j.stores.version>3.0.13</discord4j.stores.version>
<discord4j.version>3.1.0-SNAPSHOT</discord4j.version>
<discord4j.stores.version>3.1.0-SNAPSHOT</discord4j.stores.version>
<google.client-api.version>1.28.0</google.client-api.version>
@@ -76,6 +76,13 @@
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
<repository>
<id>snapshots-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
@@ -85,6 +92,19 @@
</pluginRepository>
</pluginRepositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-bom</artifactId>
<version>Dysprosium-SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--For Annotations-->
<dependency>
@@ -98,6 +118,11 @@
<artifactId>netty-all</artifactId>
<version>${netty.version.forced}</version>
</dependency>
<!--Forcing reactor version-->
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
</dependency>
<!--NovaUtils API-->
<dependency>
<groupId>org.dreamexposure</groupId>
@@ -146,6 +171,10 @@
<groupId>io.netty</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>io.projectreactor</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--r2dbc pools API for mysql connection pooling-->
@@ -27,13 +27,6 @@ import java.util.Properties;
import discord4j.core.DiscordClient;
import discord4j.core.DiscordClientBuilder;
import discord4j.core.object.data.stored.GuildBean;
import discord4j.core.object.data.stored.MessageBean;
import discord4j.store.api.mapping.MappingStoreService;
import discord4j.store.jdk.JdkStoreService;
import discord4j.store.redis.RedisStoreService;
import io.lettuce.core.RedisClient;
import io.lettuce.core.RedisURI;
@SpringBootApplication(exclude = SessionAutoConfiguration.class)
public class DisCalServer {
@@ -52,7 +45,7 @@ public class DisCalServer {
//Start Google authorization daemon
Authorization.getAuth().init();
client = createClient();
client = DiscordClientBuilder.create(BotSettings.TOKEN.get()).build();
//Start Spring
try {
@@ -89,32 +82,6 @@ public class DisCalServer {
LogFeed.log(LogObject.forStatus("Started Server/API", "Server and API are now online"));
}
private static DiscordClient createClient() {
DiscordClientBuilder clientBuilder = new DiscordClientBuilder(BotSettings.TOKEN.get());
clientBuilder.setShardCount(Integer.valueOf(BotSettings.SHARD_COUNT.get()));
//Redis info + store service for caching
if (BotSettings.USE_REDIS_STORES.get().equalsIgnoreCase("true")) {
RedisURI uri = RedisURI.Builder
.redis(BotSettings.REDIS_HOSTNAME.get(),
Integer.parseInt(BotSettings.REDIS_PORT.get()))
.withPassword(BotSettings.REDIS_PASSWORD.get())
.build();
RedisStoreService rss = new RedisStoreService(RedisClient.create(uri));
MappingStoreService mss = MappingStoreService.create()
.setMappings(rss, GuildBean.class, MessageBean.class)
.setFallback(new JdkStoreService());
clientBuilder.setStoreService(mss);
} else {
clientBuilder.setStoreService(new JdkStoreService());
}
return clientBuilder.build();
}
public static DiscordClient getClient() {
return client;
}
@@ -22,7 +22,7 @@ import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 11/10/17.
@@ -19,7 +19,7 @@ import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 11/10/17.
@@ -35,7 +35,7 @@ import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@SuppressWarnings("Duplicates")
@RestController
@@ -17,7 +17,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 11/10/17.
@@ -17,7 +17,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
/**
* Created by Nova Fox on 11/10/17.
@@ -19,7 +19,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/announcement")
@@ -18,7 +18,7 @@ import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/announcement")
@@ -19,7 +19,7 @@ import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/announcement")
@@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/announcement")
@@ -22,7 +22,7 @@ import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/announcement")
@@ -19,7 +19,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/calendar")
@@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/calendar")
@@ -23,7 +23,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/calendar")
@@ -23,7 +23,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/calendar")
@@ -31,7 +31,7 @@ import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/events")
@@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/events")
@@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/events")
@@ -30,7 +30,7 @@ import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/events")
@@ -28,7 +28,7 @@ import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/events/list")
@@ -28,7 +28,7 @@ import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/events/list")
@@ -27,7 +27,7 @@ import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/events/list")
@@ -21,10 +21,9 @@ import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.entity.Member;
import discord4j.core.object.util.Snowflake;
import reactor.core.publisher.Mono;
import discord4j.rest.entity.RestGuild;
import discord4j.rest.entity.RestMember;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/guild/")
@@ -44,17 +43,16 @@ public class GetWebGuildEndpoint {
Snowflake guildId = Snowflake.of(jsonMain.getString("guild_id"));
Snowflake userId = Snowflake.of(jsonMain.getString("user_id"));
Guild g = DisCalServer.getClient()
.getGuildById(guildId).onErrorResume(e -> Mono.empty()).block();
RestGuild g = DisCalServer.getClient().getGuildById(guildId);
if (g != null) {
WebGuild wg = WebGuild.fromGuild(g);
Member m = g.getMemberById(userId).onErrorResume(e -> Mono.empty()).block();
RestMember m = g.member(userId.asLong());
if (m != null) { //Assume false if we can't get the user...
wg.setManageServer(PermissionChecker.hasManageServerRole(m).blockOptional().orElse(false));
wg.setDiscalRole(PermissionChecker.hasSufficientRole(m, wg.getSettings()).blockOptional().orElse(false));
wg.setManageServer(PermissionChecker.hasManageServerRole(m, g).block());
wg.setDiscalRole(PermissionChecker.hasSufficientRole(m, wg.getSettings()).block());
}
//Add available langs so that editing of langs can be done on the website
@@ -13,12 +13,14 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Optional;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.entity.Guild;
import discord4j.core.object.util.Snowflake;
import reactor.core.publisher.Mono;
import discord4j.discordjson.json.ImmutableNicknameModifyData;
import discord4j.rest.entity.RestGuild;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/guild/")
@@ -38,15 +40,16 @@ public class UpdateWebGuildEndpoint {
JSONObject jsonMain = new JSONObject(requestBody);
Snowflake guildId = Snowflake.of(jsonMain.getString("guild_id"));
Guild g = DisCalServer.getClient()
.getGuildById(guildId).onErrorResume(e -> Mono.empty()).block();
RestGuild g = DisCalServer.getClient().getGuildById(guildId);
if (g != null) {
//Handle the changes now that we have confirmed the guild exists..
//Right now its just the nickname, but more may be added eventually
if (jsonMain.has("bot_nick")) {
g.changeSelfNickname(jsonMain.getString("bot_nick")).block();
g.modifyOwnNickname(ImmutableNicknameModifyData
.of(Optional.ofNullable(jsonMain.getString("bot_nick")))
).subscribe();
}
response.setContentType("application/json");
@@ -17,7 +17,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/guild/settings")
@@ -24,7 +24,7 @@ import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
import okhttp3.OkHttpClient;
import okhttp3.Request;
@@ -17,7 +17,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/rsvp")
@@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import discord4j.core.object.util.Snowflake;
import discord4j.rest.util.Snowflake;
@RestController
@RequestMapping("/v2/rsvp")