Слушатели
NestCord поддерживает взаимодействие со всеми событиями discord events через декоратор @On
и @Once
.
Хотя лучшей практикой является использование более специфических декораторов, когда это возможно, это полезно, если вы хотите использовать функции, которые NestCord не
поддерживает с помощью пользовательских декораторов, взаимодействовать с необработанными запросами или слушать все события с помощью декоратора, такого как interactionCreate
.
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()
в вашей функции, который заполнит переменную массивом аргументов
.
@On('messageCreate')
public onMessageCreate(@Context() [message]: ContextOf<'messageCreate'>) {
console.log(message.content);
}
Нестандартные события
NestCord из коробки поддерживает все события, предоставляемые discord.js. Вы также можете создавать пользовательские события с помощью декораторов @CustomListenerHandler
и @CustomListener
.
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
.
@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 | Выдается всякий раз, когда участник прекращает потоковую передачу. |