Fix edgecases for automatic user creation

- make eventdescription !wp case insensitive

- Create accounts for users in channel without subscription when event starts

- Make sent messages caused by VoiceState event dependant on creation result (created, enabled)

- Create tmp user if normal user exists but is disabled
This commit is contained in:
2023-06-09 23:56:45 +02:00
parent c0b24ee3ad
commit 1e1ab93667
3 changed files with 49 additions and 26 deletions

View File

@ -1,12 +1,11 @@
import { GuildMember } from "discord.js";
import { Config } from "../configuration";
import { Maybe, PermissionLevel } from "../interfaces";
import { logger } from "../logger";
import { CreateUserByNameOperationRequest, DeleteUserRequest, SystemApi, UpdateUserPasswordOperationRequest, UpdateUserPolicyOperationRequest, UserApi } from "./apis";
import { UpdateUserPasswordRequest } from "./models";
import { UserDto } from "./models/UserDto";
import { Configuration, ConfigurationParameters } from "./runtime";
import { CreateUserByNameRequest, UpdateUserEasyPasswordRequest, UpdateUserPasswordRequest, UpdateUserPolicyRequest } from "./models";
import { Config } from "../configuration";
import { logger } from "../logger";
import { Maybe, PermissionLevel } from "../interfaces";
import { v4 as uuid } from "uuid";
export class JellyfinHandler {
@ -210,15 +209,20 @@ export class JellyfinHandler {
}
}
public async upsertUser(newMember: GuildMember, level: PermissionLevel, requestId?: string) {
logger.error(`Trying to upsert user ${newMember.displayName}, with permissionLevel ${level}`, { guildId: newMember.guild.id, requestId })
public async upsertUser(newMember: GuildMember, level: PermissionLevel, requestId?: string): Promise<UserUpsertResult> {
logger.info(`Trying to upsert user ${newMember.displayName}, with permissionLevel ${level}`, { guildId: newMember.guild.id, requestId })
const jfuser = await this.getUser(newMember, requestId)
if (jfuser) {
if (jfuser && !jfuser.policy?.isDisabled) {
logger.info(`User with name ${newMember.displayName} is already present`, { guildId: newMember.guild.id, requestId })
await this.enableUser(jfuser, newMember.guild.id, requestId)
return UserUpsertResult.enabled
} else {
this.createUserAccountForDiscordUser(newMember, level, newMember.guild.id, requestId)
return UserUpsertResult.created
}
}
}
}
export enum UserUpsertResult {enabled, created}