mirror of
https://github.com/DreamExposure/DisCal-Discord-Bot.git
synced 2026-02-06 11:29:08 -06:00
Move cal data from guild settings as should have been done before
Some data related to calendars was saved in guild settings, this commit now moves it to be in calendar data as it should have been originally. This commit needs to be tested, specifically the MySQL changes, and some related changed to authorization checks
This commit is contained in:
@@ -66,7 +66,7 @@ public class CalendarCreator {
|
||||
public Mono<PreCalendar> edit(final MessageCreateEvent event, final GuildSettings settings) {
|
||||
if (!this.hasPreCalendar(settings.getGuildID())) {
|
||||
return DatabaseManager.getMainCalendar(settings.getGuildID()).flatMap(data ->
|
||||
CalendarWrapper.getCalendar(data, settings)
|
||||
CalendarWrapper.getCalendar(data)
|
||||
.flatMap(calendar -> {
|
||||
final PreCalendar preCalendar = new PreCalendar(settings.getGuildID(), calendar, true);
|
||||
preCalendar.setCalendarId(data.getCalendarAddress());
|
||||
@@ -90,7 +90,7 @@ public class CalendarCreator {
|
||||
public Mono<PreCalendar> edit(final int calNumber, final MessageCreateEvent event, final GuildSettings settings) {
|
||||
if (!this.hasPreCalendar(settings.getGuildID())) {
|
||||
return DatabaseManager.getCalendar(settings.getGuildID(), calNumber).flatMap(data ->
|
||||
CalendarWrapper.getCalendar(data, settings)
|
||||
CalendarWrapper.getCalendar(data)
|
||||
.flatMap(calendar -> {
|
||||
final PreCalendar preCalendar = new PreCalendar(settings.getGuildID(), calendar, true);
|
||||
preCalendar.setCalendarId(data.getCalendarAddress());
|
||||
@@ -136,7 +136,6 @@ public class CalendarCreator {
|
||||
1, //TODO: Support multi-calendar
|
||||
confirmed.getId(),
|
||||
confirmed.getId(),
|
||||
false,
|
||||
credId);
|
||||
|
||||
final AclRule rule = new AclRule()
|
||||
@@ -148,7 +147,7 @@ public class CalendarCreator {
|
||||
|
||||
return Mono.when(
|
||||
DatabaseManager.updateCalendar(data),
|
||||
AclRuleWrapper.insertRule(rule, data, settings)
|
||||
AclRuleWrapper.insertRule(rule, data)
|
||||
)
|
||||
.then(Mono.fromRunnable(() -> this.terminate(settings.getGuildID())))
|
||||
.thenReturn(response);
|
||||
@@ -156,7 +155,7 @@ public class CalendarCreator {
|
||||
} else {
|
||||
//Editing calendar...
|
||||
calendar.setId(pre.getCalendarId());
|
||||
return CalendarWrapper.updateCalendar(calendar, settings, pre.getCalendarData())
|
||||
return CalendarWrapper.updateCalendar(calendar, pre.getCalendarData())
|
||||
.flatMap(confirmed -> {
|
||||
final AclRule rule = new AclRule()
|
||||
.setScope(new AclRule.Scope().setType("default"))
|
||||
@@ -165,7 +164,7 @@ public class CalendarCreator {
|
||||
final CalendarCreatorResponse response = new CalendarCreatorResponse(true, true,
|
||||
pre.getCreatorMessage(), confirmed);
|
||||
|
||||
return AclRuleWrapper.insertRule(rule, pre.getCalendarData(), settings)
|
||||
return AclRuleWrapper.insertRule(rule, pre.getCalendarData())
|
||||
.doOnNext(a -> this.terminate(settings.getGuildID()))
|
||||
.thenReturn(response);
|
||||
}).defaultIfEmpty(new CalendarCreatorResponse(false, true, pre.getCreatorMessage(), null));
|
||||
|
||||
@@ -50,7 +50,7 @@ public class EventCreator {
|
||||
final PreEvent event = new PreEvent(settings.getGuildID());
|
||||
this.events.add(event);
|
||||
|
||||
return CalendarWrapper.getCalendar(calData, settings)
|
||||
return CalendarWrapper.getCalendar(calData)
|
||||
.doOnNext(c -> event.setTimezone(c.getTimeZone()))
|
||||
.flatMap(c -> EventMessageFormatter.getPreEventEmbed(event, settings))
|
||||
.flatMap(embed -> Messages.sendMessage(
|
||||
@@ -72,7 +72,7 @@ public class EventCreator {
|
||||
|
||||
this.events.add(event);
|
||||
|
||||
return CalendarWrapper.getCalendar(calData, settings)
|
||||
return CalendarWrapper.getCalendar(calData)
|
||||
.doOnNext(c -> event.setTimezone(c.getTimeZone()))
|
||||
.flatMap(c -> EventMessageFormatter.getPreEventEmbed(event, settings))
|
||||
.flatMap(embed -> Messages.sendMessage(
|
||||
@@ -89,13 +89,13 @@ public class EventCreator {
|
||||
public Mono<PreEvent> init(final MessageCreateEvent e, final String eventId, final GuildSettings settings) {
|
||||
if (!this.hasPreEvent(settings.getGuildID())) {
|
||||
return DatabaseManager.getCalendar(settings.getGuildID(), 1) //TODO: handle multiple calendars
|
||||
.flatMap(calData -> EventWrapper.getEvent(calData, settings, eventId)
|
||||
.flatMap(calData -> EventWrapper.getEvent(calData, eventId)
|
||||
.flatMap(toCopy -> {
|
||||
final PreEvent event = new PreEvent(settings.getGuildID(), toCopy);
|
||||
|
||||
this.events.add(event);
|
||||
|
||||
return CalendarWrapper.getCalendar(calData, settings)
|
||||
return CalendarWrapper.getCalendar(calData)
|
||||
.doOnNext(c -> event.setTimezone(c.getTimeZone()))
|
||||
.flatMap(c -> EventMessageFormatter.getPreEventEmbed(event, settings))
|
||||
.flatMap(embed -> Messages.sendMessage(
|
||||
@@ -111,14 +111,14 @@ public class EventCreator {
|
||||
public Mono<PreEvent> edit(final MessageCreateEvent e, final String eventId, final GuildSettings settings) {
|
||||
if (!this.hasPreEvent(settings.getGuildID())) {
|
||||
return DatabaseManager.getCalendar(settings.getGuildID(), 1) //TODO: handle multiple calendars
|
||||
.flatMap(calData -> EventWrapper.getEvent(calData, settings, eventId)
|
||||
.flatMap(calData -> EventWrapper.getEvent(calData, eventId)
|
||||
.flatMap(toEdit -> {
|
||||
final PreEvent event = new PreEvent(settings.getGuildID(), toEdit);
|
||||
event.setEditing(true);
|
||||
|
||||
this.events.add(event);
|
||||
|
||||
return CalendarWrapper.getCalendar(calData, settings)
|
||||
return CalendarWrapper.getCalendar(calData)
|
||||
.doOnNext(c -> event.setTimezone(c.getTimeZone()))
|
||||
.flatMap(c -> EventMessageFormatter.getPreEventEmbed(event, settings))
|
||||
.flatMap(embed -> Messages.sendMessage(
|
||||
@@ -160,7 +160,7 @@ public class EventCreator {
|
||||
if (!pre.getEditing()) {
|
||||
event.setId(KeyGenerator.generateEventId());
|
||||
|
||||
return EventWrapper.createEvent(calData, event, settings)
|
||||
return EventWrapper.createEvent(calData, event)
|
||||
.flatMap(confirmed -> {
|
||||
final EventCreatorResponse response = new EventCreatorResponse(true,
|
||||
confirmed, pre.getCreatorMessage(), false);
|
||||
@@ -178,7 +178,7 @@ public class EventCreator {
|
||||
} else {
|
||||
event.setId(pre.getEventId());
|
||||
|
||||
return EventWrapper.updateEvent(calData, event, settings)
|
||||
return EventWrapper.updateEvent(calData, event)
|
||||
.flatMap(confirmed -> {
|
||||
final EventCreatorResponse response = new EventCreatorResponse(true,
|
||||
confirmed, pre.getCreatorMessage(), true);
|
||||
|
||||
@@ -57,12 +57,12 @@ public class AnnouncementMessageFormatter {
|
||||
.defaultIfEmpty(new EventData()).cache();
|
||||
|
||||
Mono<Boolean> img = eData.filter(EventData::shouldBeSaved)
|
||||
.flatMap(ed -> ImageUtils.validate(ed.getImageLink(), settings.isPatronGuild()))
|
||||
.flatMap(ed -> ImageUtils.validate(ed.getImageLink(), settings.getPatronGuild()))
|
||||
.defaultIfEmpty(false);
|
||||
|
||||
return Mono.zip(guild, channelName, eData, img)
|
||||
.map(TupleUtils.function((g, chanName, ed, hasImg) -> spec -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(g.getName(), GlobalConst.discalSite, g.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
@@ -98,7 +98,7 @@ public class AnnouncementMessageFormatter {
|
||||
spec.setColor(GlobalConst.discalColor);
|
||||
|
||||
spec.addField(Messages.getMessage("Embed.Announcement.Info.Enabled", settings), a.getEnabled() + "", true);
|
||||
if (settings.isDevGuild() || settings.isPatronGuild())
|
||||
if (settings.getDevGuild() || settings.getPatronGuild())
|
||||
spec.addField("Publishable", a.getType() + "", true);
|
||||
}));
|
||||
}
|
||||
@@ -111,7 +111,7 @@ public class AnnouncementMessageFormatter {
|
||||
.map(Announcement::getType)
|
||||
.filter(t -> t.equals(AnnouncementType.SPECIFIC))
|
||||
.flatMap(t -> DatabaseManager.getMainCalendar(a.getGuildId()))
|
||||
.flatMap(cd -> EventWrapper.getEvent(cd, settings, a.getEventId()))
|
||||
.flatMap(cd -> EventWrapper.getEvent(cd, a.getEventId()))
|
||||
.defaultIfEmpty(new Event());
|
||||
|
||||
Mono<EventData> eData = Mono.just(a)
|
||||
@@ -121,13 +121,13 @@ public class AnnouncementMessageFormatter {
|
||||
.defaultIfEmpty(new EventData()).cache();
|
||||
|
||||
Mono<Boolean> img = eData.filter(EventData::shouldBeSaved)
|
||||
.flatMap(ed -> ImageUtils.validate(ed.getImageLink(), settings.isPatronGuild()))
|
||||
.flatMap(ed -> ImageUtils.validate(ed.getImageLink(), settings.getPatronGuild()))
|
||||
.defaultIfEmpty(false);
|
||||
|
||||
|
||||
return Mono.zip(guild, event, eData, img)
|
||||
.map(TupleUtils.function((g, e, ed, hasImg) -> spec -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(g.getName(), GlobalConst.discalSite, g.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
@@ -175,7 +175,7 @@ public class AnnouncementMessageFormatter {
|
||||
.map(Announcement::getType)
|
||||
.filter(t -> t.equals(AnnouncementType.SPECIFIC))
|
||||
.flatMap(t -> DatabaseManager.getCalendar(a.getGuildId(), calNum))
|
||||
.flatMap(cd -> EventWrapper.getEvent(cd, settings, a.getEventId()))
|
||||
.flatMap(cd -> EventWrapper.getEvent(cd, a.getEventId()))
|
||||
.defaultIfEmpty(new Event());
|
||||
|
||||
Mono<EventData> eData = Mono.just(a)
|
||||
@@ -185,13 +185,13 @@ public class AnnouncementMessageFormatter {
|
||||
.defaultIfEmpty(new EventData()).cache();
|
||||
|
||||
Mono<Boolean> img = eData.filter(EventData::shouldBeSaved)
|
||||
.flatMap(ed -> ImageUtils.validate(ed.getImageLink(), settings.isPatronGuild()))
|
||||
.flatMap(ed -> ImageUtils.validate(ed.getImageLink(), settings.getPatronGuild()))
|
||||
.defaultIfEmpty(false);
|
||||
|
||||
|
||||
return Mono.zip(guild, event, eData, img)
|
||||
.map(TupleUtils.function((g, e, ed, hasImg) -> spec -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(g.getName(), GlobalConst.discalSite, g.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
@@ -241,7 +241,7 @@ public class AnnouncementMessageFormatter {
|
||||
Mono<String> startTime = EventMessageFormatter
|
||||
.getHumanReadableTime(event.getStart(), cd.getCalendarNumber(), false, settings);
|
||||
|
||||
Mono<String> timezone = CalendarWrapper.getCalendar(cd, settings)
|
||||
Mono<String> timezone = CalendarWrapper.getCalendar(cd)
|
||||
.map(com.google.api.services.calendar.model.Calendar::getTimeZone)
|
||||
.defaultIfEmpty("TZ Unknown/Error");
|
||||
|
||||
@@ -250,12 +250,12 @@ public class AnnouncementMessageFormatter {
|
||||
.cache();
|
||||
|
||||
Mono<Boolean> img = eData.filter(EventData::shouldBeSaved)
|
||||
.flatMap(ed -> ImageUtils.validate(ed.getImageLink(), settings.isPatronGuild()))
|
||||
.flatMap(ed -> ImageUtils.validate(ed.getImageLink(), settings.getPatronGuild()))
|
||||
.defaultIfEmpty(false);
|
||||
|
||||
return Mono.zip(guild, startDate, startTime, timezone, eData, img)
|
||||
.map(TupleUtils.function((g, sDate, sTime, tz, ed, hasImg) -> spec -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(g.getName(), GlobalConst.discalSite, g.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
@@ -274,7 +274,7 @@ public class AnnouncementMessageFormatter {
|
||||
spec.setColor(GlobalConst.discalColor);
|
||||
}
|
||||
|
||||
if (!settings.usingSimpleAnnouncements()) {
|
||||
if (!settings.getSimpleAnnouncements()) {
|
||||
spec.setFooter(Messages.getMessage("Embed.Announcement.Announce.ID", "%id%", a.getAnnouncementId().toString(), settings), null);
|
||||
}
|
||||
|
||||
@@ -299,7 +299,7 @@ public class AnnouncementMessageFormatter {
|
||||
}
|
||||
spec.addField(Messages.getMessage("Embed.Announcement.Announce.Description", settings), description, true);
|
||||
}
|
||||
if (!settings.usingSimpleAnnouncements()) {
|
||||
if (!settings.getSimpleAnnouncements()) {
|
||||
spec.addField(Messages.getMessage("Embed.Announcement.Announce.Date", settings), sDate, true);
|
||||
spec.addField(Messages.getMessage("Embed.Announcement.Announce.Time", settings), sTime, true);
|
||||
spec.addField(Messages.getMessage("Embed.Announcement.Announce.TimeZone", settings), tz, true);
|
||||
@@ -317,7 +317,7 @@ public class AnnouncementMessageFormatter {
|
||||
}
|
||||
}
|
||||
|
||||
if (!settings.usingSimpleAnnouncements())
|
||||
if (!settings.getSimpleAnnouncements())
|
||||
spec.addField(Messages.getMessage("Embed.Announcement.Announce.EventID", settings), event.getId(), false);
|
||||
if (!"None".equalsIgnoreCase(a.getInfo()) && !"".equalsIgnoreCase(a.getInfo()))
|
||||
spec.addField(Messages.getMessage("Embed.Announcement.Announce.Info", settings), a.getInfo(), false);
|
||||
|
||||
@@ -32,7 +32,7 @@ public class CalendarMessageFormatter {
|
||||
@Deprecated
|
||||
public static Mono<Consumer<EmbedCreateSpec>> getCalendarLinkEmbed(final Calendar cal, final GuildSettings settings) {
|
||||
return DisCalClient.getClient().getGuildById(settings.getGuildID()).map(g -> spec -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(g.getName(), GlobalConst.discalSite, g.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
@@ -54,7 +54,7 @@ public class CalendarMessageFormatter {
|
||||
|
||||
public static Mono<Consumer<EmbedCreateSpec>> getCalendarLinkEmbed(final Calendar cal, final int calNum, final GuildSettings settings) {
|
||||
return DisCalClient.getClient().getGuildById(settings.getGuildID()).map(g -> spec -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(g.getName(), GlobalConst.discalSite, g.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
@@ -76,7 +76,7 @@ public class CalendarMessageFormatter {
|
||||
|
||||
public static Mono<Consumer<EmbedCreateSpec>> getPreCalendarEmbed(final PreCalendar calendar, final GuildSettings settings) {
|
||||
return DisCalClient.getClient().getGuildById(settings.getGuildID()).map(g -> spec -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(g.getName(), GlobalConst.discalSite, g.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
|
||||
@@ -46,16 +46,16 @@ public class EventMessageFormatter {
|
||||
final Mono<String> eDate = getHumanReadableDate(event.getEnd(), false, settings);
|
||||
final Mono<String> eTime = getHumanReadableTime(event.getEnd(), false, settings);
|
||||
final Mono<Boolean> img = data.filter(EventData::shouldBeSaved)
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.isPatronGuild()))
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.getPatronGuild()))
|
||||
.defaultIfEmpty(false);
|
||||
final Mono<String> timezone = DatabaseManager.getMainCalendar(settings.getGuildID())
|
||||
.flatMap(d -> CalendarWrapper.getCalendar(d, settings))
|
||||
.flatMap(d -> CalendarWrapper.getCalendar(d))
|
||||
.map(com.google.api.services.calendar.model.Calendar::getTimeZone)
|
||||
.defaultIfEmpty("Error/Unknown");
|
||||
|
||||
return Mono.zip(guild, data, sDate, sTime, eDate, eTime, img, timezone)
|
||||
.map(TupleUtils.function((g, ed, startDate, startTime, endDate, endTime, hasImg, tz) -> spec -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(g.getName(), GlobalConst.discalSite, g.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
@@ -117,16 +117,16 @@ public class EventMessageFormatter {
|
||||
final Mono<String> eDate = getHumanReadableDate(event.getEnd(), calNum, false, settings);
|
||||
final Mono<String> eTime = getHumanReadableTime(event.getEnd(), calNum, false, settings);
|
||||
final Mono<Boolean> img = data.filter(EventData::shouldBeSaved)
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.isPatronGuild()))
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.getPatronGuild()))
|
||||
.defaultIfEmpty(false);
|
||||
final Mono<String> timezone = DatabaseManager.getCalendar(settings.getGuildID(), calNum)
|
||||
.flatMap(d -> CalendarWrapper.getCalendar(d, settings))
|
||||
.flatMap(d -> CalendarWrapper.getCalendar(d))
|
||||
.map(com.google.api.services.calendar.model.Calendar::getTimeZone)
|
||||
.defaultIfEmpty("Error/Unknown");
|
||||
|
||||
return Mono.zip(guild, data, sDate, sTime, eDate, eTime, img, timezone)
|
||||
.map(TupleUtils.function((g, ed, startDate, startTime, endDate, endTime, hasImg, tz) -> spec -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(g.getName(), GlobalConst.discalSite, g.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
@@ -187,13 +187,13 @@ public class EventMessageFormatter {
|
||||
final Mono<String> date = getHumanReadableDate(event.getStart(), false, settings);
|
||||
final Mono<String> time = getHumanReadableTime(event.getStart(), false, settings);
|
||||
final Mono<Boolean> img = data.filter(EventData::shouldBeSaved)
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.isPatronGuild()))
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.getPatronGuild()))
|
||||
.defaultIfEmpty(false);
|
||||
|
||||
return Mono.zip(guild, data, time, date, img)
|
||||
.map(TupleUtils.function((g, ed, startDate, startTime, hasImg) -> spec -> {
|
||||
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(g.getName(), GlobalConst.discalSite, g.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
@@ -240,13 +240,13 @@ public class EventMessageFormatter {
|
||||
final Mono<String> date = getHumanReadableDate(event.getStart(), calNum, false, settings);
|
||||
final Mono<String> time = getHumanReadableTime(event.getOriginalStartTime(), 1, false, settings);
|
||||
final Mono<Boolean> img = data.filter(EventData::shouldBeSaved)
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.isPatronGuild()))
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.getPatronGuild()))
|
||||
.defaultIfEmpty(false);
|
||||
|
||||
return Mono.zip(guild, data, date, time, img)
|
||||
.map(TupleUtils.function((g, ed, startData, startTime, hasImg) -> spec -> {
|
||||
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(g.getName(), GlobalConst.discalSite, g.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
@@ -293,12 +293,12 @@ public class EventMessageFormatter {
|
||||
final Mono<String> eDate = getHumanReadableDate(event.getEndDateTime(), calNum, false, settings);
|
||||
final Mono<String> eTime = getHumanReadableTime(event.getEndDateTime(), calNum, false, settings);
|
||||
final Mono<Boolean> img = Mono.justOrEmpty(event.getEventData()).filter(EventData::shouldBeSaved)
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.isPatronGuild()))
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.getPatronGuild()))
|
||||
.defaultIfEmpty(false);
|
||||
|
||||
return Mono.zip(guild, sDate, sTime, eDate, eTime, img)
|
||||
.map(TupleUtils.function((g, startDate, startTime, endDate, endTime, hasImg) -> spec -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(g.getName(), GlobalConst.discalSite, g.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
@@ -364,12 +364,12 @@ public class EventMessageFormatter {
|
||||
final Mono<String> eDate = getHumanReadableDate(event.getEndDateTime(), false, settings);
|
||||
final Mono<String> eTime = getHumanReadableTime(event.getEndDateTime(), false, settings);
|
||||
final Mono<Boolean> img = Mono.justOrEmpty(event.getEventData()).filter(EventData::shouldBeSaved)
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.isPatronGuild()))
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.getPatronGuild()))
|
||||
.defaultIfEmpty(false);
|
||||
|
||||
return Mono.zip(guild, sDate, sTime, eDate, eTime, img)
|
||||
.map(TupleUtils.function((g, startDate, startTime, endDate, endTime, hasImg) -> spec -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(g.getName(), GlobalConst.discalSite, g.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
@@ -436,12 +436,12 @@ public class EventMessageFormatter {
|
||||
final Mono<String> date = getHumanReadableDate(ecr.getEvent().getStart(), false, settings);
|
||||
final Mono<String> time = getHumanReadableTime(ecr.getEvent().getStart(), false, settings);
|
||||
final Mono<Boolean> img = data.filter(EventData::shouldBeSaved)
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.isPatronGuild()))
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.getPatronGuild()))
|
||||
.defaultIfEmpty(false);
|
||||
|
||||
return Mono.zip(guild, data, date, time, img)
|
||||
.map(TupleUtils.function((g, ed, d, t, hasImg) -> spec -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(g.getName(), GlobalConst.discalSite,
|
||||
g.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
@@ -486,12 +486,12 @@ public class EventMessageFormatter {
|
||||
final Mono<String> date = getHumanReadableDate(ecr.getEvent().getStart(), calNum, false, settings);
|
||||
final Mono<String> time = getHumanReadableTime(ecr.getEvent().getStart(), calNum, false, settings);
|
||||
final Mono<Boolean> img = data.filter(EventData::shouldBeSaved)
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.isPatronGuild()))
|
||||
.flatMap(d -> ImageUtils.validate(d.getImageLink(), settings.getPatronGuild()))
|
||||
.defaultIfEmpty(false);
|
||||
|
||||
return Mono.zip(guild, data, date, time, img)
|
||||
.map(TupleUtils.function((g, ed, d, t, hasImg) -> spec -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(g.getName(), GlobalConst.discalSite,
|
||||
g.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
@@ -533,7 +533,7 @@ public class EventMessageFormatter {
|
||||
return Mono.justOrEmpty(eventDateTime).flatMap(dateTime -> {
|
||||
if (!preEvent) {
|
||||
return DatabaseManager.getMainCalendar(settings.getGuildID())
|
||||
.flatMap(data -> CalendarWrapper.getCalendar(data, settings))
|
||||
.flatMap(data -> CalendarWrapper.getCalendar(data))
|
||||
.map(com.google.api.services.calendar.model.Calendar::getTimeZone);
|
||||
} else {
|
||||
return Mono.just("UTC");
|
||||
@@ -561,7 +561,7 @@ public class EventMessageFormatter {
|
||||
return Mono.justOrEmpty(eventDateTime).flatMap(dateTime -> {
|
||||
if (!preEvent) {
|
||||
return DatabaseManager.getCalendar(settings.getGuildID(), calNum)
|
||||
.flatMap(data -> CalendarWrapper.getCalendar(data, settings))
|
||||
.flatMap(data -> CalendarWrapper.getCalendar(data))
|
||||
.map(com.google.api.services.calendar.model.Calendar::getTimeZone);
|
||||
} else {
|
||||
return Mono.just("UTC");
|
||||
@@ -589,7 +589,7 @@ public class EventMessageFormatter {
|
||||
return Mono.justOrEmpty(eventDateTime).flatMap(dateTime -> {
|
||||
if (!preEvent) {
|
||||
return DatabaseManager.getMainCalendar(settings.getGuildID())
|
||||
.flatMap(data -> CalendarWrapper.getCalendar(data, settings))
|
||||
.flatMap(data -> CalendarWrapper.getCalendar(data))
|
||||
.map(com.google.api.services.calendar.model.Calendar::getTimeZone);
|
||||
} else {
|
||||
return Mono.just("UTC");
|
||||
@@ -617,7 +617,7 @@ public class EventMessageFormatter {
|
||||
return Mono.justOrEmpty(eventDateTime).flatMap(dateTime -> {
|
||||
if (!preEvent) {
|
||||
return DatabaseManager.getCalendar(settings.getGuildID(), calNum)
|
||||
.flatMap(data -> CalendarWrapper.getCalendar(data, settings))
|
||||
.flatMap(data -> CalendarWrapper.getCalendar(data))
|
||||
.map(com.google.api.services.calendar.model.Calendar::getTimeZone);
|
||||
} else {
|
||||
return Mono.just("UTC");
|
||||
|
||||
@@ -57,7 +57,7 @@ public class AnnouncementThread {
|
||||
|
||||
final Mono<GuildSettings> s = this.getSettings(a).cache();
|
||||
final Mono<CalendarData> cd = this.getCalendarData(a).cache();
|
||||
final Mono<Calendar> se = cd.flatMap(calData -> s.flatMap(gs -> this.getService(gs, calData)));
|
||||
final Mono<Calendar> se = cd.flatMap(calData -> s.flatMap(gs -> this.getService(calData)));
|
||||
|
||||
return Mono.zip(s, cd, se)
|
||||
.flatMap(function((settings, calData, service) -> {
|
||||
@@ -92,7 +92,7 @@ public class AnnouncementThread {
|
||||
Calendar service) {
|
||||
switch (a.getType()) {
|
||||
case SPECIFIC:
|
||||
return EventWrapper.getEvent(calData, settings, a.getEventId())
|
||||
return EventWrapper.getEvent(calData, a.getEventId())
|
||||
.switchIfEmpty(DatabaseManager.deleteAnnouncement(a.getAnnouncementId().toString())
|
||||
.then(Mono.empty())
|
||||
).flatMap(e -> this.inRangeSpecific(a, e)
|
||||
@@ -109,14 +109,14 @@ public class AnnouncementThread {
|
||||
}))
|
||||
.then();
|
||||
case UNIVERSAL:
|
||||
return this.getEvents(settings, calData, service)
|
||||
return this.getEvents(calData, service)
|
||||
.flatMapMany(Flux::fromIterable)
|
||||
.filter(e -> this.isInRange(a, e))
|
||||
.flatMap(e -> AnnouncementMessageFormatter
|
||||
.sendAnnouncementMessage(guild, a, e, calData, settings))
|
||||
.then();
|
||||
case COLOR:
|
||||
return this.getEvents(settings, calData, service)
|
||||
return this.getEvents(calData, service)
|
||||
.flatMapMany(Flux::fromIterable)
|
||||
.filter(e -> e.getColorId() != null
|
||||
&& a.getEventColor().equals(EventColor
|
||||
@@ -127,7 +127,7 @@ public class AnnouncementThread {
|
||||
.then();
|
||||
|
||||
case RECUR:
|
||||
return this.getEvents(settings, calData, service)
|
||||
return this.getEvents(calData, service)
|
||||
.flatMapMany(Flux::fromIterable)
|
||||
.filter(e -> e.getId().contains("_") && e.getId().split("_")[0].equals(a.getEventId()))
|
||||
.filter(e -> this.isInRange(a, e))
|
||||
@@ -227,21 +227,21 @@ public class AnnouncementThread {
|
||||
return this.calendars.get(a.getGuildId());
|
||||
}
|
||||
|
||||
private Mono<Calendar> getService(GuildSettings gs, CalendarData cd) {
|
||||
if (gs.useExternalCalendar()) {
|
||||
if (!this.customServices.containsKey(gs.getGuildID()))
|
||||
this.customServices.put(gs.getGuildID(), CalendarAuth.getCalendarService(gs, cd).cache());
|
||||
private Mono<Calendar> getService(CalendarData cd) {
|
||||
if (cd.getExternal()) {
|
||||
if (!this.customServices.containsKey(cd.getGuildId()))
|
||||
this.customServices.put(cd.getGuildId(), CalendarAuth.getCalendarService(cd).cache());
|
||||
|
||||
return this.customServices.get(gs.getGuildID());
|
||||
return this.customServices.get(cd.getGuildId());
|
||||
}
|
||||
return this.discalServices.get(cd.getCredentialId());
|
||||
}
|
||||
|
||||
private Mono<List<Event>> getEvents(GuildSettings gs, CalendarData cd, Calendar service) {
|
||||
if (!this.allEvents.containsKey(gs.getGuildID())) {
|
||||
private Mono<List<Event>> getEvents(CalendarData cd, Calendar service) {
|
||||
if (!this.allEvents.containsKey(cd.getGuildId())) {
|
||||
Mono<List<Event>> events = EventWrapper.getEvents(cd, service, 15, System.currentTimeMillis()).cache();
|
||||
this.allEvents.put(gs.getGuildID(), events);
|
||||
this.allEvents.put(cd.getGuildId(), events);
|
||||
}
|
||||
return this.allEvents.get(gs.getGuildID());
|
||||
return this.allEvents.get(cd.getGuildId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ public class AddCalendarCommand implements Command {
|
||||
@Override
|
||||
public Mono<Void> issueCommand(final String[] args, final MessageCreateEvent event, final GuildSettings settings) {
|
||||
return Mono.just(settings)
|
||||
.filter(s -> s.isDevGuild() || s.isPatronGuild())
|
||||
.filter(s -> s.getDevGuild() || s.getPatronGuild())
|
||||
.flatMap(s -> PermissionChecker.hasManageServerRole(event)
|
||||
.filter(identity -> identity)
|
||||
.flatMap(ignore -> {
|
||||
@@ -90,31 +90,29 @@ public class AddCalendarCommand implements Command {
|
||||
}
|
||||
});
|
||||
} else if (args.length == 1) {
|
||||
return DatabaseManager.getMainCalendar(settings.getGuildID()).hasElement().flatMap(hasCal -> {
|
||||
if (hasCal) {
|
||||
return DatabaseManager.getMainCalendar(settings.getGuildID()).flatMap(data -> {
|
||||
if ("primary".equalsIgnoreCase(data.getCalendarAddress())) {
|
||||
return Messages.sendMessage(Messages.getMessage("Creator.Calendar.HasCalendar", settings), event);
|
||||
} else if ("N/a".equalsIgnoreCase(settings.getEncryptedAccessToken())
|
||||
&& "N/a".equalsIgnoreCase(settings.getEncryptedRefreshToken())) {
|
||||
} else if ("N/a".equalsIgnoreCase(data.getEncryptedAccessToken())
|
||||
&& "N/a".equalsIgnoreCase(data.getEncryptedRefreshToken())) {
|
||||
return Messages.sendMessage(Messages.getMessage("AddCalendar.Select.NotAuth", settings), event);
|
||||
} else {
|
||||
return CalendarWrapper.getUsersExternalCalendars(settings)
|
||||
return CalendarWrapper.getUsersExternalCalendars(data)
|
||||
.flatMapMany(Flux::fromIterable)
|
||||
.any(c -> !c.isDeleted() && c.getId().equals(args[0]))
|
||||
.flatMap(valid -> {
|
||||
if (valid) {
|
||||
final CalendarData data = new CalendarData(settings.getGuildID(), 1,
|
||||
args[0], args[0], true, 0);
|
||||
|
||||
//update guild settings to reflect changes...
|
||||
settings.setUseExternalCalendar(true);
|
||||
final CalendarData newData = new CalendarData(
|
||||
data.getGuildId(), 1, args[0], args[0], true, 0,
|
||||
data.getPrivateKey(), data.getEncryptedAccessToken(),
|
||||
data.getEncryptedRefreshToken());
|
||||
|
||||
//combine db calls and message send to be executed together async
|
||||
final Mono<Boolean> calInsert = DatabaseManager.updateCalendar(data);
|
||||
final Mono<Boolean> settingsUpdate = DatabaseManager.updateSettings(settings);
|
||||
final Mono<Boolean> calInsert = DatabaseManager.updateCalendar(newData);
|
||||
final Mono<Message> sendMsg = Messages.sendMessage(
|
||||
Messages.getMessage("AddCalendar.Select.Success", settings), event);
|
||||
|
||||
return Mono.when(calInsert, settingsUpdate, sendMsg)
|
||||
return Mono.when(calInsert, sendMsg)
|
||||
.thenReturn(GlobalConst.NOT_EMPTY);
|
||||
} else {
|
||||
return Messages.sendMessage(Messages
|
||||
|
||||
@@ -190,7 +190,7 @@ public class AnnouncementCommand implements Command {
|
||||
case "colour":
|
||||
return this.moduleColor(args, event, settings);
|
||||
case "publish":
|
||||
if (settings.isDevGuild() || settings.isPatronGuild())
|
||||
if (settings.getPatronGuild() || settings.getPatronGuild())
|
||||
return this.modulePublish(event, settings);
|
||||
else
|
||||
return Messages.sendMessage(Messages.getMessage("Notification.Patron", settings), event);
|
||||
|
||||
@@ -307,7 +307,7 @@ public class CalendarCommand implements Command {
|
||||
//Test perms and delete calendar...
|
||||
return PermissionChecker.hasManageServerRole(event)
|
||||
.filter(identity -> identity)
|
||||
.flatMap(b -> CalendarUtils.deleteCalendar(calendarData, settings)
|
||||
.flatMap(b -> CalendarUtils.deleteCalendar(calendarData)
|
||||
.flatMap(success -> {
|
||||
if (success) {
|
||||
return Messages.sendMessage(
|
||||
|
||||
@@ -121,7 +121,7 @@ public class DevCommand implements Command {
|
||||
return Mono.just(Long.valueOf(args[1]))
|
||||
.map(Snowflake::of)
|
||||
.flatMap(DatabaseManager::getSettings)
|
||||
.doOnNext(settings -> settings.setPatronGuild(!settings.isPatronGuild()))
|
||||
.doOnNext(settings -> settings.setPatronGuild(!settings.getPatronGuild()))
|
||||
.flatMap(DatabaseManager::updateSettings)
|
||||
.then(Messages.sendMessage("isPatronGuild value updated! Client's cache needs to be invalidated", event))
|
||||
.onErrorResume(NumberFormatException.class, e ->
|
||||
@@ -140,7 +140,7 @@ public class DevCommand implements Command {
|
||||
return Mono.just(Long.valueOf(args[1]))
|
||||
.map(Snowflake::of)
|
||||
.flatMap(DatabaseManager::getSettings)
|
||||
.doOnNext(settings -> settings.setDevGuild(!settings.isDevGuild()))
|
||||
.doOnNext(settings -> settings.setDevGuild(!settings.getDevGuild()))
|
||||
.flatMap(DatabaseManager::updateSettings)
|
||||
.then(Messages.sendMessage("isDevGuild value updated! Client's cache needs to be invalidated", event))
|
||||
.onErrorResume(NumberFormatException.class, e ->
|
||||
|
||||
@@ -131,7 +131,7 @@ public class DisCalCommand implements Command {
|
||||
|
||||
final Mono<Consumer<EmbedCreateSpec>> embedMono = Mono.zip(guildMono, guildCountMono, calCountMono, annCountMono)
|
||||
.map(TupleUtils.function((guild, guilds, calendars, announcements) -> (EmbedCreateSpec spec) -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(guild.getName(), GlobalConst.discalSite, guild.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
@@ -208,10 +208,10 @@ public class DisCalCommand implements Command {
|
||||
|
||||
private Mono<Void> moduleSimpleAnnouncement(final MessageCreateEvent event, final GuildSettings settings) {
|
||||
return Mono.just(settings)
|
||||
.doOnNext(s -> s.setSimpleAnnouncements(!s.usingSimpleAnnouncements()))
|
||||
.doOnNext(s -> s.setSimpleAnnouncements(!s.getSimpleAnnouncements()))
|
||||
.flatMap(DatabaseManager::updateSettings)
|
||||
.then(Messages.sendMessage(
|
||||
Messages.getMessage("DisCal.SimpleAnnouncement", "%value%", settings.usingSimpleAnnouncements() + "", settings)
|
||||
Messages.getMessage("DisCal.SimpleAnnouncement", "%value%", settings.getSimpleAnnouncements() + "", settings)
|
||||
, event))
|
||||
.then();
|
||||
}
|
||||
@@ -224,23 +224,23 @@ public class DisCalCommand implements Command {
|
||||
|
||||
final Mono<Consumer<EmbedCreateSpec>> embedMono = Mono.zip(guildMono, dRoleMono, dChanMono)
|
||||
.map(TupleUtils.function((guild, dRole, dChannel) -> spec -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(guild.getName(), GlobalConst.discalSite, guild.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
|
||||
spec.setTitle(Messages.getMessage("Embed.DisCal.Settings.Title", settings));
|
||||
spec.addField(Messages.getMessage("Embed.DisCal.Settings.ExternalCal", settings), settings.useExternalCalendar() + "", true);
|
||||
spec.addField(Messages.getMessage("Embed.Discal.Settings.Role", settings), dRole, true);
|
||||
spec.addField(Messages.getMessage("Embed.DisCal.Settings.Channel", settings), dChannel, false);
|
||||
spec.addField(Messages.getMessage("Embed.DisCal.Settings.SimpleAnn", settings), settings.usingSimpleAnnouncements() + "", true);
|
||||
spec.addField(Messages.getMessage("Embed.DisCal.Settings.Patron", settings), settings.isPatronGuild() + "", true);
|
||||
spec.addField(Messages.getMessage("Embed.DisCal.Settings.Dev", settings), settings.isDevGuild() + "", true);
|
||||
spec.addField(Messages.getMessage("Embed.DisCal.Settings.SimpleAnn", settings), settings.getSimpleAnnouncements() + "",
|
||||
true);
|
||||
spec.addField(Messages.getMessage("Embed.DisCal.Settings.Patron", settings), settings.getPatronGuild() + "", true);
|
||||
spec.addField(Messages.getMessage("Embed.DisCal.Settings.Dev", settings), settings.getDevGuild() + "", true);
|
||||
spec.addField(Messages.getMessage("Embed.DisCal.Settings.MaxCal", settings), settings.getMaxCalendars() + "", true);
|
||||
spec.addField(Messages.getMessage("Embed.DisCal.Settings.Language", settings), settings.getLang(), true);
|
||||
spec.addField(Messages.getMessage("Embed.DisCal.Settings.Prefix", settings), settings.getPrefix(), true);
|
||||
//TODO: Add translations...
|
||||
spec.addField("Using Branding", settings.isBranded() + "", true);
|
||||
spec.addField("Using Branding", settings.getBranded() + "", true);
|
||||
spec.setFooter(Messages.getMessage("Embed.DisCal.Info.Patron", settings) + ": https://www.patreon.com/Novafox", null);
|
||||
spec.setUrl("https://www.discalbot.com/");
|
||||
spec.setColor(GlobalConst.discalColor);
|
||||
@@ -250,7 +250,7 @@ public class DisCalCommand implements Command {
|
||||
}
|
||||
|
||||
private Mono<Void> moduleDmAnnouncements(final MessageCreateEvent event, final GuildSettings settings) {
|
||||
return Mono.just(settings.isDevGuild())
|
||||
return Mono.just(settings.getDevGuild())
|
||||
.filter(identity -> identity)
|
||||
.flatMap(b -> event.getMessage().getAuthorAsMember())
|
||||
.flatMap(member -> {
|
||||
@@ -321,13 +321,13 @@ public class DisCalCommand implements Command {
|
||||
private Mono<Void> moduleBrand(final MessageCreateEvent event, final GuildSettings settings) {
|
||||
return PermissionChecker.hasDisCalRole(event, settings)
|
||||
.filter(identity -> identity)
|
||||
.map(b -> settings.isPatronGuild())
|
||||
.map(b -> settings.getPatronGuild())
|
||||
.flatMap(isPatron -> {
|
||||
if (isPatron) {
|
||||
settings.setBranded(!settings.isBranded());
|
||||
settings.setBranded(!settings.getBranded());
|
||||
return DatabaseManager.updateSettings(settings)
|
||||
.then(Messages.sendMessage(
|
||||
Messages.getMessage("DisCal.Brand", "%value%", settings.isBranded() + "", settings),
|
||||
Messages.getMessage("DisCal.Brand", "%value%", settings.getBranded() + "", settings),
|
||||
event));
|
||||
} else {
|
||||
return Messages.sendMessage(Messages.getMessage("Notification.Patron", settings), event);
|
||||
@@ -341,4 +341,4 @@ public class DisCalCommand implements Command {
|
||||
return Messages.sendMessage(Messages.getMessage("DisCal.DashboardLink", "%link%",
|
||||
GlobalConst.discalDashboardLink, settings), event).then();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -388,7 +388,7 @@ public class EventCommand implements Command {
|
||||
} else {
|
||||
//Check if enough args and event exists...
|
||||
if (args.length == 2) {
|
||||
return EventWrapper.getEvent(calendarData, settings, args[1])
|
||||
return EventWrapper.getEvent(calendarData, args[1])
|
||||
.flatMap(e -> EventMessageFormatter.getEventEmbed(e, calendarData.getCalendarNumber(), settings))
|
||||
.flatMap(em -> Messages.sendMessage(em, event))
|
||||
.switchIfEmpty(Messages.sendMessage(Messages.getMessage("Creator.Event.NotFound", settings), event));
|
||||
@@ -792,7 +792,7 @@ public class EventCommand implements Command {
|
||||
Messages.getMessage("Creator.Event.Attachment.Delete", settings), em, event))
|
||||
.doOnNext(pre::setCreatorMessage);
|
||||
} else {
|
||||
return ImageUtils.validate(value, settings.isPatronGuild()).flatMap(valid -> {
|
||||
return ImageUtils.validate(value, settings.getPatronGuild()).flatMap(valid -> {
|
||||
if (valid) {
|
||||
final PreEvent preEvent = EventCreator.getCreator().getPreEvent(settings.getGuildID());
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ public class EventListCommand implements Command {
|
||||
} else {
|
||||
switch (args[0].toLowerCase()) {
|
||||
case "search":
|
||||
if (settings.isDevGuild())
|
||||
if (settings.getDevGuild())
|
||||
return this.moduleSearch(args, event, settings);
|
||||
else
|
||||
return Messages.sendMessage(Messages.getMessage("Notification.Disabled", settings), event);
|
||||
@@ -103,7 +103,7 @@ public class EventListCommand implements Command {
|
||||
return Mono.defer(() -> {
|
||||
if (args.length == 0) {
|
||||
return DatabaseManager.getMainCalendar(settings.getGuildID()) //TODO: support multi-cal
|
||||
.flatMap(data -> EventWrapper.getEvents(data, settings, 1, System.currentTimeMillis())
|
||||
.flatMap(data -> EventWrapper.getEvents(data, 1, System.currentTimeMillis())
|
||||
.flatMap(events -> {
|
||||
if (events.isEmpty()) {
|
||||
return Messages.sendMessage(Messages.getMessage("Event.List.Found.None", settings), event);
|
||||
@@ -123,7 +123,7 @@ public class EventListCommand implements Command {
|
||||
return Messages.sendMessage(Messages.getMessage("Event.List.Amount.Under", settings), event);
|
||||
} else {
|
||||
return DatabaseManager.getMainCalendar(settings.getGuildID()) //TODO: support multi-cal
|
||||
.flatMap(data -> EventWrapper.getEvents(data, settings, count, System.currentTimeMillis())
|
||||
.flatMap(data -> EventWrapper.getEvents(data, count, System.currentTimeMillis())
|
||||
.flatMap(events -> {
|
||||
if (events.isEmpty()) {
|
||||
return Messages.sendMessage(Messages.getMessage("Event.List.Found.None", settings), event);
|
||||
@@ -164,7 +164,7 @@ public class EventListCommand implements Command {
|
||||
final long now = System.currentTimeMillis();
|
||||
final long end = now + GlobalConst.oneDayMs;
|
||||
|
||||
return EventWrapper.getEvents(data, settings, 20, now, end).flatMap(events -> {
|
||||
return EventWrapper.getEvents(data, 20, now, end).flatMap(events -> {
|
||||
if (events.isEmpty()) {
|
||||
return Messages.sendMessage(Messages.getMessage("Event.List.Found.None", settings), event);
|
||||
} else if (events.size() == 1) {
|
||||
@@ -197,7 +197,7 @@ public class EventListCommand implements Command {
|
||||
final long start = System.currentTimeMillis() - (GlobalConst.oneDayMs * 14); // 2 weeks ago
|
||||
final long end = System.currentTimeMillis() + GlobalConst.oneDayMs; // one day from now
|
||||
|
||||
return EventWrapper.getEvents(data, settings, start, end).flatMap(events -> {
|
||||
return EventWrapper.getEvents(data, start, end).flatMap(events -> {
|
||||
if (events.isEmpty()) {
|
||||
return Messages.sendMessage("No ongoing events found!", event);
|
||||
} else {
|
||||
@@ -230,4 +230,4 @@ public class EventListCommand implements Command {
|
||||
}
|
||||
}).then();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,11 +70,11 @@ public class LinkCalendarCommand implements Command {
|
||||
public Mono<Void> issueCommand(final String[] args, final MessageCreateEvent event, final GuildSettings settings) {
|
||||
//TODO: Support multiple calendars...
|
||||
return DatabaseManager.getMainCalendar(settings.getGuildID())
|
||||
.flatMap(calData -> CalendarWrapper.getCalendar(calData, settings)
|
||||
.flatMap(calData -> CalendarWrapper.getCalendar(calData)
|
||||
.flatMap(cal -> CalendarMessageFormatter.getCalendarLinkEmbed(cal, calData.getCalendarNumber(), settings)
|
||||
.flatMap(embed -> Messages.sendMessage(embed, event))
|
||||
).switchIfEmpty(Messages.sendMessage(Messages.getMessage("Notification.Error.Unknown", settings), event))
|
||||
).switchIfEmpty(Messages.sendMessage(Messages.getMessage("Creator.Calendar.NoCalendar", settings), event))
|
||||
.then();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -308,7 +308,7 @@ public class RsvpCommand implements Command {
|
||||
|
||||
return Mono.zip(guildMono, onTimeMono, lateMono, undecidedMono, notGoingMono)
|
||||
.map(TupleUtils.function((guild, onTime, late, undecided, notGoing) -> spec -> {
|
||||
if (settings.isBranded())
|
||||
if (settings.getBranded())
|
||||
spec.setAuthor(guild.getName(), GlobalConst.discalSite, guild.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
else
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
@@ -317,24 +317,16 @@ public class RsvpCommand implements Command {
|
||||
spec.addField("Event ID", data.getEventId(), false);
|
||||
|
||||
final StringBuilder onTimeBuilder = new StringBuilder();
|
||||
for (final Member u : onTime) {
|
||||
onTimeBuilder.append(u.getDisplayName()).append(", ");
|
||||
}
|
||||
for (final Member u : onTime) onTimeBuilder.append(u.getDisplayName()).append(", ");
|
||||
|
||||
final StringBuilder lateBuilder = new StringBuilder();
|
||||
for (final Member u : late) {
|
||||
lateBuilder.append(u.getDisplayName()).append(", ");
|
||||
}
|
||||
for (final Member u : late) lateBuilder.append(u.getDisplayName()).append(", ");
|
||||
|
||||
final StringBuilder unsureBuilder = new StringBuilder();
|
||||
for (final Member u : undecided) {
|
||||
unsureBuilder.append(u.getDisplayName()).append(", ");
|
||||
}
|
||||
for (final Member u : undecided) unsureBuilder.append(u.getDisplayName()).append(", ");
|
||||
|
||||
final StringBuilder notGoingBuilder = new StringBuilder();
|
||||
for (final Member u : notGoing) {
|
||||
notGoingBuilder.append(u.getDisplayName()).append(", ");
|
||||
}
|
||||
for (final Member u : notGoing) notGoingBuilder.append(u.getDisplayName()).append(", ");
|
||||
|
||||
if (onTimeBuilder.toString().isEmpty())
|
||||
spec.addField("On time", "N/a", true);
|
||||
@@ -360,4 +352,4 @@ public class RsvpCommand implements Command {
|
||||
spec.setColor(GlobalConst.discalColor);
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,36 +76,35 @@ public class TimeCommand implements Command {
|
||||
//TODO: Support multiple calendars
|
||||
private Mono<Void> calendarTime(final MessageCreateEvent event, final GuildSettings settings) {
|
||||
return DatabaseManager.getMainCalendar(settings.getGuildID())
|
||||
.flatMap(calData ->
|
||||
CalendarWrapper.getCalendar(calData, settings).flatMap(cal -> {
|
||||
final LocalDateTime ldt = LocalDateTime.now(ZoneId.of(cal.getTimeZone()));
|
||||
final DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy/MM/dd hh:mm:ss a");
|
||||
final String correctTime = fmt.format(ldt);
|
||||
.flatMap(calData -> CalendarWrapper.getCalendar(calData).flatMap(cal -> {
|
||||
final LocalDateTime ldt = LocalDateTime.now(ZoneId.of(cal.getTimeZone()));
|
||||
final DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy/MM/dd hh:mm:ss a");
|
||||
final String correctTime = fmt.format(ldt);
|
||||
|
||||
return event.getGuild().flatMap(guild ->
|
||||
Messages.sendMessage(embed -> {
|
||||
if (settings.isBranded()) {
|
||||
embed.setAuthor(guild.getName(), GlobalConst.discalSite,
|
||||
guild.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
} else {
|
||||
embed.setAuthor("DisCal", GlobalConst.discalSite,
|
||||
GlobalConst.iconUrl);
|
||||
}
|
||||
return event.getGuild().flatMap(guild ->
|
||||
Messages.sendMessage(embed -> {
|
||||
if (settings.getBranded()) {
|
||||
embed.setAuthor(guild.getName(), GlobalConst.discalSite,
|
||||
guild.getIconUrl(Image.Format.PNG).orElse(GlobalConst.iconUrl));
|
||||
} else {
|
||||
embed.setAuthor("DisCal", GlobalConst.discalSite,
|
||||
GlobalConst.iconUrl);
|
||||
}
|
||||
|
||||
embed.setTitle(Messages.getMessage("Embed.Time.Title", settings));
|
||||
embed.setTitle(Messages.getMessage("Embed.Time.Title", settings));
|
||||
|
||||
embed.addField(Messages.getMessage("Embed.Time.Time", settings), correctTime, false);
|
||||
embed.addField(Messages.getMessage("Embed.Time.Time", settings), correctTime, false);
|
||||
|
||||
embed.addField(Messages.getMessage("Embed.Time.TimeZone", settings), cal.getTimeZone(), false);
|
||||
embed.addField(Messages.getMessage("Embed.Time.TimeZone", settings), cal.getTimeZone(), false);
|
||||
|
||||
embed.setFooter(Messages.getMessage("Embed.Time.Footer", settings), null);
|
||||
embed.setUrl(CalendarMessageFormatter.getCalendarLink(settings.getGuildID(), calData.getCalendarNumber()));
|
||||
embed.setFooter(Messages.getMessage("Embed.Time.Footer", settings), null);
|
||||
embed.setUrl(CalendarMessageFormatter.getCalendarLink(settings.getGuildID(), calData.getCalendarNumber()));
|
||||
|
||||
embed.setColor(GlobalConst.discalColor);
|
||||
}, event));
|
||||
}))
|
||||
embed.setColor(GlobalConst.discalColor);
|
||||
}, event));
|
||||
}))
|
||||
.switchIfEmpty(Messages.sendMessage(
|
||||
Messages.getMessage("Creator.Calendar.NoCalendar", settings), event))
|
||||
.then();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.dreamexposure.discal.core.logger.LogFeed;
|
||||
import org.dreamexposure.discal.core.logger.object.LogObject;
|
||||
import org.dreamexposure.discal.core.network.google.Authorization;
|
||||
import org.dreamexposure.discal.core.object.GuildSettings;
|
||||
import org.dreamexposure.discal.core.object.calendar.CalendarData;
|
||||
import org.dreamexposure.discal.core.object.network.google.Poll;
|
||||
import org.dreamexposure.discal.core.utils.GlobalConst;
|
||||
import org.dreamexposure.discal.core.wrapper.google.CalendarWrapper;
|
||||
@@ -181,34 +182,35 @@ public class GoogleExternalAuth {
|
||||
final JSONObject aprGrant = new JSONObject(responseBody);
|
||||
|
||||
//Save credentials securely.
|
||||
final GuildSettings gs = poll.getSettings();
|
||||
CalendarData calData = CalendarData.emptyExternal(poll.getSettings().getGuildID());
|
||||
|
||||
final AESEncryption encryption = new AESEncryption(gs);
|
||||
gs.setEncryptedAccessToken(encryption.encrypt(aprGrant.getString("access_token")));
|
||||
gs.setEncryptedRefreshToken(encryption.encrypt(aprGrant.getString("refresh_token")));
|
||||
gs.setUseExternalCalendar(true);
|
||||
final AESEncryption encryption = new AESEncryption(calData);
|
||||
|
||||
|
||||
calData.setEncryptedAccessToken(encryption.encrypt(aprGrant.getString("access_token")));
|
||||
calData.setEncryptedRefreshToken(encryption.encrypt(aprGrant.getString("refresh_token")));
|
||||
|
||||
//Update settings and then we will list the calendars for the user
|
||||
return DatabaseManager.updateSettings(gs)
|
||||
.then(CalendarWrapper.getUsersExternalCalendars(gs))
|
||||
return DatabaseManager.updateCalendar(calData)
|
||||
.then(CalendarWrapper.getUsersExternalCalendars(calData))
|
||||
.flatMapMany(Flux::fromIterable)
|
||||
.map(i -> (Consumer<EmbedCreateSpec>) spec -> {
|
||||
spec.setAuthor("DisCal", GlobalConst.discalSite, GlobalConst.iconUrl);
|
||||
|
||||
spec.setTitle(Messages.getMessage("Embed.AddCalendar.List.Title", gs));
|
||||
spec.setTitle(Messages.getMessage("Embed.AddCalendar.List.Title", poll.getSettings()));
|
||||
|
||||
spec.addField(
|
||||
Messages.getMessage("Embed.AddCalendar.List.Name", gs),
|
||||
Messages.getMessage("Embed.AddCalendar.List.Name", poll.getSettings()),
|
||||
i.getSummary(),
|
||||
false);
|
||||
|
||||
spec.addField(
|
||||
Messages.getMessage("Embed.AddCalendar.List.TimeZone", gs),
|
||||
Messages.getMessage("Embed.AddCalendar.List.TimeZone", poll.getSettings()),
|
||||
i.getTimeZone(),
|
||||
false);
|
||||
|
||||
spec.addField(
|
||||
Messages.getMessage("Embed.AddCalendar.List.ID", gs),
|
||||
Messages.getMessage("Embed.AddCalendar.List.ID", poll.getSettings()),
|
||||
i.getId(),
|
||||
false);
|
||||
|
||||
@@ -216,7 +218,8 @@ public class GoogleExternalAuth {
|
||||
})
|
||||
.flatMap(em -> Messages.sendDirectMessage(em, poll.getUser()))
|
||||
.switchIfEmpty(Messages.sendDirectMessage(
|
||||
Messages.getMessage("AddCalendar.Auth.Poll.Failure.ListCalendars", gs), poll.getUser()))
|
||||
Messages.getMessage("AddCalendar.Auth.Poll.Failure.ListCalendars", poll.getSettings()),
|
||||
poll.getUser()))
|
||||
.then(Mono.error(new GoogleAuthCancelException()));
|
||||
} else {
|
||||
//Unknown network error...
|
||||
|
||||
@@ -18,7 +18,6 @@ import com.google.api.services.calendar.CalendarScopes;
|
||||
import org.dreamexposure.discal.core.crypto.AESEncryption;
|
||||
import org.dreamexposure.discal.core.network.google.Authorization;
|
||||
import org.dreamexposure.discal.core.object.BotSettings;
|
||||
import org.dreamexposure.discal.core.object.GuildSettings;
|
||||
import org.dreamexposure.discal.core.object.calendar.CalendarData;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -87,7 +86,7 @@ public class CalendarAuth {
|
||||
private static Mono<Credential> authorize(int credentialId) {
|
||||
return Mono.fromCallable(() -> {
|
||||
// Load client secrets.
|
||||
InputStream in = new FileInputStream(new File("client_secret.json"));
|
||||
InputStream in = new FileInputStream("client_secret.json");
|
||||
GoogleClientSecrets clientSecrets = GoogleClientSecrets
|
||||
.load(JacksonFactory.getDefaultInstance(), new InputStreamReader(in));
|
||||
|
||||
@@ -111,13 +110,13 @@ public class CalendarAuth {
|
||||
}
|
||||
|
||||
//TODO: This won't need guild settings eventually once we move the data to calendar data like it should be at
|
||||
private static Mono<Credential> authorize(GuildSettings g) {
|
||||
private static Mono<Credential> authorize(CalendarData calData) {
|
||||
return Mono.fromCallable(() -> {
|
||||
if ("N/a".equalsIgnoreCase(g.getEncryptedAccessToken()))
|
||||
if ("N/a".equalsIgnoreCase(calData.getEncryptedAccessToken()))
|
||||
return null;
|
||||
|
||||
AESEncryption encryption = new AESEncryption(g);
|
||||
String accessToken = Authorization.getAuth().requestNewAccessToken(g, encryption);
|
||||
AESEncryption encryption = new AESEncryption(calData);
|
||||
String accessToken = Authorization.getAuth().requestNewAccessToken(calData, encryption);
|
||||
|
||||
Credential credential = new GoogleCredential();
|
||||
credential.setAccessToken(accessToken);
|
||||
@@ -126,11 +125,10 @@ public class CalendarAuth {
|
||||
}
|
||||
|
||||
//TODO: Remove need for guild settings once we move the relevant data to more appropriate classes
|
||||
public static Mono<Calendar> getCalendarService(@NotNull GuildSettings g,
|
||||
@NotNull CalendarData calData) {
|
||||
public static Mono<Calendar> getCalendarService(@NotNull CalendarData calData) {
|
||||
return Mono.fromCallable(() -> {
|
||||
if (g.useExternalCalendar()) {
|
||||
return authorize(g).map(cred ->
|
||||
if (calData.getExternal()) {
|
||||
return authorize(calData).map(cred ->
|
||||
new Calendar.
|
||||
Builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance(), cred)
|
||||
.setApplicationName(APPLICATION_NAME)
|
||||
@@ -150,8 +148,8 @@ public class CalendarAuth {
|
||||
.build());
|
||||
}
|
||||
|
||||
public static Mono<Calendar> getExternalCalendarService(GuildSettings settings) {
|
||||
return authorize(settings).map(cred ->
|
||||
public static Mono<Calendar> getExternalCalendarService(CalendarData calendarData) {
|
||||
return authorize(calendarData).map(cred ->
|
||||
new Calendar.
|
||||
Builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance(), cred)
|
||||
.setApplicationName(APPLICATION_NAME)
|
||||
@@ -209,4 +207,4 @@ public class CalendarAuth {
|
||||
return this.jsonFactory;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package org.dreamexposure.discal.core.database;
|
||||
|
||||
import org.dreamexposure.discal.core.crypto.KeyGenerator;
|
||||
import org.dreamexposure.discal.core.enums.announcement.AnnouncementModifier;
|
||||
import org.dreamexposure.discal.core.enums.announcement.AnnouncementType;
|
||||
import org.dreamexposure.discal.core.enums.event.EventColor;
|
||||
@@ -160,9 +159,6 @@ public class DatabaseManager {
|
||||
guildSettingsCache.remove(set.getGuildID());
|
||||
guildSettingsCache.put(set.getGuildID(), set);
|
||||
|
||||
if ("N/a".equalsIgnoreCase(set.getPrivateKey()))
|
||||
set.setPrivateKey(KeyGenerator.csRandomAlphaNumericString(16));
|
||||
|
||||
final String table = String.format("%sguild_settings", settings.getPrefix());
|
||||
|
||||
return connect(slave, c -> {
|
||||
@@ -176,59 +172,48 @@ public class DatabaseManager {
|
||||
.flatMap(exists -> {
|
||||
if (exists) {
|
||||
final String update = "UPDATE " + table
|
||||
+ " SET EXTERNAL_CALENDAR = ?, PRIVATE_KEY = ?,"
|
||||
+ " ACCESS_TOKEN = ?, REFRESH_TOKEN = ?,"
|
||||
+ " CONTROL_ROLE = ?, DISCAL_CHANNEL = ?, SIMPLE_ANNOUNCEMENT = ?,"
|
||||
+ " SET CONTROL_ROLE = ?, DISCAL_CHANNEL = ?, SIMPLE_ANNOUNCEMENT = ?,"
|
||||
+ " LANG = ?, PREFIX = ?, PATRON_GUILD = ?, DEV_GUILD = ?,"
|
||||
+ " MAX_CALENDARS = ?, DM_ANNOUNCEMENTS = ?, 12_HOUR = ?,"
|
||||
+ " BRANDED = ? WHERE GUILD_ID = ?";
|
||||
|
||||
return connect(master, c -> Mono.from(c.createStatement(update)
|
||||
.bind(0, set.useExternalCalendar())
|
||||
.bind(1, set.getPrivateKey())
|
||||
.bind(2, set.getEncryptedAccessToken())
|
||||
.bind(3, set.getEncryptedRefreshToken())
|
||||
.bind(4, set.getControlRole())
|
||||
.bind(5, set.getDiscalChannel())
|
||||
.bind(6, set.usingSimpleAnnouncements())
|
||||
.bind(7, set.getLang())
|
||||
.bind(8, set.getPrefix())
|
||||
.bind(9, set.isPatronGuild())
|
||||
.bind(10, set.isDevGuild())
|
||||
.bind(11, set.getMaxCalendars())
|
||||
.bind(12, set.getDmAnnouncementsString())
|
||||
.bind(13, set.useTwelveHour())
|
||||
.bind(14, set.isBranded())
|
||||
.bind(15, set.getGuildID().asString())
|
||||
.bind(0, set.getControlRole())
|
||||
.bind(1, set.getDiscalChannel())
|
||||
.bind(2, set.getSimpleAnnouncements())
|
||||
.bind(3, set.getLang())
|
||||
.bind(4, set.getPrefix())
|
||||
.bind(5, set.getPatronGuild())
|
||||
.bind(6, set.getDevGuild())
|
||||
.bind(7, set.getMaxCalendars())
|
||||
.bind(8, set.getDmAnnouncementsString())
|
||||
.bind(9, set.getTwelveHour())
|
||||
.bind(10, set.getBranded())
|
||||
.bind(11, set.getGuildID().asString())
|
||||
.execute())
|
||||
).flatMap(res -> Mono.from(res.getRowsUpdated()))
|
||||
.hasElement()
|
||||
.thenReturn(true);
|
||||
} else {
|
||||
final String insertCommand = "INSERT INTO " + table + "(GUILD_ID, " +
|
||||
"EXTERNAL_CALENDAR, PRIVATE_KEY, ACCESS_TOKEN, REFRESH_TOKEN, " +
|
||||
"CONTROL_ROLE, DISCAL_CHANNEL, SIMPLE_ANNOUNCEMENT, LANG, " +
|
||||
"PREFIX, PATRON_GUILD, DEV_GUILD, MAX_CALENDARS, " +
|
||||
"DM_ANNOUNCEMENTS, 12_HOUR, BRANDED) " +
|
||||
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
|
||||
return connect(master, c -> Mono.from(c.createStatement(insertCommand)
|
||||
.bind(0, set.getGuildID().asString())
|
||||
.bind(1, set.useExternalCalendar())
|
||||
.bind(2, set.getPrivateKey())
|
||||
.bind(3, set.getEncryptedAccessToken())
|
||||
.bind(4, set.getEncryptedRefreshToken())
|
||||
.bind(5, set.getControlRole())
|
||||
.bind(6, set.getDiscalChannel())
|
||||
.bind(7, set.usingSimpleAnnouncements())
|
||||
.bind(8, set.getLang())
|
||||
.bind(9, set.getPrefix())
|
||||
.bind(10, set.isPatronGuild())
|
||||
.bind(11, set.isDevGuild())
|
||||
.bind(12, set.getMaxCalendars())
|
||||
.bind(13, set.getDmAnnouncementsString())
|
||||
.bind(14, set.useTwelveHour())
|
||||
.bind(15, set.isBranded())
|
||||
.bind(1, set.getControlRole())
|
||||
.bind(2, set.getDiscalChannel())
|
||||
.bind(3, set.getSimpleAnnouncements())
|
||||
.bind(4, set.getLang())
|
||||
.bind(5, set.getPrefix())
|
||||
.bind(6, set.getPatronGuild())
|
||||
.bind(7, set.getDevGuild())
|
||||
.bind(8, set.getMaxCalendars())
|
||||
.bind(9, set.getDmAnnouncementsString())
|
||||
.bind(10, set.getTwelveHour())
|
||||
.bind(11, set.getBranded())
|
||||
.execute())
|
||||
).flatMap(res -> Mono.from(res.getRowsUpdated()))
|
||||
.hasElement()
|
||||
@@ -255,7 +240,8 @@ public class DatabaseManager {
|
||||
if (exists) {
|
||||
final String update = "UPDATE " + table
|
||||
+ " SET CALENDAR_NUMBER = ?, CALENDAR_ID = ?,"
|
||||
+ " CALENDAR_ADDRESS = ?, EXTERNAL = ?, CREDENTIAL_ID = ?"
|
||||
+ " CALENDAR_ADDRESS = ?, EXTERNAL = ?, CREDENTIAL_ID = ?,"
|
||||
+ " PRIVATE_KEY = ?, ACCESS_TOKEN = ?, REFRESH TOKEN = ?"
|
||||
+ " WHERE GUILD_ID = ?";
|
||||
|
||||
return connect(master, c -> Mono.from(c.createStatement(update)
|
||||
@@ -264,7 +250,10 @@ public class DatabaseManager {
|
||||
.bind(2, calData.getCalendarAddress())
|
||||
.bind(3, calData.getExternal())
|
||||
.bind(4, calData.getCredentialId())
|
||||
.bind(5, calData.getGuildId().asString())
|
||||
.bind(5, calData.getPrivateKey())
|
||||
.bind(6, calData.getEncryptedAccessToken())
|
||||
.bind(7, calData.getEncryptedRefreshToken())
|
||||
.bind(8, calData.getGuildId().asString())
|
||||
.execute())
|
||||
).flatMap(res -> Mono.from(res.getRowsUpdated()))
|
||||
.hasElement()
|
||||
@@ -477,14 +466,12 @@ public class DatabaseManager {
|
||||
return Mono.from(c.createStatement(query)
|
||||
.bind(0, APIKey)
|
||||
.execute());
|
||||
}).flatMapMany(res -> res.map((row, rowMetadata) -> {
|
||||
return new UserAPIAccount(
|
||||
row.get("USER_ID", String.class),
|
||||
APIKey,
|
||||
row.get("BLOCKED", Boolean.class),
|
||||
row.get("TIME_ISSUED", Long.class)
|
||||
);
|
||||
}))
|
||||
}).flatMapMany(res -> res.map((row, rowMetadata) -> new UserAPIAccount(
|
||||
row.get("USER_ID", String.class),
|
||||
APIKey,
|
||||
row.get("BLOCKED", Boolean.class),
|
||||
row.get("TIME_ISSUED", Long.class)
|
||||
)))
|
||||
.next()
|
||||
.retryWhen(Retry.max(3)
|
||||
.filter(IllegalStateException.class::isInstance)
|
||||
@@ -508,39 +495,40 @@ public class DatabaseManager {
|
||||
.bind(0, guildId.asString())
|
||||
.execute());
|
||||
}).flatMapMany(res -> res.map((row, rowMetadata) -> {
|
||||
final GuildSettings set = new GuildSettings(guildId);
|
||||
String controlRole = row.get("CONTROL_ROLE", String.class);
|
||||
String discalChannel = row.get("DISCAL_CHANNEL", String.class);
|
||||
boolean simpleAnnouncements = row.get("SIMPLE_ANNOUNCEMENT", Boolean.class);
|
||||
String lang = row.get("LANG", String.class);
|
||||
String prefix = row.get("PREFIX", String.class);
|
||||
boolean patron = row.get("PATRON_GUILD", Boolean.class);
|
||||
boolean dev = row.get("DEV_GUILD", Boolean.class);
|
||||
int maxCals = row.get("MAX_CALENDARS", Integer.class);
|
||||
String dmAnnouncementsString = row.get("DM_ANNOUNCEMENTS", String.class);
|
||||
boolean twelveHour = row.get("12_HOUR", Boolean.class);
|
||||
boolean branded = row.get("BRANDED", Boolean.class);
|
||||
|
||||
set.setUseExternalCalendar(row.get("EXTERNAL_CALENDAR", Boolean.class));
|
||||
set.setPrivateKey(row.get("PRIVATE_KEY", String.class));
|
||||
set.setEncryptedAccessToken(row.get("ACCESS_TOKEN", String.class));
|
||||
set.setEncryptedRefreshToken(row.get("REFRESH_TOKEN", String.class));
|
||||
set.setControlRole(row.get("CONTROL_ROLE", String.class));
|
||||
set.setDiscalChannel(row.get("DISCAL_CHANNEL", String.class));
|
||||
set.setSimpleAnnouncements(row.get("SIMPLE_ANNOUNCEMENT", Boolean.class));
|
||||
set.setLang(row.get("LANG", String.class));
|
||||
set.setPrefix(row.get("PREFIX", String.class));
|
||||
set.setPatronGuild(row.get("PATRON_GUILD", Boolean.class));
|
||||
set.setDevGuild(row.get("DEV_GUILD", Boolean.class));
|
||||
set.setMaxCalendars(row.get("MAX_CALENDARS", Integer.class));
|
||||
set.setDmAnnouncementsFromString(row.get("DM_ANNOUNCEMENTS", String.class));
|
||||
set.setTwelveHour(row.get("12_HOUR", Boolean.class));
|
||||
set.setBranded(row.get("BRANDED", Boolean.class));
|
||||
GuildSettings settings = new GuildSettings(
|
||||
guildId, controlRole, discalChannel, simpleAnnouncements,
|
||||
lang, prefix, patron, dev, maxCals, twelveHour, branded
|
||||
);
|
||||
|
||||
settings.setDmAnnouncementsString(dmAnnouncementsString);
|
||||
|
||||
//Store in cache...
|
||||
guildSettingsCache.remove(guildId);
|
||||
guildSettingsCache.put(guildId, set);
|
||||
guildSettingsCache.put(guildId, settings);
|
||||
|
||||
return set;
|
||||
return settings;
|
||||
}))
|
||||
.next()
|
||||
.retryWhen(Retry.max(3)
|
||||
.filter(IllegalStateException.class::isInstance)
|
||||
.filter(e -> e.getMessage() != null && e.getMessage().contains("Request queue was disposed"))
|
||||
)
|
||||
.defaultIfEmpty(new GuildSettings(guildId))
|
||||
.defaultIfEmpty(GuildSettings.empty(guildId))
|
||||
.onErrorResume(e -> {
|
||||
LogFeed.log(LogObject.forException("Failed to get guild settings", e, DatabaseManager.class));
|
||||
return Mono.just(new GuildSettings(guildId));
|
||||
return Mono.just(GuildSettings.empty(guildId));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -559,8 +547,12 @@ public class DatabaseManager {
|
||||
final String calAddr = row.get("CALENDAR_ADDRESS", String.class);
|
||||
final boolean external = row.get("EXTERNAL", Boolean.class);
|
||||
final int credId = row.get("CREDENTIAL_ID", Integer.class);
|
||||
final String privateKey = row.get("PRIVATE_KEY", String.class);
|
||||
final String accessToken = row.get("ACCESS_TOKEN", String.class);
|
||||
final String refreshToken = row.get("REFRESH_TOKEN", String.class);
|
||||
|
||||
return new CalendarData(guildId, 1, calId, calAddr, external, credId);
|
||||
return new CalendarData(guildId, 1, calId, calAddr, external, credId,
|
||||
privateKey, accessToken, refreshToken);
|
||||
}))
|
||||
.next()
|
||||
.retryWhen(Retry.max(3)
|
||||
@@ -588,8 +580,12 @@ public class DatabaseManager {
|
||||
final String calAddr = row.get("CALENDAR_ADDRESS", String.class);
|
||||
final boolean external = row.get("EXTERNAL", Boolean.class);
|
||||
final int credId = row.get("CREDENTIAL_ID", Integer.class);
|
||||
final String privateKey = row.get("PRIVATE_KEY", String.class);
|
||||
final String accessToken = row.get("ACCESS_TOKEN", String.class);
|
||||
final String refreshToken = row.get("REFRESH_TOKEN", String.class);
|
||||
|
||||
return new CalendarData(guildId, calendarNumber, calId, calAddr, external, credId);
|
||||
return new CalendarData(guildId, calendarNumber, calId, calAddr, external, credId,
|
||||
privateKey, accessToken, refreshToken);
|
||||
}))
|
||||
.next()
|
||||
.retryWhen(Retry.max(3)
|
||||
@@ -612,11 +608,16 @@ public class DatabaseManager {
|
||||
.execute());
|
||||
}).flatMapMany(res -> res.map((row, rowMetadata) -> {
|
||||
final String calId = row.get("CALENDAR_ID", String.class);
|
||||
final int calNumber = row.get("CALENDAR_NUMBER", Integer.class);
|
||||
final String calAddr = row.get("CALENDAR_ADDRESS", String.class);
|
||||
final boolean external = row.get("EXTERNAL", Boolean.class);
|
||||
final int credId = row.get("CREDENTIAL_ID", Integer.class);
|
||||
final String privateKey = row.get("PRIVATE_KEY", String.class);
|
||||
final String accessToken = row.get("ACCESS_TOKEN", String.class);
|
||||
final String refreshToken = row.get("REFRESH_TOKEN", String.class);
|
||||
|
||||
return new CalendarData(guildId, 1, calId, calAddr, external, credId);
|
||||
return new CalendarData(guildId, calNumber, calId, calAddr, external, credId,
|
||||
privateKey, accessToken, refreshToken);
|
||||
}))
|
||||
.collectList()
|
||||
.retryWhen(Retry.max(3)
|
||||
@@ -784,7 +785,8 @@ public class DatabaseManager {
|
||||
.filter(e -> e.getMessage() != null && e.getMessage().contains("Request queue was disposed"))
|
||||
)
|
||||
.onErrorResume(e -> {
|
||||
LogFeed.log(LogObject.forException("Failed to get all announcements for guild", e, DatabaseManager.class));
|
||||
LogFeed.log(LogObject.forException("Failed to get all announcements for guild", e,
|
||||
DatabaseManager.class));
|
||||
|
||||
return Mono.just(new ArrayList<>());
|
||||
});
|
||||
@@ -989,7 +991,8 @@ public class DatabaseManager {
|
||||
.filter(e -> e.getMessage() != null && e.getMessage().contains("Request queue was disposed"))
|
||||
)
|
||||
.onErrorResume(e -> {
|
||||
LogFeed.log(LogObject.forException("Failed to get enabled announcements for guild", e, DatabaseManager.class));
|
||||
LogFeed.log(LogObject.forException("Failed to get enabled announcements for guild", e,
|
||||
DatabaseManager.class));
|
||||
|
||||
return Mono.just(new ArrayList<>());
|
||||
});
|
||||
@@ -1046,7 +1049,8 @@ public class DatabaseManager {
|
||||
}).flatMapMany(Result::getRowsUpdated)
|
||||
.then(Mono.just(true))
|
||||
.onErrorResume(e -> {
|
||||
LogFeed.log(LogObject.forException("Failed to delete announcements for event", e, DatabaseManager.class));
|
||||
LogFeed.log(LogObject.forException("Failed to delete announcements for event", e,
|
||||
DatabaseManager.class));
|
||||
return Mono.just(false);
|
||||
});
|
||||
}
|
||||
@@ -1082,7 +1086,8 @@ public class DatabaseManager {
|
||||
}).flatMapMany(Result::getRowsUpdated)
|
||||
.then(Mono.just(true))
|
||||
.onErrorResume(e -> {
|
||||
LogFeed.log(LogObject.forException("Failed to delete all event data for guild", e, DatabaseManager.class));
|
||||
LogFeed.log(LogObject.forException("Failed to delete all event data for guild", e,
|
||||
DatabaseManager.class));
|
||||
return Mono.just(false);
|
||||
});
|
||||
}
|
||||
@@ -1098,7 +1103,8 @@ public class DatabaseManager {
|
||||
}).flatMapMany(Result::getRowsUpdated)
|
||||
.then(Mono.just(true))
|
||||
.onErrorResume(e -> {
|
||||
LogFeed.log(LogObject.forException("Failed to delete all announcements for guild", e, DatabaseManager.class));
|
||||
LogFeed.log(LogObject.forException("Failed to delete all announcements for guild", e,
|
||||
DatabaseManager.class));
|
||||
return Mono.just(false);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ 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.object.calendar.CalendarData;
|
||||
import org.dreamexposure.discal.core.object.network.google.ClientData;
|
||||
import org.dreamexposure.discal.core.utils.CalendarUtils;
|
||||
import org.dreamexposure.discal.core.utils.GlobalConst;
|
||||
@@ -54,12 +54,12 @@ public class Authorization {
|
||||
|
||||
|
||||
//TODO: Rewrite this to be reactive
|
||||
public String requestNewAccessToken(GuildSettings settings, AESEncryption encryption) {
|
||||
public String requestNewAccessToken(CalendarData calData, AESEncryption encryption) {
|
||||
try {
|
||||
RequestBody body = new FormBody.Builder()
|
||||
.addEncoded("client_id", this.clientData.getClientId())
|
||||
.addEncoded("client_secret", this.clientData.getClientSecret())
|
||||
.addEncoded("refresh_token", encryption.decrypt(settings.getEncryptedRefreshToken()))
|
||||
.addEncoded("refresh_token", encryption.decrypt(calData.getEncryptedRefreshToken()))
|
||||
.addEncoded("grant_type", "refresh_token")
|
||||
.build();
|
||||
|
||||
@@ -75,8 +75,8 @@ public class Authorization {
|
||||
JSONObject autoRefreshResponse = new JSONObject(httpResponse.body().string());
|
||||
|
||||
//Update Db data.
|
||||
settings.setEncryptedAccessToken(encryption.encrypt(autoRefreshResponse.getString("access_token")));
|
||||
DatabaseManager.updateSettings(settings).subscribe();
|
||||
calData.setEncryptedAccessToken(encryption.encrypt(autoRefreshResponse.getString("access_token")));
|
||||
DatabaseManager.updateCalendar(calData).subscribe();
|
||||
|
||||
//Okay, we can return the access token to be used when this method is called.
|
||||
return autoRefreshResponse.getString("access_token");
|
||||
@@ -86,9 +86,7 @@ public class Authorization {
|
||||
if ("invalid_grant".equalsIgnoreCase(errorBody.getString("error"))) {
|
||||
// User revoked access to the calendar, delete our reference to it since they need to re-auth anyway
|
||||
|
||||
DatabaseManager.getCalendar(settings.getGuildID(), 1)
|
||||
.flatMap(cd -> CalendarUtils.deleteCalendar(cd, settings))
|
||||
.subscribe();
|
||||
CalendarUtils.deleteCalendar(calData).subscribe();
|
||||
} else {
|
||||
LogFeed.log(LogObject.forDebug("Error requesting new access token.",
|
||||
"Status code: " + httpResponse.code() + " | " + httpResponse.message() +
|
||||
@@ -111,4 +109,4 @@ public class Authorization {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,288 +0,0 @@
|
||||
package org.dreamexposure.discal.core.object;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
||||
import discord4j.common.util.Snowflake;
|
||||
|
||||
/**
|
||||
* Created by Nova Fox on 11/10/17.
|
||||
* Website: www.cloudcraftgaming.com
|
||||
* For Project: DisCal-Discord-Bot
|
||||
*/
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
public class GuildSettings {
|
||||
private Snowflake guildID;
|
||||
|
||||
//TODO: Move this boolean to calendar data
|
||||
private boolean externalCalendar;
|
||||
private String privateKey;
|
||||
|
||||
//TODO: Move these to calendar data class because if we allow mutlical this breaks down
|
||||
private String encryptedAccessToken;
|
||||
private String encryptedRefreshToken;
|
||||
|
||||
private String controlRole;
|
||||
private String discalChannel;
|
||||
|
||||
private boolean simpleAnnouncements;
|
||||
private String lang;
|
||||
private String prefix;
|
||||
|
||||
private boolean patronGuild;
|
||||
private boolean devGuild;
|
||||
private int maxCalendars;
|
||||
|
||||
private boolean twelveHour;
|
||||
private boolean branded;
|
||||
|
||||
private final ArrayList<String> dmAnnouncements = new ArrayList<>();
|
||||
|
||||
public GuildSettings(final Snowflake _guildId) {
|
||||
this.guildID = _guildId;
|
||||
|
||||
this.externalCalendar = false;
|
||||
this.privateKey = "N/a";
|
||||
|
||||
this.encryptedAccessToken = "N/a";
|
||||
this.encryptedRefreshToken = "N/a";
|
||||
|
||||
this.controlRole = "everyone";
|
||||
this.discalChannel = "all";
|
||||
|
||||
this.simpleAnnouncements = false;
|
||||
this.lang = "ENGLISH";
|
||||
this.prefix = "!";
|
||||
|
||||
this.patronGuild = false;
|
||||
this.devGuild = false;
|
||||
this.maxCalendars = 1;
|
||||
|
||||
this.twelveHour = true;
|
||||
}
|
||||
|
||||
//Getters
|
||||
public Snowflake getGuildID() {
|
||||
return this.guildID;
|
||||
}
|
||||
|
||||
public boolean useExternalCalendar() {
|
||||
return this.externalCalendar;
|
||||
}
|
||||
|
||||
public String getPrivateKey() {
|
||||
return this.privateKey;
|
||||
}
|
||||
|
||||
public String getEncryptedAccessToken() {
|
||||
return this.encryptedAccessToken;
|
||||
}
|
||||
|
||||
public String getEncryptedRefreshToken() {
|
||||
return this.encryptedRefreshToken;
|
||||
}
|
||||
|
||||
public String getControlRole() {
|
||||
return this.controlRole;
|
||||
}
|
||||
|
||||
public String getDiscalChannel() {
|
||||
return this.discalChannel;
|
||||
}
|
||||
|
||||
public boolean usingSimpleAnnouncements() {
|
||||
return this.simpleAnnouncements;
|
||||
}
|
||||
|
||||
public String getLang() {
|
||||
return this.lang;
|
||||
}
|
||||
|
||||
public String getPrefix() {
|
||||
return this.prefix;
|
||||
}
|
||||
|
||||
public boolean isPatronGuild() {
|
||||
return this.patronGuild;
|
||||
}
|
||||
|
||||
public boolean isDevGuild() {
|
||||
return this.devGuild;
|
||||
}
|
||||
|
||||
public int getMaxCalendars() {
|
||||
return this.maxCalendars;
|
||||
}
|
||||
|
||||
public boolean useTwelveHour() {
|
||||
return this.twelveHour;
|
||||
}
|
||||
|
||||
public boolean isBranded() {
|
||||
return this.branded;
|
||||
}
|
||||
|
||||
public ArrayList<String> getDmAnnouncements() {
|
||||
return this.dmAnnouncements;
|
||||
}
|
||||
|
||||
@SuppressWarnings("Duplicates")
|
||||
public String getDmAnnouncementsString() {
|
||||
StringBuilder users = new StringBuilder();
|
||||
int i = 0;
|
||||
for (final String sub : this.dmAnnouncements) {
|
||||
if (i == 0) {
|
||||
users = new StringBuilder(sub);
|
||||
} else {
|
||||
users.append(",").append(sub);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return users.toString();
|
||||
}
|
||||
|
||||
//Setters
|
||||
public void setUseExternalCalendar(final boolean _useExternal) {
|
||||
this.externalCalendar = _useExternal;
|
||||
}
|
||||
|
||||
public void setPrivateKey(final String _privateKey) {
|
||||
this.privateKey = _privateKey;
|
||||
}
|
||||
|
||||
public void setEncryptedAccessToken(final String _access) {
|
||||
this.encryptedAccessToken = _access;
|
||||
}
|
||||
|
||||
public void setEncryptedRefreshToken(final String _refresh) {
|
||||
this.encryptedRefreshToken = _refresh;
|
||||
}
|
||||
|
||||
public void setControlRole(final String _controlRole) {
|
||||
this.controlRole = _controlRole;
|
||||
}
|
||||
|
||||
public void setDiscalChannel(final String _discalChannel) {
|
||||
this.discalChannel = _discalChannel;
|
||||
}
|
||||
|
||||
public void setSimpleAnnouncements(final boolean _simpleAnnouncements) {
|
||||
this.simpleAnnouncements = _simpleAnnouncements;
|
||||
}
|
||||
|
||||
public void setLang(final String _lang) {
|
||||
this.lang = _lang;
|
||||
}
|
||||
|
||||
public void setPrefix(final String _prefix) {
|
||||
this.prefix = _prefix;
|
||||
}
|
||||
|
||||
public void setPatronGuild(final boolean _patronGuild) {
|
||||
this.patronGuild = _patronGuild;
|
||||
}
|
||||
|
||||
public void setDevGuild(final boolean _devGuild) {
|
||||
this.devGuild = _devGuild;
|
||||
}
|
||||
|
||||
public void setMaxCalendars(final Integer _maxCalendars) {
|
||||
this.maxCalendars = _maxCalendars;
|
||||
}
|
||||
|
||||
public void setTwelveHour(final boolean _twelveHour) {
|
||||
this.twelveHour = _twelveHour;
|
||||
}
|
||||
|
||||
public void setBranded(final boolean _branded) {
|
||||
this.branded = _branded;
|
||||
}
|
||||
|
||||
public void setDmAnnouncementsFromString(final String userList) {
|
||||
final String[] subs = userList.split(",");
|
||||
Collections.addAll(this.dmAnnouncements, subs);
|
||||
}
|
||||
|
||||
public JSONObject toJson() {
|
||||
final JSONObject data = new JSONObject();
|
||||
|
||||
data.put("guild_id", this.guildID.asString());
|
||||
data.put("external_calendar", this.externalCalendar);
|
||||
data.put("private_key", this.privateKey);
|
||||
data.put("access_token", this.encryptedAccessToken);
|
||||
data.put("refresh_token", this.encryptedRefreshToken);
|
||||
data.put("control_role", this.controlRole);
|
||||
data.put("discal_channel", this.discalChannel);
|
||||
data.put("simple_announcements", this.simpleAnnouncements);
|
||||
data.put("lang", this.lang);
|
||||
data.put("prefix", this.prefix);
|
||||
data.put("patron_guild", this.patronGuild);
|
||||
data.put("dev_guild", this.devGuild);
|
||||
data.put("max_calendars", this.maxCalendars);
|
||||
data.put("twelve_hour", this.twelveHour);
|
||||
data.put("branded", this.branded);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
public JSONObject toJsonSecure() {
|
||||
final JSONObject data = new JSONObject();
|
||||
|
||||
data.put("guild_id", this.guildID.asString());
|
||||
data.put("external_calendar", this.externalCalendar);
|
||||
data.put("control_role", this.controlRole);
|
||||
data.put("discal_channel", this.discalChannel);
|
||||
data.put("simple_announcement", this.simpleAnnouncements);
|
||||
data.put("lang", this.lang);
|
||||
data.put("prefix", this.prefix);
|
||||
data.put("patron_guild", this.patronGuild);
|
||||
data.put("dev_guild", this.devGuild);
|
||||
data.put("max_calendars", this.maxCalendars);
|
||||
data.put("twelve_hour", this.twelveHour);
|
||||
data.put("branded", this.branded);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
public GuildSettings fromJson(final JSONObject data) {
|
||||
this.guildID = Snowflake.of(data.getString("guild_id"));
|
||||
this.externalCalendar = data.getBoolean("external_calendar");
|
||||
this.privateKey = data.getString("private_key");
|
||||
this.encryptedAccessToken = data.getString("access_token");
|
||||
this.encryptedRefreshToken = data.getString("refresh_token");
|
||||
this.controlRole = data.getString("control_role");
|
||||
this.discalChannel = data.getString("discal_channel");
|
||||
this.simpleAnnouncements = data.getBoolean("simple_announcement");
|
||||
this.lang = data.getString("lang");
|
||||
this.prefix = data.getString("prefix");
|
||||
this.patronGuild = data.getBoolean("patron_guild");
|
||||
this.devGuild = data.getBoolean("dev_guild");
|
||||
this.maxCalendars = data.getInt("max_calendars");
|
||||
this.twelveHour = data.getBoolean("twelve_hour");
|
||||
this.branded = data.getBoolean("branded");
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public GuildSettings fromJsonSecure(final JSONObject data) {
|
||||
this.guildID = Snowflake.of(data.getString("guild_id"));
|
||||
this.externalCalendar = data.getBoolean("external_calendar");
|
||||
//privateKey = data.getString("PrivateKey");
|
||||
//encryptedAccessToken = data.getString("AccessToken");
|
||||
//encryptedRefreshToken = data.getString("RefreshToken");
|
||||
this.controlRole = data.getString("control_role");
|
||||
this.discalChannel = data.getString("discal_channel");
|
||||
this.simpleAnnouncements = data.getBoolean("simple_announcement");
|
||||
this.lang = data.getString("lang");
|
||||
this.prefix = data.getString("prefix");
|
||||
this.patronGuild = data.getBoolean("patron_guild");
|
||||
this.devGuild = data.getBoolean("dev_guild");
|
||||
this.maxCalendars = data.getInt("max_calendars");
|
||||
this.twelveHour = data.getBoolean("twelve_hours");
|
||||
this.branded = data.getBoolean("branded");
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -1,315 +0,0 @@
|
||||
package org.dreamexposure.discal.core.object.web;
|
||||
|
||||
import org.dreamexposure.discal.core.database.DatabaseManager;
|
||||
import org.dreamexposure.discal.core.exceptions.BotNotInGuildException;
|
||||
import org.dreamexposure.discal.core.object.BotSettings;
|
||||
import org.dreamexposure.discal.core.object.GuildSettings;
|
||||
import org.dreamexposure.discal.core.object.announcement.Announcement;
|
||||
import org.dreamexposure.discal.core.utils.GuildUtils;
|
||||
import org.dreamexposure.discal.core.utils.JsonUtil;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import discord4j.common.util.Snowflake;
|
||||
import discord4j.core.object.entity.Guild;
|
||||
import discord4j.core.object.entity.Member;
|
||||
import discord4j.core.object.entity.channel.GuildMessageChannel;
|
||||
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 reactor.core.publisher.Mono;
|
||||
import reactor.function.TupleUtils;
|
||||
|
||||
/**
|
||||
* Created by Nova Fox on 12/19/17.
|
||||
* Website: www.cloudcraftgaming.com
|
||||
* For Project: DisCal-Discord-Bot
|
||||
*/
|
||||
public class WebGuild {
|
||||
|
||||
public static WebGuild fromGuild(final RestGuild g) throws BotNotInGuildException {
|
||||
final GuildUpdateData data;
|
||||
|
||||
try {
|
||||
data = g.getData().block();
|
||||
} catch (final Exception e) {
|
||||
throw new BotNotInGuildException();
|
||||
}
|
||||
|
||||
final Snowflake id = Snowflake.of(data.id());
|
||||
final String name = data.name();
|
||||
final String iconUrl = data.icon().orElse("");
|
||||
|
||||
final Mono<String> botNick = g.member(Snowflake.of(BotSettings.ID.get()))
|
||||
.getData()
|
||||
.map(MemberData::nick)
|
||||
.map(Possible::flatOpt)
|
||||
.flatMap(Mono::justOrEmpty)
|
||||
.defaultIfEmpty("DisCal");
|
||||
|
||||
final Mono<GuildSettings> settings = DatabaseManager.getSettings(id).cache();
|
||||
|
||||
final Mono<List<WebRole>> roles = settings.flatMapMany(s ->
|
||||
g.getRoles().map(role -> WebRole.Companion.fromRole(role, s)))
|
||||
.collectList();
|
||||
|
||||
final Mono<List<WebChannel>> webChannels = settings.flatMapMany(s ->
|
||||
g.getChannels()
|
||||
.ofType(GuildMessageChannel.class)
|
||||
.map(channel -> WebChannel.Companion.fromChannel(channel, s)))
|
||||
.collectList();
|
||||
|
||||
final Mono<List<Announcement>> announcements = DatabaseManager.getAnnouncements(id);
|
||||
|
||||
final Mono<WebCalendar> calendar = settings.flatMap(s ->
|
||||
DatabaseManager.getMainCalendar(id)
|
||||
.flatMap(d -> WebCalendar.Companion.fromCalendar(d, s))
|
||||
)
|
||||
.defaultIfEmpty(WebCalendar.Companion.empty());
|
||||
|
||||
return Mono.zip(botNick, settings, roles, webChannels, announcements, calendar)
|
||||
.map(TupleUtils.function((bn, s, r, wc, a, c) -> {
|
||||
final WebGuild wg = new WebGuild(id.asLong(), name, iconUrl, s, bn, false, false, c);
|
||||
|
||||
wg.getChannels().add(WebChannel.Companion.all(s));
|
||||
|
||||
wg.getRoles().addAll(r);
|
||||
wg.getChannels().addAll(wc);
|
||||
wg.getAnnouncements().addAll(a);
|
||||
return wg;
|
||||
})).block();
|
||||
}
|
||||
|
||||
public static WebGuild fromGuild(final Guild g) {
|
||||
final long id = g.getId().asLong();
|
||||
final String name = g.getName();
|
||||
final String iconUrl = g.getIconUrl(Image.Format.PNG).orElse(null);
|
||||
final Mono<String> botNick = g.getMemberById(Snowflake.of(BotSettings.ID.get()))
|
||||
.map(Member::getNickname)
|
||||
.flatMap(Mono::justOrEmpty)
|
||||
.defaultIfEmpty("DisCal");
|
||||
|
||||
final Mono<GuildSettings> settings = DatabaseManager.getSettings(g.getId()).cache();
|
||||
|
||||
final Mono<List<WebRole>> roles = settings.flatMapMany(s ->
|
||||
g.getRoles().map(role -> WebRole.Companion.fromRole(role, s)))
|
||||
.collectList();
|
||||
|
||||
final Mono<List<WebChannel>> webChannels = settings.flatMapMany(s ->
|
||||
g.getChannels()
|
||||
.ofType(GuildMessageChannel.class)
|
||||
.map(channel -> WebChannel.Companion.fromChannel(channel, s)))
|
||||
.collectList();
|
||||
|
||||
final Mono<List<Announcement>> announcements = DatabaseManager.getAnnouncements(g.getId());
|
||||
|
||||
final Mono<WebCalendar> calendar = settings.flatMap(s ->
|
||||
DatabaseManager.getMainCalendar(Snowflake.of(id))
|
||||
.flatMap(d -> WebCalendar.Companion.fromCalendar(d, s))
|
||||
);
|
||||
|
||||
return Mono.zip(botNick, settings, roles, webChannels, announcements, calendar)
|
||||
.map(TupleUtils.function((bn, s, r, wc, a, c) -> {
|
||||
final WebGuild wg = new WebGuild(id, name, iconUrl, s, bn, false, false, c);
|
||||
|
||||
wg.getChannels().add(WebChannel.Companion.all(s));
|
||||
|
||||
wg.getRoles().addAll(r);
|
||||
wg.getChannels().addAll(wc);
|
||||
wg.getAnnouncements().addAll(a);
|
||||
return wg;
|
||||
})).block();
|
||||
}
|
||||
|
||||
public static WebGuild fromJson(final JSONObject data) {
|
||||
final long id = Long.parseLong(data.getString("id"));
|
||||
final GuildSettings settings = new GuildSettings(
|
||||
Snowflake.of(id)).fromJson(data.getJSONObject("settings"));
|
||||
|
||||
final WebGuild webGuild = new WebGuild(
|
||||
id,
|
||||
data.getString("name"),
|
||||
data.optString("icon_url"),
|
||||
settings,
|
||||
data.optString("bot_nick"),
|
||||
data.getBoolean("manage_server"),
|
||||
data.getBoolean("discal_role"),
|
||||
JsonUtil.INSTANCE.decodeFromJSON(WebCalendar.class, data.getJSONObject("calendar")));
|
||||
|
||||
final JSONArray jRoles = data.getJSONArray("roles");
|
||||
for (int i = 0; i < jRoles.length(); i++) {
|
||||
webGuild.getRoles().add(JsonUtil.INSTANCE.decodeFromJSON(WebRole.class, jRoles.getJSONObject(i)));
|
||||
}
|
||||
|
||||
final JSONArray jChannels = data.getJSONArray("channels");
|
||||
for (int i = 0; i < jChannels.length(); i++) {
|
||||
webGuild.getChannels().add(JsonUtil.INSTANCE.decodeFromJSON(WebChannel.class, jChannels.getJSONObject(i)));
|
||||
}
|
||||
|
||||
final JSONArray jAnnouncements = data.getJSONArray("announcements");
|
||||
for (int i = 0; i < jAnnouncements.length(); i++) {
|
||||
webGuild.getAnnouncements()
|
||||
.add(JsonUtil.INSTANCE.decodeFromJSON(Announcement.class, jAnnouncements.getJSONObject(i)));
|
||||
}
|
||||
|
||||
return webGuild;
|
||||
}
|
||||
|
||||
private final long id;
|
||||
private final String name;
|
||||
private final String iconUrl;
|
||||
|
||||
//Bot settings
|
||||
private final GuildSettings settings;
|
||||
private final String botNick;
|
||||
|
||||
//User info
|
||||
private boolean manageServer;
|
||||
private boolean discalRole;
|
||||
|
||||
//Lists and stuffs
|
||||
private final List<WebRole> roles = new ArrayList<>();
|
||||
private final List<WebChannel> channels = new ArrayList<>();
|
||||
private final List<Announcement> announcements = new ArrayList<>();
|
||||
|
||||
private final List<String> availableLangs = new ArrayList<>();
|
||||
|
||||
private final WebCalendar calendar;
|
||||
|
||||
private WebGuild(final long id, final String name, final String iconUrl, final GuildSettings settings, final String botNick,
|
||||
final boolean manageServer, final boolean discalRole, final WebCalendar calendar) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.iconUrl = iconUrl;
|
||||
this.settings = settings;
|
||||
this.botNick = botNick;
|
||||
this.manageServer = manageServer;
|
||||
this.discalRole = discalRole;
|
||||
this.calendar = calendar;
|
||||
}
|
||||
|
||||
//Getters
|
||||
public long getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public String getIcon() {
|
||||
return this.iconUrl;
|
||||
}
|
||||
|
||||
public GuildSettings getSettings() {
|
||||
return this.settings;
|
||||
}
|
||||
|
||||
public String getBotNick() {
|
||||
return this.botNick;
|
||||
}
|
||||
|
||||
public List<WebRole> getRoles() {
|
||||
return this.roles;
|
||||
}
|
||||
|
||||
public WebRole getRole(final long id) {
|
||||
for (final WebRole wr : this.roles) {
|
||||
if (wr.getId() == id)
|
||||
return wr;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<WebChannel> getChannels() {
|
||||
return this.channels;
|
||||
}
|
||||
|
||||
public WebChannel getChannel(final long id) {
|
||||
for (final WebChannel wc : this.channels) {
|
||||
if (wc.getId() == id)
|
||||
return wc;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<Announcement> getAnnouncements() {
|
||||
return this.announcements;
|
||||
}
|
||||
|
||||
public List<String> getAvailableLangs() {
|
||||
return this.availableLangs;
|
||||
}
|
||||
|
||||
public WebCalendar getCalendar() {
|
||||
return this.calendar;
|
||||
}
|
||||
|
||||
public boolean isManageServer() {
|
||||
return this.manageServer;
|
||||
}
|
||||
|
||||
public boolean isDiscalRole() {
|
||||
return this.discalRole;
|
||||
}
|
||||
|
||||
//Setties
|
||||
public void setManageServer(final boolean ms) {
|
||||
this.manageServer = ms;
|
||||
}
|
||||
|
||||
public void setDiscalRole(final boolean dr) {
|
||||
this.discalRole = dr;
|
||||
}
|
||||
|
||||
public JSONObject toJson(final boolean secure) {
|
||||
final JSONObject data = new JSONObject();
|
||||
|
||||
data.put("id", String.valueOf(this.id));
|
||||
data.put("name", this.name);
|
||||
if (this.iconUrl != null)
|
||||
data.put("icon_url", this.iconUrl);
|
||||
if (secure)
|
||||
data.put("settings", this.settings.toJsonSecure());
|
||||
else
|
||||
data.put("settings", this.settings.toJson());
|
||||
|
||||
if (this.botNick != null && !this.botNick.isEmpty())
|
||||
data.put("bot_nick", this.botNick);
|
||||
data.put("manage_server", this.manageServer);
|
||||
data.put("discal_role", this.discalRole);
|
||||
|
||||
final JSONArray jRoles = new JSONArray();
|
||||
for (final WebRole wr : this.roles) {
|
||||
jRoles.put(JsonUtil.INSTANCE.encodeToJSON(WebRole.class, wr));
|
||||
}
|
||||
data.put("roles", jRoles);
|
||||
|
||||
final JSONArray jChannels = new JSONArray();
|
||||
for (final WebChannel wc : this.channels) {
|
||||
jChannels.put(JsonUtil.INSTANCE.encodeToJSON(WebChannel.class, wc));
|
||||
}
|
||||
data.put("channels", jChannels);
|
||||
|
||||
final JSONArray jAnnouncements = new JSONArray();
|
||||
for (final Announcement a : this.announcements) {
|
||||
jAnnouncements.put(JsonUtil.INSTANCE.encodeToJSON(Announcement.class, a));
|
||||
}
|
||||
data.put("announcements", jAnnouncements);
|
||||
|
||||
data.put("calendar", JsonUtil.INSTANCE.encodeToJSON(WebCalendar.class, this.calendar));
|
||||
|
||||
//Add data about shard this guild is expected to be on
|
||||
data.put("shard", GuildUtils.findShard(Snowflake.of(this.getId())));
|
||||
|
||||
//Available langs to allow web editing of lang to be possible
|
||||
data.put("available_langs", this.availableLangs);
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
package org.dreamexposure.discal.core.object.web;
|
||||
@@ -5,7 +5,6 @@ import com.google.api.client.googleapis.json.GoogleJsonResponseException;
|
||||
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.GuildSettings;
|
||||
import org.dreamexposure.discal.core.object.calendar.CalendarData;
|
||||
import org.dreamexposure.discal.core.wrapper.google.CalendarWrapper;
|
||||
|
||||
@@ -18,37 +17,26 @@ import reactor.core.publisher.Mono;
|
||||
*/
|
||||
public class CalendarUtils {
|
||||
//TODO: Make sure this supports multi calendar support
|
||||
public static Mono<Boolean> deleteCalendar(final CalendarData data, final GuildSettings settings) {
|
||||
return CalendarWrapper.deleteCalendar(data, settings)
|
||||
.then(Mono.just(settings)
|
||||
.doOnNext(s -> s.setUseExternalCalendar(false))
|
||||
.doOnNext(s -> s.setEncryptedAccessToken("N/a"))
|
||||
.doOnNext(s -> s.setEncryptedRefreshToken("N/a"))
|
||||
.flatMap(s -> Mono.when(
|
||||
DatabaseManager.updateSettings(s),
|
||||
DatabaseManager.deleteCalendar(data),
|
||||
DatabaseManager.deleteAllEventData(s.getGuildID()),
|
||||
DatabaseManager.deleteAllRSVPData(s.getGuildID()),
|
||||
DatabaseManager.deleteAllAnnouncementData(settings.getGuildID())
|
||||
))
|
||||
).thenReturn(true)
|
||||
public static Mono<Boolean> deleteCalendar(final CalendarData data) {
|
||||
return CalendarWrapper.deleteCalendar(data).then(
|
||||
Mono.when(
|
||||
DatabaseManager.deleteCalendar(data),
|
||||
DatabaseManager.deleteAllEventData(data.getGuildId()),
|
||||
DatabaseManager.deleteAllRSVPData(data.getGuildId()),
|
||||
DatabaseManager.deleteAllAnnouncementData(data.getGuildId())
|
||||
)).thenReturn(true)
|
||||
.doOnError(e -> LogFeed.log(LogObject.forException("Failed to delete calendar", e, CalendarUtils.class)))
|
||||
.onErrorReturn(false);
|
||||
}
|
||||
|
||||
//TODO: Make sure this supports multi calendar support!!
|
||||
public static Mono<Boolean> calendarExists(final CalendarData data, final GuildSettings settings) {
|
||||
return CalendarWrapper.getCalendar(data, settings)
|
||||
public static Mono<Boolean> calendarExists(final CalendarData data) {
|
||||
return CalendarWrapper.getCalendar(data)
|
||||
.hasElement()
|
||||
.onErrorResume(GoogleJsonResponseException.class, ge -> {
|
||||
if (ge.getStatusCode() == GlobalConst.STATUS_GONE || ge.getStatusCode() == GlobalConst.STATUS_NOT_FOUND) {
|
||||
//Calendar does not exist... remove from db...
|
||||
settings.setUseExternalCalendar(false);
|
||||
settings.setEncryptedRefreshToken("N/a");
|
||||
settings.setEncryptedAccessToken("N/a");
|
||||
|
||||
return Mono.when(
|
||||
DatabaseManager.updateSettings(settings),
|
||||
DatabaseManager.deleteCalendar(data),
|
||||
DatabaseManager.deleteAllEventData(data.getGuildId()),
|
||||
DatabaseManager.deleteAllRSVPData(data.getGuildId()),
|
||||
@@ -62,4 +50,4 @@ public class CalendarUtils {
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ public class EventUtils {
|
||||
public static Mono<Boolean> deleteEvent(final GuildSettings settings, final String eventId) {
|
||||
return DatabaseManager.getMainCalendar(settings.getGuildID())
|
||||
.flatMap(data ->
|
||||
EventWrapper.deleteEvent(data, settings, eventId)
|
||||
EventWrapper.deleteEvent(data, eventId)
|
||||
.then(Mono.when(
|
||||
DatabaseManager.deleteAnnouncementsForEvent(settings.getGuildID(), eventId),
|
||||
DatabaseManager.deleteEventData(eventId))
|
||||
@@ -34,7 +34,7 @@ public class EventUtils {
|
||||
public static Mono<Boolean> deleteEvent(final GuildSettings settings, final int calNumber, final String eventId) {
|
||||
return DatabaseManager.getCalendar(settings.getGuildID(), calNumber)
|
||||
.flatMap(data ->
|
||||
EventWrapper.deleteEvent(data, settings, eventId)
|
||||
EventWrapper.deleteEvent(data, eventId)
|
||||
.then(Mono.when(
|
||||
DatabaseManager.deleteAnnouncementsForEvent(settings.getGuildID(), eventId),
|
||||
DatabaseManager.deleteEventData(eventId))
|
||||
@@ -46,7 +46,7 @@ public class EventUtils {
|
||||
public static Mono<Boolean> eventExists(final GuildSettings settings, final String eventId) {
|
||||
return DatabaseManager.getMainCalendar(settings.getGuildID())
|
||||
.flatMap(data ->
|
||||
EventWrapper.getEvent(data, settings, eventId)
|
||||
EventWrapper.getEvent(data, eventId)
|
||||
.hasElement()
|
||||
).switchIfEmpty(Mono.just(false));
|
||||
}
|
||||
@@ -54,7 +54,7 @@ public class EventUtils {
|
||||
public static Mono<Boolean> eventExists(final GuildSettings settings, final int calNumber, final String eventId) {
|
||||
return DatabaseManager.getCalendar(settings.getGuildID(), calNumber)
|
||||
.flatMap(data ->
|
||||
EventWrapper.getEvent(data, settings, eventId)
|
||||
EventWrapper.getEvent(data, eventId)
|
||||
.hasElement()
|
||||
).switchIfEmpty(Mono.just(false));
|
||||
}
|
||||
|
||||
@@ -45,20 +45,20 @@ public class TimeUtils {
|
||||
@Deprecated
|
||||
public static Mono<Boolean> isInPast(final String eventId, final GuildSettings settings) {
|
||||
return DatabaseManager.getMainCalendar(settings.getGuildID()).flatMap(data ->
|
||||
EventWrapper.getEvent(data, settings, eventId)
|
||||
EventWrapper.getEvent(data, eventId)
|
||||
.map(TimeUtils::isInPast)
|
||||
);
|
||||
}
|
||||
|
||||
public static Mono<Boolean> isInPast(final String eventId, final int calNumber, final GuildSettings settings) {
|
||||
return DatabaseManager.getCalendar(settings.getGuildID(), calNumber).flatMap(data ->
|
||||
EventWrapper.getEvent(data, settings, eventId)
|
||||
EventWrapper.getEvent(data, eventId)
|
||||
.map(TimeUtils::isInPast)
|
||||
);
|
||||
}
|
||||
|
||||
public static Mono<Boolean> isInPast(final String eventId, final CalendarData data, final GuildSettings settings) {
|
||||
return EventWrapper.getEvent(data, settings, eventId).map(TimeUtils::isInPast);
|
||||
public static Mono<Boolean> isInPast(final String eventId, final CalendarData data) {
|
||||
return EventWrapper.getEvent(data, eventId).map(TimeUtils::isInPast);
|
||||
}
|
||||
|
||||
|
||||
@@ -102,4 +102,4 @@ public class TimeUtils {
|
||||
|
||||
return epochTime + toAdd;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,15 +3,14 @@ package org.dreamexposure.discal.core.wrapper.google;
|
||||
import com.google.api.services.calendar.model.AclRule;
|
||||
|
||||
import org.dreamexposure.discal.core.calendar.CalendarAuth;
|
||||
import org.dreamexposure.discal.core.object.GuildSettings;
|
||||
import org.dreamexposure.discal.core.object.calendar.CalendarData;
|
||||
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.core.scheduler.Schedulers;
|
||||
|
||||
public class AclRuleWrapper {
|
||||
public static Mono<AclRule> insertRule(final AclRule rule, final CalendarData data, final GuildSettings settings) {
|
||||
return CalendarAuth.getCalendarService(settings, data)
|
||||
public static Mono<AclRule> insertRule(final AclRule rule, final CalendarData data) {
|
||||
return CalendarAuth.getCalendarService(data)
|
||||
.flatMap(service -> Mono.fromCallable(() ->
|
||||
service.acl()
|
||||
.insert(data.getCalendarId(), rule)
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.google.api.services.calendar.model.CalendarListEntry;
|
||||
import org.dreamexposure.discal.core.calendar.CalendarAuth;
|
||||
import org.dreamexposure.discal.core.logger.LogFeed;
|
||||
import org.dreamexposure.discal.core.logger.object.LogObject;
|
||||
import org.dreamexposure.discal.core.object.GuildSettings;
|
||||
import org.dreamexposure.discal.core.object.calendar.CalendarData;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -26,9 +25,8 @@ public class CalendarWrapper {
|
||||
.onErrorResume(e -> Mono.empty());
|
||||
}
|
||||
|
||||
public static Mono<Calendar> updateCalendar(final Calendar calendar, final GuildSettings settings,
|
||||
final CalendarData calData) {
|
||||
return CalendarAuth.getCalendarService(settings, calData)
|
||||
public static Mono<Calendar> updateCalendar(final Calendar calendar, final CalendarData calData) {
|
||||
return CalendarAuth.getCalendarService(calData)
|
||||
.flatMap(service -> Mono.fromCallable(() ->
|
||||
service.calendars()
|
||||
.update(calendar.getId(), calendar)
|
||||
@@ -37,8 +35,8 @@ public class CalendarWrapper {
|
||||
.onErrorResume(e -> Mono.empty());
|
||||
}
|
||||
|
||||
public static Mono<Calendar> getCalendar(final CalendarData data, final GuildSettings settings) {
|
||||
return CalendarAuth.getCalendarService(settings, data)
|
||||
public static Mono<Calendar> getCalendar(final CalendarData data) {
|
||||
return CalendarAuth.getCalendarService(data)
|
||||
.flatMap(service -> Mono.fromCallable(() ->
|
||||
service.calendars()
|
||||
.get(data.getCalendarAddress())
|
||||
@@ -48,12 +46,12 @@ public class CalendarWrapper {
|
||||
.onErrorResume(e -> Mono.empty());
|
||||
}
|
||||
|
||||
public static Mono<Void> deleteCalendar(final CalendarData data, final GuildSettings settings) {
|
||||
public static Mono<Void> deleteCalendar(final CalendarData data) {
|
||||
return Mono.just(data)
|
||||
.filter(cd -> !cd.getExternal())
|
||||
.filter(cd -> !"primary".equalsIgnoreCase(cd.getCalendarAddress()))
|
||||
.flatMap(cd ->
|
||||
CalendarAuth.getCalendarService(settings, data).flatMap(service ->
|
||||
CalendarAuth.getCalendarService(data).flatMap(service ->
|
||||
Mono.fromCallable(() -> service.calendars()
|
||||
.delete(cd.getCalendarAddress())
|
||||
.execute()
|
||||
@@ -64,8 +62,8 @@ public class CalendarWrapper {
|
||||
.then();
|
||||
}
|
||||
|
||||
public static Mono<List<CalendarListEntry>> getUsersExternalCalendars(final GuildSettings settings) {
|
||||
return CalendarAuth.getExternalCalendarService(settings)
|
||||
public static Mono<List<CalendarListEntry>> getUsersExternalCalendars(CalendarData calData) {
|
||||
return CalendarAuth.getExternalCalendarService(calData)
|
||||
.flatMap(service -> Mono.fromCallable(() ->
|
||||
service.calendarList()
|
||||
.list()
|
||||
|
||||
@@ -9,7 +9,6 @@ import org.dreamexposure.discal.core.calendar.CalendarAuth;
|
||||
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.GuildSettings;
|
||||
import org.dreamexposure.discal.core.object.calendar.CalendarData;
|
||||
import org.dreamexposure.discal.core.utils.GlobalConst;
|
||||
|
||||
@@ -21,8 +20,8 @@ import reactor.core.scheduler.Schedulers;
|
||||
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
public class EventWrapper {
|
||||
public static Mono<Event> createEvent(final CalendarData data, final Event event, final GuildSettings settings) {
|
||||
return CalendarAuth.getCalendarService(settings, data).flatMap(service ->
|
||||
public static Mono<Event> createEvent(final CalendarData data, final Event event) {
|
||||
return CalendarAuth.getCalendarService(data).flatMap(service ->
|
||||
Mono.fromCallable(() ->
|
||||
service.events()
|
||||
.insert(data.getCalendarId(), event)
|
||||
@@ -32,12 +31,12 @@ public class EventWrapper {
|
||||
if (e.getStatusCode() == GlobalConst.STATUS_NOT_FOUND ||
|
||||
"requiredAccessLevel".equalsIgnoreCase(e.getDetails().getErrors().get(0).getReason())) {
|
||||
//This is caused by credentials issue. Lets fix it.
|
||||
LogFeed.log(LogObject.forDebug("Attempting credentials fix...", "Guild Id: " + settings.getGuildID()));
|
||||
LogFeed.log(LogObject.forDebug("Attempting credentials fix...", "Guild Id: " + data.getGuildId()));
|
||||
|
||||
return correctAssignedCredentialId(data).flatMap(success -> {
|
||||
if (success) {
|
||||
return DatabaseManager.getCalendar(data.getGuildId(), data.getCalendarNumber())
|
||||
.flatMap(cd -> createEvent(cd, event, settings));
|
||||
.flatMap(cd -> createEvent(cd, event));
|
||||
} else {
|
||||
return Mono.empty();
|
||||
}
|
||||
@@ -49,8 +48,8 @@ public class EventWrapper {
|
||||
).onErrorResume(e -> Mono.empty());
|
||||
}
|
||||
|
||||
public static Mono<Event> updateEvent(final CalendarData data, final Event event, final GuildSettings settings) {
|
||||
return CalendarAuth.getCalendarService(settings, data).flatMap(service ->
|
||||
public static Mono<Event> updateEvent(final CalendarData data, final Event event) {
|
||||
return CalendarAuth.getCalendarService(data).flatMap(service ->
|
||||
Mono.fromCallable(() ->
|
||||
service.events()
|
||||
.update(data.getCalendarId(), event.getId(), event)
|
||||
@@ -60,12 +59,12 @@ public class EventWrapper {
|
||||
if (e.getStatusCode() == GlobalConst.STATUS_NOT_FOUND ||
|
||||
"requiredAccessLevel".equalsIgnoreCase(e.getDetails().getErrors().get(0).getReason())) {
|
||||
//This is caused by credentials issue. Lets fix it.
|
||||
LogFeed.log(LogObject.forDebug("Attempting credentials fix...", "Guild Id: " + settings.getGuildID()));
|
||||
LogFeed.log(LogObject.forDebug("Attempting credentials fix...", "Guild Id: " + data.getGuildId()));
|
||||
|
||||
return correctAssignedCredentialId(data).flatMap(success -> {
|
||||
if (success) {
|
||||
return DatabaseManager.getCalendar(data.getGuildId(), data.getCalendarNumber())
|
||||
.flatMap(cd -> updateEvent(cd, event, settings));
|
||||
.flatMap(cd -> updateEvent(cd, event));
|
||||
} else {
|
||||
return Mono.empty();
|
||||
}
|
||||
@@ -76,8 +75,8 @@ public class EventWrapper {
|
||||
).onErrorResume(e -> Mono.empty());
|
||||
}
|
||||
|
||||
public static Mono<Event> getEvent(final CalendarData data, final GuildSettings settings, final String id) {
|
||||
return CalendarAuth.getCalendarService(settings, data).flatMap(service ->
|
||||
public static Mono<Event> getEvent(final CalendarData data, final String id) {
|
||||
return CalendarAuth.getCalendarService(data).flatMap(service ->
|
||||
Mono.fromCallable(() ->
|
||||
service.events()
|
||||
.get(data.getCalendarAddress(), id)
|
||||
@@ -86,9 +85,9 @@ public class EventWrapper {
|
||||
).onErrorResume(e -> Mono.empty()); //Can ignore this, the event just doesn't exist.
|
||||
}
|
||||
|
||||
public static Mono<List<Event>> getEvents(final CalendarData data, final GuildSettings settings, final int amount,
|
||||
public static Mono<List<Event>> getEvents(final CalendarData data, final int amount,
|
||||
final long start) {
|
||||
return CalendarAuth.getCalendarService(settings, data).flatMap(service ->
|
||||
return CalendarAuth.getCalendarService(data).flatMap(service ->
|
||||
Mono.fromCallable(() ->
|
||||
service.events().list(data.getCalendarId())
|
||||
.setMaxResults(amount)
|
||||
@@ -115,9 +114,8 @@ public class EventWrapper {
|
||||
.onErrorResume(e -> Mono.empty());
|
||||
}
|
||||
|
||||
public static Mono<List<Event>> getEvents(final CalendarData data, final GuildSettings settings, final int amount,
|
||||
final long start, final long end) {
|
||||
return CalendarAuth.getCalendarService(settings, data).flatMap(service ->
|
||||
public static Mono<List<Event>> getEvents(CalendarData data, int amount, long start, long end) {
|
||||
return CalendarAuth.getCalendarService(data).flatMap(service ->
|
||||
Mono.fromCallable(() ->
|
||||
service.events().list(data.getCalendarId())
|
||||
.setMaxResults(amount)
|
||||
@@ -131,9 +129,9 @@ public class EventWrapper {
|
||||
).onErrorResume(e -> Mono.empty());
|
||||
}
|
||||
|
||||
public static Mono<List<Event>> getEvents(final CalendarData data, final GuildSettings settings, final long start,
|
||||
public static Mono<List<Event>> getEvents(final CalendarData data, final long start,
|
||||
final long end) {
|
||||
return CalendarAuth.getCalendarService(settings, data).flatMap(service ->
|
||||
return CalendarAuth.getCalendarService(data).flatMap(service ->
|
||||
Mono.fromCallable(() ->
|
||||
service.events().list(data.getCalendarId())
|
||||
.setTimeMin(new DateTime(start))
|
||||
@@ -146,8 +144,8 @@ public class EventWrapper {
|
||||
).onErrorResume(e -> Mono.empty());
|
||||
}
|
||||
|
||||
public static Mono<Void> deleteEvent(final CalendarData data, final GuildSettings settings, final String id) {
|
||||
return CalendarAuth.getCalendarService(settings, data).flatMap(service ->
|
||||
public static Mono<Void> deleteEvent(final CalendarData data, final String id) {
|
||||
return CalendarAuth.getCalendarService(data).flatMap(service ->
|
||||
Mono.fromCallable(() ->
|
||||
service.events()
|
||||
.delete(data.getCalendarAddress(), id)
|
||||
@@ -156,12 +154,12 @@ public class EventWrapper {
|
||||
).onErrorResume(GoogleJsonResponseException.class, e -> {
|
||||
if ("requiredAccessLevel".equalsIgnoreCase(e.getDetails().getErrors().get(0).getReason())) {
|
||||
//This is caused by credentials issue. Lets fix it.
|
||||
LogFeed.log(LogObject.forDebug("Attempting credentials fix...", "Guild Id: " + settings.getGuildID()));
|
||||
LogFeed.log(LogObject.forDebug("Attempting credentials fix...", "Guild Id: " + data.getGuildId()));
|
||||
|
||||
return correctAssignedCredentialId(data).flatMap(success -> {
|
||||
if (success) {
|
||||
return DatabaseManager.getCalendar(data.getGuildId(), data.getCalendarNumber())
|
||||
.flatMap(cd -> deleteEvent(cd, settings, id));
|
||||
.flatMap(cd -> deleteEvent(cd, id));
|
||||
} else {
|
||||
return Mono.empty();
|
||||
}
|
||||
@@ -199,7 +197,10 @@ public class EventWrapper {
|
||||
data.getCalendarId(),
|
||||
data.getCalendarAddress(),
|
||||
data.getExternal(),
|
||||
correctCredential);
|
||||
correctCredential,
|
||||
data.getPrivateKey(),
|
||||
data.getEncryptedAccessToken(),
|
||||
data.getEncryptedRefreshToken());
|
||||
|
||||
|
||||
LogFeed.log(LogObject.forDebug("Corrected credentials issue! Yay!", "Guild ID: " + data.getGuildId()));
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package org.dreamexposure.discal.core.crypto
|
||||
|
||||
import org.apache.commons.codec.binary.Base64
|
||||
import org.dreamexposure.discal.core.`object`.GuildSettings
|
||||
import org.dreamexposure.discal.core.`object`.calendar.CalendarData
|
||||
import java.nio.charset.Charset
|
||||
import java.nio.charset.StandardCharsets
|
||||
import javax.crypto.Cipher
|
||||
import javax.crypto.spec.IvParameterSpec
|
||||
import javax.crypto.spec.SecretKeySpec
|
||||
|
||||
class AESEncryption(settings: GuildSettings) {
|
||||
class AESEncryption(calData: CalendarData) {
|
||||
//Public key, its fine if this is here, I don't even have access to private keys
|
||||
private val key1: String = "E4B39r8F57F1Csde"
|
||||
|
||||
@@ -17,7 +17,7 @@ class AESEncryption(settings: GuildSettings) {
|
||||
private var cipher: Cipher?
|
||||
|
||||
init {
|
||||
val key2 = settings.privateKey
|
||||
val key2 = calData.privateKey
|
||||
this.ivParameterSpec = IvParameterSpec(key1.toByteArray(StandardCharsets.UTF_8))
|
||||
this.secretKeySpec = SecretKeySpec(key2.toByteArray(StandardCharsets.UTF_8), "AES")
|
||||
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
package org.dreamexposure.discal.core.`object`
|
||||
|
||||
import discord4j.common.util.Snowflake
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import org.dreamexposure.discal.core.serializers.SnowflakeAsStringSerializer
|
||||
|
||||
@Serializable
|
||||
data class GuildSettings(
|
||||
@Serializable(with = SnowflakeAsStringSerializer::class)
|
||||
@SerialName("guild_id")
|
||||
val guildID: Snowflake,
|
||||
|
||||
@SerialName("control_role")
|
||||
var controlRole: String = "everyone",
|
||||
@SerialName("discal_channel")
|
||||
var discalChannel: String = "all",
|
||||
|
||||
@SerialName("simple_announcement")
|
||||
var simpleAnnouncements: Boolean = false,
|
||||
var lang: String = "ENGLISH",
|
||||
var prefix: String = "!",
|
||||
|
||||
@SerialName("patron_guild")
|
||||
var patronGuild: Boolean = false,
|
||||
@SerialName("dev_guild")
|
||||
var devGuild: Boolean = false,
|
||||
@SerialName("max_calendars")
|
||||
var maxCalendars: Int = 1,
|
||||
|
||||
@SerialName("twelve_hour")
|
||||
var twelveHour: Boolean = true,
|
||||
var branded: Boolean = false,
|
||||
) {
|
||||
val dmAnnouncements: MutableList<String> = mutableListOf()
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun empty(guildId: Snowflake) = GuildSettings(guildId)
|
||||
}
|
||||
|
||||
fun getDmAnnouncementsString(): String {
|
||||
val dm = StringBuilder()
|
||||
|
||||
for ((i, sub) in this.dmAnnouncements.withIndex()) {
|
||||
if (i == 0) dm.append(sub)
|
||||
else dm.append(",").append(sub)
|
||||
}
|
||||
|
||||
return dm.toString()
|
||||
}
|
||||
|
||||
fun setDmAnnouncementsString(dm: String) {
|
||||
this.dmAnnouncements += dm.split(",")
|
||||
}
|
||||
}
|
||||
@@ -7,5 +7,5 @@ data class CalendarCreatorResponse(
|
||||
val successful: Boolean,
|
||||
val edited: Boolean,
|
||||
val creatorMessage: Message?,
|
||||
val calendar: Calendar
|
||||
val calendar: Calendar?
|
||||
)
|
||||
|
||||
@@ -1,16 +1,43 @@
|
||||
package org.dreamexposure.discal.core.`object`.calendar
|
||||
|
||||
import discord4j.common.util.Snowflake
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.Transient
|
||||
import org.dreamexposure.discal.core.serializers.SnowflakeAsStringSerializer
|
||||
import org.dreamexposure.novautils.crypto.KeyGenerator
|
||||
|
||||
@Serializable
|
||||
data class CalendarData(
|
||||
@Serializable(with = SnowflakeAsStringSerializer::class)
|
||||
@SerialName("guild_id")
|
||||
val guildId: Snowflake = Snowflake.of(0),
|
||||
@SerialName("calendar_number")
|
||||
val calendarNumber: Int = 0,
|
||||
@SerialName("calendar_id")
|
||||
val calendarId: String = "primary",
|
||||
@SerialName("calendar_address")
|
||||
val calendarAddress: String = "primary",
|
||||
val external: Boolean = false,
|
||||
|
||||
//secure values that should not be serialized
|
||||
@Transient
|
||||
val credentialId: Int = 0,
|
||||
)
|
||||
@Transient
|
||||
var privateKey: String = KeyGenerator.csRandomAlphaNumericString(16),
|
||||
@Transient
|
||||
var encryptedAccessToken: String = "N/a",
|
||||
@Transient
|
||||
var encryptedRefreshToken: String = "N/a",
|
||||
) {
|
||||
constructor(guildId: Snowflake, calendarNumber: Int, calendarId: String, calendarAddress: String, credentialId:
|
||||
Int) : this(guildId, calendarNumber, calendarId, calendarAddress, false, credentialId)
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun empty(guildId: Snowflake) = CalendarData(guildId)
|
||||
|
||||
@JvmStatic
|
||||
fun emptyExternal(guildId: Snowflake) = CalendarData(guildId, external = true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,13 +58,12 @@ data class PreEvent private constructor(
|
||||
|
||||
//Here is where I need to fix the display times
|
||||
//TODO: Get rid of the blocking
|
||||
val settings = DatabaseManager.getSettings(this.guildId).block()!!
|
||||
//TODO: Support multi-cal
|
||||
val data = DatabaseManager.getMainCalendar(this.guildId).block()!!
|
||||
|
||||
var cal: Calendar? = null
|
||||
try {
|
||||
cal = CalendarWrapper.getCalendar(data, settings).block()
|
||||
cal = CalendarWrapper.getCalendar(data).block()
|
||||
} catch (ex: Exception) {
|
||||
LogFeed.log(LogObject.forException("Failed to get proper date/time for event!", ex, this.javaClass))
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ data class WebCalendar private constructor(
|
||||
Mono.just(empty())
|
||||
else {
|
||||
val link = "https://www.discalbot.com/embed/calendar/${gs.guildID.asString()}"
|
||||
CalendarWrapper.getCalendar(cd, gs).map { cal ->
|
||||
CalendarWrapper.getCalendar(cd).map { cal ->
|
||||
WebCalendar(
|
||||
cd.calendarId,
|
||||
cd.calendarAddress,
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
package org.dreamexposure.discal.core.`object`.web
|
||||
|
||||
import discord4j.common.util.Snowflake
|
||||
import discord4j.core.`object`.entity.Guild
|
||||
import discord4j.core.`object`.entity.Member
|
||||
import discord4j.core.`object`.entity.channel.GuildMessageChannel
|
||||
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 kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.builtins.LongAsStringSerializer
|
||||
import org.dreamexposure.discal.core.`object`.BotSettings
|
||||
import org.dreamexposure.discal.core.`object`.GuildSettings
|
||||
import org.dreamexposure.discal.core.`object`.announcement.Announcement
|
||||
import org.dreamexposure.discal.core.database.DatabaseManager
|
||||
import org.dreamexposure.discal.core.exceptions.BotNotInGuildException
|
||||
import org.dreamexposure.discal.core.utils.GuildUtils
|
||||
import reactor.core.publisher.Mono
|
||||
import reactor.core.publisher.Mono.justOrEmpty
|
||||
import reactor.function.TupleUtils
|
||||
|
||||
@Serializable
|
||||
data class WebGuild(
|
||||
@Serializable(with = LongAsStringSerializer::class)
|
||||
val id: Long,
|
||||
val name: String,
|
||||
@SerialName("icon_url")
|
||||
val iconUrl: String? = null,
|
||||
|
||||
val settings: GuildSettings,
|
||||
|
||||
@SerialName("bot_nick")
|
||||
val botNick: String? = null,
|
||||
|
||||
@SerialName("manage_server")
|
||||
var manageServer: Boolean = false,
|
||||
@SerialName("discal_role")
|
||||
var discalRole: Boolean = false,
|
||||
|
||||
val calendar: WebCalendar
|
||||
) {
|
||||
val roles: MutableList<WebRole> = mutableListOf()
|
||||
val channels: MutableList<WebChannel> = mutableListOf()
|
||||
val announcements: MutableList<Announcement> = mutableListOf()
|
||||
|
||||
@SerialName("available_langs")
|
||||
val availableLangs: MutableList<String> = mutableListOf()
|
||||
|
||||
val shard = GuildUtils.findShard(Snowflake.of(this.id))
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
@Throws(BotNotInGuildException::class)
|
||||
fun fromGuild(g: RestGuild): Mono<WebGuild> {
|
||||
return g.data.flatMap { data: GuildUpdateData ->
|
||||
val id = Snowflake.of(data.id())
|
||||
val name = data.name()
|
||||
val ico = data.icon().orElse("")
|
||||
|
||||
val botNick = g.member(Snowflake.of(BotSettings.ID.get()))
|
||||
.data
|
||||
.map(MemberData::nick)
|
||||
.map { Possible.flatOpt(it) }
|
||||
.flatMap { justOrEmpty(it) }
|
||||
.defaultIfEmpty("DisCal")
|
||||
|
||||
val settings = DatabaseManager.getSettings(id).cache()
|
||||
|
||||
val roles = settings.flatMapMany { s ->
|
||||
g.roles.map { role -> WebRole.fromRole(role, s) }
|
||||
}.collectList()
|
||||
|
||||
val webChannels = settings.flatMapMany { s ->
|
||||
g.channels.ofType(GuildMessageChannel::class.java)
|
||||
.map { channel -> WebChannel.fromChannel(channel, s) }
|
||||
}.collectList()
|
||||
|
||||
val announcements = DatabaseManager.getAnnouncements(id)
|
||||
|
||||
val calendar = settings.flatMap { s ->
|
||||
DatabaseManager.getMainCalendar(id)
|
||||
.flatMap { d -> WebCalendar.fromCalendar(d, s) }
|
||||
}.defaultIfEmpty(WebCalendar.empty())
|
||||
|
||||
|
||||
Mono.zip(botNick, settings, roles, webChannels, announcements, calendar)
|
||||
.map(TupleUtils.function { bn, s, r, wc, a, c ->
|
||||
WebGuild(id.asLong(), name, ico, s, bn, manageServer = false, discalRole = false, c).apply {
|
||||
this.roles.addAll(r)
|
||||
this.channels.add(WebChannel.all(s))
|
||||
this.channels.addAll(wc)
|
||||
this.announcements.addAll(a)
|
||||
}
|
||||
})
|
||||
}.switchIfEmpty(Mono.error(BotNotInGuildException()))
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun fromGuild(g: Guild): Mono<WebGuild> {
|
||||
val id = g.id.asLong()
|
||||
val name = g.name
|
||||
val icon = g.getIconUrl(Image.Format.PNG).orElse(null)
|
||||
|
||||
val botNick = g.getMemberById(Snowflake.of(BotSettings.ID.get()))
|
||||
.map(Member::getNickname)
|
||||
.flatMap { justOrEmpty(it) }
|
||||
.defaultIfEmpty("DisCal")
|
||||
|
||||
val settings = DatabaseManager.getSettings(g.id).cache()
|
||||
|
||||
val roles = settings.flatMapMany { s ->
|
||||
g.roles.map { role -> WebRole.fromRole(role, s) }
|
||||
}.collectList()
|
||||
|
||||
val channels = settings.flatMapMany { s ->
|
||||
g.channels
|
||||
.ofType(GuildMessageChannel::class.java)
|
||||
.map { channel -> WebChannel.fromChannel(channel, s) }
|
||||
}.collectList()
|
||||
|
||||
val announcements = DatabaseManager.getAnnouncements(g.id)
|
||||
|
||||
val calendar = settings.flatMap { s ->
|
||||
DatabaseManager.getMainCalendar(Snowflake.of(id))
|
||||
.flatMap { d -> WebCalendar.fromCalendar(d, s) }
|
||||
}
|
||||
|
||||
return Mono.zip(botNick, settings, roles, channels, announcements, calendar)
|
||||
.map(TupleUtils.function { bn, s, r, wc, a, c ->
|
||||
WebGuild(id, name, icon, s, bn, manageServer = false, discalRole = false, c).apply {
|
||||
this.roles.addAll(r)
|
||||
this.channels.add(WebChannel.all(s))
|
||||
this.channels.addAll(wc)
|
||||
this.announcements.addAll(a)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
# noinspection SqlResolveForFile
|
||||
|
||||
# Add columns for calendar data that will be moved over
|
||||
ALTER TABLE ${prefix}calendars
|
||||
ADD COLUMN private_key VARCHAR(16) NOT NULL DEFAULT 'N/a',
|
||||
ADD COLUMN access_token VARCHAR(65535) NOT NULL DEFAULT 'N/a',
|
||||
ADD COLUMN refresh_token VARCHAR(65535) NOT NULL DEFAULT 'N/a';
|
||||
|
||||
# Copy and move data, setting defaults if not present
|
||||
UPDATE ${prefix}calendars AS c
|
||||
LEFT JOIN ${prefix}guild_settings AS g
|
||||
on c.guild_id = g.guild_id
|
||||
SET c.private_key = IFNULL(g.private_key, 'N/a'),
|
||||
c.access_token = IFNULL(g.access_token, 'N/a'),
|
||||
c.refresh_token = IFNULL(g.refresh_token, 'N/a');
|
||||
|
||||
# Delete columns from guild settings as they have now been moved over
|
||||
ALTER TABLE ${prefix}guild_settings
|
||||
DROP COLUMN external_calendar,
|
||||
DROP COLUMN private_key,
|
||||
DROP COLUMN access_token,
|
||||
DROP COLUMN refresh_token;
|
||||
@@ -66,7 +66,7 @@ public class EventEndpoint {
|
||||
//okay, lets actually get the month's events.
|
||||
try {
|
||||
final CalendarData calendarData = DatabaseManager.getMainCalendar(settings.getGuildID()).block();
|
||||
final Calendar service = CalendarAuth.getCalendarService(settings, calendarData).block();
|
||||
final Calendar service = CalendarAuth.getCalendarService(calendarData).block();
|
||||
|
||||
final Events events = service.events().list(calendarData.getCalendarAddress())
|
||||
.setTimeMin(new DateTime(startEpoch))
|
||||
@@ -124,7 +124,7 @@ public class EventEndpoint {
|
||||
//okay, lets actually get the month's events.
|
||||
try {
|
||||
final CalendarData calendarData = DatabaseManager.getMainCalendar(settings.getGuildID()).block();
|
||||
final Calendar service = CalendarAuth.getCalendarService(settings, calendarData).block();
|
||||
final Calendar service = CalendarAuth.getCalendarService(calendarData).block();
|
||||
|
||||
final Events events = service.events().list(calendarData.getCalendarAddress())
|
||||
.setTimeMin(new DateTime(startEpoch))
|
||||
@@ -222,7 +222,7 @@ public class EventEndpoint {
|
||||
//Okay, time to update the event
|
||||
try {
|
||||
final CalendarData calendarData = DatabaseManager.getMainCalendar(settings.getGuildID()).block();
|
||||
final Calendar service = CalendarAuth.getCalendarService(settings, calendarData).block();
|
||||
final Calendar service = CalendarAuth.getCalendarService(calendarData).block();
|
||||
|
||||
final com.google.api.services.calendar.model.Calendar cal = service.calendars().get(calendarData.getCalendarId()).execute();
|
||||
|
||||
@@ -268,7 +268,7 @@ public class EventEndpoint {
|
||||
body.getString("image")
|
||||
);
|
||||
|
||||
if (!ImageUtils.validate(ed.getImageLink(), settings.isPatronGuild()).block()) {
|
||||
if (!ImageUtils.validate(ed.getImageLink(), settings.getPatronGuild()).block()) {
|
||||
final JSONObject respondBody = new JSONObject();
|
||||
respondBody.put("Message", "Failed to create event!");
|
||||
respondBody.put("reason", "Invalid image link and/or GIF image not supported.");
|
||||
@@ -323,7 +323,7 @@ public class EventEndpoint {
|
||||
try {
|
||||
final CalendarData calendarData = DatabaseManager.getMainCalendar(settings.getGuildID()).block();
|
||||
|
||||
final Calendar service = CalendarAuth.getCalendarService(settings, calendarData).block();
|
||||
final Calendar service = CalendarAuth.getCalendarService(calendarData).block();
|
||||
|
||||
final com.google.api.services.calendar.model.Calendar cal = service.calendars().get(calendarData.getCalendarId()).execute();
|
||||
|
||||
@@ -369,7 +369,7 @@ public class EventEndpoint {
|
||||
body.getString("image")
|
||||
);
|
||||
|
||||
if (!ImageUtils.validate(ed.getImageLink(), settings.isPatronGuild()).block()) {
|
||||
if (!ImageUtils.validate(ed.getImageLink(), settings.getPatronGuild()).block()) {
|
||||
final JSONObject respondBody = new JSONObject();
|
||||
respondBody.put("Message", "Failed to update event!");
|
||||
respondBody.put("reason", "Invalid image link and/or GIF image not supported.");
|
||||
|
||||
@@ -52,14 +52,13 @@ public class GuildEndpoint {
|
||||
response.setStatus(GlobalConst.STATUS_SUCCESS);
|
||||
|
||||
final JSONObject body = new JSONObject();
|
||||
body.put("external_calendar", settings.useExternalCalendar());
|
||||
body.put("control_role", settings.getControlRole());
|
||||
body.put("discal_channel", settings.getDiscalChannel());
|
||||
body.put("simple_announcement", settings.usingSimpleAnnouncements());
|
||||
body.put("simple_announcement", settings.getSimpleAnnouncements());
|
||||
body.put("lang", settings.getLang());
|
||||
body.put("prefix", settings.getPrefix());
|
||||
body.put("patron_guild", settings.isPatronGuild());
|
||||
body.put("dev_guild", settings.isDevGuild());
|
||||
body.put("patron_guild", settings.getPatronGuild());
|
||||
body.put("dev_guild", settings.getDevGuild());
|
||||
body.put("max_calendars", settings.getMaxCalendars());
|
||||
|
||||
return body.toString();
|
||||
@@ -95,18 +94,19 @@ public class GuildEndpoint {
|
||||
|
||||
final long guildId = body.getLong("guild_id");
|
||||
|
||||
final GuildSettings settings = DatabaseManager.getSettings(Snowflake.of(guildId)).block();
|
||||
GuildSettings settings = DatabaseManager.getSettings(Snowflake.of(guildId)).block();
|
||||
|
||||
if (body.has("control_role"))
|
||||
settings.setControlRole(body.getString("control_role"));
|
||||
if (body.has("discal_channel"))
|
||||
settings.setDiscalChannel(body.getString("discal_channel"));
|
||||
if (body.has("simple_announcement"))
|
||||
settings.setSimpleAnnouncements(body.getBoolean("simple_announcement"));
|
||||
if (body.has("lang"))
|
||||
settings.setLang(body.getString("lang"));
|
||||
if (body.has("prefix"))
|
||||
settings.setPrefix(body.getString("prefix"));
|
||||
settings = settings.copy(settings.getGuildID(),
|
||||
body.optString("control_role", settings.getControlRole()),
|
||||
body.optString("discal_channel", settings.getDiscalChannel()),
|
||||
body.optBoolean("simple_announcement", settings.getSimpleAnnouncements()),
|
||||
body.optString("lang", settings.getLang()),
|
||||
body.optString("prefix", settings.getPrefix()),
|
||||
settings.getPatronGuild(),
|
||||
settings.getDevGuild(),
|
||||
settings.getMaxCalendars(),
|
||||
settings.getTwelveHour(),
|
||||
settings.getBranded());
|
||||
|
||||
if (DatabaseManager.updateSettings(settings).block()) {
|
||||
response.setContentType("application/json");
|
||||
|
||||
@@ -3,7 +3,6 @@ package org.dreamexposure.discal.server.api.endpoints.v2.calendar;
|
||||
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.GuildSettings;
|
||||
import org.dreamexposure.discal.core.object.calendar.CalendarData;
|
||||
import org.dreamexposure.discal.core.object.web.AuthenticationState;
|
||||
import org.dreamexposure.discal.core.utils.CalendarUtils;
|
||||
@@ -46,12 +45,11 @@ public class DeleteCalendarEndpoint {
|
||||
final Snowflake guildId = Snowflake.of(jsonMain.getString("guild_id"));
|
||||
final int calNumber = jsonMain.getInt("calendar_number");
|
||||
|
||||
final GuildSettings settings = DatabaseManager.getSettings(guildId).block();
|
||||
final CalendarData calendar = DatabaseManager.getCalendar(guildId, calNumber).block();
|
||||
|
||||
if (!"primary".equalsIgnoreCase(calendar.getCalendarAddress())) {
|
||||
if (CalendarUtils.calendarExists(calendar, settings).block()) {
|
||||
if (CalendarUtils.deleteCalendar(calendar, settings).block()) {
|
||||
if (CalendarUtils.calendarExists(calendar).block()) {
|
||||
if (CalendarUtils.deleteCalendar(calendar).block()) {
|
||||
response.setContentType("application/json");
|
||||
response.setStatus(GlobalConst.STATUS_SUCCESS);
|
||||
return JsonUtils.getJsonResponseMessage("Calendar successfully deleted");
|
||||
|
||||
@@ -6,7 +6,6 @@ import org.dreamexposure.discal.core.calendar.CalendarAuth;
|
||||
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.GuildSettings;
|
||||
import org.dreamexposure.discal.core.object.calendar.CalendarData;
|
||||
import org.dreamexposure.discal.core.object.web.AuthenticationState;
|
||||
import org.dreamexposure.discal.core.utils.CalendarUtils;
|
||||
@@ -45,12 +44,11 @@ public class GetCalendarEndpoint {
|
||||
final Snowflake guildId = Snowflake.of(jsonMain.getString("guild_id"));
|
||||
final int calNumber = jsonMain.getInt("calendar_number");
|
||||
|
||||
final GuildSettings settings = DatabaseManager.getSettings(guildId).block();
|
||||
final CalendarData calData = DatabaseManager.getCalendar(guildId, calNumber).block();
|
||||
|
||||
if (!"primary".equalsIgnoreCase(calData.getCalendarAddress())
|
||||
&& CalendarUtils.calendarExists(calData, settings).block()) {
|
||||
final Calendar service = CalendarAuth.getCalendarService(settings, calData).block();
|
||||
&& CalendarUtils.calendarExists(calData).block()) {
|
||||
final Calendar service = CalendarAuth.getCalendarService(calData).block();
|
||||
final com.google.api.services.calendar.model.Calendar cal = service.calendars()
|
||||
.get(calData.getCalendarAddress())
|
||||
.execute();
|
||||
|
||||
@@ -6,7 +6,6 @@ import org.dreamexposure.discal.core.calendar.CalendarAuth;
|
||||
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.GuildSettings;
|
||||
import org.dreamexposure.discal.core.object.calendar.CalendarData;
|
||||
import org.dreamexposure.discal.core.object.web.AuthenticationState;
|
||||
import org.dreamexposure.discal.core.utils.CalendarUtils;
|
||||
@@ -45,13 +44,11 @@ public class ListCalendarEndpoint {
|
||||
final JSONObject jsonMain = new JSONObject(requestBody);
|
||||
final Snowflake guildId = Snowflake.of(jsonMain.getString("guild_id"));
|
||||
|
||||
final GuildSettings settings = DatabaseManager.getSettings(guildId).block();
|
||||
|
||||
final JSONArray jCals = new JSONArray();
|
||||
for (final CalendarData calData : DatabaseManager.getAllCalendars(guildId).block()) {
|
||||
if (!"primary".equalsIgnoreCase(calData.getCalendarAddress())
|
||||
&& CalendarUtils.calendarExists(calData, settings).block()) {
|
||||
final Calendar service = CalendarAuth.getCalendarService(settings, calData).block();
|
||||
&& CalendarUtils.calendarExists(calData).block()) {
|
||||
final Calendar service = CalendarAuth.getCalendarService(calData).block();
|
||||
|
||||
final com.google.api.services.calendar.model.Calendar cal = service.calendars()
|
||||
.get(calData.getCalendarAddress())
|
||||
|
||||
@@ -6,7 +6,6 @@ import org.dreamexposure.discal.core.calendar.CalendarAuth;
|
||||
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.GuildSettings;
|
||||
import org.dreamexposure.discal.core.object.calendar.CalendarData;
|
||||
import org.dreamexposure.discal.core.object.web.AuthenticationState;
|
||||
import org.dreamexposure.discal.core.utils.CalendarUtils;
|
||||
@@ -50,12 +49,11 @@ public class UpdateCalendarEndpoint {
|
||||
final Snowflake guildId = Snowflake.of(jsonMain.getString("guild_id"));
|
||||
final int calNumber = jsonMain.getInt("calendar_number");
|
||||
|
||||
final GuildSettings settings = DatabaseManager.getSettings(guildId).block();
|
||||
final CalendarData calData = DatabaseManager.getCalendar(guildId, calNumber).block();
|
||||
|
||||
if (!"primary".equalsIgnoreCase(calData.getCalendarAddress())
|
||||
&& CalendarUtils.calendarExists(calData, settings).block()) {
|
||||
final Calendar service = CalendarAuth.getCalendarService(settings, calData).block();
|
||||
&& CalendarUtils.calendarExists(calData).block()) {
|
||||
final Calendar service = CalendarAuth.getCalendarService(calData).block();
|
||||
final com.google.api.services.calendar.model.Calendar cal = service.calendars()
|
||||
.get(calData.getCalendarAddress())
|
||||
.execute();
|
||||
|
||||
@@ -64,7 +64,7 @@ public class CreateEventEndpoint {
|
||||
final GuildSettings settings = DatabaseManager.getSettings(Snowflake.of(guildId)).block();
|
||||
final CalendarData calData = DatabaseManager.getCalendar(settings.getGuildID(), calNumber).block();
|
||||
|
||||
final com.google.api.services.calendar.Calendar service = CalendarAuth.getCalendarService(settings, calData).block();
|
||||
final com.google.api.services.calendar.Calendar service = CalendarAuth.getCalendarService(calData).block();
|
||||
final Calendar cal = service.calendars().get(calData.getCalendarId()).execute();
|
||||
|
||||
final Event event = new Event();
|
||||
@@ -97,7 +97,7 @@ public class CreateEventEndpoint {
|
||||
|
||||
EventData eventData = new EventData();
|
||||
if (requestBody.has("image")) {
|
||||
if (ImageUtils.validate(requestBody.getString("image"), settings.isPatronGuild()).block()) {
|
||||
if (ImageUtils.validate(requestBody.getString("image"), settings.getPatronGuild()).block()) {
|
||||
//Link is good...
|
||||
eventData = new EventData(
|
||||
Snowflake.of(guildId),
|
||||
|
||||
@@ -50,7 +50,7 @@ public class GetEventEndpoint {
|
||||
final CalendarData calendarData = DatabaseManager.getCalendar(settings.getGuildID(), calNumber).block();
|
||||
|
||||
//okay, get the calendar service and then the event
|
||||
final Calendar service = CalendarAuth.getCalendarService(settings, calendarData).block();
|
||||
final Calendar service = CalendarAuth.getCalendarService(calendarData).block();
|
||||
|
||||
final Event event = service.events().get(calendarData.getCalendarAddress(), eventId).execute();
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ public class UpdateEventEndpoint {
|
||||
final GuildSettings settings = DatabaseManager.getSettings(Snowflake.of(guildId)).block();
|
||||
final CalendarData calData = DatabaseManager.getCalendar(settings.getGuildID(), calNumber).block();
|
||||
|
||||
final com.google.api.services.calendar.Calendar service = CalendarAuth.getCalendarService(settings, calData).block();
|
||||
final com.google.api.services.calendar.Calendar service = CalendarAuth.getCalendarService(calData).block();
|
||||
final Calendar cal = service.calendars().get(calData.getCalendarId()).execute();
|
||||
|
||||
final Event event = service.events().get(calData.getCalendarId(), eventId).execute();
|
||||
@@ -96,7 +96,7 @@ public class UpdateEventEndpoint {
|
||||
event.setRecurrence(Arrays.asList(rr));
|
||||
}
|
||||
if (requestBody.has("image")) {
|
||||
if (ImageUtils.validate(requestBody.getString("image"), settings.isPatronGuild()).block()) {
|
||||
if (ImageUtils.validate(requestBody.getString("image"), settings.getPatronGuild()).block()) {
|
||||
//Link is good...
|
||||
final EventData ed = new EventData(
|
||||
Snowflake.of(guildId),
|
||||
|
||||
@@ -50,7 +50,7 @@ public class ListEventDateEndpoint {
|
||||
|
||||
//okay, lets actually get the date's events.
|
||||
final List<JSONObject> events = DatabaseManager.getCalendar(settings.getGuildID(), calNumber)
|
||||
.flatMap(calData -> EventWrapper.getEvents(calData, settings, startEpoch, endEpoch))
|
||||
.flatMap(calData -> EventWrapper.getEvents(calData, startEpoch, endEpoch))
|
||||
.flatMapMany(Flux::fromIterable)
|
||||
.map(e -> JsonUtils.convertEventToJson(e, settings))
|
||||
.collectList()
|
||||
|
||||
@@ -51,7 +51,7 @@ public class ListEventMonthEndpoint {
|
||||
|
||||
//okay, lets actually get the month's events.
|
||||
final List<JSONObject> events = DatabaseManager.getCalendar(settings.getGuildID(), calNumber)
|
||||
.flatMap(calData -> EventWrapper.getEvents(calData, settings, startEpoch, endEpoch))
|
||||
.flatMap(calData -> EventWrapper.getEvents(calData, startEpoch, endEpoch))
|
||||
.flatMapMany(Flux::fromIterable)
|
||||
.map(e -> JsonUtils.convertEventToJson(e, settings))
|
||||
.collectList()
|
||||
|
||||
@@ -50,7 +50,7 @@ public class ListEventOngoingEndpoint {
|
||||
|
||||
//okay, lets actually get the date's events.
|
||||
final List<JSONObject> events = DatabaseManager.getCalendar(settings.getGuildID(), calNumber)
|
||||
.flatMap(calData -> EventWrapper.getEvents(calData, settings, start, end))
|
||||
.flatMap(calData -> EventWrapper.getEvents(calData, start, end))
|
||||
.flatMapMany(Flux::fromIterable)
|
||||
.filter(e -> e.getStart().getDateTime().getValue() < System.currentTimeMillis())
|
||||
.filter(e -> e.getEnd().getDateTime().getValue() > System.currentTimeMillis())
|
||||
|
||||
@@ -50,7 +50,7 @@ public class ListEventRangeEndpoint {
|
||||
|
||||
//okay, lets actually get the range's events.
|
||||
final List<JSONObject> events = DatabaseManager.getCalendar(settings.getGuildID(), calNumber)
|
||||
.flatMap(calData -> EventWrapper.getEvents(calData, settings, startEpoch, endEpoch))
|
||||
.flatMap(calData -> EventWrapper.getEvents(calData, startEpoch, endEpoch))
|
||||
.flatMapMany(Flux::fromIterable)
|
||||
.map(e -> JsonUtils.convertEventToJson(e, settings))
|
||||
.collectList()
|
||||
|
||||
@@ -32,7 +32,7 @@ import discord4j.rest.entity.RestMember;
|
||||
@RequestMapping("/v2/guild/")
|
||||
public class GetWebGuildEndpoint {
|
||||
@PostMapping(value = "/get", produces = "application/json")
|
||||
public String getSettings(final HttpServletRequest request, final HttpServletResponse response, @RequestBody final String requestBody) {
|
||||
public String getSettings(HttpServletRequest request, HttpServletResponse response, @RequestBody String requestBody) {
|
||||
//Authenticate...
|
||||
final AuthenticationState authState = Authentication.authenticate(request);
|
||||
if (!authState.getSuccess()) {
|
||||
@@ -48,7 +48,7 @@ public class GetWebGuildEndpoint {
|
||||
|
||||
final RestGuild g = DisCalServer.getClient().getGuildById(guildId);
|
||||
|
||||
final WebGuild wg = WebGuild.fromGuild(g);
|
||||
final WebGuild wg = WebGuild.fromGuild(g).block();
|
||||
|
||||
final RestMember m = g.member(userId);
|
||||
|
||||
@@ -66,7 +66,7 @@ public class GetWebGuildEndpoint {
|
||||
|
||||
response.setContentType("application/json");
|
||||
response.setStatus(GlobalConst.STATUS_SUCCESS);
|
||||
return wg.toJson(!authState.getFromDiscalNetwork()).toString();
|
||||
return JsonUtil.INSTANCE.encodeToString(WebGuild.class, wg);
|
||||
} catch (final BotNotInGuildException e) {
|
||||
response.setContentType("application/json");
|
||||
response.setStatus(GlobalConst.STATUS_NOT_FOUND);
|
||||
|
||||
@@ -25,7 +25,7 @@ import discord4j.common.util.Snowflake;
|
||||
@RequestMapping("/v2/guild/settings")
|
||||
public class GetGuildSettingsEndpoint {
|
||||
@PostMapping(value = "/get", produces = "application/json")
|
||||
public String getSettings(final HttpServletRequest request, final HttpServletResponse response, @RequestBody final String requestBody) {
|
||||
public String getSettings(HttpServletRequest request, HttpServletResponse response, @RequestBody String requestBody) {
|
||||
//Authenticate...
|
||||
final AuthenticationState authState = Authentication.authenticate(request);
|
||||
if (!authState.getSuccess()) {
|
||||
@@ -43,11 +43,8 @@ public class GetGuildSettingsEndpoint {
|
||||
|
||||
response.setContentType("application/json");
|
||||
response.setStatus(GlobalConst.STATUS_SUCCESS);
|
||||
if (authState.getFromDiscalNetwork())
|
||||
return settings.toJson().toString();
|
||||
else
|
||||
return settings.toJsonSecure().toString();
|
||||
|
||||
return JsonUtil.INSTANCE.encodeToString(GuildSettings.class, settings);
|
||||
} catch (final JSONException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
|
||||
@@ -51,41 +51,45 @@ public class UpdateGuildSettingsEndpoint {
|
||||
final JSONObject body = new JSONObject(requestBody);
|
||||
final String guildId = body.getString("guild_id");
|
||||
|
||||
final GuildSettings settings = DatabaseManager.getSettings(Snowflake.of(guildId)).block();
|
||||
GuildSettings settings = DatabaseManager.getSettings(Snowflake.of(guildId)).block();
|
||||
|
||||
//Handle various things that are allowed to change.
|
||||
if (body.has("control_role"))
|
||||
settings.setControlRole(body.getString("control_role"));
|
||||
String conRole = body.optString("control_role", settings.getControlRole());
|
||||
String disChannel = settings.getDiscalChannel();
|
||||
if (body.has("discal_channel")) {
|
||||
final String id = body.getString("discal_channel");
|
||||
if ("0".equalsIgnoreCase(id) || "all".equalsIgnoreCase(id))
|
||||
settings.setDiscalChannel("all");
|
||||
else
|
||||
settings.setDiscalChannel(id);
|
||||
disChannel = "all";
|
||||
else disChannel = id;
|
||||
}
|
||||
if (body.has("simple_announcements"))
|
||||
settings.setSimpleAnnouncements(body.getBoolean("simple_announcements"));
|
||||
if (body.has("lang")) {
|
||||
final String lang = body.getString("lang");
|
||||
//noinspection unchecked
|
||||
if (new ArrayList<String>(ReadFile.readAllLangFiles().block().keySet()).contains(lang.toUpperCase()))
|
||||
settings.setLang(body.getString("lang"));
|
||||
}
|
||||
if (body.has("prefix"))
|
||||
settings.setPrefix(body.getString("prefix"));
|
||||
boolean simpleAnn = body.optBoolean("simple_announcements", settings.getSimpleAnnouncements());
|
||||
String lang = body.optString("lang", settings.getLang());
|
||||
if (!(new ArrayList<String>(ReadFile.readAllLangFiles().block().keySet()).contains(lang.toUpperCase())))
|
||||
lang = settings.getLang();
|
||||
String prefix = body.optString("prefix", settings.getPrefix());
|
||||
boolean patronGuild = settings.getPatronGuild();
|
||||
boolean devGuild = settings.getDevGuild();
|
||||
boolean branded = settings.getBranded();
|
||||
int maxCals = settings.getMaxCalendars();
|
||||
|
||||
//TODO: Support changing twelve hour format once implemented
|
||||
|
||||
|
||||
//Allow Official DisCal Shards to change some other things...
|
||||
if (authState.getFromDiscalNetwork()) {
|
||||
if (body.has("external_calendar"))
|
||||
settings.setUseExternalCalendar(body.getBoolean("external_calendar"));
|
||||
if (body.has("patron_guild"))
|
||||
settings.setPatronGuild(body.getBoolean("patron_guild"));
|
||||
if (body.has("dev_guild"))
|
||||
settings.setDevGuild(body.getBoolean("dev_guild"));
|
||||
if (body.has("branded"))
|
||||
settings.setBranded(body.getBoolean("branded"));
|
||||
patronGuild = body.optBoolean("patron_guild", patronGuild);
|
||||
devGuild = body.optBoolean("dev_guild", devGuild);
|
||||
branded = body.optBoolean("branded", branded);
|
||||
maxCals = body.optInt("max_calendars", maxCals);
|
||||
|
||||
}
|
||||
|
||||
//Copy the settings and then update the database
|
||||
settings = settings.copy(
|
||||
settings.getGuildID(), conRole, disChannel, simpleAnn, lang, prefix,
|
||||
patronGuild, devGuild, maxCals, settings.getTwelveHour(), branded
|
||||
);
|
||||
|
||||
if (DatabaseManager.updateSettings(settings).block()) {
|
||||
response.setContentType("application/json");
|
||||
response.setStatus(GlobalConst.STATUS_SUCCESS);
|
||||
|
||||
Reference in New Issue
Block a user