use of com.google.api.services.calendar.Calendar in project DisCal-Discord-Bot by NovaFox161.
the class AnnouncementMessageFormatter method sendAnnouncementMessage.
/**
* Sends an embed with the announcement info in a proper format.
*
* @param announcement The announcement to send info about.
* @param event the calendar event the announcement is for.
* @param data The BotData belonging to the guild.
*/
static void sendAnnouncementMessage(Announcement announcement, Event event, CalendarData data, GuildSettings settings) {
EmbedBuilder em = new EmbedBuilder();
em.withAuthorIcon(Main.client.getGuildByID(266063520112574464L).getIconURL());
IGuild guild = Main.client.getGuildByID(announcement.getGuildId());
assert guild != null;
// Set all of the stuff for embeds regardless of announcement settings
if (settings.isBranded()) {
em.withAuthorName(guild.getName());
} else {
em.withAuthorName("DisCal");
}
em.withTitle(MessageManager.getMessage("Embed.Announcement.Announce.Title", settings));
EventData ed = DatabaseManager.getManager().getEventData(announcement.getGuildId(), event.getId());
if (ed.getImageLink() != null && ImageUtils.validate(ed.getImageLink())) {
em.withImage(ed.getImageLink());
}
em.withUrl(event.getHtmlLink());
try {
EventColor ec = EventColor.fromNameOrHexOrID(event.getColorId());
em.withColor(ec.getR(), ec.getG(), ec.getB());
} catch (Exception e) {
// I dunno, color probably null.
em.withColor(56, 138, 237);
}
if (!settings.usingSimpleAnnouncements()) {
em.withFooterText(MessageManager.getMessage("Embed.Announcement.Announce.ID", "%id%", announcement.getAnnouncementId().toString(), settings));
}
if (announcement.isInfoOnly()) {
// Only send info...
em.appendField(MessageManager.getMessage("Embed.Announcement.Announce.Info", settings), announcement.getInfo(), false);
} else {
// Requires all announcement data
if (event.getSummary() != null) {
String summary = event.getSummary();
if (summary.length() > 250) {
summary = summary.substring(0, 250);
summary = summary + " (continues on Google Calendar View)";
}
em.appendField(MessageManager.getMessage("Embed.Announcement.Announce.Summary", settings), summary, true);
}
if (event.getDescription() != null) {
String description = event.getDescription();
if (description.length() > 250) {
description = description.substring(0, 250);
description = description + " (continues on Google Calendar View)";
}
em.appendField(MessageManager.getMessage("Embed.Announcement.Announce.Description", settings), description, true);
}
if (!settings.usingSimpleAnnouncements()) {
em.appendField(MessageManager.getMessage("Embed.Announcement.Announce.Date", settings), EventMessageFormatter.getHumanReadableDate(event.getStart(), settings, false), true);
em.appendField(MessageManager.getMessage("Embed.Announcement.Announce.Time", settings), EventMessageFormatter.getHumanReadableTime(event.getStart(), settings, false), true);
try {
Calendar service = CalendarAuth.getCalendarService();
String tz = service.calendars().get(data.getCalendarAddress()).execute().getTimeZone();
em.appendField(MessageManager.getMessage("Embed.Announcement.Announce.TimeZone", settings), tz, true);
} catch (Exception e1) {
em.appendField(MessageManager.getMessage("Embed.Announcement.Announce.TimeZone", settings), "Unknown *Error Occurred", true);
}
} else {
String start = EventMessageFormatter.getHumanReadableDate(event.getStart(), settings, false) + " at " + EventMessageFormatter.getHumanReadableTime(event.getStart(), settings, false);
try {
Calendar service = CalendarAuth.getCalendarService();
String tz = service.calendars().get(data.getCalendarAddress()).execute().getTimeZone();
start = start + " " + tz;
} catch (Exception e1) {
start = start + " (TZ UNKNOWN/ERROR)";
}
em.appendField(MessageManager.getMessage("Embed.Announcement.Announce.Start", settings), start, false);
}
if (event.getLocation() != null && !event.getLocation().equalsIgnoreCase("")) {
if (event.getLocation().length() > 300) {
String location = event.getLocation().substring(0, 300).trim() + "... (cont. on Google Cal)";
em.appendField(MessageManager.getMessage("Embed.Event.Confirm.Location", settings), location, true);
} else {
em.appendField(MessageManager.getMessage("Embed.Event.Confirm.Location", settings), event.getLocation(), true);
}
}
if (!settings.usingSimpleAnnouncements()) {
em.appendField(MessageManager.getMessage("Embed.Announcement.Announce.EventID", settings), event.getId(), false);
}
if (!announcement.getInfo().equalsIgnoreCase("None")) {
em.appendField(MessageManager.getMessage("Embed.Announcement.Announce.Info", settings), announcement.getInfo(), false);
}
}
IChannel channel = null;
try {
channel = guild.getChannelByID(Long.valueOf(announcement.getAnnouncementChannelId()));
} catch (Exception e) {
Logger.getLogger().exception(null, "Failed to find announcement channel! Will auto delete announcement to prevent issue! | Announcement: " + announcement.getAnnouncementId() + " | Guild: " + announcement.getGuildId(), e, AnnouncementMessageFormatter.class, true);
}
if (channel == null) {
// Channel does not exist or could not be found, automatically delete announcement to prevent issues.
DatabaseManager.getManager().deleteAnnouncement(announcement.getAnnouncementId().toString());
return;
}
Message.sendMessageAsync(em.build(), getSubscriberMentions(announcement, guild), channel);
}
use of com.google.api.services.calendar.Calendar in project DisCal-Discord-Bot by NovaFox161.
the class AddCalendarCommand method issueCommand.
/**
* Issues the command this Object is responsible for.
*
* @param args The command arguments.
* @param event The event received.
* @return <code>true</code> if successful, else <code>false</code>.
*/
@Override
public Boolean issueCommand(String[] args, MessageReceivedEvent event, GuildSettings settings) {
if (settings.isDevGuild() || settings.isPatronGuild()) {
if (PermissionChecker.hasManageServerRole(event)) {
if (args.length == 0) {
if (DatabaseManager.getManager().getMainCalendar(settings.getGuildID()).getCalendarAddress().equalsIgnoreCase("primary")) {
Message.sendMessage(MessageManager.getMessage("AddCalendar.Start", settings), event);
Authorization.getAuth().requestCode(event, settings);
} else {
Message.sendMessage(MessageManager.getMessage("Creator.Calendar.HasCalendar", settings), event);
}
} else if (args.length == 1) {
// Check if arg is calendar ID that is supported, if so, complete the setup.
if (!DatabaseManager.getManager().getMainCalendar(settings.getGuildID()).getCalendarAddress().equalsIgnoreCase("primary")) {
Message.sendMessage(MessageManager.getMessage("Creator.Calendar.HasCalendar", settings), event);
} else if (settings.getEncryptedAccessToken().equalsIgnoreCase("N/a") && settings.getEncryptedRefreshToken().equalsIgnoreCase("N/a")) {
Message.sendMessage(MessageManager.getMessage("AddCalendar.Select.NotAuth", settings), event);
} else {
try {
Calendar service = CalendarAuth.getCalendarService(settings);
List<CalendarListEntry> items = service.calendarList().list().setMinAccessRole("writer").execute().getItems();
boolean valid = false;
for (CalendarListEntry i : items) {
if (!i.isDeleted() && i.getId().equals(args[0])) {
// valid
valid = true;
break;
}
}
if (valid) {
// Update and save.
CalendarData data = new CalendarData(event.getGuild().getLongID(), 1);
data.setCalendarId(args[0]);
data.setCalendarAddress(args[0]);
data.setExternal(true);
DatabaseManager.getManager().updateCalendar(data);
// Update guild settings
settings.setUseExternalCalendar(true);
DatabaseManager.getManager().updateSettings(settings);
Message.sendMessage(MessageManager.getMessage("AddCalendar.Select.Success", settings), event);
} else {
// Invalid
Message.sendMessage(MessageManager.getMessage("AddCalendar.Select.Failure.Invalid", settings), event);
}
} catch (Exception e) {
Message.sendMessage(MessageManager.getMessage("AddCalendar.Select.Failure.Unknown", settings), event);
Logger.getLogger().exception(event.getAuthor(), "Failed to connect external calendar!", e, this.getClass(), true);
}
}
} else {
Message.sendMessage(MessageManager.getMessage("AddCalendar.Specify", settings), event);
}
} else {
Message.sendMessage(MessageManager.getMessage("Notification.Perm.MANAGE_SERVER", settings), event);
}
} else {
Message.sendMessage(MessageManager.getMessage("Notification.Patron", settings), event);
}
return false;
}
use of com.google.api.services.calendar.Calendar in project DisCal-Discord-Bot by NovaFox161.
the class EventEndpoint method getEventsForMonth.
public static String getEventsForMonth(Request request, Response response) {
JSONObject requestBody = new JSONObject(request.body());
Integer daysInMonth = Integer.valueOf(requestBody.getString("DaysInMonth"));
Long startEpoch = Long.valueOf(requestBody.getString("StartEpoch"));
Long endEpoch = startEpoch + (86400000L * daysInMonth);
GuildSettings settings;
if (DiscordAccountHandler.getHandler().hasAccount(request.session().id())) {
Map m = DiscordAccountHandler.getHandler().getAccount(request.session().id());
WebGuild g = (WebGuild) m.get("selected");
g.setSettings(DatabaseManager.getManager().getSettings(Long.valueOf(g.getId())));
settings = g.getSettings();
} else {
long guildId = requestBody.getLong("guild_id");
settings = DatabaseManager.getManager().getSettings(guildId);
}
// okay, lets actually get the month's events.
try {
Calendar service;
if (settings.useExternalCalendar()) {
service = CalendarAuth.getCalendarService(settings);
} else {
service = CalendarAuth.getCalendarService();
}
CalendarData calendarData = DatabaseManager.getManager().getMainCalendar(settings.getGuildID());
Events events = service.events().list(calendarData.getCalendarAddress()).setTimeMin(new DateTime(startEpoch)).setTimeMax(new DateTime(endEpoch)).setOrderBy("startTime").setSingleEvents(true).setShowDeleted(false).execute();
List<Event> items = events.getItems();
List<JSONObject> eventsJson = new ArrayList<>();
for (Event e : items) {
JSONObject jo = new JSONObject();
jo.put("id", e.getId());
jo.put("epochStart", e.getStart().getDateTime().getValue());
jo.put("epochEnd", e.getEnd().getDateTime().getValue());
eventsJson.add(jo);
}
JSONObject body = new JSONObject();
body.put("events", eventsJson);
body.put("count", eventsJson.size() + "");
response.body(body.toString());
} catch (Exception e) {
response.body("Internal server error!");
Logger.getLogger().exception(null, "[WEB] Failed to retrieve events for a month.", e, EventEndpoint.class, true);
return response.body();
}
return response.body();
}
use of com.google.api.services.calendar.Calendar in project DisCal-Discord-Bot by NovaFox161.
the class TimeUtils method inPast.
public static boolean inPast(String eventId, GuildSettings settings) {
// TODO: Support multiple calendars
if (EventUtils.eventExists(settings, eventId)) {
if (settings.useExternalCalendar()) {
try {
Calendar service = CalendarAuth.getCalendarService(settings);
CalendarData calendarData = DatabaseManager.getManager().getMainCalendar(settings.getGuildID());
Event e = service.events().get(calendarData.getCalendarId(), eventId).execute();
return inPast(e);
} catch (Exception e) {
Logger.getLogger().exception(null, "Failed to get external calendar auth", e, TimeUtils.class, true);
// Return false and allow RSVP so user is not adversely affected.
return false;
}
} else {
try {
Calendar service = CalendarAuth.getCalendarService();
CalendarData calendarData = DatabaseManager.getManager().getMainCalendar(settings.getGuildID());
Event e = service.events().get(calendarData.getCalendarId(), eventId).execute();
return inPast(e);
} catch (Exception e) {
Logger.getLogger().exception(null, "Failed to get calendar auth", e, TimeUtils.class, true);
// Return false and allow RSVP so user is not adversely affected.
return false;
}
}
}
return false;
}
use of com.google.api.services.calendar.Calendar in project DisCal-Discord-Bot by NovaFox161.
the class EventCreator method edit.
public PreEvent edit(MessageReceivedEvent e, String eventId, GuildSettings settings, boolean handleMessage) {
long guildId = e.getGuild().getLongID();
if (!hasPreEvent(guildId)) {
// TODO: Handle multiple calendars...
try {
String calId = DatabaseManager.getManager().getMainCalendar(guildId).getCalendarAddress();
Calendar service;
if (settings.useExternalCalendar()) {
service = CalendarAuth.getCalendarService(settings);
} else {
service = CalendarAuth.getCalendarService();
}
Event calEvent = service.events().get(calId, eventId).execute();
PreEvent event = new PreEvent(guildId, calEvent);
event.setEditing(true);
try {
event.setTimeZone(service.calendars().get(calId).execute().getTimeZone());
} catch (IOException e1) {
// Failed to get tz, ignore safely.
}
if (handleMessage) {
if (PermissionChecker.botHasMessageManagePerms(e)) {
IMessage message = Message.sendMessage(EventMessageFormatter.getPreEventEmbed(event, settings), MessageManager.getMessage("Creator.Event.Edit.Init", settings), e);
event.setCreatorMessage(message);
Message.deleteMessage(e);
} else {
Message.sendMessage(MessageManager.getMessage("Creator.Notif.MANAGE_MESSAGES", settings), e);
}
}
events.add(event);
return event;
} catch (Exception exc) {
// Oops
}
return null;
}
return getPreEvent(guildId);
}
Aggregations