Se você esteve no Internet Relay Chat (IRC), é provável que tenha encontrado um bot em algum momento. Bots são programas ou scripts independentes que se conectam a uma rede da mesma forma que um ser humano o faria. Eles podem ser programados para responder aos comandos do usuário ou até mesmo para bate-papo. Neste guia, você pode descobrir quais são suas opções para construir um bot IRC e também como construir um do zero.
Passos
Método 1 de 2: Opções de avaliação
Etapa 1. Considere a instalação de um script de cliente
Às vezes, você quer apenas uma tarefa simples e não quer que seja um programa independente. Nesse caso, você pode anexar um script a um cliente IRC. Isso é muito comum de fazer com o mIRC, que tem um mecanismo de script robusto e uma ampla variedade de scripts disponíveis. Esta é a opção mais fácil e altamente recomendada se você não tem muita ou nenhuma experiência em programação. Para o restante deste guia, as instruções requerem algum conhecimento de programação de computador para serem seguidas.
Etapa 2. Considere uma base de código pré-existente para o seu bot
Existem muitos programas de código aberto e gratuitos que podem ajudá-lo a configurar seu próprio bot personalizado rapidamente. Um exemplo é o Eggdrop, o bot IRC mais antigo ainda em manutenção.
Etapa 3. Considere escrever seu próprio bot
Para usuários avançados de IRC e desenvolvedores que já conhecem uma linguagem de programação, esta é uma ótima opção. Você pode usar praticamente qualquer linguagem que desejar, desde que tenha suporte a soquetes, mas as mais populares incluem Python, Lua, PHP, C e Perl. Se você não conhece nenhum desses, mas conhece outro idioma, não há problema. Normalmente, você pode encontrar exemplos na web em qualquer idioma que desejar. Para este artigo, vamos demonstrar o uso de PHP. Para usar o PHP, você precisa ter o PHP-CLI instalado em seu computador ou servidor.
- PHP pode ser baixado de php.net
- Os scripts PHP podem ser executados na linha de comando. Para obter informações adicionais e ajuda sobre como usar o PHP, consulte esta página de manual do PHP.
Método 2 de 2: desenvolvendo seu próprio bot
Etapa 1. Reúna os detalhes da conexão
Você precisará obter as seguintes informações para se conectar à rede com êxito.
-
Servidor: O nome de domínio do servidor usado para se conectar ao IRC, como
chat.freenode.net
- Porta: Na maioria dos casos, é 6667, mas se você não tiver certeza, verifique seu próprio cliente de IRC ou o site da rede.
- Apelido: O apelido que seu bot deve usar. Lembre-se de que alguns caracteres especiais geralmente não são permitidos (@ #! ~).
-
Ident: O campo ident aparece após o apelido quando alguém realiza um WHOIS como este:
apelido! ident @ nome do host
- GECOS: Este campo normalmente contém o nome real do usuário ou uma descrição geral do bot, mas você pode colocar o que quiser lá.
- Canal: Normalmente, você deseja que seu bot esteja presente em um ou mais canais. Na maioria das redes, eles são prefixados com '#', mas pode ser outra coisa.
Etapa 2. Inicialize a configuração em seu script
A maneira mais básica de fazer isso é nomear algumas variáveis de acordo com os nomes de configuração acima. Você também pode armazená-los em um arquivo de configuração e analisá-los, mas por enquanto vamos apenas nos ater às necessidades absolutas.
Etapa 3. Conecte-se à rede
Para fazer isso, você precisará abrir um soquete para o servidor na porta especificada. Você também deve adicionar algum código de tratamento de erros nesta parte, caso a conexão falhe por qualquer motivo. Nesse caso, o PHP nos fornece algumas funções interessantes para lidar com o erro de forma eficaz.
Etapa 4. Registre seu bot
Isso significa fornecer seu apelido, ident e GECOS ao servidor, não se registrar no NickServ. Para fazer isso, basta escrever os comandos NICK e USER no servidor, seguidos por um retorno de carro e nova linha. É imperativo que você faça exatamente como mostrado, porque é assim que está especificado no RFC1459, a especificação para o protocolo IRC.
Observe que os dois parâmetros intermediários (neste caso, * e 8) devem ser especificados, mas são ignorados pelo servidor. Esses dois são usados apenas entre servidores vinculados, não por um cliente conectado diretamente
Etapa 5. Continue buscando dados do soquete usando um loop
Se você não usasse um loop, seu script seria encerrado imediatamente e o bot seria basicamente inútil. Para permanecer conectado, você deve buscar dados do servidor, verificar se há alguma entrada no fluxo que você deseja e responder a ela se for o caso. Aqui, estamos pegando dados usando socket_read () para pegar quaisquer dados disponíveis para nós. Se houver, continuamos fazendo tudo o que está no circuito. Também pode ser útil enviar os dados brutos para o console para que você possa ver o que está acontecendo da perspectiva do bot.
Etapa 6. Escreva um manipulador de ping
Isso é importante. Se você não responder aos pings em tempo hábil, o servidor o desconectará. Vamos cuidar disso primeiro. Os pings têm esta aparência quando enviados do servidor:
PING: rajaniemi.freenode.net
. O servidor não precisa colocar seu nome depois de ':', ele pode fornecer o que quiser. Você * deve * repetir exatamente o que o servidor disse, exceto usando PONG.
Etapa 7. Junte-se aos seus canais
Ok, então temos um bot que se conecta à rede e responde aos pings, mas de outra forma não faz nada. Para que as pessoas vejam e usem seu bot, ele deve estar em um canal (caso contrário, você teria que dizer a ele para responder a mensagens privadas).
- Para fazer isso, verificaremos os códigos de status do servidor 376 ou 422. 376 significa que o MOTD (mensagem do dia) terminou. 422 significa que não havia nenhum MOTD para enviar. Esse MOTD é apenas algo que o servidor envia quando você se conecta, mas é um bom indicador de quando podemos começar a entrar nos canais.
- Você precisará emitir um comando JOIN. Este comando pode ser seguido por um ou mais canais separados por uma vírgula.
- Observe que os dados que o servidor envia são convenientemente delimitados por espaços. Dessa forma, podemos dividir os dados e referenciá-los usando um índice de array.
Etapa 8. Responda às mensagens do canal
Agora a parte divertida. Seu bot entrou no canal, então agora você pode usá-lo para o que deseja. Vamos criar um comando de exemplo chamado @moo.
- Observe o deslocamento onde as mensagens começam (isso se aplica a canais e mensagens privadas). Está sempre no mesmo lugar.
- Você pode manipular comandos com espaços, juntando os dados fragmentados novamente ($ d). Isso está além do escopo deste artigo.
- Se o alvo for um canal (como # botters-test), você responde a isso. Se for uma mensagem privada, este bit será o apelido do seu bot! Você deve então responder usando o apelido do remetente, não o seu (caso contrário, você estaria falando sozinho, e isso é bobagem).
Etapa 9. Estenda seu bot
Você pode adicionar muitos novos recursos usando a implementação acima. Existem muitos outros comandos que podem ser emitidos para a rede IRC, como gerenciar operações, chutar e banir, definir o tópico, entre muitos outros recursos.
Pontas
-
Você pode produzir o resultado do comando "/ me" prefixando suas mensagens da seguinte forma:
- PRIVMSG #canal: / 001Texto ACTION aqui / 001.
-
001 significa caractere ASCII 1 e será interpretado como tal em uma string PHP entre aspas duplas. Alternativamente, você pode usar
chr (1)
- fora da corda.
- As cores podem ser produzidas em uma mensagem prefixando "\ 003" (código ASCII 3) seguido por um número para uma cor. 0 = branco, 1 = preto, 2 = azul, 3 = verde, 4 = vermelho […]. Veja a página do mIRC para mais cores.
- Por uma questão de cortesia, obtenha o consentimento dos proprietários do canal e dos operadores de IRC antes de colocar seu bot online. Nem todas as redes e canais têm uma política de boas-vindas para bots, mesmo os bem comportados.
- Alguns daemons IRC vão além das especificações do protocolo e implementam outros recursos. Se você estiver se preparando para uma rede específica, certamente poderá usar esses recursos se conhecer o protocolo deles. Se você deseja que seu bot seja implantado em várias redes, no entanto, tente mantê-lo conforme o que está na RFC.