Conversation
| }, | ||
| "dependencies": { | ||
| "@types/node": "^18.16.1", | ||
| "@types/node": "^20.16.5", |
There was a problem hiding this comment.
Типизация явно должна быть в дев-зависимостях, скорее всего (вроде может быть не в дев если есть линтинг перед сборкой на стороне сервера в CI/CD)
| await this.callbackHandler.handleMessage(ctx); | ||
| }); | ||
|
|
||
| this.logger.info(`Загружено ${handlerCount} обработчика событий`); |
There was a problem hiding this comment.
Прикрути plural для склонения чисел или переформулируй сообщение в "Загружено обработчиков событий: кол-во"
| let dbUser = process.env.DB_USER; | ||
| let dbPassword = process.env.DB_PASSWORD; | ||
|
|
||
| if (this.config?.database.type == DataBaseType.POSTGRESQL && dbUser && dbPassword) { |
There was a problem hiding this comment.
Используй строгое сравнение (===) везде, где это возможно
| abstract queryInsert(sql: string, params?: any[]): Promise<void>; | ||
|
|
||
| abstract getAllVoices(botId: number | undefined): Promise<CustomVoice[]>; | ||
| abstract getAllVoices(botId: number | undefined, isHidden: boolean, limit: number, offset: number): Promise<CustomVoice[]>; |
There was a problem hiding this comment.
С таким числом аргументов лучше перейти на объект в качестве аргумента, если это возможно.
interface GetAllVoicesParams {
botId?: number;
isHidden: boolean;
...
}
abstract getAllVoices({ botId, isHidden, ...}: GetAllVoicesParams): ...
| abstract getVoiceById(id: number): Promise<CustomVoice>; | ||
|
|
||
| abstract getVoiceByTitleInclude(title: string, botId: number | undefined): Promise<CustomVoice[]>; | ||
| abstract getVoiceByTitleInclude(title: string, botId: number | undefined, isHidden: boolean, limit: number, offset: number): Promise<CustomVoice[]>; |
There was a problem hiding this comment.
Аналогично комментарию выше, тем более что аргументы схожи. Общие параметры из объекта можно вынести в переиспользуемый интерфейс и указывать его в качестве аргумента, расширяя нужными свойствами. Ну или сделать отдельные интерфейсы для аргументов функций заранее, их расширяя от общего интерфейса
| if (query !== '') { | ||
| this.logger.debug(`${ctx.from.username} -> ${query}`); |
There was a problem hiding this comment.
Здесь можно свапнуть блоки инструкций местами и избавиться от отрицания в проверяемом условии. А ещё лучше избавиться от блока else вовсе, кажется, можно обойтись одним if:
`ts
if (query === '') {
...
return;
}
здесь обработка случая непустой строки
`
|
|
||
| if (!this.config.getConfig()?.adminList.includes(msg.from.id)) { | ||
| this.bot.sendMessage(chatId, 'Загрузка аудио доступна только админам') |
There was a problem hiding this comment.
Вынести в переменную (а то и две) перед проверкой и дать человекочитаемые имена. Длина этой портянки меня пугает
| const fileName: string = isAudio | ||
| ? msg.audio?.file_name.split('.')[0].replace(/ /g, '_') | ||
| : (customSoundName?.replace(/ /g, '_') ?? randomUUID()); |
There was a problem hiding this comment.
Комментарий бы, что происходит. А действия в тернарке лучше вынести в отдельные файлы с переиспользуемыми утилитами, там дать им понятные названия и покрыть тестами. Особенно если они используются где-то ещё
| getAllVoices(botId: number | undefined, isHidden: boolean, limit: number, offset: number): Promise<CustomVoice[]>; | ||
|
|
||
| getVoiceById(id: number): Promise<CustomVoice>; | ||
|
|
||
| getVoiceByTitleInclude(title: string, botId: number | undefined): Promise<CustomVoice[]>; | ||
| getVoiceByTitleInclude(title: string, botId: number | undefined, isHidden: boolean, limit: number, offset: number): Promise<CustomVoice[]>; |
There was a problem hiding this comment.
Аналогично комментариям про один объект в качестве аргумента. Приняли объект, вернули объект или "принцип RoRo"
| export interface CustomVoice extends Pick<InlineQueryResultVoice, 'id' | 'title' | 'voice_url'> { | ||
| botId: number; | ||
| isHidden: boolean | number; |
There was a problem hiding this comment.
Интересная типизация у явно булевого типа данных (исходя из названия), вы точно делаете всё правильно?)
No description provided.