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:
- Apelido do servidor, se definido.
- Nome de exibição da conta.
- 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 amember_updatee 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
-
namedeve 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, ' — ')}