Anmerkung:
Dieses mIRC Bot Tutorium wurde von einem GastAutor erstellt, weiteres
unten.
Er wurde unzensiert und unbehandelt auf IRC-Mania.de
aufgenommen !
Sollte ein hier präsentierter WorkShop extrem viele Fehler
aufweisen, bitte ich um eine Benachrichtigung WorkShopKritik@IRC-Mania.de
Wir übernehmen keine Verantwortung für Schäden, die
durch diesen Workshop entstanden sind !
Bemerkung
von
IRC-Mania.de:
|
Dieser IRC Workshop ist nur ein Auszug, von einem kompletten
mIRC Bot Tutorial von MyPageHome.de.
|
Autor: NoB
URL: http://www.MyPageHome.de
Email: NoB
Dieses Script stellt eine komplette User-Verwaltung für ein
mirc-BOT dar.
Es arbeitet mit der Notify-Liste des mirc was viele Vorteile mit
sich bringt.
Der einzige Nachteil ist das sich maximal nur 150 User registrieren
können, was aber reichen sollte.
Aber keine langen vorreden sondern gleich los mit der ersten Funktion.
;---------------------------------------------------
;Disconnect Funktion
;---------------------------------------------------
on 1:DISCONNECT:{
disable #groupnotify
}
Diese Funktion dient dazu die Notify-Funktion abzuschalten sobald
der BOT disconnected.
;---------------------------------------------------
;Connect Funktion
;---------------------------------------------------
on 1:CONNECT:{
LIT
notify
.timergorupan 1 1 enable #groupnotify
}
Diese Funktion wird ausgeführt sobald der BOT zu einem Server
connected.
Als erstes wird der Alias LIT ausgführt welcher nachfolgend
aufgelistet und beschrieben ist.
Danach wird die Notify-Liste aktualisiert und danach erst mit dem
Timer die Notify-Funktion eingeschaltet.
Das ist wichtig damit nicht alle User die online sind eine Meldung
bekommen sobald der BOT connected.
Alias LIT {
var %litzähler 1
while (%litzähler <= $notify(0)) {
if ($LastIdent($notify(%litzähler)) < $calc($ctime - 2592000))
{
UserLöschen $notify(%litzähler)
}
elseif ($IdentStatus($notify(%litzähler)) == TRUE) {
WU_IdentStatus $notify(%litzähler) FALSE
}
inc %litzähler
}
echo -s $time Userlist bereinigt!
}
Hier nun der eben angesprochene Alias LIT.
LIT steht für Last Ident Test => Letzte Anmeldung Test.
Als erstes wird in der while-Schleife geguckt wann sich jeder User
das letzte mal angemeldet hat.
Ist das länger als 30 Tage her, wird der User von der Notify-Liste
gelöscht.
Des weiteren wird geprüft ob noch ein User angemeldet ist und
wenn ja wird er automatisch abgemeldet.
Zum Schluss wird im Status-Fenster die Meldung "Userlist bereinigt!"
ausgegeben.
;---------------------------------------------------
;Unotify Funktion
;---------------------------------------------------
on 1:UNOTIFY:{
if ($IdentStatus($nick) == TRUE) {
WU_IdentStatus $nick FALSE
}
}
Die Funktion wird ausgelöst wenn ein User den Chat verlässt
oder den Nick wechselt.
Falls er angemeldet ist wird sein Status in abgemldet geändert.
;---------------------------------------------------
;Notify Funktion
;---------------------------------------------------
#groupnotify on
on 1:NOTIFY:{
notice $nick Hi $nick $+ ! Du kannst dich jetzt mit !ident PASSWORT
anmelden.
}
#groupnotify end
Hier nun die Notify-Funktion, die ausgelöst wird wenn ein
User den Server betritt.
Dann bekommt der User die Meldung das er sich anmelden kann.
;---------------------------------------------------
;Register Funktion
;---------------------------------------------------
on 1:TEXT:!register &:?:{
$userpuffer($nick)
if ($usersperre($nick) == HALT) { msg $nick Du bist gesperrt für
den Bot! }
elseif ($Userpass($nick) != $null) { msg $nick FEHLER: Du bist bereits
Registriert! }
elseif (($len($2) < 6) || ($len($2) > 10)) { msg $nick FEHLER:
Passwort muss 6 - 10 Buchstaben haben! }
else {
set %registerpasswort $2
ns status $nick
}
}
Hier ist die Funktion mit der sich User in dem BOT anmelden können.
Der Identifer $userpuffer ist ein selbstgebauter, der Alias dazu
folgt später.
Dies muss sein damit man den BOT nich flooden kann.
Danach wird geschaut ob der User (Nick) für den BOT gesperrt
ist oder vielleicht schon registriert.
Dann wird noch das Passwort überprüft und falls alles
OK ist wird der User registriert.
Dazu wird beim NickServ geguckt ob der Nick des Users registriert
und identifiziert ist.
on *:NOTICE:STATUS * 3:?:{
if (($nick == nickserv) && (%registerpasswort != $null))
{
WU_Userpass $2 %registerpasswort
WU_IdentStatus $2 FALSE
WU_LastIdent $2 $ctime
notify $2
disable #groupnotify
notify
.timergorupan 1 1 enable #groupnotify
msg $2 Registrierung Erfolgreich!
msg $2 Dein Passwort lautet: %registerpasswort
msg $2 Du kannst dich anmelden mit: !ident %registerpasswort
msg $2 Für wietere Informationen !hilfe ident eingeben.
echo -s NEUER USER -> $2
unset %registerpasswort
}
}
Auf die Status anfragen antwortet der NickServ mit einer Notice.
Diese Notice wird hier abgefangen und ausgewertet und wenn der Status
3 ist wird die Registrierung durchgeführt.
Dazu werden das Passwort, der Anmeldestatus und die letzte Anmeldezeit
in einer INI-Datei gespeichert.
Dann wird der Nickname der Notify-Liste hinzugefügt und die
Liste aktualisiert.
Als letztes wird der User informiert ob die Registrierung erfolgreich
war, und ein Meldung im Status-Fenster vom BOT angezeigt.
on *:NOTICE:STATUS * 0:?:{
if (($nick == nickserv) && (%registerpasswort != $null))
{
msg $2 FEHLER: Registrierung Fehlgeschlaben!
msg $2 Dein Nickname ist nicht registriert oder nicht identifiziert
auf dem NickServ!
unset %registerpasswort
}
}
on *:NOTICE:STATUS * 1:?:{
if (($nick == nickserv) && (%registerpasswort != $null))
{
msg $2 FEHLER:Registrierung Fehlgeschlaben!
msg $2 Dein Nickname ist nicht registriert oder nicht identifiziert
auf dem NickServ!
unset %registerpasswort
}
}
Diese Meldungen werden ausgegeben wenn der Nick des Users nicht
registriert oder identifiziert ist auf dem NickServ.
Alias usersperre {
var %uszähler 1
while (%uszähler <= $lines(GesperrteUser.txt)) {
if ($1 == $read(GesperrteUser.txt,%uszähler)) {
var %usergebnis HALT
var %uszähler $lines(GesperrteUser.txt)
}
inc %uszähler
}
return %usergebnis
}
Hier ist der Alias zum Identifer $usersperre, der überprüft
ob der User in der Datei GesperrteUser.txt steht.
;---------------------------------------------------
;User-Löschen Funktion
;---------------------------------------------------
on 1:TEXT:!unreg:?:{
if ($IdentStatus($nick) != TRUE) { msg $nick FEHLER:Du musst dich
erst Anmelden! }
else {
UserLöschen $nick
msg $nick Deine BOT-Registrierung wurde gelöscht!
echo -s USER-LÖSCHUNG -> $nick
}
}
Mit der Funktion !unreg können sich angemeldete User wieder
von der User-Liste löschen.
Alias UserLöschen {
remini User.ini $1
notify -r $1
if ($server != $null) {
disable #groupnotify
notify
.timergorupan 1 1 enable #groupnotify
}
}
Als erstes wird der User aus der INI-Datei gelöscht.
Danach von der Notify-Liste welche danach aktualisiert wird.
;---------------------------------------------------
;Ident Funktion
;---------------------------------------------------
on 1:TEXT:!ident &:?:{
$userpuffer($nick)
if ($Userpass($nick) == $null) {
msg $nick FEHLER: Du musst dich erst registrieren!
msg $nick Dazu !register Passwort eingeben.
}
elseif ($IdentStatus($nick) == TRUE) { notice $nick INFO: Du bist
bereits Angemeldet! }
elseif ($Userpass($nick) == $2) { UserAnmelden $nick }
}
on 1:NOTICE:!ident &:?:{
$userpuffer($nick)
if ($Userpass($nick) == $null) {
msg $nick FEHLER: Du musst dich erst registrieren!
msg $nick Dazu !register PASSWORT eingeben.
}
elseif ($IdentStatus($nick) == TRUE) { notice $nick INFO: Du bist
bereits Angemeldet! }
elseif ($Userpass($nick) == $2) { UserAnmelden $nick }
}
Alias UserAnmelden {
WU_IdentStatus $1 TRUE
WU_LastIdent $1 $ctime
notice $1 Ident Erfolgreich! Status: Angemeldet
}
Mit der !ident-Funktion werden registrierte User angemeldet.
Ich habe diese Funktion für eine Messge im Query-Fenster sowie
für eine Notice geschrieben.
Die Anmeldung kann nicht im öffentlichen Raum passieren da
dann ja jeder das Passwort sehen kann.
;---------------------------------------------------
;Passwort Funktion
;---------------------------------------------------
on 1:TEXT:!passwort &:?:{
$userpuffer($nick)
if ($IdentStatus($nick) != TRUE) { msg $nick Zugriff verweigert!
}
else {
WU_Userpass($nick $2)
msg $nick Dein neues Passwort lautet: $2
}
}
Mit der !passwort-Funktion kann jeder User der angemeldet ist sein
Ident-Passwort ändern.
;-----------------------------------------------------------
;Alias User-Puffer
;-----------------------------------------------------------
Alias userpuffer {
if ( [ % $+ [ puffer $+ [ $1 ] ] ] != $null) { var %upergebnis halt
}
else {
set [ % $+ [ puffer $+ [ $1 ] ] ] EIN
.timerpuffer $+ $1 1 10 unset % $+ [ puffer $+ [ $1 ] ]
}
return %upergebnis
}
Hier nun noch der Eingabepuffer welcher es nur zulässt das
jeder User nur alle 10 Sekunden eine Eingabe machen kann.
Jetzt folgen lediglich noch Hilfs-Funktoinen zum beschreiben oder
lesen der User INI-Datei.
;--------------------------------------------------------------------
;User.ini lesen
;--------------------------------------------------------------------
Alias Userpass { return $readini(User.ini,$1,Passwort) }
Alias IdentStatus { return $readini(User.ini,$1,IdentStatus) }
Alias LastIdent { return $readini(User.ini,$1,LastIdent) }
;--------------------------------------------------------------------
;User.ini schreiben
;--------------------------------------------------------------------
Alias WU_Userpass { writeini User.ini $1 Passwort $2 }
Alias WU_IdentStatus { writeini User.ini $1 IdentStatus $2 }
Alias WU_LastIdent { writeini User.ini $1 LastIdent $2 }
|