format many files
This commit is contained in:
		@@ -10,39 +10,39 @@ import { logger } from "../logger";
 | 
			
		||||
export const name = 'guildScheduledEventCreate'
 | 
			
		||||
 | 
			
		||||
export async function execute(event: GuildScheduledEvent) {
 | 
			
		||||
    const guildId = event.guildId
 | 
			
		||||
    const requestId = uuid()
 | 
			
		||||
    try {
 | 
			
		||||
        if (!event.description) {
 | 
			
		||||
            logger.debug("Got GuildScheduledEventCreate event. But has no description. Aborting.")
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (event.description.includes("!wp")) {
 | 
			
		||||
            logger.info("Got manual create event of watchparty event!", { guildId, requestId })
 | 
			
		||||
            if(event.description.includes("!private")) {
 | 
			
		||||
                logger.info("Event description contains \"!private\". Won't announce.", { guildId, requestId })
 | 
			
		||||
                return
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            const channel: Maybe<TextChannel> = client.getAnnouncementChannelForGuild(guildId)
 | 
			
		||||
 | 
			
		||||
            if (!channel) {
 | 
			
		||||
                logger.error("Could not obtain announcement channel. Aborting announcement.", { guildId, requestId })
 | 
			
		||||
                return
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            const message = `[Watchparty] https://discord.com/events/${event.guildId}/${event.id} \nHey <@&${config.bot.announcement_role}>, wir gucken ${event.name} ${createDateStringFromEvent(event, guildId, requestId)}`
 | 
			
		||||
 | 
			
		||||
            channel.send(message)
 | 
			
		||||
        } else {
 | 
			
		||||
            logger.debug("Got GuildScheduledEventCreate event but no !wp in description. Not creating manual wp announcement.", { guildId, requestId })
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
        // sendFailureDM(error)
 | 
			
		||||
        logger.error(<string>error, { guildId, requestId })
 | 
			
		||||
  const guildId = event.guildId
 | 
			
		||||
  const requestId = uuid()
 | 
			
		||||
  try {
 | 
			
		||||
    if (!event.description) {
 | 
			
		||||
      logger.debug("Got GuildScheduledEventCreate event. But has no description. Aborting.")
 | 
			
		||||
      return
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (event.description.includes("!wp")) {
 | 
			
		||||
      logger.info("Got manual create event of watchparty event!", { guildId, requestId })
 | 
			
		||||
      if (event.description.includes("!private")) {
 | 
			
		||||
        logger.info("Event description contains \"!private\". Won't announce.", { guildId, requestId })
 | 
			
		||||
        return
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      const channel: Maybe<TextChannel> = client.getAnnouncementChannelForGuild(guildId)
 | 
			
		||||
 | 
			
		||||
      if (!channel) {
 | 
			
		||||
        logger.error("Could not obtain announcement channel. Aborting announcement.", { guildId, requestId })
 | 
			
		||||
        return
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      const message = `[Watchparty] https://discord.com/events/${event.guildId}/${event.id} \nHey <@&${config.bot.announcement_role}>, wir gucken ${event.name} ${createDateStringFromEvent(event, guildId, requestId)}`
 | 
			
		||||
 | 
			
		||||
      channel.send(message)
 | 
			
		||||
    } else {
 | 
			
		||||
      logger.debug("Got GuildScheduledEventCreate event but no !wp in description. Not creating manual wp announcement.", { guildId, requestId })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  } catch (error) {
 | 
			
		||||
    // sendFailureDM(error)
 | 
			
		||||
    logger.error(<string>error, { guildId, requestId })
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -16,48 +16,48 @@ export const NONE_OF_THAT = "❌"
 | 
			
		||||
export let task: ScheduledTask | undefined
 | 
			
		||||
 | 
			
		||||
export async function execute(event: GuildScheduledEvent) {
 | 
			
		||||
    const requestId = uuid()
 | 
			
		||||
    
 | 
			
		||||
    if (event.name.toLowerCase().includes("!nextwp")) {
 | 
			
		||||
        logger.info("Event was a placeholder event to start a new watchparty and voting. Creating vote!", { guildId: event.guildId, requestId })
 | 
			
		||||
        logger.debug("Renaming event", { guildId: event.guildId, requestId })
 | 
			
		||||
        event.edit({ name: "Watchparty - Voting offen" })
 | 
			
		||||
        const movies = await yavinJellyfinHandler.getRandomMovieNames(5, event.guildId, requestId)
 | 
			
		||||
  const requestId = uuid()
 | 
			
		||||
 | 
			
		||||
        logger.info(`Got ${movies.length} random movies. Creating voting`, { guildId: event.guildId, requestId })
 | 
			
		||||
        logger.debug(`Movies: ${JSON.stringify(movies)}`, { guildId: event.guildId, requestId })
 | 
			
		||||
  if (event.name.toLowerCase().includes("!nextwp")) {
 | 
			
		||||
    logger.info("Event was a placeholder event to start a new watchparty and voting. Creating vote!", { guildId: event.guildId, requestId })
 | 
			
		||||
    logger.debug("Renaming event", { guildId: event.guildId, requestId })
 | 
			
		||||
    event.edit({ name: "Watchparty - Voting offen" })
 | 
			
		||||
    const movies = await yavinJellyfinHandler.getRandomMovieNames(5, event.guildId, requestId)
 | 
			
		||||
 | 
			
		||||
        const announcementChannel: Maybe<TextChannel> = client.getAnnouncementChannelForGuild(event.guildId)
 | 
			
		||||
        if(!announcementChannel) {
 | 
			
		||||
            logger.error("Could not find announcement channel. Aborting", { guildId: event.guildId, requestId })
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
        logger.debug(`Found channel ${JSON.stringify(announcementChannel, null, 2)}`, { guildId: event.guildId, requestId })
 | 
			
		||||
    logger.info(`Got ${movies.length} random movies. Creating voting`, { guildId: event.guildId, requestId })
 | 
			
		||||
    logger.debug(`Movies: ${JSON.stringify(movies)}`, { guildId: event.guildId, requestId })
 | 
			
		||||
 | 
			
		||||
        if(!event.scheduledStartAt) {
 | 
			
		||||
            logger.info("EVENT DOES NOT HAVE STARTDATE; CANCELLING", {guildId: event.guildId, requestId})
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
        let message = `[Abstimmung] für https://discord.com/events/${event.guildId}/${event.id}\n<@&${config.bot.announcement_role}> Es gibt eine neue Abstimmung für die nächste Watchparty ${createDateStringFromEvent(event, event.guildId, requestId)}! Stimme hierunter für den nächsten Film ab!\n`
 | 
			
		||||
 | 
			
		||||
        for (let i = 0; i < movies.length; i++) {
 | 
			
		||||
            message = message.concat(Emotes[i]).concat(": ").concat(movies[i]).concat("\n")
 | 
			
		||||
        }
 | 
			
		||||
        message = message.concat(NONE_OF_THAT).concat(": Wenn dir nichts davon gefällt.")
 | 
			
		||||
 | 
			
		||||
        const options: MessageCreateOptions = {
 | 
			
		||||
            allowedMentions: { parse: ["roles"]},
 | 
			
		||||
            content: message,
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const sentMessage: Message<true> = await (await announcementChannel.fetch()).send(options)
 | 
			
		||||
 | 
			
		||||
        for (let i = 0; i < movies.length; i++) {
 | 
			
		||||
            sentMessage.react(Emotes[i])
 | 
			
		||||
        }
 | 
			
		||||
        sentMessage.react(NONE_OF_THAT)
 | 
			
		||||
 | 
			
		||||
        // sentMessage.pin() //todo: uncomment when bot has permission to pin messages. Also update closepoll.ts to only fetch pinned messages
 | 
			
		||||
    const announcementChannel: Maybe<TextChannel> = client.getAnnouncementChannelForGuild(event.guildId)
 | 
			
		||||
    if (!announcementChannel) {
 | 
			
		||||
      logger.error("Could not find announcement channel. Aborting", { guildId: event.guildId, requestId })
 | 
			
		||||
      return
 | 
			
		||||
    }
 | 
			
		||||
    logger.debug(`Found channel ${JSON.stringify(announcementChannel, null, 2)}`, { guildId: event.guildId, requestId })
 | 
			
		||||
 | 
			
		||||
    if (!event.scheduledStartAt) {
 | 
			
		||||
      logger.info("EVENT DOES NOT HAVE STARTDATE; CANCELLING", { guildId: event.guildId, requestId })
 | 
			
		||||
      return
 | 
			
		||||
    }
 | 
			
		||||
    let message = `[Abstimmung] für https://discord.com/events/${event.guildId}/${event.id}\n<@&${config.bot.announcement_role}> Es gibt eine neue Abstimmung für die nächste Watchparty ${createDateStringFromEvent(event, event.guildId, requestId)}! Stimme hierunter für den nächsten Film ab!\n`
 | 
			
		||||
 | 
			
		||||
    for (let i = 0; i < movies.length; i++) {
 | 
			
		||||
      message = message.concat(Emotes[i]).concat(": ").concat(movies[i]).concat("\n")
 | 
			
		||||
    }
 | 
			
		||||
    message = message.concat(NONE_OF_THAT).concat(": Wenn dir nichts davon gefällt.")
 | 
			
		||||
 | 
			
		||||
    const options: MessageCreateOptions = {
 | 
			
		||||
      allowedMentions: { parse: ["roles"] },
 | 
			
		||||
      content: message,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const sentMessage: Message<true> = await (await announcementChannel.fetch()).send(options)
 | 
			
		||||
 | 
			
		||||
    for (let i = 0; i < movies.length; i++) {
 | 
			
		||||
      sentMessage.react(Emotes[i])
 | 
			
		||||
    }
 | 
			
		||||
    sentMessage.react(NONE_OF_THAT)
 | 
			
		||||
 | 
			
		||||
    // sentMessage.pin() //todo: uncomment when bot has permission to pin messages. Also update closepoll.ts to only fetch pinned messages
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,46 +7,46 @@ import { logger } from "../logger";
 | 
			
		||||
export const name = 'guildScheduledEventUpdate'
 | 
			
		||||
 | 
			
		||||
export async function execute(oldEvent: GuildScheduledEvent, newEvent: GuildScheduledEvent) {
 | 
			
		||||
    const requestId = uuid()
 | 
			
		||||
    try {
 | 
			
		||||
        if (!newEvent.guild) {
 | 
			
		||||
            logger.error("Event has no guild, aborting.", { guildId: newEvent.guildId, requestId })
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
        const guildId = newEvent.guildId
 | 
			
		||||
 | 
			
		||||
        if (newEvent.description?.toLowerCase().includes("!wp") && newEvent.status === GuildScheduledEventStatus.Completed) {
 | 
			
		||||
            logger.info("A watchparty ended. Cleaning up announcements!", { guildId, requestId })
 | 
			
		||||
            const announcementChannel = client.getAnnouncementChannelForGuild(newEvent.guild.id)
 | 
			
		||||
            if (!announcementChannel) {
 | 
			
		||||
                logger.error("Could not find announcement channel. Aborting", { guildId: newEvent.guild.id, requestId })
 | 
			
		||||
                return
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            const events = await newEvent.guild.scheduledEvents.fetch()
 | 
			
		||||
 | 
			
		||||
            const wpAnnouncements = (await announcementChannel.messages.fetch()).filter(message => !message.cleanContent.includes("[initial]"))
 | 
			
		||||
            const announcementsWithoutEvent = filterAnnouncementsByPendingWPs(wpAnnouncements, events)
 | 
			
		||||
            logger.info(`Deleting ${announcementsWithoutEvent.length} announcements.`, {guildId, requestId})
 | 
			
		||||
            announcementsWithoutEvent.forEach(message => message.delete())
 | 
			
		||||
        }
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
        logger.error(<string>error, { guildId: newEvent.guildId, requestId })
 | 
			
		||||
  const requestId = uuid()
 | 
			
		||||
  try {
 | 
			
		||||
    if (!newEvent.guild) {
 | 
			
		||||
      logger.error("Event has no guild, aborting.", { guildId: newEvent.guildId, requestId })
 | 
			
		||||
      return
 | 
			
		||||
    }
 | 
			
		||||
    const guildId = newEvent.guildId
 | 
			
		||||
 | 
			
		||||
    if (newEvent.description?.toLowerCase().includes("!wp") && newEvent.status === GuildScheduledEventStatus.Completed) {
 | 
			
		||||
      logger.info("A watchparty ended. Cleaning up announcements!", { guildId, requestId })
 | 
			
		||||
      const announcementChannel = client.getAnnouncementChannelForGuild(newEvent.guild.id)
 | 
			
		||||
      if (!announcementChannel) {
 | 
			
		||||
        logger.error("Could not find announcement channel. Aborting", { guildId: newEvent.guild.id, requestId })
 | 
			
		||||
        return
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      const events = await newEvent.guild.scheduledEvents.fetch()
 | 
			
		||||
 | 
			
		||||
      const wpAnnouncements = (await announcementChannel.messages.fetch()).filter(message => !message.cleanContent.includes("[initial]"))
 | 
			
		||||
      const announcementsWithoutEvent = filterAnnouncementsByPendingWPs(wpAnnouncements, events)
 | 
			
		||||
      logger.info(`Deleting ${announcementsWithoutEvent.length} announcements.`, { guildId, requestId })
 | 
			
		||||
      announcementsWithoutEvent.forEach(message => message.delete())
 | 
			
		||||
    }
 | 
			
		||||
  } catch (error) {
 | 
			
		||||
    logger.error(<string>error, { guildId: newEvent.guildId, requestId })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function filterAnnouncementsByPendingWPs(messages: Collection<string, Message<true>>, events: Collection<string, GuildScheduledEvent<GuildScheduledEventStatus>>): Message<true>[] {
 | 
			
		||||
    const filteredMessages: Message<true>[] = []
 | 
			
		||||
    for (const message of messages.values()) {
 | 
			
		||||
        let foundEventForMessage = false
 | 
			
		||||
        for (const event of events.values()) {
 | 
			
		||||
            if (message.cleanContent.includes(event.id)) { //announcement always has eventid because of eventbox
 | 
			
		||||
                foundEventForMessage = true
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if(!foundEventForMessage){
 | 
			
		||||
            filteredMessages.push(message)
 | 
			
		||||
        }
 | 
			
		||||
  const filteredMessages: Message<true>[] = []
 | 
			
		||||
  for (const message of messages.values()) {
 | 
			
		||||
    let foundEventForMessage = false
 | 
			
		||||
    for (const event of events.values()) {
 | 
			
		||||
      if (message.cleanContent.includes(event.id)) { //announcement always has eventid because of eventbox
 | 
			
		||||
        foundEventForMessage = true
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return filteredMessages
 | 
			
		||||
    if (!foundEventForMessage) {
 | 
			
		||||
      filteredMessages.push(message)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return filteredMessages
 | 
			
		||||
}
 | 
			
		||||
@@ -9,51 +9,51 @@ export const name = 'voiceStateUpdate'
 | 
			
		||||
 | 
			
		||||
export async function execute(oldState: VoiceState, newState: VoiceState) {
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
        logger.info(JSON.stringify(newState, null, 2))
 | 
			
		||||
        //ignore events like mute/unmute
 | 
			
		||||
        if(newState.channel?.id === oldState.channel?.id) {
 | 
			
		||||
            logger.info("Not handling VoiceState event because channelid of old and new was the same (i.e. mute/unmute event)")
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const scheduledEvents = (await newState.guild.scheduledEvents.fetch())
 | 
			
		||||
            .filter((key) => key.description?.toLowerCase().includes("!wp") && key.isActive())
 | 
			
		||||
            .map((key) => key)
 | 
			
		||||
 | 
			
		||||
        const scheduledEventUsers = (await Promise.all(scheduledEvents.map(event => event.fetchSubscribers({withMember: true}))))
 | 
			
		||||
 | 
			
		||||
        //Dont handle users, that are already subscribed to the event. We only want to handle unsubscribed users here
 | 
			
		||||
        let userFound = false;
 | 
			
		||||
        scheduledEventUsers.forEach(collection => {
 | 
			
		||||
            collection.each(key => {
 | 
			
		||||
                logger.info(JSON.stringify(key, null, 2))
 | 
			
		||||
                if(key.member.user.id === newState.member?.user.id)
 | 
			
		||||
                    userFound = true;
 | 
			
		||||
            })
 | 
			
		||||
        })
 | 
			
		||||
        if(userFound) {
 | 
			
		||||
            logger.info(`Not handling VoiceState event because user was already subscribed and got an account from there. User: ${JSON.stringify(newState.member, null, 2)}`)
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if (scheduledEvents.find(event => event.channelId === newState.channelId)) {
 | 
			
		||||
            if(newState.member){
 | 
			
		||||
                logger.info("YO! Da ist jemand dem Channel mit dem Event beigetreten, ich kümmer mich mal um nen Account!")
 | 
			
		||||
                const result = await jellyfinHandler.upsertUser(newState.member, "TEMPORARY", uuid())
 | 
			
		||||
                if (result === UserUpsertResult.created) {
 | 
			
		||||
                    newState.member.createDM().then(channel => channel.send(`Hey! Du bist unserer Watchparty beigetreten, ich hab dir gerade die Zugangsdaten für den Mediaserver geschickt!`))
 | 
			
		||||
                } else {
 | 
			
		||||
                    newState.member.createDM().then(channel => channel.send(`Hey! Du bist unserer Watchparty beigetreten aber du hast bereits einen Account. Falls du ein neues Passwort brauchst nutze /reset_passwort!`))
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                logger.error("WTF? Expected Member?? When doing things")
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            logger.info("VoiceState channelId was not the id of any channel with events")
 | 
			
		||||
        }
 | 
			
		||||
    }catch(error){
 | 
			
		||||
        logger.error(error)
 | 
			
		||||
  try {
 | 
			
		||||
    logger.info(JSON.stringify(newState, null, 2))
 | 
			
		||||
    //ignore events like mute/unmute
 | 
			
		||||
    if (newState.channel?.id === oldState.channel?.id) {
 | 
			
		||||
      logger.info("Not handling VoiceState event because channelid of old and new was the same (i.e. mute/unmute event)")
 | 
			
		||||
      return
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const scheduledEvents = (await newState.guild.scheduledEvents.fetch())
 | 
			
		||||
      .filter((key) => key.description?.toLowerCase().includes("!wp") && key.isActive())
 | 
			
		||||
      .map((key) => key)
 | 
			
		||||
 | 
			
		||||
    const scheduledEventUsers = (await Promise.all(scheduledEvents.map(event => event.fetchSubscribers({ withMember: true }))))
 | 
			
		||||
 | 
			
		||||
    //Dont handle users, that are already subscribed to the event. We only want to handle unsubscribed users here
 | 
			
		||||
    let userFound = false;
 | 
			
		||||
    scheduledEventUsers.forEach(collection => {
 | 
			
		||||
      collection.each(key => {
 | 
			
		||||
        logger.info(JSON.stringify(key, null, 2))
 | 
			
		||||
        if (key.member.user.id === newState.member?.user.id)
 | 
			
		||||
          userFound = true;
 | 
			
		||||
      })
 | 
			
		||||
    })
 | 
			
		||||
    if (userFound) {
 | 
			
		||||
      logger.info(`Not handling VoiceState event because user was already subscribed and got an account from there. User: ${JSON.stringify(newState.member, null, 2)}`)
 | 
			
		||||
      return
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    if (scheduledEvents.find(event => event.channelId === newState.channelId)) {
 | 
			
		||||
      if (newState.member) {
 | 
			
		||||
        logger.info("YO! Da ist jemand dem Channel mit dem Event beigetreten, ich kümmer mich mal um nen Account!")
 | 
			
		||||
        const result = await jellyfinHandler.upsertUser(newState.member, "TEMPORARY", uuid())
 | 
			
		||||
        if (result === UserUpsertResult.created) {
 | 
			
		||||
          newState.member.createDM().then(channel => channel.send(`Hey! Du bist unserer Watchparty beigetreten, ich hab dir gerade die Zugangsdaten für den Mediaserver geschickt!`))
 | 
			
		||||
        } else {
 | 
			
		||||
          newState.member.createDM().then(channel => channel.send(`Hey! Du bist unserer Watchparty beigetreten aber du hast bereits einen Account. Falls du ein neues Passwort brauchst nutze /reset_passwort!`))
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        logger.error("WTF? Expected Member?? When doing things")
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      logger.info("VoiceState channelId was not the id of any channel with events")
 | 
			
		||||
    }
 | 
			
		||||
  } catch (error) {
 | 
			
		||||
    logger.error(error)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -8,51 +8,51 @@ import { logger } from "../logger";
 | 
			
		||||
export const name = 'guildScheduledEventUpdate'
 | 
			
		||||
 | 
			
		||||
export async function execute(oldEvent: GuildScheduledEvent, newEvent: GuildScheduledEvent) {
 | 
			
		||||
    try {
 | 
			
		||||
        const requestId = uuid()
 | 
			
		||||
        // logger.debug(`Got scheduledEvent update. New Event: ${JSON.stringify(newEvent, null, 2)}`, { guildId: newEvent.guildId, requestId })
 | 
			
		||||
        if (!newEvent.guild) {
 | 
			
		||||
            logger.error("Event has no guild, aborting.", { guildId: newEvent.guildId, requestId })
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (newEvent.description?.toLowerCase().includes("!wp") && [GuildScheduledEventStatus.Active, GuildScheduledEventStatus.Completed].includes(newEvent.status)) {
 | 
			
		||||
            const roles = getGuildSpecificTriggerRoleId().map((key, value) => value)
 | 
			
		||||
            const eventMembers = (await newEvent.fetchSubscribers({ withMember: true })).filter(member => !member.member.roles.cache.hasAny(...roles)).map((value) => value.member)
 | 
			
		||||
            const channelMembers = newEvent.channel?.members.filter(member => !member.roles.cache.hasAny(...roles)).map((value) => value)
 | 
			
		||||
            const allMembers = eventMembers.concat(channelMembers ?? [])
 | 
			
		||||
 | 
			
		||||
            const members: GuildMember[] = []
 | 
			
		||||
            for (const member of allMembers) {
 | 
			
		||||
                if (!members.find(x => x.id == member.id))
 | 
			
		||||
                    members.push(member)
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (newEvent.status === GuildScheduledEventStatus.Active)
 | 
			
		||||
                createJFUsers(members, newEvent.name, requestId)
 | 
			
		||||
            else {
 | 
			
		||||
 | 
			
		||||
                members.forEach(member => {
 | 
			
		||||
                    member.createDM().then(channel => channel.send(`Die Watchparty ist vorbei, dein Account wurde wieder gelöscht. Wenn du einen permanenten Account haben möchtest, melde dich bei Samantha oder Marukus.`))
 | 
			
		||||
                })
 | 
			
		||||
                deleteJFUsers(newEvent.guildId, requestId)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
        logger.error(error)
 | 
			
		||||
  try {
 | 
			
		||||
    const requestId = uuid()
 | 
			
		||||
    // logger.debug(`Got scheduledEvent update. New Event: ${JSON.stringify(newEvent, null, 2)}`, { guildId: newEvent.guildId, requestId })
 | 
			
		||||
    if (!newEvent.guild) {
 | 
			
		||||
      logger.error("Event has no guild, aborting.", { guildId: newEvent.guildId, requestId })
 | 
			
		||||
      return
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (newEvent.description?.toLowerCase().includes("!wp") && [GuildScheduledEventStatus.Active, GuildScheduledEventStatus.Completed].includes(newEvent.status)) {
 | 
			
		||||
      const roles = getGuildSpecificTriggerRoleId().map((key, value) => value)
 | 
			
		||||
      const eventMembers = (await newEvent.fetchSubscribers({ withMember: true })).filter(member => !member.member.roles.cache.hasAny(...roles)).map((value) => value.member)
 | 
			
		||||
      const channelMembers = newEvent.channel?.members.filter(member => !member.roles.cache.hasAny(...roles)).map((value) => value)
 | 
			
		||||
      const allMembers = eventMembers.concat(channelMembers ?? [])
 | 
			
		||||
 | 
			
		||||
      const members: GuildMember[] = []
 | 
			
		||||
      for (const member of allMembers) {
 | 
			
		||||
        if (!members.find(x => x.id == member.id))
 | 
			
		||||
          members.push(member)
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      if (newEvent.status === GuildScheduledEventStatus.Active)
 | 
			
		||||
        createJFUsers(members, newEvent.name, requestId)
 | 
			
		||||
      else {
 | 
			
		||||
 | 
			
		||||
        members.forEach(member => {
 | 
			
		||||
          member.createDM().then(channel => channel.send(`Die Watchparty ist vorbei, dein Account wurde wieder gelöscht. Wenn du einen permanenten Account haben möchtest, melde dich bei Samantha oder Marukus.`))
 | 
			
		||||
        })
 | 
			
		||||
        deleteJFUsers(newEvent.guildId, requestId)
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  } catch (error) {
 | 
			
		||||
    logger.error(error)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function createJFUsers(members: GuildMember[], movieName: string, requestId?: string) {
 | 
			
		||||
    logger.info(`Creating users for: \n ${JSON.stringify(members, null, 2)}`)
 | 
			
		||||
    members.forEach(member => {
 | 
			
		||||
        member.createDM().then(channel => channel.send(`Hey! Du hast dich für die Watchparty von ${movieName} angemeldet! Es geht gleich los!`))
 | 
			
		||||
        jellyfinHandler.upsertUser(member, "TEMPORARY", requestId)
 | 
			
		||||
    })
 | 
			
		||||
  logger.info(`Creating users for: \n ${JSON.stringify(members, null, 2)}`)
 | 
			
		||||
  members.forEach(member => {
 | 
			
		||||
    member.createDM().then(channel => channel.send(`Hey! Du hast dich für die Watchparty von ${movieName} angemeldet! Es geht gleich los!`))
 | 
			
		||||
    jellyfinHandler.upsertUser(member, "TEMPORARY", requestId)
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function deleteJFUsers(guildId: string, requestId?: string) {
 | 
			
		||||
    logger.info(`Watchparty ended, deleting tmp users`, { guildId, requestId })
 | 
			
		||||
    jellyfinHandler.purge(guildId, requestId)
 | 
			
		||||
  logger.info(`Watchparty ended, deleting tmp users`, { guildId, requestId })
 | 
			
		||||
  jellyfinHandler.purge(guildId, requestId)
 | 
			
		||||
}
 | 
			
		||||
@@ -2,5 +2,5 @@ import { Message } from "discord.js"
 | 
			
		||||
 | 
			
		||||
export const name = 'messageCreate'
 | 
			
		||||
export function execute(message: Message) {
 | 
			
		||||
	console.log(`${JSON.stringify(message)} has been created`)
 | 
			
		||||
  console.log(`${JSON.stringify(message)} has been created`)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user