Ouvintes
How to use Listeners
O Necord suporta interação com todos os eventos do discord através do decorador @On
e @Once. These decorators can be used within any injectable class, such as services or custom providers.
import { Injectable, Logger } from '@nestjs/common';
import { Once, On, Context, ContextOf } from 'necord';
@Injectable()
export class AppService {
    private readonly logger = new Logger(AppService.name);
    @Once('clientReady')
    public onReady(@Context() [client]: ContextOf<'clientReady'>) {
        this.logger.log(`Bot logged in as ${client.user.username}`);
    }
    @On('warn')
    public onWarn(@Context() [message]: ContextOf<'warn'>) {
        this.logger.warn(message);
    }
}
Se você usar filtros, guardas ou interceptores globais, eles serão acionados uma vez por evento!
Isto significa que se você está respondendo à mensagem em guards, você pode encontrar problemas com respostas duplicadas ou interações inválidas.
Have a look at the NecordExecutionContext.getDiscovery() metadata to learn more about the current context.
Contexto
Você deve ter notado o decorador @Context no último trecho: Isso é usado para injetar o contexto do evento dentro do método.
Como existem muitos tipos de eventos, seu tipo deve ser inferido do tipo ContextOf<type: string>.
Você pode acessar as variáveis de contexto usando o decorador @Context() dentro de sua função, que irá preencher a variável com uma matriz
de argumentos.
@On('messageCreate')
public onMessageCreate(@Context() [message]: ContextOf<'messageCreate'>) {
    console.log(message.content);
}
Eventos Personalizados
O Necord suporta todos os eventos fornecidos pelo discord.js. Você também pode criar eventos personalizados usando os decoradores @CustomListenerHandler e @CustomListener.
import { Injectable } from '@nestjs/common';
import { CustomListener, CustomListenerHandler, BaseHandler, ContextOf, createCustomOnDecorator } from 'necord';
import { User } from 'discord.js';
export type CustomUserUpdateEvents = {
	userAvatarUpdate: [user: User, oldAvatar: string, newAvatar: string];
};
export type ContextOfCustomUserUpdate<K extends keyof E, E = CustomUserUpdateEvents> = E[K];
export const OnCustomUserUpdate = createCustomOnDecorator<CustomUserUpdateEvents>();
@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()
			);
		}
	}
}
Also, you can create multiple custom event handlers in a single class by adding more methods with the @CustomListenerHandler() decorator.
And then you can listen to the custom event using the @OnCustomUserUpdate decorator.
import { Injectable } from '@nestjs/common';
import { OnCustomUserUpdate, ContextOfCustomUserUpdate, Context } from './user-update.handler';
@Injectable()
export class AppService {
	@OnCustomUserUpdate('userAvatarUpdate')
	public onAvatarUpdate(@Context() context: ContextOfCustomUserUpdate<'userAvatarUpdate'>) {
		const [user, oldAvatar, newAvatar] = context;
		console.log(`User ${user.username} changed avatar from ${oldAvatar} to ${newAvatar}`);
	}
}
Also you can use
@On<CustomUserUpdateEvents>('userAvatarUpdate')instead of creating a new decorator. But creating a new decorator is more convenient and cleaner.
List of Custom Events
The following is a list of all the custom events provided by Necord. It can be accessed via the @On decorator.
Eventos de Canal
| Nome do evento | Descrição | 
|---|---|
guildChannelPermissionsUpdate | Emitido sempre que a permissão de um canal é atualizada. | 
Eventos de Servidor
| Nome do evento | Descrição | 
|---|---|
guildBoostLevelUp | Emitido sempre que o nível de boost do servidor é aumentado. | 
guildBoostLevelDown | Emitido sempre que o nível de boost do servidor é diminuido. | 
guildBannerAdd | Emitido sempre que um banner de um servidor é adicionado. | 
guildAfkChannelAdd | Emitido sempre que o canal de ausentes de um servidor for adicionado. | 
guildVanityURLAdd | Emitido sempre que o URL personalizado de um servidor é adicionado. | 
guildVanityURLUpdate | Emitido sempre que o URL personalizado de um servidor é atualizado. | 
guildVanityURLRemove | Emitido sempre que o URL personalizado de um servidor é removido. | 
guildFeaturesUpdate | Emitido sempre que os recursos de um servidor são atualizados. | 
guildAcronymUpdate | Emitido sempre que o acrônimo do servidor é atualizado. | 
guildOwnerUpdate | Emitido sempre que o dono do servidor é atualizado. | 
guildPartnerAdd | Emitido sempre que o servidor vira parceiro do discord. | 
guildPartnerRemove | Emitido sempre que o servidor deixa de ser parceiro do discord. | 
guildVerificationAdd | Emitido sempre que um nível de verificação do servidor é adicionado. | 
guildVerificationRemove | Emitido sempre que um nível de verificação do servidor é removido. | 
Eventos de Log de Auditoria do Servidor
| Nome do evento | Descrição | 
|---|---|
guildAuditLogEntryAdd | Emitido sempre que uma entrada é adicionada ao log de auditoria. | 
guildAuditLogEntryUpdate | Emitido sempre que uma entrada é atualizado no log de auditoria. | 
guildAuditLogEntryDelete | Emitido sempre que uma entrada é removida do log de auditoria. | 
guildAuditLogEntryWebhookCreate | Emitido sempre que um webhook é criado no log de auditoria. | 
guildAuditLogEntryWebhookUpdate | Emitido sempre que um webhook é atualizado no log de auditoria. | 
guildAuditLogEntryWebhookDelete | Emitido sempre que um webhook é removido no log de auditoria. | 
Eventos de Membro do Servidor
| Nome do evento | Descrição | 
|---|---|
guildMemberBoost | Emitido sempre que um boost de membro é ativado. | 
guildMemberUnboost | Emitido sempre que um boost de membro é desativado. | 
guildMemberRoleAdd | Emitido sempre que um cargo é adicionado a um membro. | 
guildMemberRoleRemove | Emitido sempre que um cargo é removido de um membro. | 
guildMemberNicknameUpdate | Emitido sempre que um o apelido de um membro é atualizado. | 
guildMemberEntered | Emitido sempre que um membro entra no servidor. | 
guildMemberAvatarAdd | Emitido sempre que um avatar de um membro é adicionado. | 
guildMemberAvatarRemove | Emitido sempre que um avatar de um membro é removido. | 
guildMemberAvatarUpdate | Emitido sempre que um avatar de um membro é atualizado. | 
Evento de Atualização de Cargo
| Nome do evento | Descrição | 
|---|---|
rolePositionUpdate | Emitido sempre que a posição do cargo é atualizada. | 
rolePermissionsUpdate | Emitido sempre que as permissões do cargo são atualizadas. | 
roleIconAdd | Emitido sempre que um ícone de um cargo é adicionado. | 
roleIconRemove | Emitido sempre que um ícone de um cargo é removido. | 
roleIconUpdate | Emitido sempre que um ícone de um cargo é atualizado. | 
Eventos de Atualização do Tópico
| Nome do evento | Descrição | 
|---|---|
threadStateUpdate | Emitido sempre que o estado de um tópico é atualizado. | 
threadNameUpdate | Emitido sempre que o nome de um tópico é atualizado. | 
threadLockStateUpdate | Emitido sempre que o estado de trava do tópico é atualizado. | 
threadRateLimitPerUserUpdate | Emitido sempre que o tempo de espera por usuário é atualizado. | 
threadAutoArchiveDurationUpdate | Emitido sempre que a duração de auto arquivamento do tópico é atualizado. | 
Eventos de Mensagem
| Nome do evento | Descrição | 
|---|---|
messagePinned | Emitido sempre que uma mensagem é fixada. | 
messageContentEdited | Emitido sempre que uma mensagem é atualizada. | 
Eventos de Presença
| Nome do evento | Descrição | 
|---|---|
guildMemberOffline | Emitido sempre que um membro fica offline. | 
guildMemberOnline | Emitido sempre que um membro fica online. | 
Eventos de Usuário
| Nome do evento | Descrição | 
|---|---|
userAvatarUpdate | Emitido sempre que o avatar de um usuário é atualizado. | 
userUsernameUpdate | Emitido sempre que o nome de um usuário é atualizado. | 
userDiscriminatorUpdate | Emitido sempre que o descriminador de um usuário é atualizado. | 
userFlagsUpdate | Emitido sempre que as flags de um usuário são atualizadas. | 
userPrimaryGuildUpdate | Emitted whenever a user's primary guild is updated. | 
Eventos de Voz
| Nome do evento | Descrição | 
|---|---|
voiceChannelJoin | Emitido sempre que um membro entra em um canal de voz. | 
voiceChannelLeave | Emitido sempre que um membro sai de um canal de voz. | 
voiceChannelSwitch | Emitido sempre que um membro muda de canal de voz. | 
voiceChannelMutestate | Emitido sempre que um membro é silenciado ou ensurdecido em um canal de voz. | 
voiceChannelUnmute | Emitido sempre que um membro é deixa de estar mutado em um canal de voz. | 
voiceChannelDeaf | Emitido sempre que um membro é ensurdecido em um canal de voz. | 
voiceChannelUndeaf | Emitido sempre que um membro deixa de estar ensurdecido em um canal de voz. | 
voiceStreamingStart | Emitido sempre que um membro começa uma transmissão. | 
voiceStreamingStop | Emitido sempre que um membro para uma transmissão. |