Sammy
5b98c9bf2f
We can add multiple eventhandlers per eventname. To avoid confusion and large files and to improve concise file names the event files were renamed
59 lines
2.7 KiB
TypeScript
59 lines
2.7 KiB
TypeScript
import { VoiceState } from "discord.js";
|
|
import { v4 as uuid } from "uuid";
|
|
import { jellyfinHandler } from "../..";
|
|
import { UserUpsertResult } from "../jellyfin/handler";
|
|
import { logger } from "../logger";
|
|
|
|
|
|
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)
|
|
}
|
|
} |