Ir para o conteúdo principal

Ouvintes

O Necord suporta interação com todos os eventos do discord através do decorador @On e @Once. Enquanto a melhor prática é usar os decoradores mais específicos quando possível, isso é útil se você deseja usar recursos necord não suporte através de decoradores personalizados, para interagir com as solicitações brutas, ou para ouvir todos os eventos usando um decorador como interactionCreate.

app.service.ts
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('ready')
public onReady(@Context() [client]: ContextOf<'ready'>) {
this.logger.log(`Bot conectado como ${client.user.username}`);
}

@On('warn')
public onWarn(@Context() [message]: ContextOf<'warn'>) {
this.logger.warn(message);
}
}
Aviso

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. Dê uma olhada nos metadados NecordExecutionContext.getInfo() para aprender mais sobre o contexto atual.

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.

app.service.ts
@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.

app.service.ts
import { Injectable } from '@nestjs/common';
import { CustomListener, CustomListenerHandler, BaseHandler, ContextOf } from 'necord';
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()
);
}
}
}

E então você pode ouvir o evento personalizado usando o decorador @On.

app.service.ts
@On('userAvatarUpdate')
public onUserAvatarUpdate(
@Context() [user, oldAvatar, newAvatar]: ContextOfCustomUserUpdate<'userAvatarUpdate'>
) {
console.log(
`Usuário ${user.tag} mudou seu avatar de ${oldAvatar} para ${newAvatar}`
);
}

Também suporta eventos personalizados.

Eventos de Canal

Nome do eventoDescrição
guildChannelPermissionsUpdateEmitido sempre que a permissão de um canal é atualizada.

Eventos de Servidor

Nome do eventoDescrição
guildBoostLevelUpEmitido sempre que o nível de boost do servidor é aumentado.
guildBoostLevelDownEmitido sempre que o nível de boost do servidor é diminuido.
guildBannerAddEmitido sempre que um banner de um servidor é adicionado.
guildAfkChannelAddEmitido sempre que o canal de ausentes de um servidor for adicionado.
guildVanityURLAddEmitido sempre que o URL personalizado de um servidor é adicionado.
guildVanityURLUpdateEmitido sempre que o URL personalizado de um servidor é atualizado.
guildVanityURLRemoveEmitido sempre que o URL personalizado de um servidor é removido.
guildFeaturesUpdateEmitido sempre que os recursos de um servidor são atualizados.
guildAcronymUpdateEmitido sempre que o acrônimo do servidor é atualizado.
guildOwnerUpdateEmitido sempre que o dono do servidor é atualizado.
guildPartnerAddEmitido sempre que o servidor vira parceiro do discord.
guildPartnerRemoveEmitido sempre que o servidor deixa de ser parceiro do discord.
guildVerificationAddEmitido sempre que um nível de verificação do servidor é adicionado.
guildVerificationRemoveEmitido sempre que um nível de verificação do servidor é removido.

Eventos de Log de Auditoria do Servidor

Nome do eventoDescrição
guildAuditLogEntryAddEmitido sempre que uma entrada é adicionada ao log de auditoria.
guildAuditLogEntryUpdateEmitido sempre que uma entrada é atualizado no log de auditoria.
guildAuditLogEntryDeleteEmitido sempre que uma entrada é removida do log de auditoria.
guildAuditLogEntryWebhookCreateEmitido sempre que um webhook é criado no log de auditoria.
guildAuditLogEntryWebhookUpdateEmitido sempre que um webhook é atualizado no log de auditoria.
guildAuditLogEntryWebhookDeleteEmitido sempre que um webhook é removido no log de auditoria.

Eventos de Membro do Servidor

Nome do eventoDescrição
guildMemberBoostEmitido sempre que um boost de membro é ativado.
guildMemberUnboostEmitido sempre que um boost de membro é desativado.
guildMemberRoleAddEmitido sempre que um cargo é adicionado a um membro.
guildMemberRoleRemoveEmitido sempre que um cargo é removido de um membro.
guildMemberNicknameUpdateEmitido sempre que um o apelido de um membro é atualizado.
guildMemberEnteredEmitido sempre que um membro entra no servidor.
guildMemberAvatarAddEmitido sempre que um avatar de um membro é adicionado.
guildMemberAvatarRemoveEmitido sempre que um avatar de um membro é removido.
guildMemberAvatarUpdateEmitido sempre que um avatar de um membro é atualizado.

Evento de Atualização de Cargo

Nome do eventoDescrição
rolePositionUpdateEmitido sempre que a posição do cargo é atualizada.
rolePermissionsUpdateEmitido sempre que as permissões do cargo são atualizadas.
roleIconAddEmitido sempre que um ícone de um cargo é adicionado.
roleIconRemoveEmitido sempre que um ícone de um cargo é removido.
roleIconUpdateEmitido sempre que um ícone de um cargo é atualizado.

Eventos de Atualização do Tópico

Nome do eventoDescrição
threadStateUpdateEmitido sempre que o estado de um tópico é atualizado.
threadNameUpdateEmitido sempre que o nome de um tópico é atualizado.
threadLockStateUpdateEmitido sempre que o estado de trava do tópico é atualizado.
threadRateLimitPerUserUpdateEmitido sempre que o tempo de espera por usuário é atualizado.
threadAutoArchiveDurationUpdateEmitido sempre que a duração de auto arquivamento do tópico é atualizado.

Eventos de Mensagem

Nome do eventoDescrição
messagePinnedEmitido sempre que uma mensagem é fixada.
messageContentEditedEmitido sempre que uma mensagem é atualizada.

Eventos de Presença

Nome do eventoDescrição
guildMemberOfflineEmitido sempre que um membro fica offline.
guildMemberOnlineEmitido sempre que um membro fica online.

Eventos de Usuário

Nome do eventoDescrição
userAvatarUpdateEmitido sempre que o avatar de um usuário é atualizado.
userUsernameUpdateEmitido sempre que o nome de um usuário é atualizado.
userDiscriminatorUpdateEmitido sempre que o descriminador de um usuário é atualizado.
userFlagsUpdateEmitido sempre que as flags de um usuário são atualizadas.

Eventos de Voz

Nome do eventoDescrição
voiceChannelJoinEmitido sempre que um membro entra em um canal de voz.
voiceChannelLeaveEmitido sempre que um membro sai de um canal de voz.
voiceChannelSwitchEmitido sempre que um membro muda de canal de voz.
voiceChannelMutestateEmitido sempre que um membro é silenciado ou ensurdecido em um canal de voz.
voiceChannelUnmuteEmitido sempre que um membro é deixa de estar mutado em um canal de voz.
voiceChannelDeafEmitido sempre que um membro é ensurdecido em um canal de voz.
voiceChannelUndeafEmitido sempre que um membro deixa de estar ensurdecido em um canal de voz.
voiceStreamingStartEmitido sempre que um membro começa uma transmissão.
voiceStreamingStopEmitido sempre que um membro para uma transmissão.