Compare commits

..

3 Commits

Author SHA1 Message Date
e234e9f68f Merge pull request 'Logging and ephemeral messages' (#11) from dev into master
Reviewed-on: #11
2023-06-08 00:19:14 +02:00
84a0d7bbe1 turn all slash command replies into an ephemeral message
Setting ephemeral has to happen in an initial reply (reply() or
deferReply()) to set the mode for all replies in this 'thread'. Once the
ephemeral state of a message has been set it can not be changed. If you
want to send a visible message after an ephemeral message it has to be
new message. See https://discordjs.guide/slash-commands/response-methods.html#ephemeral-responses
2023-06-06 23:27:41 +02:00
efd4d69c74 add ids to logging 2023-06-06 23:27:07 +02:00
2 changed files with 15 additions and 15 deletions

View File

@ -8,7 +8,7 @@ export async function execute(interaction: ExtendedInteraction) {
//console.dir(interaction, { depth: null }) //console.dir(interaction, { depth: null })
if (interaction.isCommand()) { if (interaction.isCommand()) {
logger.info(`Interaction is a command.`, { guildId: interaction.guild?.id }) logger.info(`Interaction is a command.`, { guildId: interaction.guild?.id })
await interaction.deferReply() await interaction.deferReply({ ephemeral: true })
const command = client.commands.get(interaction.commandName) const command = client.commands.get(interaction.commandName)
if (!command) if (!command)
return interaction.followUp('Invalid command') return interaction.followUp('Invalid command')

View File

@ -67,7 +67,7 @@ export class JellyfinHandler {
password: this.generatePasswordForUser(), password: this.generatePasswordForUser(),
} }
} }
logger.debug(JSON.stringify(req)) logger.debug(JSON.stringify(req), { requestId, guildId })
const createResult = await this.userApi.createUserByName(req) const createResult = await this.userApi.createUserByName(req)
if (createResult) { if (createResult) {
(await discordUser.createDM()).send(`Ich hab dir mal nen Account angelegt :)\nDein Username ist ${createResult.name}, dein Password ist "${req.createUserByNameRequest.password}"!`) (await discordUser.createDM()).send(`Ich hab dir mal nen Account angelegt :)\nDein Username ist ${createResult.name}, dein Password ist "${req.createUserByNameRequest.password}"!`)
@ -78,7 +78,7 @@ export class JellyfinHandler {
public async isUserAlreadyPresent(discordUser: GuildMember, requestId?: string): Promise<boolean> { public async isUserAlreadyPresent(discordUser: GuildMember, requestId?: string): Promise<boolean> {
const jfuser = await this.getUser(discordUser, requestId) const jfuser = await this.getUser(discordUser, requestId)
logger.debug(`Presence for DiscordUser ${discordUser.id}:${jfuser !== undefined}`) logger.debug(`Presence for DiscordUser ${discordUser.id}:${jfuser !== undefined}`, { guildId: discordUser.guild.id, requestId })
return jfuser !== undefined return jfuser !== undefined
} }
@ -94,14 +94,14 @@ export class JellyfinHandler {
} }
public async getUser(discordUser: GuildMember, requestId?: string): Promise<Maybe<UserDto>> { public async getUser(discordUser: GuildMember, requestId?: string): Promise<Maybe<UserDto>> {
logger.info(`Getting user for discord member ${discordUser.displayName}`, { requestId }) logger.info(`Getting user for discord member ${discordUser.displayName}`, { requestId, guildId: discordUser.guild.id })
const jfUsers = await this.getCurrentUsers(discordUser.guild.id, requestId) const jfUsers = await this.getCurrentUsers(discordUser.guild.id, requestId)
const foundUser = jfUsers.find(x => x.name?.includes(discordUser.displayName)) const foundUser = jfUsers.find(x => x.name?.includes(discordUser.displayName))
return foundUser return foundUser
} }
public async removeUser(newMember: GuildMember, level: PermissionLevel, requestId?: string) { public async removeUser(newMember: GuildMember, level: PermissionLevel, requestId?: string) {
logger.info(`${level == "TEMPORARY" ? "Deleting" : "Disabling" } user ${newMember.displayName}, but method is not implemented`, { requestId }) logger.info(`${level == "TEMPORARY" ? "Deleting" : "Disabling"} user ${newMember.displayName}, but method is not implemented`, { requestId, guildId: newMember.guild.id })
const jfuser = await this.getUser(newMember, requestId) const jfuser = await this.getUser(newMember, requestId)
if (jfuser && jfuser.id) { if (jfuser && jfuser.id) {
if (level === "TEMPORARY") { if (level === "TEMPORARY") {
@ -116,11 +116,11 @@ export class JellyfinHandler {
} }
public async purge(guildId: string, requestId?: string) { public async purge(guildId: string, requestId?: string) {
logger.info("Deleting tmp users") logger.info("Deleting tmp users", { requestId, guildId })
const users = (await this.userApi.getUsers()).filter(user => user.name?.endsWith("_tmp")) const users = (await this.userApi.getUsers()).filter(user => user.name?.endsWith("_tmp"))
users.forEach(user => { users.forEach(user => {
if(user.id) { if (user.id) {
const r: DeleteUserRequest = { const r: DeleteUserRequest = {
userId: user.id userId: user.id
} }
@ -130,7 +130,7 @@ export class JellyfinHandler {
} }
public async resetUserPasswort(member: GuildMember, requestId?: string) { public async resetUserPasswort(member: GuildMember, requestId?: string) {
logger.info(`Resetting password for user ${member.displayName}`, { requestId }) logger.info(`Resetting password for user ${member.displayName}`, { requestId, guildId: member.guild.id })
const jfUser = await this.getUser(member, requestId) const jfUser = await this.getUser(member, requestId)
if (jfUser && jfUser.id) { if (jfUser && jfUser.id) {
@ -160,7 +160,7 @@ export class JellyfinHandler {
userId: jfUser.id userId: jfUser.id
} }
logger.info("Setting new password", { requestId }) logger.info("Setting new password", { requestId, guildId: member.guild.id })
await this.userApi.updateUserPassword(passwordOperationRequest); await this.userApi.updateUserPassword(passwordOperationRequest);
@ -175,7 +175,7 @@ export class JellyfinHandler {
public async disableUser(user: UserDto, guildId?: string, requestId?: string): Promise<void> { public async disableUser(user: UserDto, guildId?: string, requestId?: string): Promise<void> {
if (user.id) { if (user.id) {
const jfUser = await this.getUser(<GuildMember>{ displayName: user.name, guild: { id: guildId } }, requestId) const jfUser = await this.getUser(<GuildMember>{ displayName: user.name, guild: { id: guildId } }, requestId)
logger.info(`Trying to disable user: ${user.name}|${user.id}|${JSON.stringify(jfUser, null, 2)}`) logger.info(`Trying to disable user: ${user.name}|${user.id}|${JSON.stringify(jfUser, null, 2)}`, { guildId, requestId })
const r: UpdateUserPolicyOperationRequest = { const r: UpdateUserPolicyOperationRequest = {
userId: user.id ?? "", userId: user.id ?? "",
updateUserPolicyRequest: { updateUserPolicyRequest: {
@ -184,7 +184,7 @@ export class JellyfinHandler {
} }
} }
await this.userApi.updateUserPolicy(r) await this.userApi.updateUserPolicy(r)
logger.info(`Succeeded with disabling user: ${user.name}`) logger.info(`Succeeded with disabling user: ${user.name}`, { guildId, requestId })
} }
else { else {
logger.error(`Can not disable user ${JSON.stringify(user)}, has no id?!`, { requestId, guildId }) logger.error(`Can not disable user ${JSON.stringify(user)}, has no id?!`, { requestId, guildId })
@ -194,7 +194,7 @@ export class JellyfinHandler {
public async enableUser(user: UserDto, guildId: string, requestId?: string): Promise<void> { public async enableUser(user: UserDto, guildId: string, requestId?: string): Promise<void> {
if (user.id) { if (user.id) {
const jfUser = await this.getUser(<GuildMember>{ displayName: user.name, guild: { id: guildId } }, requestId) const jfUser = await this.getUser(<GuildMember>{ displayName: user.name, guild: { id: guildId } }, requestId)
logger.info(`Trying to enable user: ${user.name}|${user.id}|${JSON.stringify(jfUser, null, 2)}`) logger.info(`Trying to enable user: ${user.name}|${user.id}|${JSON.stringify(jfUser, null, 2)}`, { guildId, requestId })
const r: UpdateUserPolicyOperationRequest = { const r: UpdateUserPolicyOperationRequest = {
userId: user.id ?? "", userId: user.id ?? "",
updateUserPolicyRequest: { updateUserPolicyRequest: {
@ -203,7 +203,7 @@ export class JellyfinHandler {
} }
} }
await this.userApi.updateUserPolicy(r) await this.userApi.updateUserPolicy(r)
logger.info(`Succeeded with enabling user: ${user.name}`) logger.info(`Succeeded with enabling user: ${user.name}`, { guildId, requestId })
} }
else { else {
logger.error(`Can not enable user ${JSON.stringify(user)}, has no id?!`, { requestId, guildId }) logger.error(`Can not enable user ${JSON.stringify(user)}, has no id?!`, { requestId, guildId })
@ -211,10 +211,10 @@ export class JellyfinHandler {
} }
public async upsertUser(newMember: GuildMember, level: PermissionLevel, requestId?: string) { public async upsertUser(newMember: GuildMember, level: PermissionLevel, requestId?: string) {
logger.error(`Trying to upsert user ${newMember.displayName}, with permissionLevel ${level}`) logger.error(`Trying to upsert user ${newMember.displayName}, with permissionLevel ${level}`, { guildId: newMember.guild.id, requestId })
const jfuser = await this.getUser(newMember, requestId) const jfuser = await this.getUser(newMember, requestId)
if (jfuser) { if (jfuser) {
logger.info(`User with name ${newMember.displayName} is already present`) logger.info(`User with name ${newMember.displayName} is already present`, { guildId: newMember.guild.id, requestId })
await this.enableUser(jfuser, newMember.guild.id, requestId) await this.enableUser(jfuser, newMember.guild.id, requestId)
} else { } else {
this.createUserAccountForDiscordUser(newMember, level, newMember.guild.id, requestId) this.createUserAccountForDiscordUser(newMember, level, newMember.guild.id, requestId)