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.
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
- 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. - 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. - 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, usechannel.messages.fetch({ cache: true, limit: 100 })dentro do eventothreadUpdate, verificando seoldThread.archived === true && newThread.archived === false. Isso garante que o bot carregue todo o histórico de mensagens. - 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. - 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.
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.