DiscordAPI

Cliente REST para interagir com a API do Discord

Importação

typescript
import { DiscordAPI } from 'discord-flow';

Construtor

typescript
1const discord = new DiscordAPI({
2 token: process.env.DISCORD_TOKEN
3});

Canais

typescript
1// Obter canal
2const channel = await discord.getChannel(channelId);
3
4// Criar canal
5const newChannel = await discord.createChannel(guildId, {
6 name: 'novo-canal',
7 type: ChannelType.GuildText
8});
9
10// Editar canal
11await discord.editChannel(channelId, {
12 name: 'canal-editado'
13});
14
15// Deletar canal
16await discord.deleteChannel(channelId);

Mensagens

typescript
1// Enviar mensagem
2await discord.sendMessage(channelId, {
3 content: 'Hello!',
4 embeds: [...]
5});
6
7// Editar mensagem
8await discord.editMessage(channelId, messageId, {
9 content: 'Editado!'
10});
11
12// Deletar mensagem
13await discord.deleteMessage(channelId, messageId);
14
15// Obter mensagens
16const messages = await discord.getMessages(channelId, { limit: 10 });

Roles

typescript
1// Obter roles
2const roles = await discord.getRoles(guildId);
3
4// Criar role
5const role = await discord.createRole(guildId, {
6 name: 'Membro VIP',
7 color: 0x1EBE38,
8 permissions: Permissions.SendMessages
9});
10
11// Adicionar role a membro
12await discord.addRole(guildId, userId, roleId);
13
14// Remover role de membro
15await discord.removeRole(guildId, userId, roleId);

Membros

typescript
1// Obter membro
2const member = await discord.getMember(guildId, userId);
3
4// Obter lista de membros
5const members = await discord.getMembers(guildId, { limit: 100 });
6
7// Editar membro
8await discord.editMember(guildId, userId, {
9 nick: 'Novo Apelido'
10});
11
12// Banir membro
13await discord.banMember(guildId, userId, {
14 reason: 'Spam'
15});
16
17// Kickar membro
18await discord.kickMember(guildId, userId);

Guilds

typescript
1// Obter guild
2const guild = await discord.getGuild(guildId);
3
4// Obter canais da guild
5const channels = await discord.getGuildChannels(guildId);

Threads

typescript
1// Criar thread
2const thread = await discord.createThread(channelId, {
3 name: 'Nova Thread',
4 autoArchiveDuration: 1440
5});
6
7// Adicionar membro à thread
8await discord.addThreadMember(threadId, userId);

Comandos

typescript
1// Registrar comandos globais
2await discord.registerCommands(applicationId, [
3 { name: 'ping', description: 'Pong!' },
4 { name: 'help', description: 'Ajuda' }
5]);
6
7// Registrar comandos em guild específica
8await discord.registerGuildCommands(applicationId, guildId, commands);
9
10// Obter informações da aplicação
11const app = await discord.getApplicationInfo();

Rate Limits

A classe DiscordAPI lida automaticamente com rate limits (429), incluindo a espera correta pelo header Retry-After e backoff exponencial com até 5 tentativas.

Operações em Massa (Bulk)

typescript
1// Deletar mensagens em massa(2-100 mensagens)
2await discord.bulkDeleteMessages(channelId, ['msg1', 'msg2', ...]);
3
4// Banir usuários em massa(max 200)
5await discord.bulkBan(guildId, ['user1', 'user2'], {
6 delete_message_seconds: 3600 // opcional
7});
8
9// Adicionar múltiplas roles
10await discord.bulkAddRoles(guildId, userId, ['role1', 'role2']);
11
12// Remover múltiplas roles
13await discord.bulkRemoveRoles(guildId, userId, ['role1', 'role2']);

Webhooks

typescript
1import { DiscordWebhook } from '@discord-flow/adapter-discord-http';
2
3// Inicializar com URL completa ou caminho
4const webhook = new DiscordWebhook(process.env.WEBHOOK_URL);
5
6// Enviar mensagem
7await webhook.send({
8 content: 'Olá via Webhook!',
9 username: 'Bot Customizado',
10 avatar_url: 'https://...'
11});
12
13// Editar mensagem do webhook
14await webhook.edit(messageId, { content: 'Atualizado!' });
15
16// Deletar mensagem do webhook
17await webhook.delete(messageId);