Ferramentas de Utilizador

Ferramentas de Site


dev_geral:tcl_para_eggdrops

TCL para Eggdrops

TCL (Tool Command Language) é uma linguagem de programação, criada por John Ousterout em 1988. Esta linguagem é usada para scripts de CGI e para os scripts de Eggdrops, que irá ser abordado mais tarde. A sintax tem afinidades com C e Tcl é open source, ou seja, pode correr em diferentes plataformas, como Linux (e outros sistemas operacionais UNIX-like), Microsoft Windows e Mac OS X. Para Linux basta compilar e instalar o código fonte disponível no site oficial (http://www.tcl.tk).

Definição de eggdrop

Eggdrop é um robot/bot para IRC, que normalmente fica alojado em um sistema Linux conectado 24 horas por dia, 7 dias por semana. Os Eggdrops são usados para o controlo de canais no IRC porque como nunca ou raramente é desconectado da rede de IRC, nunca perde o estado de operador. Os Eggdrops são os bots de IRC, mais populares do mundo. Como exemplo de Eggdrops na Quakenet pode ser o bot anti-spam, S.

Essencial sobre a linguagem

Todos os scripts de TCL têm como extensão .tcl e podem ser editados em qualquer editor de texto como o bloco de notas, Wordpad, gedit ou notepad++. Aconselha-se vivamente estes dois últimos porque reconhecem a sintax e estrutura de TCL, e torna-se mais fácil fazer análise e possível correcção do código. TCL também permite comentários que podem ser usados da seguinte forma:

#ISTO É UM COMENTÁRIO EM TCL

Tcl é uma linguagem baseada em comandos. Exemplo de comandos (os comandos de exemplo abaixo referidos, serão explicados detalhadamente, nos exemplos de scripts), são:

  • Proc – Comando para criar um novo procedure ou função;
  • Bind - Comando para associar um comando/atalho à função;
  • Putlog – Insere uma linha no registo do Eggdrop.

Como em todas as linguagens de programação, é necessário definir variáveis, mas em TCL não é necessário declara-las nem o tipo, nem o seu valor, simplesmente se definem da seguinte maneira:

Set variável valor
#exemplo de definir a variável mensagem.
Set mensagem “ola eu sou um bot”

Exemplo de um array:

Set array(nome) valor
#exemplo de definir o array fruta.
Set fruta(maça) “verde”
Set fruta(banana) “amarela”
Set fruta(uvas) “pretas”

Existem também variáveis/arrays globais que estão definidos fora das funções, como por exemplo:

Set mesagem “ola eu sou um bot”
Proc msg_helloworld {nick uhost hand arg} {
}

No que diz respeito à especialização do TCL para scripts de Eggdrop, existem alguns comandos que têm que ser clarificados, que são utilizados para a comunicação do Eggdrop, (nesta secção convém que o programador tenha algum conhecimento de comandos do programa mIRC ex: /msg, /mode, /notice, etc) que são os seguintes:

  • Puthelp – Envia mensagens para o servidor IRC, prevenindo o Eggdrop de ser desconectado por flood, comando recomendado por prevenir que o Eggdrop seja desconectado por flood.
  • Putserv - Envia mensagens para o servidor IRC, não prevenindo o Eggdrop de ser desconectado por flood, pela razão que não previne o Eggdrop de ser desconectado por flood, este comando não recomendado.
  • PRIVMSG – Envia uma mensagem para alguém ou para um canal, este comando é similar ao /msg no mIRC.

Estes três comandos, são os mais importantes para se programar scripts para Eggdrops, porque sem eles não há interacção com o servidor, logo não há interacção com os utilizadores das redes de IRC.

Símbolos especiais para programação dos scripts

$ - Substituição de variável. [] – Substituição de sub-comando. “” – Grupo de palavras com substituição de variáveis. {} - Grupo de palavras sem substituição de variáveis. Existem outros, mas não interessam para os scripts, por isso, não vão ser abordados.

Símbolos matemáticos

Igual a qualquer outra linguagem (+,-,*,/)

PROCEDIMENTOS

As funções(proc) em TCL para Eggdrops seguem a seguinte estrutura:

Proc <Nome da função> {<variáveis a passar para a função>} {
#comandos para a função
}

No caso dos Eggdrops, nos procs, as variáveis a passar são: nick hand uhost chan arg

  • nick refere-se ao nickname da pessoa que executou o comando na rede IRC;
  • hand é o nome da pessoa na lista privilegiada do Eggdrop, se existir;
  • uhost refere-se à mask utilizada pelo utilizador na rede IRC, chan refere-se ao canal aonde o comando foi executado;
  • arg refere-se aos argumentos que são passados pelo utilizador na rede IRC, através do comando executado

BINDS

Os binds de funções, obedecem a esta ordem que é:

Bind <tipo de comando (type)> <permissões sobre o comando (flags)> <comando (command)> <função a chamar (proc)>

Como existem funções, têm que ser criados atalhos para se poder chamar as funções. Esses atalhos podem ser de vários tipos que podem ser utilizados em canais, nesse caso o bind é do tipo pub. Podem ser utilizados na janela privada do Eggdrop, nesse caso o bind é do tipo msg. Existem muitos mais, por exemplo, detectar se alguém entrou ou saiu do canal, se foi banido, etc. Mas para mais informações detalhadas, é aconselhável a leitura do link (Flags do Eggdrop), que vai ser facultado, no fim do artigo. Os binds de Eggdrop, têm que obedecer a permissões, que definem os utilizadores que têm acesso aos comandos. As principais permissões(flags), que estão por ordem decrescente de poder, são:

  • n (owner) – Este nível de acesso é o mais alto de todos, garante acesso aos comandos dos owner, master, op, halfop & voice. É um comando a nível global do Eggdrop.
  • N (manager) – Este nível é o mais alto que se pode ter num canal, garantindo acesso aos comandos de X, ChanServ, manager, owner, master, op, halfop & voice. É um comando a nivel global dos canais.
  • m (master) – Garante acesso aos comandos de master, op, halfop & voice commands. É um comando a nível global dos canais.
  • - (todos os utilizadores) – Garante acesso a todos os utilizadores sem excepções. É um comando a nível global dos canais.
  • Existem muitos mais, mas só foram abordados os mais importantes.

Comandos Vários

Comando If

If {[string match –nocase “<o que supostamente deve ser>$variavel_a_comparar]} {
#Comandos
} else {
#Comandos
}

Comando While

Set inicio 1
While { Condições ou [condições] } {
#comandos
}

Comando foreach

Foreach { Condições ou [condições] } {
#COMANDOS
}

Primeiro Script

Abrir um editor de texto, dos que foi referido no inicio do artigo, e começa-se por criar um bind que se vai chamar !ola e que vamos permitir para todos os utilizadores (representado por -) e a sua função/procedimento(pub:ola), vai enviar uma mensagem privada e uma mensagem para o canal, a saudar o utilizador que entrou no canal e escreveu !ola e que desta forma despoletou o comando.

#BINDS
Bind pub - !ola pub:ola
#PROCS
Proc pub:ola { nick hand uhost chan arg } {
Puthelp “PRIVMSG $nick :”Olá $nick!”
Puthelp “PRIVMSG $chan:”Olá, bem-vindo $nick! Esperamos que goste da sua estadia no $chan}
Putlog “Primeiro.tcl carregado! :)

Explicando: Bind pub - !ola pub:olá – Cria um bind/atalho para a função. Proc pub:ola { nick hand uhost chan arg } { - Cria a função com as variáveis. Puthelp “PRIVMSG $nick :”Olá $nick!” – Envia uma mensagem para o servidor para enviar uma mensagem para o $nick que é igual ao utilizador que despoletou o comando. Puthelp “PRIVMSG $chan:”Olá, bem-vindo $nick! Esperamos que goste da sua estadia no $chan” - Envia uma mensagem para o servidor para enviar uma mensagem para o $chan que é igual ao canal em que o comando foi despoletado. Putlog “Primeiro.tcl carregado! :)” - Insere entrada no log, para certificar que foi carregado. Guardar com o nome: primeiro.tcl e fazer por na pasta do eggdrop: /home/user/eggdrop/scripts/ e depois editar o ficheiro: eggdrop.conf e adicionar a linha: source scripts/primeiro.tcl e guardar. Se o eggdrop estiver a ser executado, deverá ligar-se por DCC Chat ou Telnet e quando entrar na partyline escreva: .rehash , caso não esteja, é hora para o executar. Quando o .rehash estiver concluído ou o bot totalmente carregado, poderá testar o seu primeiro script.

Segundo Script

Editem o ficheiro primeiro.tcl ou criem um novo. O bind vai-se chamar !entrei e a sua função vai ser saudar um utilizador quando despoletar o comando num canal especificado pelo programador.

#VARS
Set canal “#exemplo”
# o canal poderá ser mudado, para o canal à escolha.
#BINDS
Bind pub - !entrei pub:entrei
#PROCS
Proc pub:entrei { nick hand uhost chan arg } {
Global canal
If {[string match –nocase $canal $chan]} {
PUTHELP “privmsg $chan :Olá $nick, você está no canal $chan.”
} else {
PUTHELP “NOTICE $user :Não está no canal correcto.”
}
}

Ali vê-se um comando novo, que é o global. Este comando serve para tornar úteis variáveis que estão fora do proc, como é o caso da variável $canal. If {[string match –nocase $canal $chan]} { - Verifica se o canal em que foi executado o comando, é o canal que está na variável, para verificar se pode executar o comando ou não. PUTHELP “NOTICE $user :Não está no canal correcto.” - Aqui a única coisa que poderá ser nova, é o NOTICE, no NOTICE a única coisa que difere, é a maneira como a mensagem, é entregue ao utilizador, com o NOTICE, não é aberta nenhuma janela, no utilizador, como no PRIVMSG já é aberta. Vamos guardar o ficheiro .tcl e depois vamos á sessão de DCC Chat ou Telnet e vamos fazer .rehash ao Eggdrop, para que ele possa “aprender” os novos comandos. Depois do processo de .rehash poderá testar o novo comando no canal que programou no ficheiro .tcl.

Ligação a base de dados

É possível a interacção do Eggdrop, com motores de base de dados, principalmente com os mais conhecidos: MySQL, Oracle, etc. Isto é possível através de módulos compilados para serem utilizados com Eggdrop. Para MySQL o módulo que aconselho é o MySQL Mod, que está disponível para download gratuitamente (http://barkerjr.net/irc/eggdrop/modules/) Este módulo é simples de trabalhar e de compreender as suas funções, fazendo tudo que é preciso de uma maneira fácil.

Ligações Externas

Autoria

Este artigo foi originalmente escrito por Ivo Santos para a 15ª Edição da Revista PROGRAMAR

dev_geral/tcl_para_eggdrops.txt · Esta página foi modificada pela última vez em: 2018/05/14 21:37 (Edição externa)