mirror of
https://github.com/DreamExposure/DisCal-Discord-Bot.git
synced 2026-05-01 22:59:38 -05:00
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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
|
||||
+1
-1
@@ -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 {
|
||||
|
||||
+3
-6
@@ -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();
|
||||
|
||||
|
||||
+1
-1
@@ -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 {
|
||||
|
||||
+3
-3
@@ -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;
|
||||
|
||||
/**
|
||||
|
||||
+6
-4
@@ -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
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
|
||||
+2
-2
@@ -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.
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
/**
|
||||
|
||||
+5
-5
@@ -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);
|
||||
|
||||
+2
-2
@@ -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.
|
||||
|
||||
+1
-1
@@ -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.
|
||||
|
||||
+2
-2
@@ -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 {
|
||||
|
||||
/**
|
||||
|
||||
+14
-11
@@ -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.
|
||||
|
||||
+1
-1
@@ -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
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
+1
-1
@@ -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.
|
||||
|
||||
+1
-1
@@ -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.
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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.
|
||||
|
||||
+1
-1
@@ -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.
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+7
-9
@@ -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
|
||||
|
||||
+9
-6
@@ -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");
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user