Skip to main content

Слушатели

NestCord поддерживает взаимодействие со всеми событиями discord events через декоратор @On и @Once.
Хотя лучшей практикой является использование более специфических декораторов, когда это возможно, это полезно, если вы хотите использовать функции, которые NestCord не поддерживает с помощью пользовательских декораторов, взаимодействовать с необработанными запросами или слушать все события с помощью декоратора, такого как interactionCreate.

src/app.service.ts
import {Injectable, Logger} from '@nestjs/common';
import {Once, On, Context, ContextOf} from '@globalart/nestcord';

@Injectable()
export class AppService {
private readonly logger = new Logger(AppService.name);

@Once('ready')
public onReady(@Context() [client]: ContextOf<'ready'>) {
this.logger.log(`Bot logged in as ${client.user.username}`);
}

@On('warn')
public onWarn(@Context() [message]: ContextOf<'warn'>) {
this.logger.warn(message);
}
}
Внимание

Если вы используете глобальные фильтры, охранники или перехватчики, они будут срабатывать один раз на каждое событие!
Это означает, что если вы отвечаете на сообщение в охранниках, то можете столкнуться с проблемами дублирования ответов или недействительных взаимодействий. Посмотрите метаданные NestCordExecutionContext.getInfo(), чтобы узнать больше о текущем контексте.

Контекст

Вы могли заметить декоратор @Context в последнем фрагменте: Он используется для введения контекста события в метод. Поскольку существует множество типов событий, их тип должен быть выведен из типа ContextOf<type: string>.

Вы можете получить доступ к переменным контекста, используя декоратор @Context() в вашей функции, который заполнит переменную массивом аргументов .

src/app.service.ts
@On('messageCreate')
public onMessageCreate(@Context() [message]: ContextOf<'messageCreate'>) {
console.log(message.content);
}

Нестандартные события

NestCord из коробки поддерживает все события, предоставляемые discord.js. Вы также можете создавать пользовательские события с помощью декораторов @CustomListenerHandler и @CustomListener.

src/app.service.ts
import { Injectable } from '@nestjs/common';
import { CustomListener, CustomListenerHandler, BaseHandler, ContextOf } from '@globalart/nestcord';
import { User, UserFlagsBitField } from 'discord.js';

export type CustomUserUpdateEvents = {
userAvatarUpdate: [user: User, oldAvatar: string, newAvatar: string];
};

export type ContextOfCustomUserUpdate<K extends keyof E, E = CustomUserUpdateEvents> = E[K];


@Injectable()
@CustomListener('userUpdate')
export class UserUpdateHandler extends BaseHandler<CustomUserUpdateEvents> {
@CustomListenerHandler()
public handleUserAvatarUpdate([oldUser, newUser]: ContextOf<'userUpdate'>) {
if (oldUser.partial) return;

if (oldUser.displayAvatarURL() !== newUser.displayAvatarURL()) {
this.emit(
'userAvatarUpdate',
newUser,
oldUser.displayAvatarURL(),
newUser.displayAvatarURL()
);
}
}
}

А затем вы можете прослушать пользовательское событие с помощью декоратора @On.

src/app.service.ts
@On('userAvatarUpdate')
public onUserAvatarUpdate(
@Context() [user, oldAvatar, newAvatar]: ContextOfCustomUserUpdate<'userAvatarUpdate'>
) {
console.log(
`User ${user.tag} changed their avatar from ${oldAvatar} to ${newAvatar}`
);
}

Также поддерживаются пользовательские события.

События канала

Название событияОписание
guildChannelPermissionsUpdateВыдается каждый раз, когда обновляется разрешение на перезапись канала для гильдии.

События сервера

Название событияОписание
guildBoostLevelUpВыдается при повышении уровня усиления гильдии.
guildBoostLevelDownВыдается при снижении уровня усиления гильдии.
guildBannerAddВыдается каждый раз, когда добавляется знамя гильдии.
guildAfkChannelAddВыдается при добавлении AFK-канала гильдии.
guildVanityURLAddВыдается при добавлении URL-адреса гильдии.
guildVanityURLUpdateВыдается при обновлении URL-адреса гильдии.
guildVanityURLRemoveВыдается при удалении URL-адреса гильдии.
guildFeaturesUpdateВыдается при каждом обновлении характеристик гильдии.
guildAcronymUpdateВыдается при обновлении аббревиатуры гильдии.
guildOwnerUpdateВыдается при обновлении владельца гильдии.
guildPartnerAddВыдается всякий раз, когда гильдия является партнером
guildPartnerRemoveВыдается, когда гильдия больше не является партнером Раздора
guildVerificationAddВыдается при добавлении уровня проверки гильдии.
guildVerificationRemoveВыдается всякий раз, когда с гильдии снимается уровень проверки.

События журнала аудита сервера

Название событияОписание
guildAuditLogEntryAddВыдается каждый раз, когда в журнал аудита добавляется запись.
guildAuditLogEntryUpdateВыдается при обновлении записи в журнале аудита.
guildAuditLogEntryDeleteВыдается всякий раз, когда запись удаляется из журнала аудита.
guildAuditLogEntryWebhookCreateВыдается всякий раз, когда в журнале аудита создается веб-крючок.
guildAuditLogEntryWebhookUpdateВыдается каждый раз, когда веб-крючок обновляется в журнале аудита.
guildAuditLogEntryWebhookDeleteВыдается всякий раз, когда веб-крючок удаляется в журнале аудита.

События для участников сервера

Название событияОписание
guildMemberBoostВыдается при активации усиления участника.
guildMemberUnboostВыдается каждый раз, когда буст участника деактивируется.
guildMemberRoleAddВыдается всякий раз, когда роль добавляется к участнику.
guildMemberRoleRemoveВыдается всякий раз, когда роль удаляется из участника.
guildMemberNicknameUpdateВыдается при обновлении псевдонима пользователя.
guildMemberEnteredВыдается каждый раз, когда член вступает в гильдию.
guildMemberAvatarAddВыдается при добавлении аватара пользователя.
guildMemberAvatarRemoveВыдается каждый раз, когда аватар пользователя удаляется.
guildMemberAvatarUpdateВыдается при обновлении аватара пользователя.

События обновления ролей

Название событияОписание
rolePositionUpdateВыдается каждый раз, когда обновляется позиция роли.
rolePermissionsUpdateВыдается при обновлении прав доступа роли.
roleIconAddВыдается при добавлении иконки роли.
roleIconRemoveВыдается всякий раз, когда иконка роли удаляется.
roleIconUpdateВыдается при обновлении иконки роли.

События обновления тредов

Название событияОписание
threadStateUpdateВыдается всякий раз, когда состояние потока обновляется.
threadNameUpdateВыдается каждый раз, когда имя потока обновляется.
threadLockStateUpdateВыдается всякий раз, когда состояние блокировки потока обновляется.
threadRateLimitPerUserUpdateВыдается каждый раз, когда обновляется лимит скорости потока на пользователя.
threadAutoArchiveDurationUpdateВыдается при обновлении длительности автоархива потока.

События сообщения

Название событияОписание
messagePinnedВыдается всякий раз, когда сообщение прикрепляется.
messageContentEditedВыдается при каждом обновлении сообщения.

События присутствия

Название событияОписание
guildMemberOfflineВыдается всякий раз, когда пользователь переходит в автономный режим.
guildMemberOnlineВыдается каждый раз, когда пользователь выходит в сеть.

Пользовательские события

Название событияОписание
userAvatarUpdateВыдается при обновлении аватара пользователя.
userUsernameUpdateВыдается каждый раз, когда имя пользователя обновляется.
userDiscriminatorUpdateВыдается каждый раз, когда обновляется дискриминатор пользователя.
userFlagsUpdateВыдается при каждом обновлении флагов пользователя.

Голосовые события

Название событияОписание
voiceChannelJoinВыдается всякий раз, когда участник подключается к голосовому каналу.
voiceChannelLeaveВыдается всякий раз, когда участник покидает голосовой канал.
voiceChannelSwitchВыдается каждый раз, когда участник переключает голосовой канал.
voiceChannelMutestateВыдается, когда участник отключается или глохнет в голосовом канале.
voiceChannelUnmuteВыдается, когда участник отключает звук в голосовом канале.
voiceChannelDeafВыдается всякий раз, когда член клуба оглушен в голосовом канале.
voiceChannelUndeafВыдается всякий раз, когда участник не слышит в голосовом канале.
voiceStreamingStartВыдается всякий раз, когда участник начинает потоковую передачу.
voiceStreamingStopВыдается всякий раз, когда участник прекращает потоковую передачу.