A Beginner's to Expert's Guide to IRC

Sorry, your browser doesn't suppor Java.

Just guide the entities with your mouse


Main Page Nutrition & Health links Irc Tutorial & Scripting Weather around the World What is happening Now in hte world

This is a primer for Internet Relay Chat. It is a compilation of a series of articles That I wrote for "Internet.cy" magazine , about IRC. I am listing the articles per se , without modifications. Each article was published with a 2 month gap b2in each other.

Chapter 1 (getting there)

top top

Welcome to the world , Welcome to the Internet relay chat. For many people connected to the Internet The IRC is a way of life , while for others an occasional break from the cruel reality of the everyday life. Usually though the second type of eventually become the first ... you are warned !

This four part series of articles , about IRC is addressed to all those people. from the beginner (newbie) to the seasoned user , to the all-day-there user and even to the wannabe hacker. All can find something of interest here. Stay tuned as we explain the technicalities and re veil the way of things about IRC and mIRC the most popular program of getting onto the Network , The Internet Relay Chat , IRC.
IRC is based on a client-server model. Clients are programs (like mIRC) that connect to a server , a server is a program that transports data (messages) from one user (client) to another.

In a previous general article some information was given about the whereabouts of mIRC. For those of you who missed the last issue , and do not have the latest version of mIRC 4.6 , download it from http://www.mirc.co.uk . After downloading and executing the program , it self extracts into the directory you supply (default is c:\mirc). The program comes with a rather extensive listing of servers to get you on a number of networks , namely Undernet , Effnet , Dalnet , Icenet , Ircnet , Newnet , and Starlink .
My network of choice is Undernet for the large number of users , followed by Dalnet which is catching up , and effnet being a bit more esoteric.

In order to join a network , we have to supply a server , that is part of that network , and through that server we can chat with the users that are on that specific network.
Lets take Undernet , as a network. We then have to choose a server , lets say springfield. We don't have to type anything , just choose this server from the list of servers supplied in the window that pops up (fig mirc01). We then have to supply
a) Real name
b) E-mail
c) nickname and
d) alternate nickname (in case the first is in use by someone else).
Take note that your personal info should be true , but then again who is to check ?!. So lets fill in the boxes ...
Real name : your "real name" (Charis)
E-mail : Your "real" e-mail (charlie@zenon.logos.cy.net)
Nick-name : Imaginary name (Superman)
Alternate :Another imaginary name in case the first is already being used (Sonic45)

Having done all that , mIRC saves the data and remembers them on the next session. All that is left now is to click the connect button , of the mIRC setup window, or the upper left button of the tool bar of mIRC , and mIRC will log us on the Undernet via the springfield server.
If the "traffic" is low, and your connection is fast enough , you will get connected at once , otherwise you will have to wait for a couple of minutes or so.
If on the first attempt, connection is not established , mIRC automatically tries to reconnect. IF after a number of 3 tries connection is not established , then it is advisable to change server , for example : stlouis.mo.us.undernet.org (Undernet). You can do that either manually by tying /server stlouis.mo.us.undernet.org , or by clicking the 3rd button on the left side of the tool bar (Setup Information) , and by scrolling the list of the servers supplied you can choose another one. after that you click on the connect button of the popup window of setup information.

The moment we get connected our " status" window (main window) reflects the nickname , mode we are in (more about that later) and server we are using . ie: Superman [+] springfield.mo.us.undernet.org At the sane time the server sends the following information on our screen. (fig mirc02)
The host we are currently using , the number of users on line with us ,the number of channels formed , and the number of operators on line at that time. Following that is the MOTD , Message Off The Day of the server. Please read it !!

We are now connected with Undernet , So how can we have a chat with some of the people that are currently on line with us ?. We do that by joining a channel , using the command /JOIN channel , where #channel is the name of the channel we want to join. Note that all commands to the server are proceeded by a backslash ( / ).
Since more than 4000 channels are usually formed at anytime on Undernet , the choice for channel is really enormous. So how can we get a list of all those channels?
We do that with the command /RAW LIST parameters
Where parameters is a space or comma separated list of one or more of:
max_users ; Show all channels with less then max_users
min_users ; Show all channels with more then min_users
max_minutes ; Channels that exist less then max_minutes.
min_minutes ; Channels that exist more then min_minutes.
max_minutes ; Channels with a topic last set less then max_minutes ago.
min_minutes ; Channels with a topic last set more then min_minutes ago.
Example: LIST <3,>1,C<10,T>0 ; 2 users, younger then 10 min., topic set.

When we issue that command though , probably all of the following will happen.
a) The listing can take a lot of time to complete , b) During the listing we cannot issue any more commands to the server , c) If the "traffic" is high then the server senses that we are overloading the system (flooding) and disconnects us.
(a) and (b) we have to live with (At least for the time) , while we can try to overcome c) by using the /flood command of mIRC , which pauses the listing so that the server is not flooded. the syntax can be /FLOOD 200 10 2 30. Try it if you cannot get a listing without being disconnected.

Now lets suppose we did find a channel , like #irc or #politics or #30+ or #Cyprus . Lets join it and have a chat with the rest of the users there .
We will join the #Cyprus channel so we type ... /JOIN #Cyprus .
instantly the channel-window opens up and we are in #Cyprus.
mIRC announces your join by displaying the following message in the #channel-window (in this case #cyprus-window) .. If your nick is for example Superman ...mIRC displays the moment you enter the channel ...
on your screen : *** Now talking in #cyprus
on other users screen:*** Superman (charlie@ppp11limassol.logos.cy.net) has joined #cyprus.

on the top of the channel-window we can see the name of the channel followed, if they exist, by the mode and topic of the channel. ie: #cyprus [+nt] Welcome to Cyprus !!!
the windows work like the familiar way. so you can tile , cascade and arrange icons form the toolbar of mIRC. You can regard the topic as a general title of the channel you are currently in . more about all that is being discussed in a later article.

Looking at our right we can see all the users that are currently in the channel. Each user is using a nickname or nick ,for short , that the others refer to in order to specify to whom they are "speaking". preceding the nick of some users is the @ symbol which denotes that this user has operating status in the channel. In other words is an operator and can control among other things , the modes of the channel , and who is allowed or not allowed to enter the channel.
on the left in the channel-window we can see the users nicknames followed by the text a user just typed. Now whenever a user types something on his keyboard , his nick shows up in the channel-window followed by the typed text. typing for example : hello people , how are you today ? displays on your screen: >hello people , how are you today ? on the others screen : hello people , how are you today ?

Magic isn't it ? , being able to "chat" in real time with people from all over the world like you are in the same room with them ...
Now that we are in the channel lets see some basic commands we can use.

/ME message (tells the current channel what you are doing !) /ME is watching all talking
***Superman is watching all talking

/QUERY nickname message (opens a query window to nickname and sends nickname a private message
/QUERY marios where were you last night ?
opens a query window to marios and sends marios the message

/WHOIS nickname (shows information about beatyman) /WHOIS Dj_G_KiD
Dj_G_KiD is emilio@modem0001.mite.net * Emilio
Dj_G_KiD on #Cyprus #england
Dj_G_KiD using hamilton.on.ca.undernet.org [204.50.196.17] Interlynx.net IRC Server
Dj_G_KiD End of /WHOIS list.

/NICK new_nickname changes your nickname to new_nickname /NICK Vioform
*** Your nickname is now Vioform

/QUIT disconnects you from IRC supplying a reason for the others to see /QUIT Going for sleep

/TOPIC #channel newtopic (Changes the topic (of discussion) of the channel) /TOPIC #cyprus Karaoke night !!!
***superman changes topic to Karaoke night !!!
(if the channel is in mode +t then you have to be operator in this channel so as to be able to change the topic)

/PART #channel opposite to join
/PART #cyprus

Even while you are on line and need help there is an online help which you can invoke either by /help , or by /help , for example /HELP irc

Well those are the basic essentials you need to join the IRC and chat with people from all over the world. Have fun until the next issue when we examine together , the complete set of commands of mIRC and show how to exchange files (pictures, programs , text) while on line , and more .

Chapter 2 (communicating)

top top

Welcome to the second part of our 4 part series of articles about IRC and the mIRC program. For those of you that just landed on planet earth , IRC is an acronym for Internet Relay Chat, a medium through which thousands of people interact live on internet using mainly text. In the previous article we covered among other things, where to find the mIRC program, how to set it up, connect to an IRC server, join a channel and communicate with other users from around the world, Live.
Great !

Even if that was the only thing you could do , and nothing else , IRC would still be addictive. The addiction and the time sucking effect that IRC imposes on a user gets more intense after you learn how to exchange data in the form of pictures,files,sound and even being able to take over another users hard disk , having access to his files, not to mention person-to-person private communication.

In this article I will explain most of that ,and also present you with a comprehensive list of mirc commands ,explaining in short how to use them.


In order to achieve this mean feat one has to use some DCC commands. Abbreviation again , this time translation is Direct_Client_Connection.
What a DCC does ?. Well DCC connects you directly to another client (a client is a program ,like mirc ,that someone uses to join IRC) in order to carry data between the 2 of you. DCC is a one to one connection , without flood control , or dependence on server links, or load imposed on them. In addition since only the initial handshake for DCC connection is passed through the network , it is impossible for anyone to spy on the DCC messages !
To emphasize the non server depandance that takes place when a DC connection initiates , after you read below how to initiate a DCC chat or a DCC send , and you are in DCC , then just disconnect yourself from the server by either typing /QUIT or clicking the disconnect button of the mIRC tool bar (second button from the upper left (fig disc.gif).
By doing this no one can trace your presence on IRC since you are not really there , and yet you are talking or exchanging files with another user via DCC. Remember this , when you want to be really in private !!


DCC is invoked by issuing the DCC command ,which like all other IRC commands is preceded by a / and has the following syntax /DCC .
Below is a DCC table of commands
/DCC SEND ( sends a filename to another client ) /DCC GET ( acknowledges a DCC send from another client ) /DCC CHAT ( Initiates a Direct secure chat between 2 clients) /DCC CLOSE ( ends a DCC connection or offer) /DCC LIST ( shows current DCC connections *NOT implemented on mIRC*)

All are implemented by mIRC except /DCC list which is supposed to list the DCC connections that are taking place at the time. in order to explain how each command works lets assume that you did log on IRC with the nickname "Superman" , and another friend of yours is there on IRC with the nickname "Hunter" opening a parenthesis here , you can use /NOTIFY Hunter , so that whenever "Hunter" joins IRC , mIRC will announce *** Hunter is on IRC. So by adding the nicks you are interested into your *notify list* using the command /NOTIFY you know who is joining and when , along with you on IRC. To remove them from notify just type /NOTIFY nickname and the nickname is removed from the notify list.

/DCC send
=========
this is issued when ,yes you guessed it , you want to send a filename to nickname. Lets suppose that you "Superman" want to send c:\games\story.doc to "Hunter" you can either a) type /DCC SEND Hunter c:\games\story.doc or b) by clicking the Control-DCC-send command on mIRCs toolbar ,mIRC displays a window (Fig int2b.gif). You type Hunter as the recipient, and browse for the file or ,c) if Hunter is in the same channel with you , just click the Control-DCC-send command of mIRC by moving the pointer over Hunter and by clicking your right button you choose the DCC-send option and again you browse for the filename you are about to send. Note that before you send the file you can alter the packet size (number of bytes each packet of data contains) , and toggle fastsend ON or OFF.
The packet size is not fixed but you better set it somewhere between 2028 to 4096. 4096 is not necessarily the fastest ,so experiment. Fastsend is an experimental project of mIRC , which sends the next packet of information slightly BEFORE receiving an acknowledge from the receiver.Sometimes this has the opposite effect, so If you find that it slows your transfer rate then set it to OFF.


/DCC get
==========
mIRC, being a window client , makes things easier for "Hunter". The moment "Superman" issued the DCC send , "Hunter", instead of typing /DCC get Superman story.doc, will see a window popping up that says "Superman" wants to send you story.doc ..[Ok] [Cancel] All that "Hunter" has to do in order to receive the story.doc is to click [Ok] and the transfer from "Superman" to "Hunter" will begin. (Hunters mIRC , or better, Hunters client , will issue a /DCC get "Superman" story.doc , transparently without "Hunter" noticing a thing) Note that DCC sends Data in packets, rather than dumped in a stream manner. This allows the DCC SEND connection to survive where an FTP connection might fail.


/DCC chat
==================
talking on a channel can ,most of the times, be convenient for a user. There are times though, that 2 persons want to interact in absolute privacy. How ? ., with DCC chat. So if "Hunter" would like to chat with absolute safety and secrecy with "Superman" he types /DCC chat Superman. immediately Superman will see a small pop up window on his screen , saying "Accept dcc chat from Hunter ? " (Fiq dcca.gif). By clicking the button a DCC chat is initiated between the 2 clients (Hunter and Superman) , otherwise if Superman chooses the button or if he does not acknowledge the DCC chat coming from Hunter the DCC will eventually "time out" and close by itself. Another way is to use mIRCs dcc button on the toolbar. If you do that then mIRC asks you for a nick , in order to initiate a DCC chat with that specific nick (int2c.gif)


/DCC close
=================
Instead of the general /DCC CLOSE [] that IRC II uses to close a DCC connection ,mIRC uses a mIRC-specific command of the type /CLOSE -c [nick1] [nick2] ...[nickN]. -c denotes that your are to close the DCC chat connection with the nick you supply. IF you omit a nickname then all DCC chat windows are closed. You can of course use your mouse to close a DCC chat window.

Before moving on lets glance on the DCC options menu of mIRC (int2.gif). On_Send_request ,asks you what mIRC should do when a user DCCs you.
show_get_dialog, asks for acknowledge before connecting .
Ignore-all , will be ignoring all DCCs .
Auto-get ,automatically accepts all DCCs (A very bad idea cause you have no control of what is being send to you , so let it unchecked ).
Minimise ,automatically minimises the DCC window after acknowledge.
On_chat_request has the same options , but this time is about chat and not file transfer.
Time_outs , send/get_Transfer asks you for the time in seconds that mIRC can wait before closing the connection when the other client is not responding.
get/chat_dialogue, When you are DCCied , a dialog pops up and waits for you to accept or decline the DCC. The dialog will wait the specified number of seconds before disappearing.
maximum numbers of DCC-sends and Fileservers is the maximum number of REMOTE clients you can be connected with , regarding DCC. this apply to users who request a DCC SEND from you remotely. While you can initiate as much DCCs as you like.
Fileserving will be mentioned in a later article , but for now think of it as a DCC send connection.
Autoresume is a feature specific to mIRC , and to a couple of other clients like Pirch and Virc. If someone tries to send you a file that already exists in your dcc_get directory then mIRC usually pops up a dialog asking you if you want to overwrite/resume/rename the file. Checking this option forces mIRC to always resume a file automatically if it already exists. In order for this to work the other client must implement the DCC_resume_protocol of mIRC.
Dcc_get directory , The directory where received files are stored.

After the review of the DCC command , Lets move a bit closer to the client to client connection scheme.

You should know that DCC is a CTCP command. a bit confused ? Don't worry , keep those eyes on the paper you have in front of you !.
CTCP translates to Client_To_Client_Protocol. In simple words it is a protocol that defines the way data is transferred and verified between a pair of clients.
I will not go into the technicalities of CTCP , regarding octets and low level quoting, but analyse instead the basic CTCP commands and how to interpret them.
The proverb of "ask" and you will be "given" was meant for the CTCP commands. Rephrasing that we get, "request" and you will get a "reply". Thus by issuing a CTCP command (as a privmsg) to another client you "request" information from that client , and as a result , you get a "reply" (as a notice) from the client who received your CTCP command.
The command takes the form / CTCP [].The field may be of several types, new ones are introduced all the time, but there is a mechanism for you to find out what you can use ( see CLIENTINFO.)
Lets see What are the basic CTCP commands , and how to use them.

CLIENTINFO , Syntax CTCP CLIENTINFO []. CLIENTINFO returns the known CTCP commands from another client in a list. You can inspect commands further by calling 'CLIENTINFO VERSION' for example. You will (or should) be given a one-line explanation of what this command is supposed to do. To find out about your own client services, execute a CLIENTINFO on yourself: CTCP mynick CLIENTINFO.

FINGER , Syntax CTCP FINGER. will attempt to show the real name and idle time for the specified nickname.

USERINFO , Syntax CTCP USERINFO. returns whatever information a person chooses to put in their USER_INFORMATION field.

VERSION , Syntax CTCP VERSION. will show you the version and type of the client that a particular person is using.

TIME , Syntax CTCP TIME. will return the current time for the nickname specified. It asks the user's client for the time instead of the user's server, which it is unrelated to the user cause it can be a long distance away.

PING , Syntax CTCP PING [] Current time represents the number of seconds since Jan 1, 1970. when the other client receives the TIME command it replies with its own time. the difference is used to deduce signal travel time. You can use this to see how fast you are relative to another user (more on /PING command later)

ECHO , Syntax CTCP ECHO . Simply asks the remote client to return whatever you send to it.

ACTION , Syntax CTCP ACTION . This command can be used to send a description of what you are doing or how you are feeling or just about anything concerning you, to the current channel or query. It's just the low-level version of ME and DESCRIBE.

Following is a rather long list of a complete command set of mirc.You can experiment with them , step by step. Read carefully what each command does , cause how short the description may be , it is more than meaningful.
/ Recalls the previous command entered in the current window.
/! Recalls the last command typed in any window.
/action {action text} Sends the specified action to the active channel or query window.
/add [-apuce] {filename.ini} Loads aliases, popups, users, commands, and events.
/ame {action text} Sends the specified action to all channels which you are currently on.
/amsg {text} Sends the specified message to all channels which you are currently on.
/auser {level} {nick|address} Adds a user with the specified access level to the remote users list.
/auto [on|off|nickname|address] Toggles auto-opping of a nick or address or sets it on or off totally.
/away {away message} Sets you away leave a message explaining that you are not currently paying attention to IRC.
/away Sets you being back.
/ban [#channel] {nickname} [type] Bans the specified nick from the curent or given channel.
/beep {number} {delay} Locally beeps 'number' times with 'delay' in between the beeps.
/channel Pops up the channel central window (only works in a channel).
/clear Clears the entire scrollback buffer of the current window.
/clearall Clears all text in all open windows.
/ctcp {nickname} {ping|finger|version|time|userinfo|clientinfo} Does the given ctcp request on nickname.
/closemsg {nickname} Closes the query window you have open to the specified nick.
/close -icfgms [nick1] ... [nickN] This closes all windows of the specified type and nicknames.
/commands [on|off] Sets the Tools/Remote/Commands section on or off or checks its status.
/creq [ask | auto | ignore] Sets your DCC 'On Chat request' settings in DCC/Options.
/dcc send {nickname} {file1} {file2} {file3} ... {fileN} Sends the specified files to nick.
/dcc chat {nickname} Opens a dcc window and sends a dcc chat request to nickname.
/dde [-r] {service} {topic} {item} [data] Allows DDE control between mIRC and other applications.
/ddeserver [[on [service name] | off] To turn on the DDE server mode, eventually with a given service name.
/describe {#channel} {action text} Sends the specified action to the specified channel window.
/disable {#groupname} De-activates a group of commands or events.
/disconnect Forces a hard and immediate disconnect from your IRC server. Use it with care.
/dlevel {level} Changes the default user level in the remote section.
/dns {nickname | IP address | IP name} Uses your providers DNS to resolve an IP address.
/echo [nickname|#channel|status] {text} Displays the given text only to YOU on the given place in colour N.
/enable {#groupname} Activates a group of commands or events.
/events [on|off] Shows the remote events status or sets it to listening or not.
/exit Forces mIRC to closedown and exit.
/finger Does a finger on a users address.
/flood [{numberoflines} {seconds} {pausetime}] Sets a crude flood control method.
/flush [levels] Clears all nicknames from the Remote/users list that are currently not on your channels.
/font Activates the font selection dialog.
/fsend [on|off] Shows fsends status and allows you to turn dcc fast send on or off.
/fserve {nickname} {maxgets} {homedirectory} [welcome text file] Opens a fileserver.
/groups [-e|d] Shows all (enabled or disabled) groups defined in the remote sections.
/guser {level} {nick} [type] Adds the user to the user list with the specified level and address type.
/help {keyword} Brings up the Basic IRC Commands section in the mIRC help file.
ignore [on|off|nickname|address] Toggles ignoring of a nick or address or sets it on or off totally.
/invite {nickname} {#channel} Invites another user to a channel.
/join {#channel} Makes you join the specified channel.
/kick {#channel} {nickname} Kicks nickname off a given channel.
/list [#string] [-min #] [-max #] Lists all currently available channels, evt. filtering for parameters.
/load {-apuce} {filename.ini} Loads Aliases, Popups or Remote items into mIRC.
/log [on|off] Shows the logging status or sets it on or off for the current window.
/me {action text} Sends the specified action to the active channel or query window.
/mode {#channel|nickname} [[+|-]modechars [parameters]] Sets channel or user modes
. /msg {nickname} {message} Send a private message to this user without opening a query window.
/names {#channel} Shows the nicks of all people on the given channel.
/nick {new nickname} Changes your nickname to whatever you like.
/notice {nick} {message} Send the specified notice message to the nick.
/notify [on|off|nickname] Toggles notifying you of a nick on IRC or sets it on or off totally.
/onotice [#channel] {message} Send the specified notice message to all channel ops. (have to be channel OP)
/omsg [#channel] {message} Send the specified message to all ops on a channel. (have to be channel OP)
/part {#channel} Makes you leave the specified channel.
/partall Makes you leave all channels you are on.
/ping {server address} Pings the given server. NOT a nickname.
/play [-cpqmrlt] [channel/nick] {filename} [delay/linenumber] Allows you to play text files.
/pop {delay} [#channel] {nickname} Performs a randomly delayed +o on a not already opped nick.
/protect [on|off|nickname|address] Toggles protection of a nick or address or sets it on or off totally.
/query {nickname} {message} Open a query window to this user and send them the private message.
/quit [reason] Disconnect you from IRC with the optional byebye message.
/raw {raw command} Sends any raw command you supply directly to the server. Use it with care !
/remote [on|off] Shows the remote commands status or sets it to listening or not.
/rlevel {access level} Removes all users from the remote users list with the specified access level.
/run {c:\path\program.exe} [parameters] Runs the specified program, evt. with parameters.
/ruser {nick[!]|address} [type] Removes the user from the remote users list.
/save [-apuce] {filename.ini} Saves remote sections into a specified INI file.
/say {text} Says whatever you want to the active window.
/server [server address [port] [password]] Reconnects to the previous server or a newly specified one.
/sound [nickname|#channel] {filename.wav} {action text} Sends an action and a fitting sound request.
/speak {text} Uses the external text to speech program Monologue to speak up the text.
/sreq [ask | auto | ignore] Sets your DCC 'On Send request' settings in DCC/Options.
/time Tells you the time on the server you use.
/timer[N] {repetitions} {interval in seconds} {command} [| {more commands}] Activates a timer.
/timestamp [on | off] Sets timestamping on or off for all your conversations.
/topic {#channel} {newtopic} Changes the topic for the specified channel.
/ulist {level} Lists all users in the remote list with the specified access levels.
/url [-d] Opens the URL windows that allows you to surf the www parallel to IRC.
/uwho [nick] Pops up the user central with information about the specified user.
/wavplay {c:\path\sound.wav} Locally plays the specified wave file.
/who {#channel} Shows the nicks of all people on the given channel.
/who {*address.string*} Shows all people on IRC with a matching address.
/whois {nickname} Shows information about someone in the status window.
/whowas {nickname} Shows information about someone who -just- left IRC.
/write [-cidl] {filename} [text] To write the specified text to a .txt file.

Before I close this article please read about etiquette on IRC.

* Language: When you join a channel, try to use the language that most people on the channel understand / use. Most channels frown upon obscenities or profanity. Better to play safe and find out what's the accepted norm over the channel.

* Greetings: Using mIRCs /ON: facility to automatically say hello or goodbye to people is extremely poor etiquette. Nobody wants to receive autogreets. They are not only obviously automatic, but even if you think you are being polite you are actually sounding insincere and also interfering with the personal environment of the recipient when using autogreets. If somebody wants to be autogreeted on joining a channel, they will autogreet themselves.

* Lingo: On IRC, communication speed often matters when talking to others, and as a result, many shorthands have been developed by IRCers to convey the most amount of information in the smallest amount of keystrokes. Here are some common shorthands:

re - repeat hi, used when you have left a channel and rejoin it
brb - be right back!
bbl - be back later
bbiaf - be back in a few minutes
ttyl - talk to you later
rtfm - read the f* manual
oic - Oh, I see!
afaik- As far as I know
asap - as soon as possible
imho - In my humble opinion
rotfl - rolling on the floor with laughter
focl - falling off the chair laughing
wtf - who/what the f*?
u - you
2 - to
r - are
y - why
b - be
c - see
:-) smile or smiling (look at it sideways) often abbreviated to :) There exist many variations to smileys and frownies :-(
* Discussion: When you come to a new channel it's advised that you listen for a while to get an impression of what's discussed. Please feel free to join in, but do not try to force your topic into the discussion if that doesn't come naturally. If you are not sure about something then ask an operator ( @username) , they are most of the time willing to help you out.

* The NOT's: The following is a list of do not do's on most channels and over IRC as a whole:

-- Do not flood the channel with text. This can be extremely frustrating for people , and is likely to get you instantly kicked , and/or banned
-- Do not use beeps in your messages.
-- Do not copy paste private conversations , into the channel
-- Do not use profanity in your public messages. If you have to do that , do it in private (DCC or QUERY)
-- Do not harass another user with unwanted messages/comments etc.
-- Do not indulge in *destructive* behaviour which reduces the functionality of IRC. (such as running bots/ floodbots/nick colliders - this can lead to your system admin being notified).
-- Do not repeatedly join/part a channel

We have travelled a long way since the last issue. In the next issue I will explain better the commands of IRC , and how to use them. Also we will learn to customize the way mIRC works , and reacts on IRC by the use of scripts. Add to this a way to file_serve your friends , so as to let them browse your hard disk , while on IRC.

Chapter 3 (Interacting !!)

top top

There I was riding on a netsplit , when a soft voice from the sound card got my attention. " ..you have new mail ..". Oops its from the editor "..I am still waiting for your article ...". There goes , I will have to get cracking , so here it is ,part 3 of the 4 part series of articles about IRC and Mirc.

For those of you that were on deep freeze during the last decade , IRC is an acronym for Internet Relay Chat, a medium through which thousands of people interact live on internet using mainly text.
Lets make a short review of what was presented in the past 2 articles here in Internet.cy , about IRC and Mirc.
We found where Mirc (now in the 4.7 version) can be downloaded from , how to set it up , how to join ,among others, Undernet, how to enter a channel and exchange data with others ,and how to be in private chat with another user on IRC.

I did say that there are more , so lets see what else can also be achieved on IRC.
A feature of Mirc which is underused , and yet powerful , is fserve , an acronym (again) for File serving. Let us see what fserve means , and how it works.

Fserve , as a file serving command , allows another user (client) to browse your hard or any other disk , and view and/or download whatever is of interest to that user. All that works in the background , so while you are IRCing ,the user that you are fserving browses and/or selectively downloads files without any action from you. Before continuing, it is imperative that some things are clear about fserve and the dangers that fserve imposes on the offering client , the client (you) that offers fserve to another user.
If you are about to fserve a user you can control the following factors.

1) Home directory - the user can access files only within the home directory. So if for example you specify the home directory as c:\games\doom-tricks , then the user can only access the directory of \doom-tricks and below. there is NO WAY for the user to access directories above that home directory. Thus you can rest assured that only the things you specify are accessible , and your personal files are indeed protected !

2) maxgets - you specify the maximum numbers of simultaneous dcc gets (file downloads) that the user can have during a fileserver session. If the user attempts to download more files simultaneously Mirc does not send the file. This is to protect you from too much load , and is a way for controlling the penalty of lag , when you offer files , through fserve.

3) Welcome txt file - This is optional , and of no importance regarding safety of your personal files. it is a text file that is send to the user upon connection with you , in the fserving window.

Lets use simple words for the above and put fserve in action. So summarizing , with fserve you give restricted (or not) access to files located on a disk to anyone using IRC. File viewing ,selection and transfer initiation is dome by the fserved user , Who in fact uses DCC chat offered by you.

Now , lets double click the Mirc Icon and join IRC. Suppose that on our hard disk there is a directory containing pictures of the JPG form of old motor bikes (yes .. Old motor bikes :))). That directory could be C:\pictures\motorb. While we are on IRC another user with the nick BIKER , that shares the same interest with you asks you if you can send him some old motor bike photos. You ofcource can achieve such a mean feat by using DCC-send , as we already described in the past article , but ooh No , there is a more elegant way of doing this.
Having in mind the fserve command , and knowing that the format of the command looks like ...
/fserve we proceed to type the following ....

/fserve BIKER 3 c:\pictures\motorb
We did not included the optional welcome.txt file coz we did not had any :)
If you wanted to automatically greet the user , the moment we connects with you , you can build a Welcome text file using any editor (notepad) in which you could for example type the following.

--------------------------------------------------------------------------------- Welcome to my Collection of Pictures of Old motor Bikes.
Please feel free to browse around , and collect what you like.
maximum number of files you can simultaneously download is 3.
The commands you can use are
DIR to see the directory listing
CD to change directory
GET file to get the file
EXIT or BYE terminates the connection.

I would be ok if you can send back some photos I do not have.
---------------------------------------------------------------------------------------

lets now save that file as C:\pictures\motorb\welcome.txt and modify the command we are about to issue to ..
/fserve BIKER 3 c:\pictures\motorb c:\pictures\motorb\welcome.txt
The result of the command is that BIKER , will see on his screen a window very similar to a DCC-chat window. If he decides to accept your offer , then in that window , he will see the welcome.txt file , and he will be free to use the commands of GET ,DIR, CD, etc.
You , at your own screen will be able to see , in your own fserve window , what BIKER is doing. every command that BIKER issues bounces back to you , and you can watch it happen in your own fserve window.

Things you must remember !

-It is better to have small directories , thus small number of files in a directory. It is better to split your files into categories and sub directories , to make things easier for the user that tries to list the files.

-If the user remains idle for too long , then the fserve windows closes by itself. you can specify the idle time out in the DCC-options dialog.

-A user is limited to opening a single fileserver session at any one time. If mIRC initiates a fileserver session to a user and that user doesn't respond then the fileserver session will have to time-out and close before that user can ask for another session.

-before you fserve anyone make sure you know the limitations and danger of fserve. reread the article again if you are not sure .

After covering the fserve concept , we will move on to explain , a number of things that can make our life easier on IRC.
is important to know , how the server we are connected to , knows when our connection is live and why the server disconnects us.
If we close our modem or close our computer without disconnecting from IRC , then the server realises that we are no longer there. How ?. every fixed period of time , the server PINGs us. If no reply is send over to the server by our program then , the server considers our connection dead, so it just disconnects us. This is to make sure that the nicknames that you see on IRC are really there.
Another reason for disconnect ion is , as we saw in the previous article , the transfer of data from the server that is more than the accepted level (more than 1024 bytes of unprocessed text). this happens if for example we try to LIST all the channels on undernet.
If you did read the past articles of Internet.cy , you are familiar with the CTCP commands of PING , ECHO , VERSION, TIME etc.
Some users ,mainly new to IRC , try to Flood others by issuing , numerous PING,VERSION,ECHO etc commands to the user that they want to flood. This is not accepted on Undernet , and if proof is at hand then the whole site , on which the Flooder has his account can be Banned from Undernet.
Suppose someone (and there are many) try to pull this on you. You can realise that something wrong is happening , by looking at your status window. If repeats of PING, ECHO , or similar commands are issued over to you. then the nick that issues the commands tries to flood you. If no action is taken you will find yourself disconnected.
You can connect again , by loosing valuable time , and touch with others !.
There comes though handy the IGNORE command. If you cannot locate the user that floods you (he can change nick repeatedly) just type /IGNORE *!*@* By doing this , you ignore Everyone , on IRC , and that gives you time to locate the flooder with /WHOIS .
after /WHOIS you can use /IGNORE . for example Flooder@irc.net.
To stop the ignoring just type /IGNORE OFF.
This is the simplest and most effective protection available. Have it in mind when someone tries to harass you with numerous CTCP commands.

Before closing this article , I will shed some light on numerous things that users ask a lot on IRC, and for which a number of people e-mailed me.
Q) Last time almost all of the users in the channel left , and after a while , they all came back. Why do they do that ?
A) Undernet is composed of several servers.If a server is disconnected (splited) from the system then the rest of the users in a channel see the users, that use the server that splited, to sign off. When that particular server reconnects to the system, it looks like they all enter the channel, together. Have in mind though, that the users that splited , see you sign off , and when they reconnect , see you enter the channel. All is relative :)

Q) What that +tn etc means on top of the channel window ?
A) these are few of the channel modes that re set by the operators of the channel. An operator is the user that has a @ infront of his nick. the modes are set with the command /MODE #channel [+ / -] modecharacters [parameters]

modecharacters parameters
---------------------- -------------------
b ban somebody, in "nick!user@host" form
i channel is invite-only
l channel is limited, users allowed max
m channel is moderated, (only operators and +v users can talk)
n external /MSGs to channel are not allowed
o makes a channel operator
p channel is private
s channel is secret
t topic limited, only operators may change it
k set secret key for a channel

Q) how can I change the modes for my nickname and what they mean ?
A) by issuing the /MODE [+ / - ] yournickname modechar

modeChar Effects on nicknames
------------- -----------------------------
i makes you invisible to anybody that does
not know the exact spelling of your nickname
o IRC-operator status, can only be set
by IRC-ops with OPER
s receive server notices
v gives a user a voice on a moderated channel

Q) how can I see the statistics of the server I am using ? and what port is the faster ?
A) bye typing /STATS L you get info about which port is faster. you can then reconnect using that port by /server theserver-you -stat-L fastport. Example ...
/STATS L
RockHill.SC.US.Undernet.Org 0 33145769 2437661 16272030 979945 175374 ---- total
Connection SendQ SendM SendKBytes RcveM RcveKBytes Open since
RockHill.SC.US.Undernet.Org[*.4400] 0 571646 47014 768961 44036 175379
RockHill.SC.US.Undernet.Org[*.6660] 0 1289353 87515 175197 14083 175379
RockHill.SC.US.Undernet.Org[*.6661] 0 787523 60178 144821 12718 175379
RockHill.SC.US.Undernet.Org[*.6662] 0 865787 69029 188613 16174 175379
RockHill.SC.US.Undernet.Org[*.6663] 0 1403583 106181 326336 30580 175379
RockHill.SC.US.Undernet.Org[*.6664] 0 1901413 158882 402808 34327 175379
RockHill.SC.US.Undernet.Org[*.6665] 0 2097079 162051 456719 37620 175379
Thus by using port 4400 we get a faster connection , due to the fact that the specific port is not crowded. it has a small number of send-Kilo-Bytes over the network.

Q) How can I find an IRC operator ? or the server administrator ?
A) /STATS O , /ADMIN

Q) Someone banned me , while I was in channel , is that good ? or bad ?
A) If your actions on the channel , were out of line , then an operator can BAN you , but you are still in the channel. by BANning you can no longer "talk " in the channel thus you remain an observer , for as long the ban remains in effect. If you don't know the reason for the ban you can /DCC an operator and ask for the reason.

This is all for now , As this article was prepared in less than 4 hours , I would ask for your understanding for any typos :) Take care , until the final article on IRC ...

Chapter 4 (Do-it-yrself !!)

top top

Greetings to all , hope you have used some of the info presented in the past 3 articles of Internet.cy about Mirc. This Last article , concludes the series about Mirc and IRC. If you did read the 3 previous ones , and understand this Last one , then everything is open for you to do whatever you like with Mirc and IRC.
I hope this Article will make it before the deadline ,otherwise , If you find out that I was killed then the killer will be the Editor... :) a joke Isaia , .. a joke !

Ok ... lets begin with a short review of what was presented in the past 3 articles here in Internet.cy , about IRC and Mirc. We found where Mirc (now in the 5.something version) can be downloaded from , how to set it up , how to join ,among others, Undernet, how to enter a channel and exchange data with others , how to be in private chat with another user , How to Fserve , exchange data , and find a quick server.

In this Article , you will learn how to customise mirc, how to automate it, and how to make everything happen.Stay with me until the end , you will not regret it.

mIRC has 3 sections which can be "programmed" in some way:

The best way to learn and understand the way these sections work is by studying them in consecutive order. Really! Please don't try to take a shortcut to the Remote sections before you really understand the Aliases and Popups. The lessons you'll learn from each are cumulative. (A note for those familiar with ircii: mIRC's aliasing syntax is similar to ircii's, but not exactly the same. mIRC's Remote Command and Event sections allow you to implement many of the same things you can do with ircii scripting, but the structure and syntax are a bit different.)

The Aliases section

top top

Under Tools/Aliases... the Aliases section will be found.

In this section you can define shortcuts for often-used commands such as join, part, quit, opping and deopping, and whatever else you want. Even things you frequently say can be placed in an alias... In general, ALL commands which can be used in the edit box (the line or lines you normally use to talk/type in) can be used in an alias. Aliases can also be used to execute several commands at once. You can even define aliases that are launched by the function keys F1 - F12.... (Finally some use for those never touched keys..) In mIRC you can even call an alias from popup menu's and remote lines.

Creating Aliases

top top

OK, let's start right off the bat with an example. To join a channel, you normally have to type:
/join #{name} ...where #{name} is the name of the channel, of course. Since this command is used so often, it'd be nice to use it by typing as little as possible, right? So let's create an alias for "/join #{name}" -- let's create a shortcut.
Instead of typing "/join #{name}", let's make it so that we can type "/j #{name}" with the same results. In that case, the Alias would be: /j /join $1
(You don't have to understand exactly what that means to mIRC at this point, just what it will do. I'll explain the alias syntax shortly.)
Give it a try by placing the line "/j /join $1" in the Aliases list under Tools/Aliases (if it isn't already there). Then try it out on the command line (where you normally type) with a simple command like:
"/j #test".
You'll see that "/j #test" now does exactly the same thing as "/join #test" -- it joins you to a channel named #test. This construction is called an alias.

Alias Syntax.
Aliases use the following format: "/{aliasname} /{command}"
In other words, first your "shortcut" name (like "/j" in the example above), then a space, and then the actual command your shortcut is pointing to (like "/join" in the example above).
But it doesn't stop there. Aliases also use a number of special STRINGS. There are three pre-defined strings (#, $me and $! ) which always mean the same thing to mIRC (new predefined strings are the $read [-l#] and $url .... I'll discuss them later too.), and then several variable strings (such as $1, *1, $$1, $?, #$1, #$$1, and even #$?). Don't worry, we'll explain all of these in good time.
Right now, let's concentrate on $1. After all, that's the string we used in our example above:
/j /join $1
$1 means "the first word typed after the Alias, whatever that may be." So if you type "/j #test", mIRC knows that this is a shortcut for "/join #test". If you type "/j #hello", it will know that this is a shortcut for "/join #hello".

Example: Multiple Commands
Now, let's say that you'd like to join several channels at once. You can make an alias to do this. Just separate the commands with the | character (on most keyboards, this is the shifted version of the \ backslash key).
Let's say that you'd like to be able to type "/j3" and then follow it with the names of three channels, and they'll all be joined at once. The alias would be:
/j3 /join $1 | /join $2 | /join $3
So if you placed this alias in Tools/Aliases and you were to type:
/j3 #test1 #test2 #test3
...mIRC would "/join #test1", then "/join #test2", and then "/join #test3". In this case, you see that $1 means the first word typed after the Alias. And $2 of course means the second word, and $3 the third.
Now, mIRC is obviously expecting three words -- your channel names. So what would happen if you just typed "/j3 #test1" ? mIRC would complain about the missing parameters, as it's expecting more channels to be named. There is a solution to this problem, the $$1 string, which will be explained later.)
Example: /say
Let's say that there's something you find yourself typing into a channel all the time, like your home page address, a greeting, etc. Take a look at these alias examples using the "/say" command: "/say" simply types the indicated text into your current channel or private message window. (On some systems, you may need to scroll to the right to see the full text of these and other examples.)
/hello /say Hello to all of you...
/www /say The mIRC page is at http://metro.turnpike.net/mookies/mirc.html
/lines /say This is the first line | /say This is the second line | /say This is the last line
The last examples show how to /say multiple lines of text in one alias. Just separate the commands with the | character. You also see that not all aliases always have Strings in them.

Actions in an alias.
Example: /me
/fun /me thinks this is fun!
/hug /me hugs $1 firmly!
The second example uses a string, $1. If you were to type "/hug everybody", this would be equivalent to "/me hugs everybody firmly!"

Example: Shared Strings
Multiple commands can also share the same string.
/jtest /join $1 | /topic $1 just testing
In this alias definition the parameter $1 is used twice. If you were to type "/jtest #test", it would first join the channel #test, and then change the channel topic to "just testing."
Another example along the same lines:
/love /say I love $1 ! | /say I really love $1 !!
If you were to type "/love everybody", mIRC would know to "/say I love everybody !" and then, "/say I really love everybody !!"

Example: Mode Changes (Opping, etc.)
To put your often-used mode changes in the aliases section, you first need to know the normal structure of the mode commands (see chapter 3 , channel modes). Opping somebody on IRC normally requires the command:
/mode #{channelname} +ooo {nick1} {nick2} {nick3}
in which up to 3 persons can be mentioned. This can be nicely aliased with: /op /mode # +ooo $1 $2 $3
To op John, Jake, and Joan, now you can just type: "/op John Jake Joan" The # in this alias shows the use of one of the other pre-defined strings (# and $!). The # always stands for the #channelname of the channel on which the alias is used.
In the same way you can make aliases like...
/deop /mode # -ooo $1 $2 $3
/ban /mode # +b $1
/kick /kick # $1
/dbk /mode # -o $1 | /kick # $1 | /mode # +b $1
IMPORTANT: Proper spacing! This is very important! You MUST include spaces between strings and the rest of your text! For example:
/like /say I really like $1!!! ...will NOT work! There needs to be a space between the string "$1" and your "!!!"'s. (This can sometimes make your text look awkward when using commands like /say, so be careful with your phrasing)
/like /say I really like $1 !!! ...WILL work just fine.
This is true of ALL strings. To make one particular case easier, specifying channels, a few special strings have been created that automatically prefix the parameter with the # character. These are #$1, #$$1, and #$?. See below for details.
In SOME cases you CAN do: /like /say I really like $1's topic, but keep in mind: NOT ALWAYS !! You have to test this in every case you want to use it.

Where can you use Aliases?
Aliases can be used in the edit box (the line or lines you normally use to type commands in), and you can even use aliases in the Popups and the Remote sections that will be explained in the following sections. The function key aliases can also be used on selected nicks in the channel names-list and in query windows, etc....depending on your alias definitions. It is even allowed for aliases to call other aliases, or even to call themselves recursively. As a safeguard against infinite loops, the default maximum recurse depth is set at 5. This can be changed with the /maxdepth command. The minimum depth allowed is 1 (aliases can't call other aliases) and the maximum is 100. Calling aliases from within aliases uses quite a bit of memory, so this might cause problems in certain situations where memory is low etc. In case one of your aliases or remotes got into a loop use the CTRL+Break key combination to stop the process.

Special Alias Definitions ; The Function keys.
A special alias definition is possible which can launch commands using the Function keys. Define some aliases as follows:
/f1 /say Hello to you all
/f2 /topic # This is a new topic
You now can type "/f1" to say hello to all on a channel ... but pressing the "F1" function will also work !! Other examples:
/f5 /me will happily send you the new mIRC.
/f6 /join #mirc
/f9 /dcc send $1 c:\serve\mircfq18.zip
/f10 /dcc send $1 c:\serve\mirc364.zip
/f11 /dcc send $1
The F9 key will send the mIRC FAQ to a person selected from the channel names list. Don't forget to select a nick first ! If you don't, you will see strange (but logical) things... You can even use the F9 key in a Private, Query or DCC Chat window with this alias definition ! The F11 key will prompt you for the nick to whom to send a file...Well.... invent your own custom use of the F keys ..... have fun ! You can also use -shift- and -ctrl- in combination with the F keys. Just define aliases like :
/f1 /say I used F1 to say this
/sf1 /say I used Shift+F1 to say this
/cf1 /say I used CTRL+F1 to say this

Using evaluation brackets.
You can now use [ and ] evaluation brackets in aliases to control the order of evaluation of identifiers. The brackets can be uses in popups and remotes as well. Identifiers within brackets will be evaluated first, from left to right. You can also nest brackets. This allows you to evaluate things any way you like... The brackets will not show in the resulting text or command. Example's are :
/note /notice $1 " $+ [ $read [ -s + [ $2 ] ] c:\text\note.txt ] $+ "
/sayvar /say % [ $+ [ $1 ] ]
Definitions without evaluation brackets are evaluated the same way as before.

String Definitions

top top

By now, you should have a decent grasp of the Aliases section. You might be interested in a full list of the strings and identifiers that you can use in your aliases and, later on, in popups and remote definitions as well, by now? The next two sections will introduce them all. At this point, make sure to try all of the examples given until you fully understand how to do it yourselves!

$1

*1 $$1
$?
$?="text"
$!
#$1 -and- #$$1 -and- #$?

Identifiers

top top

#

$me $read [-l#] {filename.txt} $readini {inifile} {section} {item} $url $ip Your IP Address.
$server The server you use.
$active The name of the active window in mIRC.
$time The time on your PC.
$away Tells you if you're set away or not.
$ticks Returns the number of ticks since your O/S was first started.
$idle Returns same idle time as that returned by ctcp userinfo and finger.
$online Returns the number of seconds elapsed on your online timer.
$ctime The number of seconds elapsed since 00:00:00 GMT, January 1, 1970.
$asctime(N) Returns ctime values in a full date text format.
$day The current day. (Monday, Tuesday,...)
$date The date (european order) alternatively use $adate (american)
$fulldate or $day.
$duration(seconds) Translates numbers like 123456 into 1day 10hrs 17mins 36secs.
$logdir, $getdir, $wavedir, $mircdir Return the paths to these directories.
$nopath(filename) Returns only the filename with no path.
$nofile(filename) Strips the filename and returns the remaining path.
$exists(filename) Checks if the given filename exists. (Returning $true or $false)
$findfile(dir,filename,N) searches the specified directory tree for the Nth specified file.
$abs(N) returns the absolute value of number N.
$chr(N) returns the character with ascii number N.
$asc(C) returns the ascii number of the character C.
$len(text) returns the length of "text".
$upper(text) returns "text" in uppercase.
$lower(text) returns "text" in lowercase.
$left(N,text) returns the left N characters of 'text'.
$right(N,text) retufrns the right N characters of 'text'.
$mid(S,N,text) returns N characters out of 'text' starting at S.
$pos(string,substring) returns the position of substring in string.
$replace(string,substring,replacement) replaces a substring in a string.
$remove(string,substring) removes a substring from a string.
$strip(text) Strips out all bold, underline, reverse, and colour control codes from text.
$count(string1,string2) returns the number of times string2 occurs in string1.
$str(N,text) returns "text" repeated N times.
$rand(X,Y) returns a random char inbetween X and Y.
$lines(file) returns the number of lines in the specified file.
$usermode Returns your current personal mode.
$topic(#) returns the topic of channels which you're currently on.
$nick(N,#) returns Nth nickname on channel #.
$snick(N,#) returns Nth selected nickname on channel #.
$opnick(N,#) returns Nth Op nickname on channel #.
$nopnick(N,#) returns Nth non-Op nickname on channel #.
$vnick(N,#) returns the Nth voiced nick on a channel.
$nvnick(N,#) returns the Nth non-op/non-voice nick on a channel.
$query(N) returns the Nth query window you have open.
$chat(N) returns the nick of the Nth dcc chat window you have open.
$fserv(N) returns the nick of the Nth file server window you have open.
$send(N) and $get(N) return the nick of the Nth open send/get window.
$notify(N) returns the Nth notify nick currently on IRC.
$token(N,C,text) returns the Nth token in 'text' separated by character C (C is the ascii number of a character)
$addtok(text,token,C) adds a token to the end of text but only if it's not already in text.
$findtok(text,token,C) returns Nth position of token in text.
$gettok(text,N,C) returns Nth token in text.
$instok(text,token,N,C) inserts token into Nth position in text even if it already exists in text.
$remtok(text,token,C) removes 1 matching token from text.
$reptok(text,token,new,C) replaces 1 matching token with new token in text.
For the above identifiers you can specify N as 0 (zero) to get the total number of nicks/channels/etc. for that identifier.
$snotify returns the nick currently selected in the notify window.
$address returns the full address of the user that triggered a remote line.
$address(nickname,type) which scans the internal address list and returns a users address if it's found.
$maddress returns the currently matched user address for an event in the remotes.
$level(address) finds a matching address in the remote users list and returns its level.
$ulevel returns the remote user levels that matched for an event.
$clevel returns the remote command levels that matched for an event.
$dlevel returns the remote default user level.
$mask(address,type) returns the address with the specified mask type.

Identifiers and variables can be placed inside the brackets.
Example:
/echo $right(3,$left($len(goats),ToMooOrNotToMoo)) results in ' Moo'

Identifiers with properties.
Several identifiers can be used with special parameters attached. This eases up remembering their syntax and might help a lot in scripting. The syntax is $identifier(N|#|nick).property
$server(N) Gives access to the servers list under File/Setup/IRC_Servers.
$server(N) for the address, .desc for the description, .port for the port, .group for the group.
$ial(mask,N) Gives access to the Internal Address List.
$ial(mask,N) for the full address, .nick for the nick, .user for the user, .host for the host, .addr for the address.
$url(N) Gives access to the urls list.
$url(N) for the address, .desc for the description, .group for the prefix
$chan(N/#).property Returns several 'channel' settings of channels which you're currently on.
$chan(N/#) returns channel name, .topic, .mode, .key, .limit,
$chat(N) nickname, .ip, .status (active, waiting, inactive)
$fserv(N) nickname, .ip, .status, .cd (current directory)
$get(N) nickname, .ip, .status, .file, .size, .rcvd, .cps, .pc
$send(N) nickname, .ip, .status, .file, .size, .sent, .lra, .cps, .pc
$timer(N) Returns the timers you've active
$timer(N) for the id, .com, .time, .reps, .delay, .type

User-definable identifiers.
As you just learned mIRC has a large number of built-in identifiers that you can use in your alias and remote definitions. It is also possible to make your own identifiers, and they can be configured to do virtually whatever you want! The identifiers are programmed in the alias section, and look exactly the same as an alias, with the only exception that at the end there is a /return X. You can have the identifier return whatever you want. For example, the sum of two numbers:

/sum {
%temp = $1 + $2
return %temp
}

Now you can use the $sum identier anywhere in aliases, popups, or remote. For example in the popup item:
Add:/say The sum of 45 and 78 is $sum(45,78)
Or the Alias:
/add /say The sum of $1 and $2 is $sum($1,$2)
(btw. it makes no sense to give a command like /sum .. that wont work)

All parameters given to the identifier are seperated with commas. You can use all usuall if/then/else structures to in the identifier definitions. You could for instance check if all the required parameters are there, and return an Error command instead. For example, this routine that calculates what percentage X is of Y.

/perc {
if ($1 == $null) || ($2 == $null) { return Error not enough parameters }
if ($2 != 1) { %half = $2 / 2 } | else { %half = 1 }
%dummy = $1 * 100
%perc = %dummy / $2
%remainder = %dummy % $2
if (%perc == 0) { goto return }
elseif (%remainder >= %half) { inc %perc }
:return
return %perc
}

The first line makes sure all the parameters are there. The rest is calculation of the percentage, where part of it is used to make sure the total adds up to 100%. The identifier would be called with, for example, $perc(56,100) which would display 56% Numbers aren't the only thing you can return with an identifier. You can also make it return text, or combinations of text and numbers, for example, the time in american format (7:52 pm):

/atime {
set %hr $token(1,58,$time)>
set %min $token(2,58,$time)
if (%hr == 0) { set %hr 12 | set %sub am }
elseif (%hr < 12) { set %sub am }
elseif (%hr == 12) { set %sub pm }
else { %hr = %hr - 12 | set %sub pm }
return %hr $+ : $+ %min $+ %sub
}

With a little creativity you can make identifiers for anything you want. For example, backwards talking, or highlighting every other letter. Have fun!

The Popups section

top top

Popups are the menus that appear when you right-click with your mouse. If you haven't found this nice feature of mIRC already, give it a try NOW! Some popup menu's are predefined in the mIRC.ini from the mirc.zip-file, but they are fully customizable under Tools/Popups. If your copy of mIRC doesn't seem to be equipped with some prefab popup menu's (the Tools/Popups section is empty then), it is almost certain that you didn't make sure that the prefab popups.ini file was correctly copied from the mirc.zip to the mirc directory, or the path to where this prefab popups.ini can be found is not correctly specified.

The popup commands work almost exactly like aliases. All of the strings mentioned in The Aliases section are allowed in popups (and vital for the proper use of them). If you haven't read the Aliases section, please do so now! You need to know that information before moving on.

Also: Definitely read the Help file's explanation of popups, as well as take a look at the many popup examples included in mIRC under Tools/Popups. The more examples you try, examine, and mess around with, the better your grasp of mIRC will be.

Example: /join
Let's say that you join a particular channel frequently, #test. Rather than having to type in "/join #test", wouldn't it be easier to just right-click and select a menu item to join you there automatically ?

The following popup would do that. Just enter it into Tools/Popups, making sure that "status" is selected at the top. (Not Query/Chat window, Channel Names List or Menu Bar!)

Join the Test Channel:/join #test
Now right-click over your Status window and select "Join the Test Channel". mIRC will do exactly that.

Example: /away
Here's an example of "away" and "back" popups... you type in the reason you're away, and it's sent to all the channels you're on. (That's what the /ame command does, it sends a /me to every channel you're on.)

Set Away...:/ame is AWAY ( $?="Give a reason" ) | /away try later ( $! ) !!
Set Back:/ame is BACK | /away
(Note again that on some systems you may need to scroll to the right to see the full text of some examples.) Notice that the "Set Away" example uses multiple commands.

Heirarchal Menus
If you were to add a few popups like that, your screen would quickly get cluttered every time you right-click. So you can organize your popups into heirarchal menus. Try entering all of the following popups:

Say Things
.Hello:/say Hello folks
.Goodbye:/say Goodbye folks
.Hug Somebody:/me gives $? a big hug

Here we're specifying that the last three commands should show up _under_ "Say Things" by: 1) including them after "Say Things", in the order we want them to appear, and 2) prefacing them all with "." <-- a period.
When you right-click, you'll see the "Say Things" menu item. When you select that, you'll see "Hello", "Goodbye", and "Hug Somebody" menu items. Select from those to perform one of the actions specified above. If you want to get really complicated, you can make your popups many levels deep. For example, try:

Comment About People
.Compliments
..Nice Today:/say Wow, $? -- you're being very nice today!
..Helpful:/say Thanks for being so helpful, $?
..Friend:/say I'm glad to have $? for a friend.
.Insults
..Jerk:/say Leave me alone, jerk!
..Idiot:/me wonders why $? is such an idiot sometimes.
..Enemy:/say I'm proud to have $? as my enemy!

And so on! Just order them properly, using the periods. (If the manner in which the above is organized doesn't "click" with you, definitely try it out! Enter the above "comment" section into Tools/Popups. It's a lot easier to grasp when you see it working.)

All popup menu items can be put under a Function key too! That's handy as a replacement for often-used popups....(Make sure to use the correct syntax and put them [ie.the function key replacements] in the alias section)

The Remote Section

top top

The Remote section can be found under Tools/Remote/. Clearly the most advanced part of mIRC, you can do things with mIRC's Remote section that would normally require scripting or special bot software..

Things like: offering files (an XDCC list); responding to specific channel or private message text; customizing CTCP responses; setting up various user levels for your friends; ...almost anything that happens on IRC can be automatically responded to, and your response can make use of almost any mIRC command or commands.
The Remote syntax can be a bit complicated at times, but it's a simple extension of the formats explained previously for Aliases and Popups. If you understand those well, including the Strings, then please proceed. If not, go back and read again .The information presented there is ABSOLUTELY REQUIRED LEARNING before attempting Remote.

It's also important to remember why Remote is called Remote. The Remote section is designed to respond to things done by users OTHER than yourself -- in effect, it allows others to "remotely control" your mIRC session, according to the specific Remote features you implement. Many examples can't be tested by simply sending the commands or typing the text yourself. They have to be sent by some other client.

Remote consists of three parts:Remote Users (the user list),Remote Commands, and Remote Events.

Remote Users

top top

See Tools/Remote, the box at the top left labeled "Users"..In this part of Remote you can assign various user levels. You can assign certain levels to your friends and certain levels to your "enemies", and a host of levels in between.

Why is this important? Let's say that you've written a Remote Event designed to kick anyone who says the word "nonsense" in your channel where you are am operator . (just replace this in your head with whatever foul word you'd like). We'll explain how to do this later , but for now it's just the idea that's important. Sounds reasonable, right?

OK, but perhaps you'd ONLY like regular users to be kicked for saying "nonsense." You'd like some of your friends only to be warned. And you'd like to ignore it from still others, perhaps your closest friends. And if you don't care for someone much at all, perhaps you'd like to kick AND ban them for saying "nonsense"!

To do these kinds of things (give different responses to different people), you need to setup a users list. For each user, you'll specify their nick or address and the user level you've decided to assign them.

Here's an example of a valid user list:
1:nick1
1:nick2
2:nick3!account3@machine.subnet.net
2:*!account4@machine.subnet.com
3:*!*@machine.subnet.edu
4:*!*@*subnet.edu
5:*!account@*.subnet.edu
10:yournick!youraccount@yourmachine.net

The numbers you pick for the user levels are completely up to you. You can decide what each of the user level numbers can and cannot do, as you'll see in the next two sections. By default, mIRC assigns everyone not specified in the user list to level 1. (Depending on the setting in Tools/Remote/'Default level'. If you specified different levels to different users you of course also need commands and events that have different reactions or power to users of these levels... That will be explained later..As you can see, either a nick or an address are permissible. Wildcards are allowed. There are some cases where you might want to specify your users twice, by both nick and address.

You don't have to do all the editing by hand ... you could also use mIRC's edit box or command line commands /auser,/guser and /ruser.

/auser /auser {level} {nick or address}
'Auser' (Add user) adds whatever nick or address you specify to the users list at the level you specify. It does not check for a valid address. The nick or address is added exactly as you stated it.

/guser /guser {level} {nick} [type]
'Guser' (Get user) adds a nick to the users list specified by address. To accomplish this mIRC does a /whois on the nick you specify, and adds the returned address at the specified level to the users list. This means that the specified nick has to be on IRC to be able to use the /guser command to add him/her to the list. By specifying the 'type' mIRC can add a user with several types of wildcarded addresses. This is analogous to the 'type' parameter used in the /ban command. Type ranges from 0 to 9.

/ruser /ruser {nick or nick! or address or nick [type]}
'Ruser' (Remove user) removes a nick or address from the Users list. You must know exactly how the nick or address is stated in the User list for this command to work. If somebody is listed like nick!blabla@whatever.net you can also do "/ruser nick!". Mind the "!" to remove the entire line.In mIRC version 3.5 an improved /ruser command was made so that it can work like /ban and /guser. /ruser {nick} [type] . if you do NOT specify a type, then it works as usual and removes the specified nick from the user list. If you DO specify a type, it looks up the users address and removes that address from the user list.

Note: Using different address types allows you to specify a person or group of people with more or less wildcards. I'll show you the different results. If no type is mentioned type 6 is default;
Kreet!*vonck@Wit399402.student.utwente.nl
type 0; *!vonck@Wit399402.student.utwente.nl
type 1; *!*vonck@Wit399402.student.utwente.nl
type 2; *!*@Wit399402.student.utwente.nl
type 3; *!*vonck@*.student.utwente.nl
type 4; *!*@*.student.utwente.nl
type 5; Kreet!vonck@Wit399402.student.utwente.nl
type 6; Kreet!*vonck@Wit399402.student.utwente.nl
type 7; Kreet!*@Wit399402.student.utwente.nl
type 8; Kreet!*vonck@*.student.utwente.nl
type 9; Kreet!*@*.student.utwente.nl

A last remark; A user level can now even be a word, for example: mircop:*!*@mardam.demon.co.uk (You can use this with events like op:ON JOIN:#mirc:/mode $chan +o $nick). mIRC now keeps an internal database of the people on the channels you are on. This database is used to speed up the performance of commands like /ban, /guser and /ruser a whole lot. These commands normally will make mIRC do a /whois on the person you issue the command on. The internal list stores info like nick!user@address for all users that are on the same *channels* as you. Whenever a /guser, /ruser, /ban, /finger, /ignore or /dns command is issued, the internal list is searched first to find the nick's address. If no match is found, the normal /whois stuff is done. This will speed up your bans a lot...especially when you're lagged... If you are on a slow PC and/or you are on a lot of large channels, mIRC's updating of the database might slow you down quite a bit ... then its probably good to switch it off ! In the Tools/Remote dialog you can deselect the use of the 'Internal Address list'.

Remote Commands

top top

See Tools/Remote, the box at the bottom, with "Commands" selected.
Remote Commands refers to a very specific type of command: CTCP commands. The Remote Commands section of mIRC does one thing and one thing only -- it allows you to make mIRC respond to CTCP commands sent by other users the way -you- wish. There are a lot of ctcp commands defined according to the IRC RFC's (standards). The usual ones are version, ping, time, userinfo, clientinfo and finger. Every IRC client will respond in a standard way if one of these commands is send to it. These ctcp commands are sent by or to you in the format:
/ctcp {yournick} {command with parameter(s) if any}
Consider the simple example of a ping. The other user would type:
/ctcp {yournick} ping
(You can also send yourself a ping command! Try it! Type "/ctcp {yournick} ping". Under normal circumstances, mIRC would send a standard ping reply [ctcp hisnick pong]. But with Remote Commands, you can redefine the program's response to the ping. It can now do almost whatever you'd like it to do when it receives a ping. On top of that, it can also send a normal ping reply. Or not. It's up to you. There is ONE exception to this ... you cant hide your version reply. advertisement, you know. You can also create new CTCP commands, and responses for them. This is how features like file offering (XDCC LISTs and SENDs) are handled. But right now, let's get back to our ping example.

Example: Custom Ping Response
Place the following example into your Remote Commands. Go to Tools/Remote, make sure that "Commands" is selected, and "Listening" is checked, (When "Listening" is not checked, Remote Commands are ignored.) and write in the commands box:
1:ping:/notice $nick ping? Hmmm! ...pang pang pang!!
Now if someone pings you, your reply will be "ping? Hmmm ! ... pang pang pang !!" in a notice sent to the person who pinged you, and not the normal reply being 'pong'. Test this by giving the command "/ctcp {yournick} ping"! If it doesn't work make sure your Remote/Commands section is set to 'Listening'! Or set it to active by the '/remote on' or '/commands on' command. If you want mIRC to -not- give the default ping reply on top of your custom one you can block the default processing by the /halt command.

Use it like 1:ping:/notice $nick ping? Hmmm! ...pang pang pang!! | /halt
This will do the same thing as before, except it will not send your normal ping reply. Again, test it and see the difference!

Assuming you actually tried the two given ping replies, and that you got them to work, let's go over the syntax used here a bit, and then we'll go back to the above example and _why_ it does what it does.

Remote Command Syntax.
Remote Commands, except for some special cases, are made up of 3 portions. Each of the portions are seperated by a colon. The general syntax looks like:
{command_level}:{ctcp_command}:{triggered_command(s) with parameter(s)}

Lets go over the separate portions one by one:
{command_level} This command will respond to users with a user level equal to the command level, and to users with higher levels, unless other commands are created for them.

{ctcp_command} The CTCP command can be named anything you want it to be. It can be a standard, already existing CTCP command, like Ping or Version, or it can be one of your own creation. (like OPME, DIE, LEAVE, XDCC LIST,....)

{triggered_command(s) with parameter(s)} In this part you define the (to be) triggered command(s). Their format and the use of multiple commands is almost exactly as you define them in the aliases and popups. The strings in this section are filled in by mIRC automatically... You only have to make sure that the strings you use are defined at all... ie. make sense if used in the remote commands ... (For instance the $chan is NOT defined in the remote commands !!)
Let's take a look at our ping example and try to dissect it.

1:ping:/notice $nick ping? Hmmm! ...pang pang pang!!
1 is the command level. All users with a user level equal or higher than 1 can execute or use this command.
Ping is the CTCP command this Remote Command is going to react to.
The triggered command is a /notice. In this case a notice is sent to $nick containing the entire line "ping? Hmmm! ...pang pang pang!!". $nick is a pre-defined parameter that contains the nick of the person who gave you the CTCP command ... in this case he pinged you. (More about the pre-defined parameters soon.)

Summarising, the effect of the command "/ctcp ping" is a "/notice {nick} ping? Hmmm! ...Pang pang pang!!" .This is executed as soon a CTCP Ping is received.
You can also use multiple commands, utilizing the | character, as with Aliases and Popups. That way a single Remote Command could activate multiple command lines. The use of the | is very straight forward, and we'll cover it later. Just glue two remote commands together using the |.

Different reactions to people with different user levels
You can fine tune your reactions to remote commands by assigning different levels to them. mIRC will always respond to a user with the highest leveled reply that fits to the command he/she gave.. Lets analyze it with these example lines...

1:ping:/notice $nick ping? Hmmmm your levels are tooooo low... | /halt
2:ping:/notice $nick ping? Hmmm! ...pang pang .... Quite dead !!
3:ping:/notice $nick ping? ...pang !! Hmmm... missed..
6:ping:/notice $nick ping? Hmmm! ...Well I like you .. you're allowed to ping me..
A level 1 user won't get a ping reply but a nice "ping? Hmmmm your levels are tooooo low..."

A level 2 user (2:nick3!account3@machine.subnet.net) will not survive it when he does a /ctcp ping ;o) He will see "ping? Hmmm! ...pang pang .... Quite dead !!"

A level 3 user (3:*!*@machine.subnet.edu) will get " ping? ...pang !! Hmmm... missed..."

To level 4 and 5 users no specific reaction is defined ... The highest to them available command is the level 3 one...Therefore these people (5:*!account@*.subnet.edu) will see the level 3 reaction too !!

Level 6 and higher users will all get the level 6 ping reply...

This leveling can be done for ALL remote commands (and events) . Make sure you get the point here !! Maybe re-read the above sections ??

Special identifiers for Remote/Commands/ lines.
$nick, $address, $parms, $parm1, $parm2, $parm1*, $parm2* etc. are all identifiers specially created tobe used in remote lines. You can use them whereever you want in the lines triggered by remote commands...

$nick The nick of the person who sent the command or activated the event.
$address The full address of the person who sent the command.
$site The site of the person who sent the command.
$level Represents the users remote level.
$parms Any text the person might've sent including (!) the command.
$parm1 Lets you break down $parms into individual words.
$parm3* Contains the third word in the command and all after it.

Note: The $chan is NOT ALWAYS DEFINED in the Remote Commands ... $chan normally contains the channel from which a commands is given ... CTCP commands don't have to be given to you from a channel ... or the person sending the command could be on more channels ... Get the point ?? Maybe $active will do what you want ?

Example: Here's an example using the pre-defined $address parameter.
1:address:/notice $nick Your address is $address
If a user were to send a '/ctcp {yournick} address' command to you, you would reply with a notice reading, "Your address is {whatever his or her address is}".

Example: Opping friends on demand. (Using $parms)

If you're not clear on the basics of how all of this works yet, don't worry. Try to follow along with the examples and see if it "clicks" in your head. Re-read the above examples if necessary. But don't attempt to write your own Remote Commands or move on to the next section until it "clicks."

1:opme:/notice $nick Sorry, you won't get opped on $parms .. your level is too low
5:opme:/mode $parms +o $nick
If a level 5 friend sends '/ctcp {yournick} opme {#channelname}', this command will op them in the specified channel. Level 1 people WON'T get opped whatever they try.

Here another predefined parameter is used -- $parms, which refers to everything the user typed after the CTCP command (opme). In this case, it's the channel name. The $parms can be used to process long lines given by a remote user in a CTCP command.

5:return:/notice $nick $parms

This command for instance will return any sentence issued by a remote user. The entire line given by the remote user after the CTCP Return command will be held in the $parms parameter. This will be sent back to them in a notice. A "/ctcp {yournick} return bla bla bla" will cause your mIRC to respond by executing the command "/notice friend bla bla bla".

Multiple Commands.
A Remote CTCP command can also trigger multiple commands.how ?
5:opme:/mode $parms +o $nick | /notice $nick You are opped on $parms. Then your level 5 friend sends the command: '/ctcp {yournick} opme #channelname'
What happens??
In effect two commands are triggered by the Remote CTCP opme command.
one "/mode #name +o friend"
two "/notice friend You are opped on #name"

Another CTCP command triggering multiple commands:

10:part:/part $parms | /notice $nick I have left channel $parms
And if a level 10 user sends you:
'/ctcp {yournick} part #channelname'
This command makes you leave a channel on request, and tells the requester you did so...

$parms contains the channel name you are asked to leave.
$nick is the nick of the person who asked.

Other Examples.
1:ping:/notice $nick Please don't ping me.
...would respond with: "/notice {nick} Please don't ping me."

5:time:/notice $nick Time to get a watch.
...would respond with: "/notice {nick} Time to get a watch.

10:whoareyou:/notice $nick I am who I say I am | /notice $nick And I say that I'm YOU!
...would respond with: "/notice {nick} I am who I say I am" followed by "/notice {nick} And I say that I'm YOU!"

Remote Events

top top

See Tools/Remote, the box with "Events" selected...

As you've seen, Remote Commands only deal with CTCP commands. Remote Events deal with just about everything else that can happen on IRC. If that sounds daunting, don't worry. As explained earlier, these lessons are cumulative. If you understand Remote Commands, Remote Events will be a piece of cake. You've already learned the really difficult stuff.

Warning: In general mIRC is very sensitive to poor Remote Event syntax. Using incorrect syntax can cause a GPF (General Protection Fault), so be careful! If ever you suddenly experience stability problems with mIRC, this is the part to check first!

Remote Event Syntax.
The Remote Events are: ON TEXT, ON JOIN, ON PART, ON KICK, ON OP, ON DEOP, ON INVITE, ON NICK, ON QUIT, ON TOPIC, ON SERVEROP, ON NOTIFY, ON MODE, ON SERVERMODE and ON SMODE. Besides ON TEXT the similar ON ACTION, ON NOTICE, ON SNOTICE, ON CHAT, ON SERV and ON WALLOPS are available for more specific text origins. New are the ON FILESENT and ON FILERCVD events as well as ON CHATOPEN, CHATCLOSE, SERVOPEN, SERVCLOSE and several others. Exactly what they do, and how to use them, will be explained shortly. First, some quick examples and an explanation of the syntax used.
The syntax is essentially the same as with Remote Commands. Here's a sample Remote Event for ON TEXT:

1:ON TEXT:hello:#:/msg $nick Hello back!

Place that example into your Remote Events. Go to Tools/Remote, make sure that "Events" is selected (not commands), and "Listening" is checked. (When "Listening" is not checked, Remote Events and Commands are ignored.)
This Remote Event is triggered when the word "hello" is found in any active channel. mIRC's response is to send a private message to the person who wrote it, saying "Hello back."
Here's another example, this time using ON JOIN:

1:ON JOIN:#:/notice $nick You are very welcome to $chan

This one is triggered whenever a user joins a channel you're on. A notice is sent to them that says, "You are very welcome to {channelname}".Btw Some channels Do not welcome this kind of scripts. So make sure that the Operators of the channel allow you to do this.

If you've made it this far, and understood Remote Commands, this should seem fairly simple to you.

Remote Events have either 3, 4 or 5 portions divided by colons. Most of the events have 4 portions, except for ON TEXT which has 5, and ON QUIT and ON NICK have only 3. All of the events *except* for ON TEXT, ON QUIT and ON NICK are formatted like so:

{event_level}:{event}:{where}:{triggered_command(s) with parameter(s)}

{event_level} This event will effect users with this user level, and any higher levels, unless other event entries are created for them. Just like command_level in Remote Commands.

{event} The name of the event we're listening for. ON JOIN, ON OP, etc.
{where} #, #name. Where are we listening for this event? Either # (any channel) or the name of a specific channel (like #test). EXCEPTION: Not used with ON NICK or ON QUIT.

{triggered_command(s) with parameter(s)} The (to be) triggered command. Just like in Remote Commands except that we have a few different pre-defined parameters...and of course, the big exceptions here are ON TEXT and ON ACTION which work like so:

{event_level}:{event}:{what_text}:{where}:{triggered_command(s) with parameter(s)}
{command_level} Same as above.
{event} Well, obviously, it's going to be ON TEXT or ON ACTION
{what_text} Specify the word or phrase to listen for. Like "hello" in the first example.
{where} #, #name, ?, *. Just like above, you can tell ON TEXT and ON ACTION to listen on all channels (#) or on a specific channel (like #test). But you can also tell it to listen to all of the private messages sent to you (?) or to both channel and private message text (*). An ON TEXT or ON ACTION event can't listen for things said in DCC Chats or Server messages.

{triggered_command(s) with paramerer(s)} Same as above.

The Events
Here are the various Remote Events that mIRC can respond to.

ON TEXT Occurs when specified words/phrases are found in a channel or private message. ON ACTION works just the same ...

Example:
1:ON TEXT:nonsense:#:/kick $chan $nick No nonsense!
This will look for the word "nonsense" in any channel and kick the user who said it.

Example:
1:ON TEXT:nonsense:#test:/kick $chan $nick | /notice $nick Hello $nick , you said 'nonsense' and that's not allowed on #test..
If the word "nonsense" is said in #test, the user is kicked (if you're 'op' on #test) and sent a notice: "Hello {nick} , you said 'nonsense' and that's not allowed on #test..."

Example:
5:ON TEXT:help:?:/notice $nick I wish I could help you, but I can't.
If it finds the word "help" in any of your private messages, it replies to the user, "I wish I could help you, but I can't" in a notice.

You can specify wildcards in the text mIRC should react to:
* - reacts to any text
word - if a user said only this word the event will trigger.Exact match required.
word* - if a user started a line with this word the event will trigger.
*word - if a user ended any line with this word the event will trigger.
*word* -if a user said this word or phrase anywhere the event will trigger.

Example:
5:ON TEXT:help:?:/notice $nick I wish I could help you, but I can't.
This event will only react to a call for help if the msg only contained the word help ... not if a line containing the word 'help' was sent to you.

Example:
5:ON TEXT:hello*:?:/notice $nick Hello to you too !
This event will only react to private message lines sent to you starting with the word 'hello'.
ON ACTION See ON TEXT .... it works exactly the same....
ON NOTICE See ON TEXT .... it works exactly the same....
ON CHAT Works like ON TEXT but listens to a DCC Chat text.

Example:
ON CHAT:blabla:/msg $me $nick said $parms to you in a DCC Chat.
ON SERV Works like ON CHAT but listens to DCC Fileserver text.

Example:
* ON SERV:get mirc:/echo server 6 To $nick the mIRC zip is sent.
ON JOIN Occurs when a user joins a channel.

Example:
1:ON JOIN:#test:/notice $nick Welcome to the #test channel!
Sends a notice saying "Welcome to the #test channel!" to anyone who joins channel #test.

Example:
25:ON JOIN:#cool:/kick $chan $nick You're not welcome here!
Kicks any level 25 user who joins #cool with the message, "You're not welcome here!"
ON PART Occurs when a user leaves a channel.

Example:
10:ON PART:#:/notice $nick Hey, thanks for stopping by $chan !
Sends a notice saying, "Hey, thanks for stopping by {channel} !" to any level 10 who leaves a channel you're on.

Example:
90:ON PART:#:/msg $chan Yahoo! $nick is gone! Sends a message to the channel saying, "Yahoo, {nick} is gone!" if any level 90 leaves a channel you're on.
ON KICK Occurs when a user is kicked from a channel.

Example:
100:ON KICK:#:/kick $chan $nick | /invite $knick $chan | /notice $nick That person is my friend!
If any level 100 person is kicked from any channel, you kick the kicker off the channel, invite the kicked person back and send "That person is my friend!" to the kicker. NOTE: $knick is the parameter for the kicked nick in this event. Also note that this example shows multiple commands. It works just like in Remote Commands.
ON OP Occurs when a user is opped. Note: This event requires people to be mentioned by NICK in your Remote/Users list !

Example:
1:ON OP:#test:/notice $opnick You were opped by $nick . Welcome!. If someone is opped on #test, they're sent a notice: "You were opped by {opper}. Welcome!". NOTE: $opnick is the parameter for the opped user's nick in this event.
ON DEOP Occurs when a user is deopped. Note: This event requires people to be mentioned by NICK in your Remote/Users list !

Example:
1:ON DEOP:#:/msg $opnick Tough luck. You were deopped by $nick
If someone is deopped, they're sent a message: "Tough luck. You were deopped by {deopper}. NOTE: $opnick is the parameter for the deopped user's nick in this event.

NOTE
Explaining the ON OP, ON DEOP, ON SERVEROP as well as the ON NOTIFY event an important remark should be made. Due to the fact that servers only report the nick's of the people who are opped, deopped or notified on a channel or IRC, the ON OP, ON DEOP, ON SERVEROP and ON NOTIFY events only work properly if the nicks of the people who are opped, de-opped or notified are mentioned in the Users list. Specifying even the full address (nick!account@machine. address.net) is NOT enough... mIRC won't distillate the nick from such a statement. The only exception to this is if you wish the event to affect everyone by giving it an access level of 1, or whatever you have set the default user level to. This is the only case where it is not necessary to have a user in your User list by nick.

If you want to give people a level fitting to your ON OP, ON DEOP, ON SERVEROP or ON NOTIFY events you have to put them in your Users list by nick, like:

3:friendasnick
5:friendbsnick
5:friendcsnick
10:friendbsnick!accountb@bsmachine.net

This construction can give you a good reason to specify people in your Users list by both their full address (wildcards are permitted) and their nick. This could then guarantee the proper reaction to an ON OP ON DEOP or ON SERVEROP without giving ALL people around with by accident (?) the same nick the same rights as your friends (or enemies).

ON BAN , ON UNBAN
With the ON BAN you can easily auto-unban your friends.

Example:
5:ON BAN:#tree:/mode $chan -b $banmask
The $banmask will contain the mask of the user who got the ban. Users having a level of 5 will be automatically unbanned if they get baned by someone else (or even you :))
ON INVITE Occurs when you are invited to a channel.

Example:
5:ON INVITE:#test:/join $chan | /describe $chan thanks you for inviting him!
If invited to #test, join the channel and use an action to say "{me} thanks you for inviting him!"
ON NICK Occurs when a user changes his or her nick.

Example:
1:ON NICK:/notice $newnick I thought $nick was a nicer nickname!
Send a notice to anyone who changes nicks, "I thought {your old nick} was a nicer nickname!"
NOTE: $nick is the parameter for the old nick, and $newnick for the (guess what?) new nick.
NOTE: The {where} portion is not used in ON NICK.
ON QUIT Occurs when a user quits IRC.

Example:
2:ON QUIT:/notice $me Time to party! $nick just quit the IRC!
Whenever someone quits, send a notice to yourself: "Time to party! {Nick} just quit the IRC!"
NOTE: The {where} portion is not used in ON QUIT.
ON TOPIC Occurs when a channel's topic is changed.

Example:
1:ON TOPIC:#:/msg $chan Wow, I love the new topic!
Whenever a channel topic changes, sends a message to the channel saying, "Wow, I love the new topic!"
ON SERVEROP Occurs when a server gives operator status (back) to a user on a channel. Note: This event requires people to be mentioned by NICK in your Remote/Users list !

Example:
1:ON SERVEROP:#Cyprus:/mode $chan -o $nick | /notice $opnick Sorry, serverops not allowed on $chan Whenever a person is opped on #Cyprus by a server, the opped person is deopped and receives a notice "Sorry, serverops not allowed on #Cyprus" Serverops normally occur after a netjoin when the two splitted nets exchange and update all current channel modes.
ON NOTIFY This event triggers as soon as people in your notify list join IRC. Note: This event requires people to be mentioned by NICK in your Remote/Users list !
You could use this event to do a /whois on the notified nick to make sure it is the correct guy.... Remember that this event ONLY works on nicks mentioned in the remote/user list by NICK.... (like ON OP, ON DEOP and ON SERVEROP). This is due to the IRC protocols which don't pass through the address of the notified person.

Examples:
1:ON NOTIFY:/notice $nick If you are really $nick then please Dcc me !
3:ON NOTIFY:/whois $nick
5:ON NOTIFY:/beep 10 50 | /whois $nick

ON MODE , ON SERVERMODE
These events can force a certain set of channel modes. Use this event to make sure that when someone changes the channel modes, mIRC enforces the channel modes YOU want instead.

Syntax and examples :
1!:ON MODE:#name:-spmi+tnlk 20 mykey:/notice $nick Wrong $chan mode change!
1!:ON SERVERMODE:#name:-spmi+tnlk 20 mykey:/notice $me illegal $chan mode change by server !

The ON MODE's react to any channel mode change, so there is no way to react to specific mode changes. This structure is certainly not perfect but it works. Popular settings are :
1!:ON MODE:#mirc:-spmilk+tn:/notice $nick illegal $chan mode change!
1!:ON SERVERMODE:#mirc:-spmilk+tn:/notice $me illegal mode change!

Keep in mind that if you allow a higher level person to change mode settings without you reacting, lower level users can mess that up ! As soon as they change a mode (or the server does) then the forced modes are set; mIRC does NOT keep in mind that part of the new modes might be set by higher level persons ... Also beware of loops of more people on a channel forcing mis-matching modes !!

ON VOICE , ON DEVOICE
These events react to people getting or loosing voice on channels.

Examples:
1:ON VOICE:/notice $nick Welcome in the speaking world!
1:ON DEVOICE:/notice $vnick Hey, $nick is allowed to speak here!

ON SNOTICE This event listens for server notices. Server notices tell you all kind of things happening at and with the IRC server you use. To recieve them you have to set your user mode to +s (/mode nickname +s). Most people don't need this setting... It is mostly meant for IRCOps and server maintainers. With this event you can filter the server notices send to you and you can filter them ie. prevent them from being displayed or automatically react to them. The event syntax is very much like the ON TEXT event.
1:ON SNOTICE:servers_text:/echo 6 status The server noticed you about $parms

ON FILESENT This event will react to all successful DCC Send file transers. You can use it to send you or the reciever a small message.
1:ON FILESENT:*.txt,*.ini:/echo Sent $filename to $nick ( $+ $address $+ )
1:ON FILESENT:mirc4516.exe:/notice $nick Have fun with the 16 bit mIRC
1:ON FILESENT:mirc4532.exe:/notice $nick Have fun with the 32 bit mIRC

ON FILERCVD This event will react to all successful DCC Get file transers. It will trigger as soon as a file is succesfully retrieved to your harddisk. You can use it to send you or the sender a small message, or to start a helper application to view the recieved picture, play a sound file or read the text.
1:ON FILERCVD:*.txt,*.ini:/run notepad.exe $filename
1:ON FILERCVD:*.wav:/wavplay $filename
1:ON FILERCVD:*.gif:/run c:\windows\wingif\wingif.exe $filename
1:ON FILERCVD:*.jpg:/run c:\windows\lview\lviewp19.exe $filename
1:ON FILERCVD:*.mid,*.voc:/run wplany.exe $filename
1:ON FILERCVD:*.*:/notice $nick Thanks for the file!

ON CTCPREPLY Listen for replies to ctcps. eg.:
1:ON CTCPREPLY:PING*:/echo $active Got ping reply from $nick
1:ON CTCPREPLY:*mirc*:/echo $active Wow $nick uses mIRC too!

Special identifiers for Remote/Events/ lines.
$nick, $address, $site etc. are all identifiers specially created to be used in remote lines. You can use them whereever you want in the lines triggered by remote events.

$nick The nick of the person who sent the command or activated the event.
$address The full address of the person who sent the command.
$site The site of the person who sent the command.
$level Represents the users remote level.
$chan The channel on which some event triggered a Remote/Events line.
$parms Any text in the line that triggered the event.
$parm1 Lets you break down $parms into individual words.
$parm3* Contains the third word and all after it.

flags in Remote.

top top

Finally some remarks have to be made about the various flags you can use in the Remote section. (With Commands and/or Events)

The ! flag. (Events only)
This flag causes events not to be triggered by things you do yourselves. mIRC will not react to things said or done from clients with your address. (A similar flag is the 'me' flag , which makes sure things wont be triggered by the IRC client -you- use. ie. it will react to any other IRC clients you may be running simultaneously)

Example:
1!:ON JOIN:#mine:/notice $nick Welcome here.
This will not react to you joining #mine ....everybody else will get the Welcome message.

The = flag. (Events only)
This flag is used to prevent anything from happening. you can use it to not bother higher level people with events meant for lower level people.

Example:
1:ON JOIN:#mine:/ctcp $nick VERSION
3:ON JOIN:#mine:=
Level 1 and 2 users will be versioned while level 3 and higher users will not see anything at all , nor you. (In version 3.2 you had to set up an harmless event to do this.)

Example:
1:ON JOIN:#test1:/notice $nick Welcome to #test1
1:ON JOIN:#test2:/notice $nick Welcome to #test2
3:ON JOIN:=
Level 3 and higher users won't be noticed Welcome.... lower level users only on #test1 and #test2.

The + flag.
This flag makes a certain command available ONLY to users with the EXACT level of the command... Higher (and ofcourse lower) level users can't use/access it !

Example:
1:ON JOIN:#mine:/ctcp $nick VERSION
+3:ON JOIN:#mine:/notice $nick Welcome here.
All users EXCEPT level 3 users will be versioned on channel 'mine' , Level 3 users will be welcomed.

Example:
+5:ON JOIN:#mirc:/msg $nick Welcome level 5 user!

The ; and REM flag.

These flags can be used to switch off commands or events temporarily by 'commenting them out'.

Example:
;1:ON JOIN:#mine:/notice $nick Welcome here.
REM 1:ON JOIN:#mine:/notice $nick Welcome here.

The * and @ flags.
Thise flags makes mIRC to execute an event or command ONLY if you're operator on the channel the event or commands if used on.

Example:
*1:ON JOIN:#mine:/notice $nick Welcome here.
.
The me flag.
This flag is designed to make sure you can make events only work if somebody with exactly the same address as you use does something. This other person normally would be your 2nd instance of mIRC running from the same PC. Keep in mind that with proper leveling of your users in the Remote/users section you never (?) need this flag.
In mIRC 3.7 version some additional flags for the EVENTS were introduced. With these flags you can make mIRC to take into account the level of the person that started an EVENT. These flags can only be used with the ON OP, DEOP and KICK events since these are the only events that deal with somebody doing something to somebody else. The three flags you can add are >, < and =. But you can make mathematical combinations of them leading to a set of 6

flags: <, >, <=, >=, <> and =.
These flags will make the event only be triggered if FIRST the level of the event fits the Opped, Deopped or Kicked guy (m/f) and then SECOND the level of the activator meets the expression {level-activator} [flag (mathematical expression)] {level-of-event}
You look like you need some examples :)
Assume you being the GUARD with a Friend at level 2 and an Activator who can have several different levels.... Then imagine these simple EVENTS :

<2:ON DEOP:#test123:/msg $chan the < triggered
>=2:ON DEOP:#test123:/msg $chan the >= triggered

With the activator at level 1.
*** Activator sets mode: -o Friend
the "<" triggered.
Your Friend has level 2, the Activator has level 1, 1<2 is valid (one is smaller than 2), the first level 2 ON DEOP event is triggered.

With the activator at level 2.
*** Activator sets mode: -o Friend
the ">=" triggered
Your Friend has level 2, the Activator has level 2, 2<2 is invalid, 2>=2 is valid (2 is larger than or equal to 2), the second level 2 ON DEOP event is triggered.

With the activator at level 3.
*** Activator sets mode: -o Friend
the >= triggered
Your Friend has level 2, the Activator has level 3, 3<2 is invalid, 3>=2 is valid (3 is larger than or equal to 2), the second level 2 ON DEOP event is triggered.

As you can see its pretty straight forward once you got the idea. read this over till the coin drops... More examples :

<2:ON DEOP:#test123:/msg $chan the < triggered
>2:ON DEOP:#test123:/msg $chan the > triggered

With the activator at level 1.
*** Activator sets mode: -o Friend
the < triggered

With the activator at level 2.
*** Activator sets mode: -o Friend

With the activator at level 3.
*** Activator sets mode: -o Friend
the > triggered

=2:ON DEOP:#test123:/msg $chan the = triggered

With the activator at level 1.
*** Activator sets mode: -o Friend

With the activator at level 2.
*** Activator sets mode: -o Friend
the = triggered

With the activator at level 3.
*** Activator sets mode: -o Friend

. Variables

See Tools/Remote, select the box called "Variables"
mIRC now allows you to define all kinds of variables. Variables always start with a % and can have names of any length. The variables are stored between sessions in a variable file in the mIRC directory. Variables can contain numbers, words or even lines of text. With variables containing numbers you can apply mathematical manipulations to increase, decrease, add and subtract variables with given values to or from each other. Available commands are :
(q=quiet; no status report of the operation is given)

/set [-q] <%var> [value] To create a variable
/unset [-q] <%var> [%var2] ... [%varN] To delete a variable
/unsetall To delete all variables
/inc [-q] <%var> [value] To increase a variable by a value (number or variable)
/dec [-q] <%var> [value] To decrease a variable by a value (number or variable)
With the aid of these commands you can make all kinds of handy aliases and remote lines!

Examples :
Remote commands (see later) :
2:xdcc send #1:/dcc send $nick c:\temp\serve\mirc40.zip | /inc %mirc 1
2:xdcc send #2:/dcc send $nick c:\temp\serve\mircfq24.zip | /inc %faq 1
1:stats:/notice $nick Sending stats: mIRC= %mirc and FAQ= %faq

Remote events (see later) :
2:ON TEXT:xdcc send #1*:?:/dcc send $nick c:\temp\serve\mirc392.zip | /inc %mirc 1
2:ON TEXT:xdcc send #2*:?:/dcc send $nick c:\temp\serve\mircfq23.zip | / inc %faq 1

Alias :
/stats /echo 6 mIRC: %mirc and FAQ: %faq
With these lines you can make a small download counter.... not perfect but working !
You can even add some alias like the next one to keep partial statistics :
/reset /set %date $day $date | /inc %mirctot %mirc | /inc %faqtot %faq | /set %mirc 0 | /set %faq 0
/stats /echo 6 Stats mIRC: %mirc ( %mirctot ) and FAQ: %faq ( %faqtot ) (Set on %date )
When you increase or decrease a non-existant variable it will be created automatically and set to the value you expect it to be. ie :
/inc %test1 6 will set %test1 to 6 if it didn't exist before
/dec %test2 7 will set %test2 to -7 if it didn't exist before

Note : You have to make sure you always include the % ! This is made to prevent a lot of small possible problems in mIRC's command parsing. This does not limit the ways the variables can be used in at all since you can always use constructions like :
1:upme:/inc % $+ $site 1
2:xdcc send #1:/dcc send $nick c:\temp\serve\mirc40.zip | /inc % $+ $nick 1
2:xdcc send #2:/dcc send $nick c:\temp\serve\mircfq24.zip | /inc % $+ $nick 1
2:xdcc stats:/notice $nick You downloaded %nick files already since %date
Remote Raw processing. In the Tools/Remote/Raw section mIRC offers you the possibility to process all server to client (mIRC) processes directly and in any way you want/like. It works exactly like the Remote/Events section except mIRC listens to the NUMERIC events. These server numerics are described in the IRC RFC1459 (http://ds.internic.net/rfc/rfc1459.txt). The remore/Raw has it's own separate editbox because if mIRC had to scan your whole remote events definitions list for each numeric event, things would slow down to a crawl. Still you better use the Raw section -only- if you exactly know what you do and only if absolutely needed. Wrong use of the Raw section can mess-up mIRC totally. It can over-rule all routines hardcoded into mIRC.

Example:
322:*mirc*:/echo 2 $parms
This would print all lines which have the word "mirc" in them when you do a channels /list (this is a pretty intensive test).
To echo a concise 2 line summary of the /whois return in your active window, place the following lines in your Raw section (listening on):
311:*:echo 5 $active *** $parm2*
319:*:echo 5 $active *** $parm2*

This will display the user and channels lines. The numerics for the other /whois replies are: 312, server; 313, ircop; 301, away; 317, idle; and 318, end. For a full /whois echo, simply duplicate the above lines using these numbers.

To find out the numerics the servers use you could use the new $numeric identifier that refers to the number of the (raw) event that was triggered. In the IRC RFC1459, Section 6; Numeric replies, you can look up all numerics, given with their number, name and reply string.

Scripting (Advanced use of commands)

top top

In mIRC you can use commands and create aliases, popups and remotes with conditional statements, loops and other tricky things. To explain it all to you would would take another complete FAQ I fear, but I'll try to get you on the road in a short section with some examples. I think its best to start right off the bat .

mIRC allows multiline alias, popup, and remote definitions. This allows you to write statements in a nice and structured way like:

{prefix definition} {
/command1 ...
/command2 ...
/command3 ...
}

Example:
/away /ame is AWAY ( $+ $?="Reason" $+ ) | /away Set away at $time { $+ $! $+ }
/back /ame is back,.. what did I miss ? | /away

These aliases could also be defined as :
/away {
/ame is AWAY ( $+ $?="Reason" $+ )
/away Set away at $time { $+ $! $+ }
}

/back {
/ame is back,.. what did I miss ?
/away
}

I agree that doesnt really help -here-, but while you're writing and testing the new possibilities in mIRC's conditional commands you might like this structure? Btw, the { } brackets are needed around all commands that use the new possibilitie of conditional looping etc. Now we're at it, you could leave out all / command prefixes if you wanted to... They are no longer needed.

A /goto command is added which can be used in { } definitions.
Example:
/greet {
/set %x 0
:retry
/inc %x
/goto %x
:2
/echo line2
/halt
:1
/echo line1
/goto retry
}

This alias will echo the lines "line1" and "line2" to your screen.Test it by giving this totally equivalent command in some editbox:
/set %x 0 | :retry | inc %x | goto %x | :2 | echo line2 | halt | :1 | echo line1 | goto retry

It will show you exactly what happens. ;-) You can also use a variable as a goto name, eg. :%jumppoint

If you "/set %jumppoint 5" then you can do "/goto 5" and mIRC will evaluate %jumppoint to 5 and jump to it. In the above example the jumppoints were fixed to '1' and '2'. Try these 3 commands and see what happens now.

/set %jump1 1
/set %jump2 2
/set %x 0 | :retry | inc %x | goto %x | :%jump2 | echo line2 | halt | : %jump1 | echo line1 | goto retry

You can use the /return command to finish processing a command and to allow any default processing to continue. eg.

1:ON JOIN:#mIRC {
/echo 3 #mirc [Joins $nick]
/return
/echo 3 #mirc I'm not printed!
}

This will result is messages like:
[Joins henk]
*** henk (monster@ppp9.limassol.logos.cy.net) has joined #mIRC

/if /elseif /else
Now I think you're ready for the real stuff ?? In mIRC a simple /if statement is available.
/if v1 operator v2 { ... } | /elseif v1 operator v2 { ... } | /else { ... }

Example:
Make this alias and start it like "/test 4";
/test { set %i 0 | :start | inc %i | if %i > $1 halt | echo $active %i | goto start }

If/elseif/else can all be nested inside each other. You should use () and {} brackets to make sure that you're terms are evaluated correctly (in the correct order), though you don't *have* to use them. Using brackets also speeds up processing quite a bit since mIRC then knows exactly what it has to evaluate.

Available comparisons and operators:
== equal to
!= not equal to
"<" less than
">" larger than
">=" larger than or equal to
"<=" smaller than or equal to
"//" is a multiple of
"\"\ is not a multiple of

isin string v1 is in string v2
iswm wildcard string v1 matches string v2
ison nickname v1 is on channel v2
isop nickname v1 is an op on channel v2
isnum number v1 is a number in the range v2 which is in the form n1-n2 (v2 optional)
ischan if v1 is a channel which you are on.
isauto if v1 is a user in your auto-op list for channel v2 (v2 optional)
isignore if v1 is a user in your ignore list with the ignore switch v2 (v2 optional)
isprotect if v1 is a user in your protect list for channel v2 (v2 optional)
isnotify if v1 is a user in your notify list.

To negate the above you can prefix them with an ! exclamation mark.

Example:
/massinvite { echo 4 * Mass-inviting # | set %i $nick(0,#) | :next | if $nick(%i,#) != $me invite $nick(%i,#) $1 | dec %i | if %i > 1 goto next | echo 4 * Mass-invite # done }

Use this example alias like "/massinvite #yourchannel". (This is ONLY an example. Massinvites are not allowed on several servers and are very impolite!)

Example:
/line { %line = "" | if $asc($1) < $asc($2) { set %i $asc($1) | :add | %line = %line $chr(%i) | inc %i | if %i <= $asc($2) {
goto add } | if (%line == "") { halt } | else { echo # %line | halt } } else echo # sorry not valid }

Start this alias example by typing "/line d k" to see what it does. It will print a line like 'd e f g h i j k'. Nothing much and barely useful but it shows the strength of the if/elseif/else pretty well.

Example:
/printnum1 { if $len($1) = 1 { if $1 !isin 1234567890 { echo 6 $1 is not a number | goto end } } | elseif $len($1) = 2 { if $mid(1,1,$1) !isin 1234567890 { echo 6 $mid(1,1,$1) is not a number | goto end } | elseif $mid(2,1,$1) !isin 1234567890 { echo 6 $mid(2,1,$1) is not a number | goto end } } | elseif $len($1) > 2 { echo 6 $1 has too many chars | goto end } | { set %x 1 | :begin | echo 6 %x | if %x >= $1 { goto end } | else { inc %x | goto begin } | :end } }

/printnum2 { if $1 !isnum { echo 6 $1 is not a number | goto end } | elseif $1 !isnum 0-99 { echo 6 $1 is a too large number | goto end } | { set %x 1 | :begin | echo 6 %x | if %x >= $1 { goto end } | else { inc %x | goto begin } | :end } }

These equivalent aliases will both print a list of numbers upto the value you give. Try it with "/printnum1 14" or something similar .... The second alias shows how smart use of identifiers can reduce the length of the alias a lot.

Empty or invalid identifiers
Variables or identifiers that don't evaluate to a value now return the value $null so they can be used in the if statement for checking etc.

Example:
/listops { echo 4 * Listing Ops on # | set %i 1 | :next | set %nick $nick(%i,#) | if %nick == $null { goto done } | if %nick isop # { echo 3 %nick is an Op on # } | inc %i | goto next | :done | echo 4 * End of Ops list }
This alias will list all ops on the channel you're on.
Or in a remote event:
1:ON CTCPREPLY:PING* {
if ($parm2 == $null) echo [ $+ $nick PING reply]
else {
%pt = $ctime - $parm2
if (%pt < 0) set %pt 0
echo [ $+ $nick PING reply] %pt seconds
}
halt
}

More popup examples:

GiveOps { %i = 0 | %nicks = "" | :nextnick | inc %i | if ($snick(%i,#) == $null) { if ($len(%nicks) > 0) mode # +oooo %nicks | halt } | %nicks = %nicks $snick(%i,#) | if (4 // %i) { mode # +oooo %nicks | %nicks = "" } | goto nextnick }


This popup menu item will op all selected people on a channel where you're operator.

Endless loops.
With all these conditional statements I foresee you ending up in some endless loop. A simple example is creating something like:

/loop { :start | echo 6 # test loop | goto start }

I case one of your aliases or remotes got into such a loop use the CTRL+Break key combination to stop the process. It will take you home safely.

This will keep you occupied for some time , and will also make you think better about IRC , and how things work. Dont be hasty in learning everything at once, and above all be sure that all the above can be mastered if you give them attention.
Who knows , Maybe the next Hot mirc script , will be one of yours !!!


Main Page Nutrition & Health links Irc Tutorial & Scripting Weather around the World What is happening Now in the world