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
.
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);
}
}
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.
@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 } 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
.
@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 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. |
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. |