Alchimista

O regresso do Aleph Bot

Alchimista - Friday, June 9, 2017

Bot Sketch Eric Benacek

Nota: este post foi publicado originalmente em https://bitsebots.blogs.sapo.pt/o-regresso-do-aleph-bot-4880

Após uma paragem que durou anos, o Aleph Bot, o bot anti-vandalismo que faz companhia ao Salebot regressa ao activo.

O Aleph_Bot começou a operar em 2010, tendo como base o código do AVBOT, um robô desenvolvido por Emijrp, um editor da Wikipédia em Espanhol, e era precisamente por lá que operava. Tratava-se de um código extremamente interessante, onde, em comparação com o do Salebot:Salebot), outro robô anti-vandalismo que opera na pt.wp, trazia inovações como a diferenciação do tipo de edição - edição de testes, vandalismo ou branqueio de página, avisos específicos para o tipo de edição, assim como o reportar de utilizadores que apesar dos avisos reincidem nas edições.

Apesar de no início a adaptação à wikipédia Lusófona ter corrido a bom ritmo, a verdade é as especificidades da wikipédia em língua espanhola estavam embutidas no código, não separadas em variáveis, e se é verdade que houve uma tentativa de reescrever essas especificidades em variáveis localizáveis, com o passar do tempo o código do Aleph foi divergindo da versão original cada vez mais, até ficar complicada a sua manutenção, e deu-se a inevitável depreciação.

A ideia de criar um novo código surgiu ainda o Aleph estava ao serviço, aproveitando as ideias do AVBOT mas num código mais flexível, e onde as variáveis de configuração estivessem o mais longe possível do código, permitindo mais flexibilidade, e ao mesmo tempo, que o código pude-se ser usado noutros projectos. A primeira tentativa deu-se com o python 2.7, assentando no Twisted), e indo buscar as mudanças recentes ao irc. Foram bons tempos, mas ao mesmo tempo momentos frustrantes, com imensos UnicodeDecodeError a saltitar por tudo o que era canto. Aliado a isto, noticias de uma possível depreciação do servido de mudanças recentes no irc deixaram-me relutante em continuar por um caminho que poderia estar condenado, então a certo ponto decidi aguardar, e o Aleph caiu na penumbra.

Uns tempos mais tarde, decidi voltar à carga, desta vez começando do zero, e já com o python 3. E que diferença tremenda. Por muitas discussões em redor da questão py3/py2, a verdade é que especialmente para trabalhar com artigos da wikipédia, o py3 é uma enorme lufada de ar fresco, tirando, é claro, o caso particular das predefinições do wikitexto, onde chego a ter pérolas como esta: "{{{{Subst:{0}{3}.css|{1}|{2}|{3}}}}}".format(msg, ptitle, oldid, aleph_warns, bv)

Se o irc já tinha recuperado o seu estatuto de intocável, o RCStream apresentava-se como uma excelente alternativa, até porque fornecia mais informação do que o irc, e de uma forma mais estruturada, então o código que estava a nascer foi adaptado para usar este novo sistema. Infelizmente teve um tempo de vida curto, porque pouco depois de começar a usa-lo, foi depreciado em favor do EventStreams. Neste caso, a modificação não foi muito custosa.

Como é óbvio, a parte mais custosa de todo o processo é determinar se uma edição deve ou não ser revertida, e como o bot tenta fazer a distinção entre edições de teste ou vandalismos óbvios, as complicações aumentam. Na implementação actual, que espero vir a descrever mais pormenorizadamente no futuro, há uma contabilização das expressões problemáticas que ocorrem nas linhas adicionadas e removidas, e após o saldo entre as duas, contabiliza-se a pontuação. No final, todas as expressões encontradas dão origem a uma pré-classificação do género {'T': -12, 'G': 2, 'V': 0}. Com esta classificação, o passo seguinte é determinar a classificação da edição e o seu valor, entrando então um sistema de análise de pontuação. De uma forma simples, se a pontuação de vandalismo ou teste é inferior a um valor definido, a edição é classificada como tal, se for superior ao limite definido, é classificada como boa, e se ficar entre um intervalo definido como limbo, tenta usar o ORES ( um sistema de inteligência artificial), para verificar se a edição deve ser revertida.

No caso de reversão, ocorre ainda a verificação se o penúltimo editor não é o bot, ou o Salebot, a fim de evitar guerras de edições, a reversão e a posterior notificação. Ao enviar a notificação, o bot verifica se existem mais avisos, e futuramente será implementado um sistema de notificação na wiki quando se verifica que há um utilizador já com inúmeros avisos. Na verdade, a partir do momento em que o código estabiliza e os bugs com o core code do bot desaparecem, a ideia é implementar um sistema de notificações na wiki de situações que convém análise humana, nomeadamente os tais editores com muitos avisos, ou edições do bot revertidas. Na prática, o Aleph é eternamente um projecto em curso.

Paralelamente ao desenvolvimento do código em si, há um painel de controlo em desenvolvimento em https://tools.wmflabs.org/aleph/. Recorrendo ao OAuth, é possível utilizadores da wikipédia autenticarem-se, e no caso de serem administradores, conseguem parar o Aleph. Há alguns dados sobre o estado do script no grid engine, que por agora apenas são despejados sem grande tratamento, mas o plano é que a partir desse painel se tenha acesso às análises do bot, assim como controlar alguns dos seus parâmetros.