Como estou fornecendo detalhes adicionais, estou escrevendo minha própria resposta com base no original (em vez de editá-lo).
Sim, existe uma maneira de fazer isso, mas esse método funciona apenas para o Facebook e o Messenger baseados na Web; você não pode fazer algo semelhante para os aplicativos móveis.
Basicamente, o Facebook usa solicitações programadas no servidor para verificar se o cliente ainda está disponível. Portanto, o front end (página da Web carregada do Facebook) enviará periodicamente uma solicitação HTTP ( XHR ) com o tempo ocioso para seus servidores.
Aqui está um exemplo dessa solicitação:
https://1-edge-chat.facebook.com/pull?channel=p_<UserID>&seq=0&partition=-2&clientid=18ae8ecc&cb=ie3k&idle=117&qp=y&cap=8&msgs_recv=0&uid=userid&viewer_uid=userid&msgr_region=FRC&state=offline
Nota: substituí o ID do usuário, que normalmente seria um número.
Se você ler o URL acima, verá a parte dizendo ocioso = 117 . Isso indica o número total de segundos que a conta ficou ociosa. O estado = offline significa se o chat está ativado ou desativado.
Portanto, para desativar isso, adicione a seguinte regra à lista personalizada de filtros do seu bloqueador de anúncios:
||*-edge-chat.facebook.com^$xmlhttprequest
Para desativar no Facebook e no Messenger, você pode adicionar as duas linhas a seguir:
||*-edge-chat.facebook.com^$xmlhttprequest
||*-edge-chat.messenger.com^$xmlhttprequest
Ou a única linha, usando regex :
/^https?\:\/\/\d+-edge-chat\.(facebook|messenger)\.com\/?/$xmlhttprequest
Algumas desvantagens deste método são que você não poderá receber mensagens em tempo real e não aparecerá on-line, mesmo se o bate-papo estiver ativado. Você precisará atualizar a página para receber novas mensagens.
Para evitar esses dois inconvenientes, aqui está uma solução alternativa. Você pode adicionar esta linha:
/^https?\:\/\/\d+-edge-chat\.facebook\.com\/pull\?.*state=offline/$xmlhttprequest
Ou adicione isso para o Facebook e o Messenger:
/^https?\:\/\/\d+-edge-chat\.(facebook|messenger)\.com\/pull\?.*state=offline/$xmlhttprequest
O resultado final disso será o seguinte:
- Quando seu bate-papo estiver desativado, você não aparecerá online, sua última atividade não será relatada e você não poderá receber mensagens em tempo real.
- Quando seu bate-papo estiver ativado, você aparecerá on-line, sua última atividade será relatada e você poderá receber mensagens em tempo real.
Infelizmente, parece não haver outra solução, já que o front end do Facebook pode buscar mensagens apenas quando o cliente relata periodicamente que está ativo, portanto, a busca é feita depois que a última atividade é relatada. Ambas as ações são possíveis por um único script de backend ( * -edge-chat.facebook.com / pull ), através da mesma solicitação; portanto, você não pode ter um sem o outro.