As funções podem ser chamadas no campo Variáveis de um bloco ou diretamente no texto de resposta usando #{...}:

#{discord_add_role(message_from, '1465674567090704592')}

Os IDs de servidor, canal, cargo e mensagem do Discord são valores numéricos longos. A maneira mais fácil de copiá-los é ativar Configurações → Avançado → Modo Desenvolvedor. Depois disso, a opção Copiar ID aparecerá no menu de contexto de qualquer objeto.

A conexão do bot é descrita no artigo Como Criar um Chatbot no Discord.

Onde Obter o ID da Mensagem

O ID da mensagem que acionou o bloco é armazenado na variável discord_message_id. Você não precisa recuperá-lo separadamente:

#{discord_delete_message(discord_message_id)}

Se você precisar de dados que não estão disponíveis nas variáveis predefinidas, o webhook completo está disponível na variável discord_webhook. Ela é preenchida quando qualquer valor é atribuído à variável save_webhook:

data = discord_webhook["data"]

msg_id = data["id"]

result = discord_reply_to_message(msg_id, "Esta é uma resposta à mensagem")

Variáveis Criadas Automaticamente

Essas variáveis são preenchidas automaticamente para cada evento e não exigem configuração adicional.

Variável Descrição Exemplo
guild_id ID do servidor 1465674567090704591
discord_event Tipo de evento em uma única palavra message
discord_message_id ID da mensagem com o prefixo mid mid1465674569095319625
message_from ID do autor do evento com o prefixo uid uid413984787162726410
from_username Nome de usuário do autor no Discord 00rei
from_name Nome de exibição do autor no chat Rus
username Nome de usuário para mensagens diretas ao bot 00rei
is_bot 1 se o autor do evento for outro bot 0
nickname Apelido no servidor; vazio se não definido Moderator
roles Lista de IDs de cargos do autor ["1465674567090704592"]
is_admin 1 se o usuário for administrador ou proprietário do servidor 1
reply_from ID do autor da mensagem que está sendo respondida uid493121376652230668
reply_from_username Nome de usuário do autor que está sendo respondido _deikin
reply_from_name Nome de exibição do autor que está sendo respondido Rus
reply_to_bot 1 se a resposta for para o bot 0
reply_message_id ID da mensagem que está sendo respondida mid1534837349219958804
reply_text Texto da mensagem que está sendo respondida quem está de plantão hoje?

Os prefixos uid, cid e mid fazem parte do valor. Passe essas variáveis para as funções como estão; você não precisa remover os prefixos.

from_name vs. from_username

from_name contém o nome que deve ser usado para se dirigir ao usuário no chat:

  1. Apelido do servidor, se definido.
  2. Nome de exibição da conta.
  3. Nome de usuário.

Esta é a variável recomendada para usar em saudações, porque from_username pode parecer _deikin ou 00rei.

As variáveis reply_* são preenchidas apenas quando a mensagem recebida é uma resposta a outra mensagem. Para mensagens comuns, todas são limpas.

Portanto, a seguinte condição distingue de forma confiável uma resposta de uma mensagem comum:

#{reply_from != ''}

As variáveis nickname, roles e is_admin referem-se ao autor do evento atual.

O Discord não fornece esses dados para eventos de reação, portanto, as verificações de administrador devem ser realizadas em um evento de mensagem ou comando de barra.

O texto da mensagem recebida é armazenado na variável padrão question, assim como em outros canais.


Eventos

Além de mensagens comuns, eventos de serviço também são enviados para o funil.

Seu texto é armazenado na variável question, para que você possa tratá-los usando condições de texto comuns.

discord_event Texto em question Quando Ocorre
message Texto da mensagem Um membro envia uma mensagem
message_edit Texto da mensagem atualizado Uma mensagem é editada
interaction /warn @user spam Um comando de barra é usado ou um botão é clicado
reaction_add new_like ❤️ uid413984787162726410 Uma reação é adicionada
reaction_remove reaction_remove ❤️ uid413984787162726410 Uma reação é removida
message_delete message_delete mid1465674569095319625 Uma mensagem é excluída
messages_delete_bulk messages_delete_bulk 12 Várias mensagens são excluídas
member_join member_join uid413984787162726410 Um membro entra no servidor
member_leave member_leave uid413984787162726410 Um membro sai do servidor
member_update member_update uid413984787162726410 O apelido ou cargos de um membro mudam
member_ban member_ban uid413984787162726410 Um membro é banido
member_unban member_unban uid413984787162726410 Um membro é desbanido

Para uma reação personalizada, o ID do emoji personalizado é usado em vez do próprio emoji:

new_like beer:1479419477396291696 uid413984787162726410

Consulte a seção Reações para obter detalhes.

Se um bloco deve ser acionado apenas para mensagens comuns enviadas por membros, adicione a seguinte condição:

discord_event == 'message'

Isso filtra todos os eventos de serviço de uma só vez.

Verificar apenas o texto do evento não é confiável porque um membro poderia enviar manualmente uma mensagem como member_join.

Importante: member_update é acionado por qualquer atualização de membro, incluindo um cargo atribuído pelo próprio bot. Um bloco que reage a member_update e atribui um cargo pode criar um loop, portanto, tais condições devem sempre ser restritas adequadamente.


Mensagens

Função Descrição
discord_send_message(channel_id, text) Enviar uma mensagem para qualquer canal
discord_send_dm(user_id, text) Enviar uma mensagem direta para um membro
discord_reply_to_message(message_id, text) Responder a uma mensagem
discord_edit_message(message_id, text) Editar uma mensagem enviada pelo bot
discord_delete_message(message_id) Excluir uma mensagem
discord_bulk_delete_messages(channel_id, message_ids) Excluir várias mensagens de uma só vez
discord_get_message(channel_id, message_id) Recuperar uma mensagem
discord_pin_message(message_id) Fixar uma mensagem
discord_unpin_message(message_id) Desafixar uma mensagem

Limitações do Discord: Não há limite de tempo para editar ou excluir suas próprias mensagens. A exclusão em massa funciona apenas para mensagens com menos de 14 dias e você pode excluir entre 2 e 100 mensagens por vez.


Reações

Função Descrição
discord_send_reaction(message_id, reaction) Adicionar uma reação
discord_delete_reaction(message_id, reaction, user_id) Remover uma reação. Se user_id for omitido, a reação do bot é removida

O parâmetro reaction aceita um emoji comum, como ❤️, ou o ID de um emoji personalizado do servidor.

Onde Obter um ID de Reação Personalizada

Adicione a reação personalizada necessária a qualquer mensagem no canal.

Um callback como este aparecerá no chat:

new_like beer:1479419477396291696 uid413984787162726410

Aqui:

beer:1479419477396291696

é o ID da reação.

Você pode copiá-lo e usá-lo em funções de reação:

#{discord_send_reaction(discord_message_id, 'beer:1479419477396291696')}

Emojis comuns aparecem nos callbacks como estão:

new_like ❤️ uid413984787162726410

onde uid413984787162726410 é o ID do membro que adicionou a reação.


Moderação

Função Descrição
discord_timeout_member(user_id, seconds) Colocar um membro em timeout pelo número especificado de segundos, até 28 dias
discord_remove_timeout(user_id) Remover um timeout antecipadamente
discord_kick_member(user_id) Expulsar um membro do servidor; ele pode retornar usando um convite
discord_ban_member(user_id, delete_message_seconds) Banir um membro; o segundo argumento especifica quantos segundos do histórico de mensagens excluir, até 7 dias
discord_unban_member(user_id) Desbanir um membro

O Discord não permite que o bot modere um membro cujo cargo seja superior ao cargo do bot. O proprietário do servidor também não pode ser moderado.


Cargos e Membros

Função Descrição
discord_add_role(user_id, role_id) Atribuir um cargo
discord_remove_role(user_id, role_id) Remover um cargo
discord_get_roles() Obter os cargos do servidor e seus IDs
discord_get_member(user_id) Obter dados do membro, incluindo apelido, cargos e data de entrada
discord_set_nickname(user_id, nickname) Alterar o apelido de um membro no servidor

O cargo do bot deve ser superior ao cargo que está atribuindo.

O cargo @everyone e cargos gerenciados por integrações, incluindo cargos pertencentes a outros bots, não podem ser atribuídos.


Canais e Tickets

Função Descrição
discord_create_channel(name, type, parent_id, permission_overwrites) Criar um canal
discord_delete_channel(channel_id) Excluir um canal
discord_set_channel_permission(channel_id, target_id, allow, deny, type) Permitir ou negar permissões de canal
discord_create_invite(channel_id, max_age, max_uses) Criar um link de convite
discord_get_invites() Obter os links de convite do servidor

Para discord_create_channel, o type padrão é:

Valor Tipo de Canal
0 Canal de texto
2 Canal de voz
4 Categoria

Você pode passar um ID de categoria em parent_id para criar o canal dentro dessa categoria.

Para discord_set_channel_permission, o último argumento especifica quem recebe as permissões:

Valor Alvo
1 Membro
0 Cargo

Os parâmetros allow e deny aceitam os seguintes valores:

Valor Permissão
1024 Ver canal
2048 Enviar mensagens
3072 Ver canal e enviar mensagens
65536 Ler histórico de mensagens

Para discord_create_invite, o tempo de vida do convite é especificado em segundos.

Por exemplo:

86400

significa 24 horas.

Um valor max_uses de 0 significa usos ilimitados.


Comandos de Barra

Função Descrição
discord_get_commands() Obter os comandos registrados no servidor
discord_set_commands(commands) Substituir todo o conjunto de comandos

discord_set_commands aceita uma lista de comandos:

#{discord_set_commands('[
  {
    "name": "rules",
    "description": "Mostrar regras do servidor"
  },
  {
    "name": "warn",
    "description": "Emitir um aviso",
    "options": [
      {
        "type": 6,
        "name": "user",
        "description": "Usuário",
        "required": true
      },
      {
        "type": 3,
        "name": "reason",
        "description": "Motivo",
        "required": false
      }
    ]
  }
]')}

Requisitos do Discord

  • name deve conter apenas caracteres minúsculos, sem espaços, e deve ter entre 1 e 32 caracteres.
  • description é obrigatório e deve ter entre 1 e 100 caracteres.
  • Opções obrigatórias devem aparecer antes das opções opcionais.
  • Passar uma lista vazia remove todos os comandos do bot do servidor.

Tipos de Opção

Tipo Descrição
3 String
4 Inteiro
5 Booleano
6 Membro
7 Canal
8 Cargo

Quando um comando é chamado, ele é enviado para o funil como uma string como:

/warn @user spam

Em outras palavras, o nome do comando e os valores das opções são separados por espaços.

Você pode tratá-lo usando uma condição de texto comum.

Uma função separada para botões não é necessária. Os botões são configurados em um bloco de resposta normal, e um clique no botão é recebido da mesma forma que um comando de barra: o valor do botão aparece no texto.


Pontos e Leaderboard

A integração com o Discord inclui um sistema de apreciação integrado. Pontos são concedidos ao autor da mensagem citada.

Você pode usá-lo para construir níveis, classificações e leaderboards.

Função Descrição
discord_add_thanks_score(valor) Adiciona pontos ao autor da mensagem citada
discord_add_thanks_score_for_answer(valor) Adiciona pontos ao membro que respondeu
discord_minus_thanks_score(valor) Remove pontos
discord_get_score(user_id) Retorna os pontos de um membro como um número. Sem argumento, usa o autor do evento
discord_get_level(user_id, pontos_por_nivel) Obtém o nível de um membro. Limite padrão: 100 pontos por nível
discord_get_user_info(user_id) Obtém pontos, posição no leaderboard e nome como um único objeto
discord_get_top(contagem, deslocamento, humanizar, delimitador) Obtém o leaderboard

Para discord_get_top:

  • contagem — número de linhas a retornar;
  • deslocamento — número de linhas a pular, útil para paginação;
  • humanizar=true — retorna texto pronto para exibição;
  • delimitador — separador entre o nome do membro e os pontos.

Ao comparar pontos em uma condição de bloco, use discord_get_score. Esta função retorna um número, então comparações numéricas funcionam conforme o esperado.


Exemplos

Boas-vindas a um Novo Membro via Mensagem Direta

Condição do bloco:

member_join

No campo Variáveis:

discord_send_dm(
    message_from,
    'Olá, #{from_name}! Confira as regras fixadas.'
)

Excluir uma Mensagem Contendo uma Palavra Proibida e Aplicar Timeout ao Membro por 24 Horas

Condição do bloco: uma lista de palavras proibidas.

Condição adicional:

is_admin != 1

Funções:

discord_delete_message(discord_message_id)

discord_timeout_member(message_from, 86400)

Atribuir um Cargo por uma Reação a uma Mensagem Específica

Condição do bloco:

new_like 🍕

Condição adicional:

contains(discord_message_id, '1534927170965602324')

Função:

discord_add_role(
    message_from,
    '1465674567090704592'
)

Criar um Canal de Ticket Privado a partir de um Botão

ticket = discord_create_channel(
    'ticket-' + from_username
)

ticket_channel = get(
    get(ticket, 'data'),
    'id'
)

discord_set_channel_permission(
    ticket_channel,
    guild_id,
    None,
    1024,
    0
)

discord_set_channel_permission(
    ticket_channel,
    message_from,
    3072,
    None,
    1
)

discord_send_message(
    ticket_channel,
    'Descreva seu problema em uma única mensagem.'
)

A primeira linha de permissão oculta o canal de todos (guild_id representa o cargo @everyone aqui).

A segunda linha torna o canal disponível para o membro que criou o ticket.


Conceder Pontos por Agradecimento e Atribuir um Cargo Baseado no Nível

Condição do bloco:

thanks;thx;thank you

Condição adicional:

reply_from != '' and reply_from != message_from and reply_to_bot != 1

Funções:

discord_add_thanks_score(1)

if (discord_get_level(reply_from) >= 1) {
    discord_add_role(
        reply_from,
        '1465674567090704592'
    )
}

A condição:

reply_from != message_from

impede que membros concedam pontos a si mesmos.

A condição:

reply_to_bot != 1

impede que pontos sejam concedidos ao bot.


Mostrar Seus Pontos com um Comando

Condição do bloco:

/xp

No campo Variáveis:

points = discord_get_score()

lvl = discord_get_level()

Texto de resposta:

#{from_name}, você tem #{points} XP · Nível #{lvl}

Mostrar o Leaderboard com um Comando

Condição do bloco:

/top

Texto de resposta:

🏆 Leaderboard de XP:

#{discord_get_top(10, 0, true, ' — ')}