mIRC Bot Template

Want a mIRC based bot?
Can't seem to get started on your own?
Tired of trying to rip through the code for other peoples' bots?

Try this one!

I wrote this up today, it's designed for people to use as a starting point; a template. It provides basic structures for commands, pacing, logging, and more. Although it doesn't do anything useful as-is, it is not meant to be UsefulBot.mrc
So no, I won't be adding "useful" commands to it either. That's your job!

The main features of this bot are:

Configurable trigger

So you're not forced to use ! for commands

Command pacing for all commands

Prevents abuse

Recognized Bot Owner, and Owner-Only commands

Want the power to make your bot talk, but not let anyone else do it to? Put it in the owner section!

Access for commands is determined by channel status!

You can limit commands to be used by only Ops, or by anyone! Supports All, Voice, Halfop, Op, and Admin!

Logging of all commands to a file

Want to see who's abusing your bot without reading through mIRC's logs? Here's everything people have used on your bot in one easy to read file.

Comments and Descriptions for everything in the file

Example commands for every user level

Installation:
Copy and paste the code below into a new text file.
Save it as BotTemplate.mrc into your mIRC folder
Open mIRC, and type
/load -rs "BotTemplate.mrc"

Note: You should NOT load this on the client you intend to chat from.
Note: You should be online on the same network as the bot when you load the script. If you do not, you will need to join the channel the bot is in AFTER the script is loaded, so that your host (IP) can be recorded by the bot.

Anyway, here's the code.

Enjoy!

mrc
; ==------------------------------------------------------------------------------------==
; Template for an IRC bot
; Written by vsTerminus
; This script is open source, and written for the purpose of modification by other users
; as both a learning tool, and a starting point for projects.
;
; This script may be freely distributed
; Under no circumstance should you profit from this or a modification of this script.
; The author hopes you will credit him somewhere in your code if you use it.
; ==------------------------------------------------------------------------------------==
; ==------------------------------------------------------------------------------------==
; Features of this template:
;
; This template features a number of useful things in bot development
; Events are pre-written for LOAD, UNLOAD, CONNECT, and TEXT.
;
; This template will log all used commands by default to your logs folder.
; Please ensure that it exists prior to using this script.
;
; The trigger for all commands is changeable
; Most bots use ! as a trigger. This is the default, but you may use anything.
;
; The bot will ignore commands from itself (Using !say !version will not work, for example)
;
; All commands are protected from abuse using a 5 second pace timer.
; You may modify this time.
;
; Aliases are provided for properly detecting a user's status in a channel
; Status levels supported are Voice (+), Halfop (%), Operator (@) and Admin (&)
;
; You can configure a nick to use as the bot's owner.
; You must be using this name when you join the channel for the bot to track your IP address properly.
;
; Thanks for using this bot. Questions/Comments? E-mail me at vsTerminus@socialgamer.net
; ==------------------------------------------------------------------------------------==
on *:LOAD:{
; This section loads up the required variables
; Please look through it, as there are some things you can change
; that will affect how your bot operates.
; Version Info
; Name - Give your bot a name!
; This is NOT the bot's nickname. That is up to you to set.
; This is used in the bot's version info.
; Default = Bot Template
%bot.name = Bot Template
; Author - Your name!
; Default = vsTerminus
%bot.author = vsTerminus
; Version - Set the bot version
; Default = Bot Template v1.0
%bot.version = 1.0
; General Config
; Owner - You must set this to your nick.
; Default = vsTerminus
%bot.owner = vsTerminus
; Trigger - You can set this to any character that you like
; EXCEPT letters of the alphabet. Anything else should be fine.
; Defatult = !
%bot.trigger = !
; Miscellaneous
; Pacing timer - Limit commands so that they can be used
; a minimum of X seconds apart. Raise or lower this depending on
; What you like, and what feels natural.
; Default = 2
%bot.pace = 2
; Logging
; You can enable/disable logging of used commands, and modify the file they are logged to here.
; Log commands used?
; Default = yes
%bot.logCmds = yes
; Log file for commands, uses relative pathing.
; Default: logs/commands.log
%bot.log = logs/commands.log
; Done with variables
; Please do not modify the lines below.
; This just primes the pacing.
%bot.nextAllowedCommand = $ctime
; This looks for the owner to be online, and stores their host (IP)
if ( $address( %bot.owner , 2 ) != $null ) {
%bot.owner.address = $address( %bot.owner , 2 )
}
; Updates the log file
if ( %bot.logCmds == yes ) {
/write %bot.log ==------ Begin Session ( $+ $time $+ )------==
}
echo -a %bot.name %bot.version by %bot.author loaded successfully.
}
; ==------------------------------------------------------------------------------------==
; Aliases
; These are a few aliases that allow the bot to run correctly
; Please don't modify unless you know what you're doing.
; ==------------------------------------------------------------------------------------==
; This checks pacing
alias allowed {
if ( $calc( $ctime - %bot.nextAllowedCommand ) >= 0 ) {
%bot.nextAllowedCommand = $calc( $ctime + %bot.pace )
return $true
}
else {
return $false
}
}
; Checks to see if the passed in name is an owner or not
alias owner {
if ( $address( $1 , 2 ) == %bot.owner.address ) {
return $true
}
else {
return $false
}
}
; These aliases are used for detecting the user's channel status (Voice, Op, etc)
/prefixof {
if ($1 == $null || $2 == $null) { return $null }
var %pnick $nick($1,$2).pnick
var %pos $pos(%pnick,$2,1)
if (%pos == $null) return $null
if (%pos == 1) return $null
return $left(%pnick,$calc(%pos - 1))
}
/isvoice {
if (+ isin $prefixof($1,$2) || $ishalfop($1,$2)) { return $true }
return $false
}
/ishalfop {
if (% isin $prefixof($1,$2) || $ischop($1,$2)) { return $true }
return $false
}
/ischop {
if (@ isin $prefixof($1,$2) || $isadmin($1,$2)) { return $true }
return $false
}
/isadmin {
if ($isowner($1,$2)) return $true
if (& == $null) return $false
if ($ircdadminchar(prefix) isin $prefixof($1,$2)) return $true
return $false
}
/isowner {
if ($ircdownerchar == $null) return $false
if ($ircdownerchar(prefix) isin $prefixof($1,$2)) return $true
return $false
}
/ircdownerchar {
return $iif($1 == prefix,$iif(~ isin $prefix,~,@),q)
}
/ircdadminchar {
return $iif($1 == prefix,$iif(& isin $prefix,&,@),a)
}
; ==------------------------------------------------------------------------------------==
; JOIN event
; This section is for any commands that you want to be executed when someone joins the chat
; For now, it just looks for the bot owner and tracks the host (IP)
; Useful things here are greetings. An example is provided.
; ==------------------------------------------------------------------------------------==
on *:JOIN:#:{
if ( $nick == %bot.owner ) {
%bot.owner.address = $address( $nick , 2 )
}
; Uncomment the next line for channel greetings for all users!
; msg $chan - Welcome, $nick $+ !
; Or, if you just want to welcome voiced or higher users, uncomment the next section instead.
; if ( $isvoice( $chan , $nick ) ) {
; msg $chan - Welcome, $nick $+ !
;}
}
; ==------------------------------------------------------------------------------------==
; Commands
; This is where the vast majority of your commands will go.
; This is also the section you should be editing most frequently.
; ==------------------------------------------------------------------------------------==
on 1:TEXT:*?trigger:#:{
; This handles displaying the current trigger for users.
; The ? may be substituted for any character.
; Pacing applies.
if ( ( $allowed ) && ( trigger isin $1 ) ) {
msg $chan - My current trigger is: %bot.trigger
}
}
on 1:TEXT:$( * $+ %bot.trigger $+ * ):#:{
; Welcome to the text command section
; This section is for commands such as !topic, which are issued in the channel
; A few example are provided for you, and the structure for you to add your own commands is explained
; Get the command the user issued
; Strip codes from the message first
; Then grab just the first word
; Then remove any instances of the trigger from the word.
; This leaves you with the command text only.
; This is also why I suggest you to not use A-Z,a-z in your triggers.
var %command = $replace( $gettok( $strip( $1- ) , 1 , 32 ) , %bot.trigger, $null )
if ( $owner( $nick ) ) {
; This is where commands that are restricted for your use only go.
; These commands are NOT subject to pacing restrictions.
; You may use them as often as you like
; If the bot does NOT recogize you as the owner, simple
; rejoin the channel, on the nick you specified as %bot.owner
; Example Provided: SAY - Make the bot say something
if ( %command == say ) {
msg $chan $2-
}
; Define more commands for yourself (The bot owner) here!
}
if ( $allowed ) {
; This section is for 'public' commands.
; These commands ARE subject to pacing, even for the bot owner.
; This section is broken up into several parts.
; One for each level of access: Regular User, Voiced User (+), Halfop (%), Full Op (@), and Admin (&)
; Please note that not all networks support all of these levels.
; WyldRyde, for example, does not use the Admin (&) symbol.
; Also note that users of higher status will also be able to use commands
; that are defined for lower status users.
; Example, Halfops will also be able to use commands in the Voice section
; and Full Ops can use commands in the Halfop section.
; First section: Voiced users
if ( $isvoice( $chan , $nick ) ) {
; Example Command: rules
if ( %command == rules ) {
msg $chan The rules are: Behave!
}
; Define more commands for voiced users here!
}
; Second section: Halfops
if ( $ishalfop( $chan , $nick ) ) {
; Example Command: MUTE - Mute the channel (mode +m)
if ( %command == mute ) {
if ( $2 == on ) {
mode $chan +m
msg $chan - Channel is now muted
}
elseif ( $2 == off ) {
mode $chan -m
msg $chan - Channel is no longer muted
}
else {
msg $chan - Please use %bot.trigger $+ mute on or %bot.trigger $+ mute off
}
}
; Define more commands for halfops here!
}
; Third section: Full ops
if ( $ischop( $chan , $nick ) ) {
; Example command: Kickban (or kb)
if ( ( %command == kb ) || ( %command == kickban ) ) {
mode $chan +b $address( $2 , 2 )
kick $chan $2 ( $+ $nick $+ ) $3-
}
; Define more commands for full ops here!
}
; Fourth section: Admins
if ( $isadmin( $chan , $nick ) ) {
; Example command: LEAVE - Make the bot leave the channel
if ( %command == leave ) {
part $chan Leaving the channel at request of $nick
}
; Define more commands for admins here!
}
; Final section: All users.
; No if statement here, commands places below apply to users of all status levels.
; Example Command: VERSION - Return the bot version
if ( %command == version ) {
msg $chan - I am a %bot.name %bot.version by %bot.author
}
; Example Command: HELP - Send the user a help file
if ( %command == help ) {
msg $nick - My helpfile can be located at: mywebsite.com
}
; Define more commands for regular users here!
}
; Now all we have to do is log the command use
; This logs ALL command attempts, whether they are executed or not (due to pacing)
; This way you can identify people who are trying to spam the bot.
if ( %bot.logCmds == yes ) {
/write %bot.log ( $+ $time $+ ) $chan $+ : < $+ $nick $+ > $strip( $1- )
}
}
; ==------------------------------------------------------------------------------------==
; There are plenty of other events you could script into your bot
; Have a look at the mIRC help docs and use google. You'll find other stuff you can add.
; Perhaps in future versions of this template I'll provide example of more event types.
; ==------------------------------------------------------------------------------------==
on *:UNLOAD:{
if ( %bot.logCmds == yes ) {
/write %bot.log ==------ End Session ( $+ $time $+ )------==
}
echo -a %bot.name %bot.version by %bot.author unloaded successfully.
/unset %bot.*
}

Kasaba real name is TERRYCKE WRIGHT, I knew him from playing an online game called king of chaos, after playing the game with him for sometime you build a bond and I got to know him. About 1 year goes by and he starts to tell me how white people are being killed in South Africa and how he wanted to move to the United States, so I decided to help him. I had a job set up and a place for him to live, I was also going to pay for his plane ticket and give him start up money when he got here in the US. I felt really bad for him and what was happening there. He told me when applying for a travel VISA to come to the USA it would look better if he had money in his bank account and if the VISA didn’t got though he would send me my money back. I sent him $1,000.00 USD VIA Western Union which the fee to send the money was a few hundred dollars extra but he picked up $1,000 USD:
Money Transfer Control Number (MTCN):
2397125470

Date of Order:
10/15/2008

Amount Sent:
$1000.00

Receiver Name:
TERRYCKE WRIGHT

Status:
Picked Up

Well his VISA was denied and when I tried to get my money back he told me he was mugged on a train and lost all the money. Now he dont respond to my emails or PM's and I am a huge sucker for sending him that money:

thx Take care Richard ttyl, you have helped me make a dream come true here :)
when i pick u up from the airport
then we say that
:)
ummm that I will let you know... by even next week wednesday :) so talk to you then lol
and at the airport :)
Session Close: Wed Oct 15 18:39:20 2008
Session Start: Mon Oct 20 14:50:34 2008
Session Ident: Kasbah
Session Ident: Kasbah (Casper@Cyanide-D7E7B23F.majic.org)
hey conpmana
hey
is catchy on irc
cathy
nope not yet
she should be home in 3 hours
did you get my email ?
when u send
ohh a few days ago mate
been trying to get you on IRC
wanted to say thnak you very much and that I got the money
The log on him saying he got stabbed is on my home computer but I just have to say don’t trust him and if you have dealing with him be on guard, because of him I wont ever help anyone I don’t really know again ever. I am a sucker to the 10th degree and cost me $1,000 to figure that out so thank you terrycke.