30
Tags:
diverse
Skrevet af
Bruger #4803
@ 07.07.2004
Introduktion
Jeg skriver denne artikle på opfordring fra folk på udv.dk's irc kanal #udvikleren.dk @ quakenet.org, Jeg vil vise hvordan man ved hjælp af Remote scripting i mIRC kan lave en channel bot, som reagere på !op, !ban, !voice .. etc
Først og fremmest, lad mig gøre forskellen med IRC og mIRC klar, IRC er en protokol, dvs. sproget som bruges til at kommunikere, IRC kan sættes side om side med FTP, HTTP, TCP, UDP, og så videre til dem som ved hvad dette er. Hvorimod mIRC er et program som benytter sig af denne protokol, mIRC kan sidestilles med alt andet software fx Notepad, Internet Explorer, osv. Der er mange som blander disse sammen.
Først vil jeg fortælle lidt om det basale ved mIRC scripting, mirc scripting kan bruges til mange spændende ting på irc, man kan customize sin egen client, sit eget program, man kan lave menuerne's indhold om, man kan tilføje sin egne aliaser (kommandoer) så som /uptime, /fisk. etc.. og bestemme hvad disse skal gøre. men nok den største og mest brugte ting blandt mirc scripting findes i det som hedder Remote scripting, det er scripts som andre brugere på IRC kan aktivere osv. idag vil jeg som sagt visse hvordan Remote scripting fungere.
Jamen Hvordan?!
Først starter vi med at finde frem til hvor vi skal skrive vores script, i mIRc kan du enten vælge at trykke Alt+R eller du kan trykke på det lille grønne ikon med "/a" på, eller en hel tredje mulighed, gå via menuen ind i "Tools >> Scripts Editor",
Når du gør dette vil et lille vindue poppe op, med fanebladene, Aliases, Popups, Remote, Users og Variables.
Aliases - her kan du smide kode ind sammen hvis du ved at skrive én kommando ønsker at joine en masse kanaler på en gang kan dette fx. løses ved at tilføje linien "/joinchannels { join #channel1 | join #channel2 | join #channel3 }", læg mærke til at jeg har brugt { } rundt om selve kommandoen som udføres, og jeg kan tilføje mere end 1 kommando ved at separere dem med |, hvis jeg ønsker at bruge den nye kommando skal jeg blot skrive /joinchannels som man normalt ville skrive /join #channel1,2,3 etc..
Popups - Under dette faneblad kan man manipulere med din popup menu'er dvs. når du højreklikker på en person ude i siden, eller når du højre klikker inde i kanalen osv. så kan indholdet af disse menuer ændres og deres funktioner laves om, dette vil jeg ikke komme ind på i denne artikel.
Remote - Den tar vi det næste afsnit længere nede.
Users - Denne sektion er normalt tom, men den kan bruges til at sætte userlevels på personer etc. normalt vil man ikke benytte sig af denne sektion, medmindre man laver en bot med bruger adgang, login etc. dette vil jeg ikke vise jer idag. kan måske komme på tale i en senere bot.
Variables - Her vil alle de variabler som man sætter mens man scripter, hvis man bruger den slags, befinde sig normalt skal man heller ikke selv ændre i disse, kun hvis man er ved at udvikle et script og har brug for at debugge etc. denne sektion vil være tom hvis du bruger en normal mIRC install, men hvis du bruger et script.. så som "invision" etc, så vil der højst sandsynligt være en del variabler i denne sektion, men jeg anbefaler at du holder dig væk, med mindre du ved hvad du laver
Remote Scripting
Godt, så har vi vidst lidt baggrundsviden på plads, lad os skifte til Remote fanebladet igen.
Normalt når man scripter i remote, vil man ofte bruge den syntax som vi kalder on TEXT, on ACTION, on JOIN, on PART, og så videre, alle disse kan findes i mIRC hjælpe filer, F1, eller hurtgiere hvis du bruger shift+F1, og skriver "on", ved brug af shift+F1 vil du kunne søge på alle de identifiers og ting og sager der er at bruge i mIRC scripting.
Men hov, der stødte vi lige på et nyt ord, Identifiers, en identifier er en form for variabler som er defineret af mIRC selv, dvs. du kan indsætte disse identifiers ved for at skabe dynamik i dine scripts, en identifier starter altid med $, det kunne være $uptime,$nick,$chan,$server og så videre, disse kan også ses ved shift+F1 skrive "$".
Lad os nu se på hvordan vi skal skrive vores kode, og hvordan den kan høres dynamisk, vi tager et script som vil svare hvis nogen skriver "hejsa" i en kanal vi er på. hvor vi så svarer igen med "Hejsa <nick>" med <nick> erstattet af den person som sagde hejsa
on *:TEXT:hejsa:#: { msg $chan hejsa $nick }
Selve koden er opdelt af :'s, første sektion består af "on *", denne sektion bruges til at begrænse hvem som kan udlæse denne event, * vil sige at alle personer kan udløse denne event.
I næste sektioner ser vi TEXT, dvs. at denne vent kun lytter et TEXT dvs. den reagere ikke hvis folk bruger "/me hejsa" osv. dette kunne også være ACTION så ville den lytte efter "/me hejsa".
I Tredje sektion ser vi hvilket keyword som udløser eventen, "hejsa" så vil eventen kun virke hvis person siger "hejsa", og ikke "hejsa " eller "hejsa folkens"
hvis man derimod erstattede "hejsa" med "hejsa *", så vil den reagere på "hejsa folkens", "hejsa allesammen" osv. da * fungere som en wildcard/joker.
I fjerde sektion ser vi #, dette betyder at den kun reagere på "hejsa" hvis det er skrevet i en kanal, og ikke i privmsg, istedet for # kan også bruges ? som er privmsg's only og * som er begge to.
Efter det sidste kolon kan vi skrive den kode som skal udføres når eventen udføres. { msg $chan hejsa $nick } er den kode vi bruger for at kunne svare tilbage med et "hejsa <nick>", i vores lille brudstykke af en kode, bruger vi 2 identifiers $chan og $nick, $chan bliver erstattet af den kanal hvorpå texten blev skrevet, og $nick er den person som udløste eventen, altså den person som skrev "hejsa", hvorefter vi bruger den kommando som hedder "msg" denne bruges til at skrive en til kanal, "msg $chan Hejsa $nick" vil skrive "Hejsa <nick>" til kanalen hvorpå eventen blev udløst.
Hvornår kommer vi til de sjove scripts?!
Jamen, hvis du har forstået hvordan basal remote scripting fungere så lad os begynde at lave noget mere avanceret scripting, vi springer direkte ud i det og laver et script som kan bruges til en channelbot, en bot som reagere på de klasiske kommandoer så som !op, !ban, !kb, !deop etc.
on @*:TEXT:!op *:#: if ($nick isop $chan) { mode $chan +o $2- }
on @*:TEXT:!deop *:#: if ($nick isop $chan) { mode $chan -o $2- }
on @*:TEXT:!voice *:#: if ($nick isop $chan) { mode $chan +v $2- }
on @*:TEXT:!devoice *:#: if ($nick isop $chan) { mode $chan -v $2- }
on @*:TEXT:!kick *:#: if ($nick isop $chan) { kick $chan $2 $3- }
on @*:TEXT:!ban *:#: if ($nick isop $chan) { mode $chan +b $address($nick,2) }
on @*:TEXT:!kb *:#: if ($nick isop $chan) { mode $chan +b $address($nick,2) | kick $chan $2 $3- }
Som du nok først vil opdage har jeg brugt "on @*", dette betyder at eventen kun kan udføres hvis man selv har op, logisk nok kan man heller ikke oppe andre uden selv at have op, så derfor har jeg valgt at sætte @ på alle events'ne
som du nok også har set, har jeg brugt det man kalder en if-then-else statement. oversat til dansk... "hvis" altså, hvis dette udtryk er sandt, "så" gør noget (og "ellers" så noget andet) det sidste er valgfrit,
if ($nick isop $chan) {} <- dette udtryk er sandt, hvis personen som skriver kommandoen !op etc.. har op på kanalen.
dvs. at alle de kommandoer jeg har tilføjet kun kan udføjes hvis både botten og personen som udfører den har op eller +o.
Hvis man så kigger på selve kommandoen, mode bruges til at give folk op,voice og banne folk etc. kaldes channelmodes. og $chan kender vi og +o -o etc.. bestemmer om det er en deop, devoice,voice, etc.. og så kommer det sidste $2-
$2- er lig med den del af sætningen, fra og med andet ord
$2 er lig med andet ord i sætningen
ligeså med $1 $1- og så videre
i det her tilfælde vil man skrive "!op Dumbo" og $2- vil være blive erstattet med Dumbo.
og ved !ban og !kb (kick/ban) ser du en ny identifier, denne bruges til at få i en person host, alle personer på IRC har det man kalder, et nick, et ident(username) og en host, normalt ser denne sådan ud: nick!ident@host, og kaldes en hostmask.
$nick giver os personens navn, men at banne en person vha. af deres navn, så kan de bare skifte navn og joine igen, dette hjælper ikke meget, så vi ønsker at banne dem på den her form *!*@host fordi hosten kan man ikke ændre lige sådan, dette går vi ved hjælp af $address($nick,2)
$address bruges til at få forskellige former at hostmasken fx. nick!*@host, *!ident@host osv. $address($nick,2) betyder at vi får den i *!*@host som vi ønsker det.
Nu må du stå på egne ben (hehe)
Som over skriften siger det, nu kan du selv vælge at udvide dette script eller begynde at skrive dit eget, i burde have lært de basale teknikker ved at skrive scripts, $1 $1-, if-then-else etc. skulle i have nogle spørgsmål til denne artikel eller mIRC scripting generelt er i velkomne til at komme på udvikleren.dk's irc kanal og spørge om hjælp, jeg går uden navnet Julepalme på chatten.
Held og Lykke med mIRC Scripts, and may the force be with you
Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.
Del også gerne artiklen med dine Facebook venner:
Kommentarer (11)
Uh, RIgtig god artikel, Den bedst der har været hidtil om IRC scripting, keep up the good work, lad os få nogle flere af dem =)
Rimlig men kunne godt tænke mig nogle lidt mere avanceret
Yes. Lidt for nem..
Har lige et spørgsmål: kan man tilføje: !unban - hvis personen nu gerne må joine igen, vil ikk prøve, hvis man nu ikke kan 8)..
Hey, fin artikel, der er dog lidt problemer med dine scripts:
on @*:TEXT:!ban *:#: if ($nick isop $chan) { mode $chan +b $address($nick,2) }
on @*:TEXT:!kb *:#: if ($nick isop $chan) { mode $chan +b $address($nick,2) | kick $chan $2 $3- }
I begge tilfælde banner du personen der skriver !ban eller !kb, i stedet for at banne den som man har angivet, de to linjer skal altså være:
on @*:TEXT:!ban *:#: if ($nick isop $chan) { mode $chan +b $address($2,2) }
on @*:TEXT:!kb *:#: if ($nick isop $chan) { mode $chan +b $address($2,2) | kick $chan $2 $3- }
Så er man fri for selv at blive bannet :p
sådan noget skal du ikke tage dig af r0x3r .. det var et trick script.. specielt møntet på dig.. (julep her)
Uha. Nice artikel. Virkelig godt skrevet. Med "personlighed" sådan man gider læse det! Jeg kan li' det!
5 points til dig.
Rolig nu oh du store spiselige frugt. Deet skal heller ikke til at lyde som Etta Cameron vel? =)
Neej.. Men det hjælper, at man skriver i et godt sprog
Utroligt god artikel. Men jeg har et spørgsmål.
Kan man ikke få et script til at virke i en privat channal og hvilken kode skal man bruge?
on *:TEXT:hejsa*:#(er det her man skal skrive det, og hvad skal man skrive): { msg $chan hejsa $nick }
Jacob, ja det er der man vil skrive det
Du skal være
logget ind for at skrive en kommentar.