An IRC poker dealing program
http://www.cs.cmu.edu:8001/afs/cs/user/mummert/public/www/ircbot.html (World Wide Web Directory, 06/1995)
IRCbot is a poker dealing program designed to use Internet Relay
Chat (IRC) as its communication medium. The program (also referred
to as dealer or as a bot) resides on a particular channel and manages
the action of a game.
History
IRCbot is a result of some poker simulation work done by the author
(Todd Mummert). This work entailed the
simulation and statistical evaluation of a wide variety of games.
The author became aware of a poker dealing robot (Hbot) running on
IRC that dealt only Holdem which was written my Anthony Chang, based
on some work by Bob Herlien. Using the commands that Hbot understood
as a basis from which to work, IRCbot took shape.
An IRC network consists of one or more interconnected servers.
An IRC client program is used to connect to this network and
communication with other IRC clients can then be made using
an established protocol. In general, once you've connected
to a server you will join a specific channel that consists of
clients with interests similar to yours.
Finding an IRC client
Hopefully, your system already contains an IRC client program.
In general, it is usually called irc or ircII.
If you do not have such a program, you can compile one from
sources available via ftp from cs-ftp.bu.edu (/pub/irc/clients).
Currently, the ircII2.2.9* files are known to work well.
Connecting to the poker server
The poker server currently resides an an isolated IRC server, one
that is not connected to any of the established IRC networks.
This isolation was necessary to allow the poker dealers to
communicate with the channels at a sufficiently high rate to
increase the rate at which a game is played. The name of the
server is vegas.scandal.cs.cmu.edu, and its IP
address is 128.2.198.36.
You can connect to this particular server with a command
similar to:
% irc foobar vegas.scandal.cs.cmu.edu
or
% irc foobar 128.2.198.36
The 2nd argument is your nickname for that session, and is
limited to nine primarily alphanumeric characters. Alternatively,
if you just use the command irc and it connects you
to a different server you can change servers using the IRC
command /server vegas.scandal.cs.cmu.edu.
The easiest way to become familiar with the poker server is
to join in on one of the active channels and just watch the
play for a while. You join a channel by using the following
command: /join #holdem, where #holdem is the name
of one of the poker channels. You can see the names of the
channels and the number of clients connected with the
/list command. After joining a channel, any command
you issue that does not begin with a leading '/' will simply
be echoed publicly to the channel. This is a simple way
to ask questions of the other players, or if you're playing
for the first time, to send commands to the dealer.
In general, the dealer is parsing everything that is sent publicly over
the channel, as well as commands that are sent privately to it. However,
the dealer expects to receive its commands in a very specific format.
All commands to the dealer, whether public or private, should begin with
the single character identifier P. For example, to inquire about
the status of a game, type p status. The dealer is case
insensitive, except when entering a password. Game action
commands such as call, raise, check, etc may be done in advance.
The dealer will remember the command and act upon it when it is your turn
to act.
Upon playing a game for the first time, or if you just drop by to watch,
you may notice the lack of public action by the other players. This is
because once players become familiar w/ IRC, they realize that all actions
can be sent privately to the dealer. This has several advantages:
- Commands may be entered in advance, without the other players knowing
the specific action. Publicly announcing your action is similiar
to 'acting out of turn' in a real game, and should not be done
under normal circumstances.
- The channel traffic is kept to a minimum. This increases the
overall rate at which the game progresses, and those players
w/ slow net connections will really appreciate it.
For example, to send a private message to a dealer named Dbot (all the
dealers have unique names), we would use a command like:
/msg dbot p fold
/msg is the irc command to send a msg to a person or channel. dbot is
the case-insensitive name of our dealer and the rest of the command is
the specific action we wish to make. Notice that the 'p' is still a
necessary part of the command.
This is only a description of the commands that the poker dealer
understands. It does not describe any of the IRC commands necessary
for joining a channel.
- Commands for joining/leaving a game
- join password --- This command is used to join the game. The
password is case sensitive.
- quit --- Quit immediately. However, since you may have money in
the pot, your seat is not freed until the end of the hand.
- wait password --- In case the game is full, join the waiting list
on a particular channel. You must give the correct password here,
since it will attempt to use it to join the game once a seat is
available.
- unwait --- Remove yourself from the waiting list. Quit would
also check the waiting list to see if you were on it.
- Status commands
- status --- Check the status of a game. This is displayed
using the same format as was used for WRGPT3, for those who
are familiar with that game. Basically, the only non-obvious
symbols would be the flags preceding the name. V means
on vacation, B means that the person is the virtual
dealer (i.e., blinds start to his left). As far as pot numbers
go, a player is in all pots less than or equal to his pot number.
- board --- Print out the current board (common cards).
Generally, only holdem and omaha and derivitives thereof have
board cards.
- cards --- Show your current cards. This will show both your
up and down (hole) cards.
- game --- Print out what game is being dealt. This is
primarily useful on the dealer's choice channel.
- rank --- For games that maintain statistics print out
your current ranking.
- top --- Print out the list of the top players ranked by
largest bankroll.
- top2 [#hands] --- Another method of ranking players, by
number of units won per hand. The optional argument is to
require some minimum number of hands to have been played.
- Game actions
All these commands may be made in advance. Making as many of
your actions in advance is recommended to speed up play.
- fold --- Fold your hand.
- call [amount] --- Call up to amount. If it
is more than amount to you, then fold. With no
arguments, call any amount.
- check --- Check. That is if it is 0 to you, then
call, otherwise you will get a warning.
- raise [amount] --- Raise amount. If amount
is insufficient, you will be given an error message. On
channels with a fixed betting limit, no argument is necessary.
Certain channels also limit the number of raises during a
betting round.
- make amount --- Make it amount to you. If
amount is an illegal raise, then you'll be prompted
again. For example, if you wish to raise if it is unraised
when it gets to you but wish to call at least one raise, you
can do p make 20. Therefore, if it is unraised, you'll
raise 20, if it is 20 to call you'll call; otherwise, you'll
be prompted for another action.
- toss [card1] [card2] [...] --- In draw games, specify
which cards you'd like to toss. Cards are numbered from
1...N. Use toss 0 to toss no cards.
- undo --- undo any advance actions.
- Tournament commands
Certain of the channels have been set up to facilitate the playing
of tournaments. Basically, the dealer keeps track of when the
blinds double, and prevents new players from joining in mid-tournament.
There are a few commands that are enabled only on the tournament
channels.
- double interval [hands] --- Blinds will double at this
frequency. Generally in seconds, although you can double by
number of hands played if you wish.
- bankroll amount --- Start with a bankroll of this size.
- blind amount --- The small blind will be this size
initially. Large blind is twice the small blind.
- start --- Start the tournament. New players cannot join
after this. Game parameters (above) must be set before the
tournament starts.
- abort --- Abort the tournament. The current hand can
be played out, but after that you're back into the pre-tournament
mode.
- vacation [nick] --- If a person's connection lags or is dropped,
you can put them on vacation. This is also useful if you need to
take a short break. A person on vacation either checks or folds
when it is his turn to act.
- back --- This is how to return from vacation. Only the
player on vacation can return himself.
- Miscellaneous
- help --- Prints out the helpfile for this channel.
- commands --- Print out the list of commands.
- deal [game number] --- In the non-tournament channels,
you need to tell the dealer to deal the next game. On the
dealer's choice channels, you may specify a different game.
- password new_password --- Change your password to
new_password. You must be in the game to use this command.
- remind --- Remind a player that it is his turn to act.
- list --- List the games that are available.
- motd --- Print the message-of-the-day.
- kick --- Kick a player from the game. Should only be used
if a player's connection drops or they're seriously lagging.
Not yet done.
This is a list of the known problems w/ the current IRCbot:
- A tournament dealer capable of handling multiple tables
- The current tournament channels assume all the players are
at the same table. Obviously this puts an absolute limit
on the number of players in a tournament. I'd like to expand
the capabilities of the program to manage multiple tables.
When enough people bust out of the tournament, seats would
be redrawn at the remaining tables.
- Divorce the game from IRC
- While IRC was an easy medium to bring the game up on, it has
some serious shortcomings. One thing I would like to see would
be graphical (i.e., X windows) interfaces for the game. These
would not have to connect through IRC, but could connect directly
to the dealer. Most of the support code for this was designed
into the current dealer program.
Currently, the bot "understands" the following games:
- Five stud high
- Five stud low
- Five stud high/low (no req)
- Five stud high/low (8 or better)
- Six stud high/low (no req)
- Seven stud high
- Seven stud low
- Seven stud high/low
- Seven stud high/low (8 or better)
- 5 card draw high
- 5 card draw low
- 5 card draw high/low (no requirements)
- 5 card draw high/low (8 or better)
- Holdem high
- Holdem high/low (8 or better)
- Omaha high
- Omaha high/low (8 or better)
- Omaha high double flop
- Omaha high/low double flop (8 or better)
- Tic-Tac Omaha high/low (8 or better)
- Spit - 5 card draw high/low w/ 1 common card
- 54321 high only