Confesso que este codigo deu um bocado de trabalho, pela sua dimensão e pelo facto de ter sido a primeira vez que fiz um sistema de learn. Eu adicionei funcionalidades a este sistema que nunca vi noutros codigos, por isso espero que gostem
Funcao: O Sistema de Learn com niveis permite adicionar, remover, editar palavras com as respectivas definicoes, mas permite tambem administrar o proprio sistema, e possui um sistema de niveis incorporado. Explicarei já já como funciona.
Os Niveis: Muitas vezes sentimos a necessidade de inserir mais que um sistema de learn no bot, porque ha palavras/definicoes às quais, nem todos podem aceder. Por isso mesmo, o sistema de niveis. Ao adicionar a palavra, poderá ser definido o nivel de acesso da mesma, e só utilizadores com nivel igual ou superior a esse, conseguem ver as definicoes.
Nota: Este sistema possui uma série de comandos para administradores do sistema, sendo possivel fazer alteracoes sem ser necessario alterar a estrutura do code.
COMANDOS: (Default)Administracao do Sistema:
!adm-learn helpAdicionar/Remover/Editar Palavras/Definicoes:
!learn helpVer Definicoes:
?? palavraProcurar Palavras:
** palavraIMPORTANTE: Depois de adicionar o codigo ao seu bot, deverá fazer NO BOT:
//writeini $learnconf users <SEU-NICK> 15Código:
;============= Data Bases ==================
alias learn { return learnbd.ini }
alias learnconf { return learnconf.ini }
;===========================================
;============= Admin Conf ===================
alias _prefixo {
if (!$readini($learnconf, conf, prefixolearn)) {
return !
}
else {
return $readini($learnconf, conf, prefixolearn)
}
}
alias limitedefs {
if (!$readini($learnconf, conf, limitedefs)) {
return 6
}
else {
return $readini($learnconf, conf, limitedefs)
}
}
alias _verprefixo {
if (!$readini($learnconf, conf, prefixoshow)) {
return ??
}
else {
return $readini($learnconf, conf, prefixoshow)
}
}
;===========================================
;============= Mensagens ===================
alias erromaior { return (Erro) A Base de dados nao está sequer criada ainda. }
alias _erronada { return (Erro) Não indicou nenhuma palavra. }
alias _erroacesso { return (Erro) Não tem acesso. }
alias _errosuspenso { return (Erro) Não pode utilizar o sistema de Learn, por estar suspenso do mesmo. }
alias _erroajuda { return (Erro) Faça: $_prefixo $+ learn help }
alias _erroladd { return (Erro) Sintaxe correcta: $_prefixo $+ learn ADD [Nivel-Acesso] <Palavra> <Definicao> }
alias _erro0rep { return (Erro) Sintaxe correcta: $_prefixo $+ learn REP <Palavra> <Nº-da-Definicao> <Nova-Definicao> }
alias _errodel { return (Erro) Sintaxe correcta: $_prefixo $+ learn DEL <Palavra> [Nº-da-Definicao] }
alias _erro2 { return (Erro) Essa Palavra nao existe na Base de Dados. }
alias _errosearchnothing { return (Erro) Nao indicou nada para procurar. }
alias _erro3rep { return (Erro) Não existe a definição que pretendia corrigir. }
alias _erro4del { return (Erro) Não existe a definição que pretendia Apagar. }
alias _errorepaccess { return (Erro) Sintaxe correcta: $_prefixo $+ learn REPACCESS <Palavra> <Nivel-Acesso> }
;===========================================
;============== Funcoes ====================
alias issuspended {
var %s = 1
var %f = 0
while (%s <= $ini($learnconf,suspend,0)) {
if ($1 == $ini($learnconf,suspend,%s)) {
inc %f
}
inc %s
}
if (%f > 0) {
return $true
}
else {
return $false
}
}
alias started {
if ($exists($learn) && $exists($learnconf)) {
return $true
}
else {
return $false
}
}
alias _novapalavra {
if (!$1) {
return $null
}
else {
return (Sucesso) Nova Palavra Criada ( $1 )
}
}
alias _delpalavra {
if (!$1) {
return $null
}
else {
return (Sucesso) Palavra ( $1 ) apagada.
}
}
alias _novadef {
if (!$1 || !$2) {
return $null
}
else {
return (Sucesso) Definicao ( $1 ) da palavra ( $2 ) Adicionada.
}
}
alias _repaccess {
if (!$1 && !$2) {
return $null
}
else {
return (Sucesso) Acesso da palavra ( $1 ) alterado para: $2
}
}
alias _delpalavrade {
if (!$1 || !$2) {
return $null
}
else {
return (Sucesso) Definicao ( $1 ) da palavra ( $2 ) apagada.
}
}
alias _repdef {
if (!$1 || !$2) {
return $null
}
else {
return (Sucesso) Definição nº ( $1 ) da Palavra ( $2 ) corrigida.
}
}
alias isladmin {
if (!$1) {
return no such nick
}
else {
var %admin = $replace($1,[,&\,],&/)
if ($readini($learnconf, users, %admin) >= 10) {
return $true
}
else {
return $false
}
}
}
;================ CODIGO PRINCIPAL ========================
on *:text:*:#:{
if ($1 == $_prefixo $+ learn) {
if ($isladmin($nick) == $false) {
msg $chan $_erroacesso
}
else {
if (!$2) {
msg $chan $_erroajuda
}
elseif ($2 == help) {
msg $nick =====================================
msg $nick Lista de Comandos do Sistema de Learn
msg $nick =====================================
msg $nick -
msg $nick Adicionar Palavra/Definicao: $_prefixo $+ learn ADD [Nivel-Acesso] <Palavra> <Definicao>
msg $nick Apagar Palavra/Definicao: $_prefixo $+ learn DEL <Palavra> [Nº-da-Definicao]
msg $nick Corrigir Definicao: $_prefixo $+ learn REP <Palavra> <Nº-da-Definicao> <Nova Definicao>
msg $nick Modificar Nivel-Acesso: $_prefixo $+ learn REPACCESS <Palavra> <Nivel-Acesso>
msg $nick Ver Estatisticas: $_prefixo $+ learn STATS
msg $nick -
msg $nick =====================================
}
elseif ($2 == stats) {
if ($started == $true) {
var %tdefs = 1
var %total = 0
while (%tdefs <= $ini($learn,0)) {
if ($readini($learnconf, acesso, $ini($learn,%tdefs)) && $readini($learnconf, acesso, $ini($learn,%tdefs) > 0)) {
var %total = $calc(%total + 1)
}
inc %tdefs
}
msg $chan $iif($ini($learn,0) == 1, Existe, Existem) $+(,$ini($learn,0),) $iif($ini($learn,0) == 1, Palavra, Palavras) na Base de Dados, sendo que %total delas $iif(%total == 1, é privada, são privadas)
msg $chan $iif($ini($learnconf,users,0) == 1, Existe, Existem) também $+(,$ini($learnconf,users,0),) $iif($ini($learnconf,users,0) == 1, Utilizador, Utilizadores) com acesso ao Sistema de Learn
}
else {
msg $chan $erromaior
}
}
elseif ($2 == add) {
if (!$3) {
msg $chan $_erroladd
}
else {
if ($3 !isnum && $4) {
var %palavra $3
var %definicao $4-
var %acesso 0
var %pal2 = $replace(%palavra,[,&\,],&/)
var %def2 = $replace(%definicao,[,&\,],&/)
}
elseif ($3 isnum && $5) {
var %acesso $3
var %palavra $4
var %definicao $5-
var %pal2 = $replace(%palavra,[,&\,],&/)
var %def2 = $replace(%definicao,[,&\,],&/)
}
if (!$readini($learn,%pal2,1)) {
writeini $learn %pal2 1 $replace(%def2,,<b>,,<u>,,<k>)
writeini $learnconf acesso %pal2 %acesso
msg $chan $_novapalavra(%palavra)
}
else {
var %defs = $ini($learn,%pal2,0)
var %newdef = $calc($ini($learn,%pal2,0) + 1)
writeini $learn %pal2 %newdef $replace(%def2,,<b>,,<u>,,<k>)
msg $chan $_novadef(%newdef,%palavra)
}
}
}
elseif ($2 == rep) {
if ($started == $true) {
var %pal2 = $replace($3,[,&\,],&/)
var %def2 = $replace($5-,[,&\,],&/)
if (!$3 && !$4 && !$5-) {
msg $chan $_erro0rep
}
elseif ($ini($learn,%pal2,0) < 1) {
msg $chan $_erro2
}
elseif ($4 !isnum) {
msg $chan $_erro0rep
}
elseif ($ini($learn,%pal2,0) < $4) {
msg $chan $_erro3rep
}
else {
writeini $learn %pal2 $4 $replace(%def2,,<b>,,<u>,,<k>)
msg $chan $_repdef($4,$3)
}
}
else {
msg $chan $erromaior
}
}
elseif ($2 == del) {
if ($started == $true) {
var %pal2 = $replace($3,[,&\,],&/)
if (!$3) {
msg $chan $_errodel
}
elseif ($ini($learn,%pal2,0) < 1) {
msg $chan $_erro2
}
else {
if (!$4) {
remini $learn %pal2
remini $learnconf acesso $3
msg $chan $_delpalavra($3)
}
elseif ($4 !isnum) {
msg $chan $_erro4del
}
elseif ($ini($learn,%pal2,0) < $4) {
msg $chan $_erro4del
}
else {
remini $learn %pal2 $4
var %defs = 1
while (%defs <= $ini($learn,%pal2,0)) {
if ($ini($learn,%pal2,%defs)) {
write $+(learntemp,$3,.txt) $readini($learn,%pal2,$ini($learn,%pal2,%defs))
}
inc %defs
}
remini $learn %pal2
var %tempdefs = 1
while (%tempdefs <= $lines($+(learntemp,$3,.txt))) {
writeini $learn %pal2 %tempdefs $read($+(learntemp,%pal2,.txt),%tempdefs)
inc %tempdefs
}
msg $chan $_delpalavrade($4,$3)
remove $+(learntemp,$3,.txt)
}
}
}
else {
msg $chan $erromaior
}
}
elseif ($2 == repaccess) {
if ($started == $true) {
var %pal2 = $replace($3,[,&\,],&/)
if (!$3 && !$4) {
msg $chan $_errorepaccess
}
elseif ($4 !isnum && $4 != All) {
msg $chan $_errorepaccess
}
elseif (!$readini($learnconf, acesso, %pal2)) {
msg $chan $_erro2
}
else {
if ($4 == All) {
var %acc = 0
}
else {
var %acc = $4
}
writeini $learnconf acesso %pal2 %acc
msg $chan $_repaccess($3,%acc)
}
}
}
else {
msg $chan $erromaior
}
}
}
if ($1 == $_verprefixo) {
if ($started == $true) {
var %nc = $replace($nick,[,&\,],&/)
if (!$2) {
msg $chan $_erronada
}
elseif ($issuspended($nc) == $true) {
msg $chan $_errosuspenso
}
else {
var %pal2 = $replace($2,[,&\,],&/)
var %pal3 = $replace($2,&\,[,&/,])
if (!$ini($learn,%pal2)) {
msg $chan $_erro2
}
else {
if (!$readini($learnconf, users, $nick) && $readini($learnconf, users, $nick) < $readini($learnconf, acesso, %pal2)) {
msg $chan $_erroacesso
}
else {
if (!$3) {
if ($readini($learnconf, acesso, %pal2) == 0) {
if ($ini($learn,%pal2,0) > $limitedefs) {
var %local $nick
}
else {
var %local $chan
}
var %dis = 1
while (%dis <= $ini($learn,%pal2,0)) {
if ($ini($learn,%pal2,%dis)) {
msg %local $+( $chr(40) ,%pal3 - %dis, $chr(41) ) - $replace($readini($learn,%pal2,$ini($learn,%pal2,%dis)),<b>,,<u>,,<k>,)
}
inc %dis
}
}
else {
var %dis = 1
while (%dis <= $ini($learn,%pal2,0)) {
if ($ini($learn,%pal2,%dis)) {
msg $nick $+( $chr(40) ,%pal3 - %dis, $chr(41) ) - $replace($readini($learn,%pal3,$ini($learn,%pal2,%dis)),<b>,,<u>,,<k>,)
}
inc %dis
}
}
}
else {
msg $nick $_erroprivado
}
}
}
}
}
else {
msg $chan $erromaior
}
}
if ($1 == !adm-learn) {
var %us = $replace($nick,[,&\,],&/)
if ($readini($learnconf, users, %us) < 15 || !$readini($learnconf, users, %us)) {
msg $chan $_erroacesso
}
else {
if (!$2) {
msg $chan (Erro) Faça: !adm-learn help
}
elseif ($2 == help) {
msg $nick =====================================
msg $nick Lista de Comandos da Admin do Learn
msg $nick =====================================
msg $nick -
msg $nick Adicionar Acesso ao Bot: !adm-learn adduser <nick> <Nivel-Acesso|All>
msg $nick Remover Acesso ao Bot: !adm-learn deluser <nick>
msg $nick Modificar Acesso ao Bot: !adm-learn edituser <nick> <Nivel-Acesso|All>
msg $nick Modificar Prefixo do comando learn (!learn): !adm-learn set prefixlearn <Caracter>
msg $nick Modificar Prefixo para listar definicoes (?? palavra): !adm-learn set prefixsearch <Caracter(es)>
msg $nick Limitar Numero de Definicoes a Mostrar no Canal: !adm-learn set limitdefs <Numero>
msg $nick Listar Utilizadores com Acesso: !adm-learn listusers
msg $nick Resetar a Base de Dados: !adm-learn reborn
msg $nick Suspender acesso de um Utilizador: !adm-learn suspend <nick> <razao>
msg $nick Remover Suspenção de acesso de um Utilizador: !adm-learn suspend <nick> <razao>
msg $nick -
msg $nick =====================================
}
elseif ($2 == listusers) {
if ($started == $true) {
var %auserss = 1
while (%auserss <= $ini($learnconf,users,0)) {
write tempuserslearn.txt $replace($ini($learnconf, users, %auserss),&\,[,&/,]) ( $readini($learnconf, users, $ini($learnconf,users,%auserss)) )
inc %auserss
}
msg $nick Utilizadores com acesso ao Sistema de Learn:
var %x = 1
while (%x <= $lines(tempuserslearn.txt)) {
msg $nick $read(tempuserslearn.txt,%x)
inc %x
}
remove tempuserslearn.txt
}
else {
msg $chan $erromaior
}
}
elseif ($2 == reborn) {
if ($started == $true) {
var %d = 1
while (%d <= $ini($learnconf,users,0)) {
if ($readini($learnconf, users, $ini($learnconf,users,%d) >= 10)) {
write tempusersrestart.txt $ini($learnconf, users, %d) $readini($learnconf, users, $ini($learnconf,users,%d))
}
inc %d
}
var %f = 1
remove $learn
remove $learnconf
while (%f <= $lines(tempusersrestart.txt)) {
writeini $learnconf users $gettok($read(tempusersrestart.txt,%f),1,32) $gettok($read(tempusersrestart.txt,%f),2,32)
inc %f
}
remove tempusersrestart.txt
msg $chan (Sucesso) A Base de Dados foi resetada com sucesso.
}
else {
msg $chan $erromaior
}
}
elseif ($2 == unsuspend) {
if ($started == $true) {
if (!$3) {
msg $chan (Erro) Sintaxe correcta: !adm-learn unsuspend <nick>
}
else {
var %us2 = $replace($3,[,&\,],&/)
if ($issuspended(%us2) == $false) {
msg $chan (Erro) Esse nick nao está suspenso!
}
else {
remini $learnconf suspend %us2
msg $chan (Sucesso) Suspensão do $3 retirada.
}
}
}
else {
msg $chan $erromaior
}
}
elseif ($2 == suspend) {
if ($started == $true) {
if (!$3) {
msg $chan (Erro) Sintaxe correcta: !adm-learn suspend <nick> <razao>
}
elseif (!$4) {
msg $chan (Erro) Sintaxe correcta: !adm-learn suspend <nick> <razao>
}
else {
var %us2 = $replace($3,[,&\,],&/)
var %rs = $replace($4-,[,&\,],&/)
var %us4 = $replace($nick,[,&\,],&/)
if ($readini($learnconf, users, %us2) >= $readini($learnconf, users, %us4)) {
msg $chan (Erro) O nick que pretende suspender tem um nivel igual ou superior ao seu.
}
else {
writeini $learnconf suspend %us2 %rs
msg $chan (Sucesso) Utilizador ( %us2 ) suspenso com a razao ( %rs )
}
}
}
else {
msg $chan $erromaior
}
}
elseif ($2 == adduser) {
var %us2 = $replace($3,[,&\,],&/)
if (!$3 || !$4) {
msg $chan (Erro) Sintaxe correcta: !adm-learn adduser <nick> <Nivel-Acesso>
}
elseif ($4 !isnum) {
msg $chan (Erro) Sintaxe correcta: !adm-learn adduser <nick> <Nivel-Acesso>
}
elseif ($readini($learnconf, users, %us2)) {
msg $chan (Erro) Esse utilizador ja está registado
}
else {
writeini $learnconf users %us2 $4
msg $chan (Sucesso) Utilizador ( $3 ) adicionado com o nivel ( $4 )
}
}
elseif ($2 == deluser) {
if (!$3) {
msg $chan (Erro) Sintaxe correcta: !adm-learn adduser <nick> <Nivel-Acesso
}
else {
var %us2 = $replace($3,[,&\,],&/)
if (!$readini($learnconf, users, %us2)) {
msg $chan (Erro) Esse utilizador nao está registado.
}
else {
remini $learnconf users %us2
msg $chan (Sucesso) Utilizador ( $3 ) removido.
}
}
}
elseif ($2 == edituser) {
if ($started == $true) {
var %us2 = $replace($3,[,&\,],&/)
if (!$3 || !$4) {
msg $chan (Erro) Sintaxe correcta: !adm-learn edituser <nick> <Nivel-Acesso
}
elseif ($4 !isnum) {
msg $chan (Erro) Sintaxe correcta: !adm-learn edituser <nick> <Nivel-Acesso
}
elseif (!$readini($learnconf, users, %us2)) {
msg $chan (Erro) Esse utilizador nao está registado
}
else {
writeini $learnconf users %us2 $4
msg $chan (Sucesso) Nivel do Utilizador ( $3 ) alterado para: $4
}
}
else {
msg $chan $erromaior
}
}
elseif ($2 == set) {
if (!$3) {
msg $chan (Erro) Sintaxe correcta: !adm-learn set prefixlearn <Caracter>
msg $chan (Erro) Sintaxe correcta: !adm-learn set prefixsearch <Caracter(es)>
msg $chan (Erro) Sintaxe correcta: !adm-learn set limitdefs <Numero>
}
elseif ($3 == prefixlearn) {
if (!$4) {
msg $chan (Erro) Sintaxe correcta: !adm-learn set prefixlearn <Caracter>
}
else {
if ($4 == $readini($learnconf, conf, prefixoshow)) {
msg $chan (Erro) O Prefixo do Learn nao pode ser igual ao prefixo da Listagem
}
else {
writeini $learnconf conf prefixolearn $4
msg $chan (Sucesso) Prefixo do Learn alterado para: $4
}
}
}
elseif ($3 == prefixshow) {
if (!$4) {
msg $chan (Erro) Sintaxe correcta: !adm-learn set prefixshow <Caracter(es)>
}
else {
if ($4 == $readini($learnconf, conf, prefixolearn)) {
msg $chan (Erro) O Prefixo da Listagem nao pode ser igual ao prefixo do Learn.
}
else {
writeini $learnconf conf prefixoshow $4
msg $chan (Sucesso) Prefixo do Search alterado para: $4
}
}
}
elseif ($3 == limitdefs) {
if (!$4) {
msg $chan (Erro) Sintaxe correcta: !adm-learn set limitdefs <Numero>
}
else {
writeini $learnconf conf limitedefs $4
msg $chan (Sucesso) Limite de Definicoes a Mostrar no Canal alterado para: $4
}
}
}
}
}
if ($1 == $str(chr(42),2)) {
if ($started == $true) {
if (!$2) {
msg $chan $_errosearchnothing
}
else {
var %pal2 = $replace($2,[,&\,],&/)
var %lines = 1
while (%lines <= $ini($learn,0)) {
if (* $+ %pal2 $+ * iswm $ini($learn,%lines)) {
var %resultt = $calc(%resultt + 1)
var %wresult = $addtok(%wresult, $+(,$ini($learn,%lines),), 32)
}
inc %lines
}
msg $chan Total: $+(,%resultt,) $iif(%resultt == 1, palavra encontrada, palavras encontradas) ( %wresult )
}
}
else {
msg $chan $erromaior
}
}
}
;================ FIM ========================
Espero sinceramente que gostem
Dúvidas e bugs, façam reply aqui por favor