Por que bots do Discord perdem contexto em threads após arquivamento automático
🔍 WiseChecker

Por que bots do Discord perdem contexto em threads após arquivamento automático

Quando um bot do Discord cria uma thread, ela armazena todas as mensagens em uma ordem específica. Após o arquivamento automático por inatividade, o bot pode perder acesso a mensagens anteriores ou não responder corretamente a novas mensagens. Isso acontece porque o Discord move threads arquivadas para um estado diferente, onde as permissões do bot e a busca de mensagens se comportam de forma distinta. Este artigo explica a causa técnica dessa perda de contexto e fornece correções passo a passo para restaurar a funcionalidade do bot.

Principais conclusões: Corrigindo o contexto de threads do bot após arquivamento automático

  • Configuração da duração do arquivamento automático: Ajuste o temporizador de arquivamento automático para evitar arquivamento prematuro e perda de contexto.
  • Permissões do bot no canal: Garanta que o bot tenha permissões de “Ver Canal” e “Ler Histórico de Mensagens” para todos os canais pai das threads.
  • Lógica do código do bot para threads arquivadas: Atualize seu bot para buscar explicitamente mensagens de threads arquivadas usando o endpoint correto da API.

ADVERTISEMENT

Por que bots do Discord perdem contexto quando threads são arquivadas automaticamente

As threads do Discord foram projetadas para reduzir a desorganização do canal. Quando uma thread fica inativa por um período definido (duração do arquivamento automático), o Discord a arquiva automaticamente. O arquivamento move a thread para um estado “bloqueado”, onde novas mensagens não podem ser postadas e mensagens antigas não são carregadas por padrão.

Para bots, duas mudanças críticas ocorrem durante o arquivamento:

1. O bot não recebe automaticamente atualizações da thread

Quando uma thread é arquivada, o Discord para de enviar eventos em tempo real (como MESSAGE_CREATE) para essa thread, a menos que o bot tenha a intent message_content e a permissão read_message_history. O bot deve solicitar explicitamente as mensagens da thread novamente após ela ser desarquivada.

2. O cache de mensagens é limpo

A maioria dos bots armazena mensagens em um cache temporário para desempenho. Quando a thread é arquivada, o bot pode limpar esse cache para liberar memória. Quando a thread é posteriormente desarquivada (por um usuário enviando uma mensagem), o bot vê apenas a nova mensagem e não tem contexto das anteriores, a menos que as busque novamente.

3. As permissões do bot podem ser revogadas

Se as permissões da função do bot não forem definidas explicitamente para o canal pai, o arquivamento pode fazer com que o bot perca o acesso. O sistema de permissões do Discord pode tratar threads arquivadas como entidades separadas com suas próprias substituições de permissão, mas o padrão herda do canal pai. Se o canal pai não tiver as permissões necessárias, o bot não poderá ler mensagens de threads arquivadas.

Passos para restaurar o contexto da thread do bot após arquivamento automático

  1. Ajuste a duração do arquivamento automático
    Nas configurações do canal, defina uma duração maior para o arquivamento automático de threads. Vá para Configurações do Servidor > Canais > [Selecionar Canal] > Threads. Altere a duração padrão do arquivamento automático para 24 horas ou 3 dias. Isso evita que as threads sejam arquivadas muito rapidamente durante interações do bot.
  2. Conceda as permissões corretas ao bot
    Certifique-se de que o bot tenha as permissões Ver Canal, Ler Histórico de Mensagens e Gerenciar Threads no canal pai. Vá para Configurações do Servidor > Funções > [Função do Bot] > Permissões e ative essas três permissões. Sem Ler Histórico de Mensagens, o bot não pode buscar mensagens de uma thread arquivada.
  3. Atualize o código do bot para buscar mensagens de threads arquivadas
    Modifique o código do seu bot para buscar explicitamente mensagens quando uma thread for desarquivada. No Discord.js, use channel.messages.fetch({ cache: true, limit: 100 }) dentro do evento threadUpdate, verificando se oldThread.archived === true && newThread.archived === false. Isso garante que o bot carregue todo o histórico de mensagens.
  4. Ative a Intent de Conteúdo de Mensagem
    No Portal do Desenvolvedor do Discord, vá para a seção Bot do seu aplicativo e ative a Intent de Conteúdo de Mensagem. Isso é necessário para que bots leiam o conteúdo das mensagens em threads, mesmo após o arquivamento. Sem essa intent, o bot pode ver apenas mensagens vazias.
  5. Teste a correção
    Crie uma thread de teste, faça o bot enviar uma mensagem, aguarde o arquivamento automático (ou arquive manualmente), depois peça a um usuário para desarquivar a thread enviando uma nova mensagem. Verifique se o bot responde com o contexto completo. Se não, verifique o console do bot em busca de erros de permissão.

ADVERTISEMENT

Se as threads do bot do Discord ainda perderem contexto após a correção principal

O bot não responde após a thread ser desarquivada

Isso geralmente significa que o bot não está ouvindo o evento THREAD_UPDATE. Adicione um listener de evento para threadUpdate no código do seu bot. Quando a thread for desarquivada, o evento é disparado com oldThread.archived === true e newThread.archived === false. Dentro desse evento, chame o método de busca de mensagens.

O bot busca mensagens, mas retorna um array vazio

Isso indica um problema de permissão. Verifique novamente se a função do bot tem a permissão Ler Histórico de Mensagens no canal pai. Verifique também se o bot é membro do servidor e não foi expulso ou banido. Se o bot usar comandos de barra, certifique-se de que o comando está registrado globalmente.

O bot perde contexto após mudanças no nível de boost do servidor

Os níveis de boost do servidor afetam a duração máxima do arquivamento automático. Se o nível de boost do seu servidor cair, as threads podem arquivar mais rápido do que o esperado. Monitore o nível de boost do seu servidor e ajuste a duração do arquivamento automático nas configurações do canal.

Opções de duração do arquivamento automático de threads do Discord

Item Servidor Padrão Servidor Boostado (Nível 1+)
Opções de duração do arquivamento automático 1 hora, 24 horas, 3 dias 1 hora, 24 horas, 3 dias, 7 dias
Duração padrão 24 horas 24 horas
Duração máxima 3 dias 7 dias
Risco de perda de contexto Alto se o código do bot não for atualizado Menor devido à duração mais longa

As threads de bots do Discord perdem contexto após o arquivamento automático porque o bot precisa buscar mensagens explicitamente e ter as permissões corretas. Ao definir uma duração maior de arquivamento automático, conceder a permissão Ler Histórico de Mensagens e atualizar o código do bot para buscar mensagens ao desarquivar, você pode manter o contexto completo. Em seguida, teste seu bot com um ciclo manual de arquivamento e desarquivamento para confirmar que tudo funciona. Para configurações avançadas, considere armazenar IDs de mensagens da thread em um banco de dados para que o bot possa recarregar o contexto mesmo se o cache for limpo.

ADVERTISEMENT