SBR Top-Rated Sportsbooks Recommended Books
1. Pinnacle Sports SBR Rating A+ Pinnacle Sports Review
2. The Greek Sports Book SBR Rating A+ The Greek Review
3. BookMaker SBR Rating A+ BookMaker Review
4. BetJamaica SBR Rating A+ BetJamaica Review
5. LegendZ Sports SBR Rating A+ LegendZ Review
 
SBR Posters' Poll - March 2009 View Complete Results
1. BetJamaica 251 total points BetJamaica Review
2. The Greek Sports Book 217 total points The Greek Review
3. 5Dimes 181 total points 5Dimes Review
4. Matchbook 159 total points Matchbook Review
5. Pinnacle Sports 148 total points Pinnacle Sports Review
 
Reply View New Posts
 
LinkBack Thread Tools
Old 05-11-2008, 08:10 PM   #1
bigboydan
 
bigboydan's Avatar
Join Date: 08-10-05
Posts: 50,755
 
Thumbs up How I Built a Working Poker Bot

<a href="/archives/how-i-built-a-working-poker-bot" class="taggedlink">How I Built a Working Poker Bot, Part 1</a></div>

<div class="pubDate">Friday, May 09, 2008&nbsp;&nbsp;&nbsp;</div>



<div class="text">
<h3>Introduction</h3>

<p>Several years ago, a client asked me to come up with a prototype for a <strong>real-money&nbsp;online poker bot.</strong> That's right: a piece of software you park on your computer while it goes out to a site like PokerStars or Full Tilt and plays no-limit Holdem for you, at 4 or 14 different tables, for real-money stakes.</p>
<p>If you're a poker player, and particularly if you're an <strong>online poker player</strong>, you've probably heard rumors about the <a href="http://www.codinghorror.com/blog/archives/000374.html">rise of the poker bots</a>. Unfortunately there's very little hard information out there (for obvious reasons) about how to build one of these bots. In fact, many so-called authorities still dismiss poker bots as a relic of the overactive poker player's imagination.</p>
<p>Well, I'm here to tell you that&nbsp;<strong>online poker bots are 100% real, and I know this because I've built one</strong>.<strong> And if I can build one,&nbsp;well. <em>Anybody can build one</em>.</strong>&nbsp;What's more, over the course of this multi-part article, I'll show you <em>how</em>. But first, a teaser (click on the image for a larger version):</p>

<p><a href="http://www.codingthewheel.com/pics/poker_bot_full.jpg"><img src="http://www.codingthewheel.com/image.axd?picture=poker_bot_small.jpg" alt="Functional poker bot, playing 3 tables"></a></p>
<p>That, ladies and gents, is a picture of <strong>a full-featured poker bot managing three play-money tables</strong> (note: this same bot also handles real-money tables)&nbsp;at an honest-to-goodness, real-money online poker site. Of course, it could be any site. The bot implementation I'm going to reveal will work at all major online poker sites, including Poker Stars, Full Tilt, Party Poker, Ultimate Bet, and most other major venues.</p>
<p></p>
<h3>Why are you giving this information out?</h3>
<p>I debated for a long time whether or not to make this information public, as I'm a poker player myself and have no desire to see the game ruined by an avalanche of poker bots. It's not that building a poker bot is some sort of black magic, known only to the privileged few. Any competent programmer can build one. But this information hasn't, so far as I know, been collected and presented in one place, certainly not as a "How To" complete with sample code. So the question I struggled with was this: is it irresponsible to publicize this information, such that every Internet script kiddie out there now has the ammunition he needs to actually build a bot?</p>
<p>After thinking about it, I've decided that <strong>keeping the technology of poker bot building secret is like declaring that only criminals can carry handguns</strong>. The fact is, there are people in the world right now who are doing this:</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=poker_boiler_room.jpg" alt=""></p>

<p><strong>Poker bots, underground online poker&nbsp;boiler rooms, and collusion are a reality</strong>. That doesn't mean online poker's not worth playing, just that it pays to be educated about what's possible. Furthermore, there should be public discussion&nbsp;regarding <em>what to do about it</em> because one thing's certain: computers and programming languages aren't exactly going to be getting less powerful. <strong>The rise of the poker bots is a virtual certainty</strong>. I'd like to see the major online poker venues open up their famously vague "bot detection" and "anti-collusion"&nbsp;strategies to public scrutiny, as cryptography and security providers learned to do years ago. The best security algorithms and techniques all have the weight of public review behind them and I don't see how online poker's any different.</p>
<p>But even assuming all that weren't the case:</p>
<ul>
<li><strong>Poker bots already exist on the open market</strong>. Do a little creative&nbsp;Internet searching.</li>

<li><strong>The poker community suffers from an irrational fear of bots</strong>. I'd gladly risk my money against most homegrown bots and trust me: you would too.</li>
<li><strong>I believe that bots are actually good for the game of poker</strong>. Mike Caro, "the Mad Genius of Poker," expressed a similar idea years ago.</li>
<li><strong>Any programmer worth his salt can build a bot with&nbsp;or without this document</strong>. They already have.</li>
</ul>
<p>If you're visiting this page from 2 + 2 or another poker community, and you want to stay on top of&nbsp;this article (which will be in several parts),&nbsp;you can subscribe to the <a href="http://feeds.feedburner.com/codingthewheel">Coding the Wheel RSS&nbsp;feed</a> or get it <a href="http://www.feedburner.com/fb/a/emailverifySubmit?feedId=1768427&amp;loc =en_US">in your email inbox</a>&nbsp;as I don't participate in these communities often.&nbsp;For easy digestibility, I'll be organizing these posts using a question and answer format, as there's a lot of highly technical material to cover.</p>

<p>Now, without further ado, let's talk about the basics. If you're not a programmer, fair warning: highly technical, possibly excruciatingly boring material ahead.</p>
<h3>Basic poker bot responsibilities</h3>
<p>At a very high level, the poker bot is best analyzed according to the classic&nbsp;model of information handling: Input, Processing, Output.</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=bot_information_flow.g if" alt=""></p>
<p>You'll find that your programming tasks decompose rather nicely into these three basic stages.</p>
<p><strong>Input</strong>. The input to the system is the poker client software itself, including all its windows, log files, and hand histories, as well as internal (often private) state maintained by the running executable. The goal of the input stage is to interrogate the poker client and produce an accurate model of the table state - your hole cards, names and stack sizes of your opponents, current bets, and so forth.</p>
<p><strong>Processing</strong>. The processing stage runs independently of the other two stages. It's job is to take the table model assembled during the Input phase, and figure out whether to fold, check, bet, raise, or call. That's it. The code that performs this analysis should (ideally) know nothing about screen scraping or interrogating other applications. All it knows is how to take an abstract model of a poker table (probably expressed as some sort of PokerTable class) and determine which betting action to make.</p>
<p><strong>Output</strong>. Once the processing stage has made a decision, the Output stage takes over. It's tasked with clicking the correct buttons on the screen, or simulating whatever user input is necessary in order to actually make the action occur on a given poker site/client.</p>

<h3>How does the bot figure out what its hole cards (and the board cards)&nbsp;are?</h3>
<p>This is a broad question which it's better to break down into particulars. First of all, there's a very easy way to detect hole cards via a screen-scraping&nbsp;or "poor-man's&nbsp;OCR" approach. You don't have to be an image-recognition expert. All you have to know is how to get the color of a handful of different pixels on the screen. Or to put it another way, <strong>for any given card in the deck, there are a handful of pixels you can test which will uniquely identify that card</strong>.&nbsp;</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=card_pixel_test.gif" alt=""></p>
<p>That's fairly easy to implement, and requires zero knowledge of OCR, image recognition, graphics processing, etc. But depending on the specific poker site, pulling card rank and suit information might be even easier. On some sites, the hole cards will be emitted into the real-time game summary info:&nbsp;</p>
<p><img style="border: 1px solid black;" src="http://www.codingthewheel.com/image.axd?picture=dealing_hole_cards.gif " alt="Dealing Hole Cards (4h 2c)" height="43" width="427"></p>
<p>Occasionally you'll find that hole cards are emitted into the log file. Poker Stars, for example, conveniently emits this information into its log file, and it does so&nbsp;in real time (meaning you can snoop on it in real time, and in the next installment, I'll show you how):</p>
<blockquote>

<pre>MSG_TABLE_SUBSCR_ACTION<br>MSG_TABL E_SUBSCR_DEALPLAYERCARDS<br>&nbsp; sit1<br>&nbsp; nCards=2<br>&nbsp; sit3<br>&nbsp; nCards=2<br>&nbsp; sit5<br>&nbsp; nCards=2<br>&nbsp; sit6<br>&nbsp; nCards=2<br>&nbsp; sit7<br>&nbsp; nCards=2<br>&nbsp; dealerPos=3<br>TableAnimation::dealPlaye rCards<br>MSG_TABLE_PLAYERCARDS 00260C82<br><strong>::: 8s &lt;-- Hole Card 1, Cool!<br>::: 13c &lt;-- Hole Card 2, Cool!</strong></pre>

</blockquote>
<p>Last but not least, hole cards are always included in the hand history for a given game:</p>
<blockquote>*** HOLE CARDS ***<br>Dealt to&nbsp;CodingTheWheel [Qs 9h]<br>MargeLeb: calls 10<br>ke4njd: calls 10<br>diamondlover2nite: calls 10<br>franklg454: folds <br>WhoAmINot: calls 5<br>CodingTheWheel: checks <br>*** FLOP *** [4h 7c Qd]<br>WhoAmINot: checks <br>CodingTheWheel: bets 10</blockquote>
<p>The only problem is that, in many cases, the hand history file isn't emitted until the end of the hand.</p>

<h3>How should the poker bot be structured, as a single EXE, a bunch of DLLs, what?</h3>
<p>You will need:</p>
<ul>
<li>An <strong>executable file</strong> (.EXE) to display the bot's UI, and to contain the processing logic (the stuff that knows how to play poker).</li>
<li>A <strong>dynamic link library</strong> (.DLL) to handle the Input (screen scraping) and Output (clicking buttons) processing. You'll&nbsp;inject this DLL into the poker client's process so that your code is effectively running as part of PokerStars, or FullTilt, or whatever site you're using. This will make your life a lot easier both when it comes to collecting data as well as doing things like simulating genuine user input.</li>
</ul>

<p>Those two pieces are essential. Other than that, you're free to structure things however you want. I'll have more to say on this as we get into the nitty-gritty details of the implementation.</p>
<h3>How do I inject my code into the poker client process?</h3>
<p>There are a number of <a title="CodeProject: Three Ways To Inject Your Code into Another Process" href="http://www.codeproject.com/KB/threads/winspy.aspx">well-documented techniques</a> for injecting your code - for example, a DLL you've written - into another application's address space. The method I used, and the method I'm going to recommend you use, is by installing what's known as a <a href="http://msdn.microsoft.com/en-us/library/ms997537.aspx">Windows Hook</a>&nbsp;and&nbsp;specifically a&nbsp;<a href="http://msdn.microsoft.com/en-us/library/ms644977%28VS.85%29.aspx">CBT Hook</a>.&nbsp;The relevant Windows API is <a href="http://msdn.microsoft.com/en-us/library/ms644990.aspx">SetWindowsHookEx</a>, and here's the actual source code. If you're familiar with C++ and the Windows API, it should be straightforward:</p>

<div class="csharp" style="border: 1px solid rgb(208, 208, 208); font-family: monospace; color: rgb(0, 0, 102); background-color: rgb(240, 240, 240);">///////////////////////////////////////////////////////////////////////////////<br>// This is the CBT hook procedure. The HCBT_CREATEWND notification generally<br>// doesn't give us any useful information about the window because WM_CREATE<br>// hasn't been called for the window yet. &nbsp;So instead we don't consider the<br>// window as created until it's gotten it's first WM_ACTIVATE (note: this is <br>// how it works on Poker Stars, the behavior may need to be changed for other sites)<br>///////////////////////////////////////////////////////////////////////////////<br>LRESULT CALLBACK PokerBotCBTProc(int nCode, WPARAM wParam, LPARAM lParam)<br>{<br>&nbsp; &nbsp;if (nCode &lt; 0)<br>&nbsp; &nbsp;{<br>&nbsp; &nbsp;&nbsp; &nbsp;return CallNextHookEx(g_hHook, nCode, wParam, lParam);<br>&nbsp; &nbsp;}<br>&nbsp; &nbsp;else if (theInjector.getVenue() != Venue_Unknown) // ignore this bit of code for now..<br>&nbsp; &nbsp;{<br>&nbsp; &nbsp;&nbsp; &nbsp;// Since we can't use DllMain, perform initialization the first time the hook is called.<br>&nbsp; &nbsp;&nbsp; &nbsp;if (g_bFirstTime)<br>&nbsp; &nbsp;&nbsp; &nbsp;{<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;theInjector.inject();<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;bFirstTime = false;<br>&nbsp; &nbsp;&nbsp; &nbsp;}<br><br>&nbsp; &nbsp;&nbsp; &nbsp;// These are the only notifications we're interested in passing on.<br>&nbsp; &nbsp;&nbsp; &nbsp;if (nCode == HCBT_ACTIVATE)<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;return (LRESULT) theInjector.HandleIt(Hook_Activate, (HWND)wParam);<br>&nbsp; &nbsp;&nbsp; &nbsp;else if (nCode == HCBT_CREATEWND)<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;return (LRESULT) theInjector.HandleIt(Hook_Create, (HWND)wParam);<br>&nbsp; &nbsp;&nbsp; &nbsp;else if (nCode == HCBT_DESTROYWND)<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;return theInjector.HandleIt(Hook_Destroy, (HWND)wParam);<br>&nbsp; &nbsp;}<br><br>&nbsp; &nbsp;// Return 0 to allow window creation/destruction/activation to proceed as normal.<br>&nbsp; &nbsp;return 0;<br>}<br><br>///////////////////////////////////////////////////////////////////////////////<br>// Publically exported hook installation function. The bot will call this on<br>// startup in order to inject this DLL (the DLL that contains this function)<br>// into the address space of every process, including every poker client process,<br>// on the machine.<br>///////////////////////////////////////////////////////////////////////////////<br>bool OPCHOOK_API InstallHooks()<br>{<br>&nbsp; &nbsp;// Actually install the hook...<br>&nbsp; &nbsp;g_hHook = SetWindowsHookEx(WH_CBT, (HOOKPROC) AutoCBTProc, hInstance, 0);<br>&nbsp; &nbsp;return g_hHook != NULL;<br>}</div>

<p>The above source code would live in a DLL: the DLL you plan on injecting into the poker client's address space. This DLL will also contain whatever code you write to handle the "input" (screen-scraping) and "output" (button-clicking) stages of the bot.</p>
<p>An even better way is to use a <strong>two-stage injection process</strong>. The problem with global CBT hooks (or any other kind of global hook for that matter) is that they cause the hook DLL to be loaded into the address space of every process on the machine. If your hook DLL is very fat (for example, if it contains a bunch of code to do screen scraping and so forth) this can impact system performance as your DLL will get mapped into processes you care nothing about, like Notepad.exe.</p>
<p>So to get around that, make the hook DLL - the DLL that gets loaded into every process -&nbsp;as lightweight as possible. Then, whenever the hook DLL detects that it's been loaded by a <em>poker client process</em>, such as POKERSTARS.EXE, have it explicitly&nbsp;load another DLL (again, written by you)&nbsp;containing the bulk of the bot I/O processing code. This in fact is the purpose of the <strong>theInjector</strong> object in the above code sample - it figures out if the DLL is being mapped into a poker client process and, if so, uses <a href="http://msdn.microsoft.com/en-us/library/ms684175%28VS.85%29.aspx">LoadLibrary</a> to load the actual DLL that knows how to do things like screen-scraping and so forth.</p>

<p>A picture might help to clarify:&nbsp;</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=poker_bot_injection.gi f" alt=""></p>
<p>Here, INJECT.DLL would be a lightweight&nbsp;DLL, written by you, which contains the CBT Hook procedure and installation code I showed you above. POKERBOT.DLL is the fat, messy DLL, also written by you,&nbsp;that contains the poker bot's screen-scraping logic.</p>
<p>Do things this way, and the drag on the system shouldn't even be noticeable, other than a brief load period when you first install the hook. This method is a lot easier than most other methods of DLL injection, and more importantly, it's supported across all the major Windows operating systems.</p>
<h3>How do I retrieve the game summary text from the poker table window?</h3>
<p>Almost every online poker client displays a small window in which game summary text is displayed:&nbsp;</p>
<p><img style="border: 1px solid black;" src="http://www.codingthewheel.com/image.axd?picture=poker_summary_text.gif " alt="Poker table summary text" height="130" width="422"></p>
<p>Now, depending on which poker client you're using, this window may or may not be a standard Windows edit box or rich text control.</p>
<p>If it <em>is </em>a standard Windows control, you can get&nbsp;the handle (HWND) to the window, and&nbsp;then get its&nbsp;text via the <a href="http://msdn.microsoft.com/en-us/library/ms633520.aspx">GetWindowText</a> API.&nbsp;Furthermore, you can do this even if the window you're interrogating is owned by another process.</p>

<p>But what you'll find is that many poker clients don't use "normal" Windows controls. They may write their own custom display controls, or they may subclass a standard Windows control and cause WM_GETTEXT to return an empty string.</p>
<p>In that case you have at least&nbsp;three options, none of them trivial:</p>
<ul>
<li>You can investigate the control at&nbsp;the binary level. No matter how customized the control, somewhere in memory it's maintaining a string or a list of string which contains the game summary text. Since your code will be running inside the poker client's process, you're free to do whatever you want to do - investigate different areas of memory, subclass the control, etc.</li>
<li>You can use API hooking to hook the core Windows APIs that every control uses to display text: DrawText, ExtTextOut, etc.</li>
<li>You can use full-fledged OCR to analyze the text window and return the text. But this is probably overkill, especially since text tends to run through the summary window rapidly.</li>
</ul>
<p>When building the bot, I went with the second approach: API Hooking. Once you know how to hook a particular Windows API, so that whenever POKERSTARS.EXE thinks it's calling DrawText, it's actually calling your custom version of DrawText, which snoops on the text before passing the call on to the original DrawText, it's a simple matter to examine the output coordinates to determine, aha:&nbsp;this text is being written to the summary window; this text is being written to the title bar; etc.</p>

<p>This is a deep enough topic that I'll roll it into its own installment along with specific code examples.</p>
<h3>Hook a Windows API? Instrumentation? What does that mean?</h3>
<p>Every Windows&nbsp;application in the world has to call into the Windows API to get things done: open files, create windows, display text, etc. Even language-specific libraries such as the C run time library or the C++ standard library internally will use the OS-provided facilities to work with things like files, memory, and so forth.</p>
<p>API hooking or "instrumentation" is the process of intercepting the function&nbsp;calls that an application (any application)&nbsp;makes, and redirecting them to a custom function defined by <em>you</em>. Specifically, you're going to intercept some of the calls that the poker application makes to the Windows API...</p>
<ul>
<li>DrawText</li>
<li>ExtTextOut</li>

<li>WriteFile</li>
<li>etc</li>
</ul>
<p>...and redirect these&nbsp;calls to&nbsp;a custom&nbsp;"interceptor" function, written by you.&nbsp;Your code thus gets&nbsp;a chance to examine the parameters of the call (which could be a string containing the player's name, for example) and do any other work you desire. When your "preprocessing"&nbsp;is done, you'll pass control back to the <em>original API the poker application thought it was calling in the first place <strong>so that everything works transparently</strong>.</em></p>
<p>This technique can be used to extract all manner of useful internal information from any application, not just online poker clients. The best part is: you no longer have to write custom assembler code to achieve this. Instead you'll use a third-party library, and one of the best is a little-known Microsoft Research Project, <a href="http://research.microsoft.com/sn/detours/">Detours</a>. Download it. Learn it. Love it. Learning how to accomplish API instrumentation means that ultimately, there's nothing the poker client can really hide from you - but that doesn't mean you'll be able to snoop around and figure out your opponent's hole cards. Don't even try. Unless the implementors have been sloppy, that information won't exist anywhere on your machine until your opponents have actually flipped their hole cards over.</p>

<p>And yes, if there's sufficient interest&nbsp;I'll put together a dedicated post with sample code&nbsp;showing exactly how to instrument a poker application.</p>
<h3>Generally speaking, how do I go about harvesting data from an online poker game?</h3>
<p>We've covered a few of the specifics so far, and we'll cover many, many more in future installments. But specific techniques aside, getting information from the poker client&nbsp;is an exercise in detective work. First of all, be aware of <em>just how much information</em> is available:</p>
<ul>
<li><strong>Visual&nbsp;Table State</strong>. Everything a human player sees when playing online poker:&nbsp;his hole cards; the names, stack sizes, and betting actions of all players at the table; the position of the button; and so forth..</li>

<li><strong>Summary Text</strong>. Each table usually displays&nbsp;a text summary area which captures various betting actions, the beginning and end of new hands, etc.</li>
<li><strong>Action Buttons</strong>. These are the buttons the user clicks in order to Fold, Raise, Call, etc. Note that we can use the presence or absence of various action buttons to infer table state.</li>
<li><strong>Log File</strong>. Many poker clients output a log file which may contain helpful information.</li>
<li><strong>Hand Histories</strong>. Most poker clients output a formal "hand history file" which contains a complete description of a single hand of poker.</li>
<li><strong>Internal Stuff</strong>. Internally, most poker client makes standard calls to the C run-time library, the C++ standard library, and the Windows API. You can eavesdrop on these calls through a process known as&nbsp;API "hooking" or&nbsp;instrumentation. Additionally, poker clients, like all software, use memory to store things. Things like player names, cards, and betting actions.</li>

<li><strong>And more</strong>. Stuff I may not know about, or may have chosen not to mention.</li>
</ul>
<p>The bot's job is simply to eavesdrop on that information,&nbsp;and analyze it to produce an accurate model of the table's state at any given point in time. So any technique now or in the future which allows you to do that is potentially a technique you'll want to leverage in the bot. Later, I'll suggest an architecture whereby a number of different <strong>interrogators</strong> can be used to query poker tables in a simple, extensible, and above all <em>tweakable</em> way.</p>
<h3>How do I create a bot that's intelligent enough to play winning poker?</h3>
<p>That's the million-dollar question. I could tell you that the folks over at the <a href="http://poker.cs.ualberta.ca/">University of Alberta's Computer Poker Research Group</a>&nbsp;have made impressive headway towards producing <a href="http://poker.cs.ualberta.ca/papers/johanson.msc.html">a winning poker bot</a>. I could tell you that extensible rules-based systems like the one I implemented for my bot...</p>

<p><img style="border: 1px solid black;" src="http://www.codingthewheel.com/image.axd?picture=poker_bot_profile.gif" alt="" height="602" width="751"></p>
<p>...are a lot more powerful than you think. I could tell you a lot of things, and we'll investigate how to leverage some of the poker bot frameworks that are already out there, and how to combine those with your own custom rulesets. But understand one thing: <strong>you don't have to create a winning poker bot in order to make money with a poker bot</strong>. <strong>All you have to do is create a bot that's capable of breaking even</strong>.</p>
<p>If you can create a bot that <em>breaks even - </em>neither wins nor loses money - rakeback deals and specific programs like the Poker Stars Supernove Elite will ensure that you get a fairly hefty payday&nbsp;<em>per bot account</em>. I mean many tens of thousands of dollars per year, per account. And nothing except the logistical nightmare of it all&nbsp;restricts you to&nbsp;a single bot account; why not have ten; or a hundred?</p>
<p>And indeed, unbeknownst to the rest of the world, somewhere, someone probably does. But not me, and not you; and that's a disparity in basic firepower I'd like to see remedied, since none of the online poker sites have really stepped up to the plate and either a) <strong>made bots legal</strong> (similar to the way that they're legal on Internet Chess Club) or b) <strong>put effective prevention measures in place</strong>.</p>

<h3>What skills will I need to write a bot?</h3>
<p>Well, you'll want to be well-versed in the nuances of C++ and the Windows API, at a minimum.</p>
<p>In addition to that, you'll either need to be familiar with, or get familiar with, an assortment of Windows development topics that reads like a chapter out of Richter (<a href="http://www.amazon.com/gp/product/0735624240?ie=UTF8&amp;tag=codithewhee-20&amp;linkCode=as2&amp;camp=1789&amp;cr eative=9325&amp;creativeASIN=0735624240" >whose books I highly recommend purchasing and studying</a><img style="border: medium none ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=codithewhee-20&amp;l=as2&amp;o=1&amp;a=0735624240" alt="" border="0" height="1" width="1"> if you plan on implementing a bot yourself).</p>
<ul>
<li>Windowing &amp; GDI</li>
<li>Windows Hooks</li>
<li>Kernel objects</li>

<li>DLL Injection (in general: the injecting of code into other processes)</li>
<li>API Instrumentation (via Detours or similar libraries)</li>
<li>Inter-process Communication (IPC)</li>
<li>Multithreading &amp; synchronization</li>
<li>Simulating user input</li>
<li>Regular expressions (probably through Boost)</li>
<li>Spy++</li>
</ul>

<p>While <strong>it would probably be possible to build a bot using C#, VB.NET, or any other language</strong>, you'll find that some of the powers you'll need are only available through specific Windows APIs, and getting access to these APIs from a managed language is a little clunky. Another reason you'll want to use native C++ is that you'll need to sneek some of your code into the client poker process, and it's a lot cleaner to inject a small DLL than it is to inject all the machinery necessary to get managed code to run inside another (native) process.</p>
<h3>Conclusion&nbsp;</h3>
<p>This post has only scratched the surface of building a full-fledged poker bot. Hopefully&nbsp;it's&nbsp;given you food for thought and possibly whetted your appetite for the mountain of details left to be discussed. Assuming there's sufficient interest, I'll be posting a series of installments, each describing at a detailed level how to accomplish one specific poker bot task. If you found this document through a link on 2 + 2 or one of the other poker forums, you can <a href="http://feeds.feedburner.com/codingthewheel">subscribe to this&nbsp;site in a reader</a> or get it <a href="http://www.feedburner.com/fb/a/emailverifySubmit?feedId=1768427&amp;loc =en_US">in your email inbox</a>, as I rarely post (or reply) on the poker forums these days.</p>
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-11-2008, 08:13 PM   #2
TheLock
 
TheLock's Avatar
Join Date: 04-06-08
Posts: 1,996
 
Default

As a former online player (only play live cash now), this is a VERY interesting post BBD.

thanks for taking the time to post this.
__________________
Even Jesus Hates The Yankees
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-11-2008, 08:22 PM   #3
Oscar
 
Oscar's Avatar
Join Date: 02-22-08
Posts: 156
 
Default

fascinating

__________________
Peace Through Superior Firepower - Support Our Troops
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-11-2008, 08:22 PM   #4
imgv94
 
imgv94's Avatar
Join Date: 11-16-05
Posts: 17,273
 
Default

he copied and pasted it.. but its a good read
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-11-2008, 08:28 PM   #5
ChuteBoxe
 
ChuteBoxe's Avatar
Join Date: 11-21-07
Posts: 5,640
 
Default

Who wants to help a brother out and program me one? I could always use a larger bankroll. I don't know much about poker, but if programmed right, it doesn't seem like I need to. If you can build this for me, let me know.
__________________
2009 MLB Picks as of 7.3.09: 129-110 Record [54%] (+27.96 Units)
2008-09 FINAL NBA Record: 161-145 Record [53%] (+47.09 Units)
2008 FINAL NFL Record: 96-81 Record [54%] (+54.89 Units)
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-11-2008, 08:29 PM   #6
bettilimbroke999
 
bettilimbroke999's Avatar
Join Date: 02-04-08
Posts: 5,749
 
Default

I don't want to spend years learning C++ or Windows API can I just buy BBD's bot?
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-11-2008, 09:25 PM   #7
bookie
 
bookie's Avatar
Join Date: 08-10-05
Posts: 608
 
Default

What's a poker boiler room?
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-11-2008, 10:12 PM   #8
MonkeyF0cker
 
MonkeyF0cker's Avatar
Join Date: 06-12-07
Posts: 6,302
 
Default

There are much simpler methods out there to create your own bot (and have been for quite some time now) which don't require writing the code from scratch. The difficulty of a poker bot, however, is creating a profitable ruleset. If you know anything about hold 'em, it would be much simpler to create a breakeven or profitable bot in limit games, since aggression and pot odds are not as influential. This is a very difficult proposition to say the least. And the online sites are always monitoring for bots. The penalties for getting caught include instant account termination and possible blacklistings on other sites (or perhaps termination on other sites as well. I really don't believe the risk is nearly worth the reward. If you're a winning poker player anyway, why not just continue to grind it out and move up in stakes. After all, the only way one could possibly build a profitable bot is if they were a profitable player to begin with. Also, these bots would probably have to remain in lower stakes games. Building a bot to play against players who constantly switch up their game and are less predictable than those at the low stakes tables would be a daunting task...
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-12-2008, 01:39 PM   #9
gambleonclaimers
 
gambleonclaimers's Avatar
Join Date: 02-25-08
Posts: 1,160
 
Default

I have been tinkering with bots since 1999 about a year after I started playing online poker, I originated in the online security sector of the computing industry as my day job. I have created and successfully implented several different versions of poker bots I used them mostly in limit holdem, 7 card stud, and omaha hi lo Now my programs took me about 2 years to get running consistantly profitable. I have analyzed millions of hands of data from 20-30 different poker sites which some no longer exsist. At the height of my operation I had 20 to 30 computers running at my house running 24 hours a day rotating every 8-10 hours with different accounts and sites, each account could play up to 8 tables depending on the poker site, I had 6 different ISP providers and a fractional T3 line dedicated to my poker botting. eventually I was booted from all major sites I was able to make short returns to different sites by using my internet security knowledge to fly under the radar for a while but it was only a matter of time. So after getting tired of hiding from the poker sites I started a computer team and we had about 15-20 people heading the opration all with multiple accounts using my software. My software was used all the way up to 30-60 limit holdem 20-40 limit was my stopping ground on many sites. My software was easy to program and could have been moved to any site at any time it was programmed relatively easily once I figured out what I was looking for and how to implement it in my software design, botting was easy. This woked fantastic till sometime in 2005 when things when south i wasn't getting booted from certain sites and then I realized what the problem was the poker site always wins so in 2006 I quit playing. Let me just say that don't plan on botting for a living any longer the sites have figured out a way to stop this. If your so inclined and feel like searching there are articles and entries written about the inter workings of sites and random number generators, pattern recognition and it clears up alot of the speculation about what can and cannot be done.
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-12-2008, 01:47 PM   #10
jjgold
(7:05EST) Detroit -130
 
jjgold's Avatar
Join Date: 07-20-05
Posts: 41,130
 
Default

So much easier to get a job and make way more money, nothing works long term especially now so don't count on making easy money and if your lucky it is possible to make $7 per hr

Lol...good luck
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-21-2008, 12:18 PM   #11
bigboydan
 
bigboydan's Avatar
Join Date: 08-10-05
Posts: 50,755
 
Default

<a href="/archives/how-i-built-a-working-online-poker-bot-2" class="taggedlink">How I Built a Working Online Poker Bot, Part 2: Interlude</a></div>

<div class="pubDate">Tuesday, May 20, 2008&nbsp;&nbsp;&nbsp;</div>



<div class="text">
<h3>Introduction</h3>

<p>Last week, I posted about <a href="http://www.codingthewheel.com/archives/how-i-built-a-working-poker-bot">how&nbsp;I built a working, real-money&nbsp;online poker bot</a>. This week, we'll discuss how to get started building your own bot,&nbsp;address some specific bot-building techniques, talk about the woeful state of online poker user privacy, respond to a few reader questions and comments, and close out with some <a href="#reading">recommended reading</a>.</p>
<p>This series is both a detailed manual on&nbsp;<strong>how to&nbsp;build and make money with&nbsp;an online poker bot</strong>, and a story of how two guys from the Dallas poker underground managed to realize such a bot in practice.</p>
<p>We'll be discussing everything necessary&nbsp;to build what's quickly becoming the <em>de facto</em> standard in online poker botting: a sophisticated parallel processing rig incorporating collusion AI, massive hand history databases, and real-time information flow to dominate the opposition. This is where the world is headed:</p>

<blockquote>NOTE: While I believe&nbsp;building and running an&nbsp;online poker bot to be neither cheating nor unethical, building a ring of such bots is a different story. As a&nbsp;long time poker-player,&nbsp;<strong>I absolutely don't condone cheating people out of their money by colluding in online poker or any other game</strong>. We're going to discuss things like bot collusion not so we can&nbsp;(all of us) go out and build colluding bot rings, but because these are the techniques people are using right now, today and tomorrow, to gain an unfair edge in online poker.</blockquote>
<p><img src="http://www.codingthewheel.com/image.axd?picture=dark_side_of_online_po ker.gif" alt=""></p>
<p></p>
<p>In order to build, or learn how to defeat, such a contraption,&nbsp;we're going to have to cover a lot of ground:</p>
<ul>
<li><strong>Artificial Intelligence</strong>. Neural nets, genetic algorithms, rules engines, decision trees.</li>

<li><strong>Poker Strategy</strong>. Not the stuff you see on TV.&nbsp;Expert EV-driven poker strategy as it exists today, at the tables, in books, and on the forums.</li>
<li><strong>Input Simulation</strong>. How to generate an appropriately timed and positioned&nbsp;stream of mouse moves, clicks, and keyboard input.</li>
<li><strong>Operating Systems</strong>. Code injection, API hooking, kernel objects, multi-threading, DLLs. In general: forcing Windows to do what you want.</li>
<li><strong>Reverse Engineering</strong>. How to reverse engineer poker client applications and the network data streams they rely on.</li>
<li><strong>Probability and Statistics</strong>. Bayes Theorem, probability distributions, confidence intervals, and other goodies.</li>

</ul>
<p>If you're new to poker, and particularly if you're new to programming, this will be a little bit of a trial by fire. Building a bot is basically the programmer equivalent of joining a Fight Club.</p>
<blockquote>A guy who came to Fight Club for the first time, his ass was a wad of cookie dough. After a few weeks, he was carved out of wood.</blockquote>
<p>Sort of. Read on.</p>
<h3>Why are so many people interested in building bots?</h3>
<p>Last weekend I got a phone call from a friend (a guy I'll have more to say about later), informing me that <a href="http://www.codingthewheel.com/archives/how-i-built-a-working-poker-bot">How I Built a Working Poker Bot, Part 1</a> had hit&nbsp;the <a href="http://www.codingthewheel.com/image.axd?picture=digg_poker_bot.gif">fr ont page</a> of <a href="http://digg.com/tech_news/How_I_Built_a_Working_Online_Poker_Bot_A nd_thanks_for_the">Digg</a>, <a href="http://reddit.com/r/programming/info/6itc4/comments/">reddit</a>, <a href="http://del.icio.us/url/c829b70ee9b20f418034be7d9aa62e9f">del.ic io.us</a>, and other sites, and that Coding the Wheel was getting enough traffic to occasionally&nbsp;throttle the server.&nbsp;</p>

<p><img src="http://www.codingthewheel.com/image.axd?picture=ctw_traffic.png" alt=""></p>
<p>Since then,&nbsp;readers have posted upwards of a thousand comments to the story, here and around the net,&nbsp;and I've gotten a couple hundred emails ranging from&nbsp;technical diatribes to&nbsp;job offers to good old-fashioned hate mail.</p>
<p>The response has been&nbsp;unexpected. Thanks to all who took the time to read the first article, and to those who've joined the discussion so far.&nbsp;In hindsight it seems obvious, but&nbsp;<strong>many, many people have a vested interest in building, or discouraging the building of,&nbsp;s</strong><strong>oftware tools which emulate human behavior</strong>. It goes way beyond online poker, then again,&nbsp;in online poker the profit motive is compelling:</p>
<p><img style="border: 1px solid black;" src="http://www.codingthewheel.com/image.axd?picture=johnny_bax_results.gif " alt="The Poker DB" height="368" width="750"></p>

<p><strong>A&nbsp;successful online poker bot is worth</strong> <strong>hundreds of thousands of dollars even if all your bot does is break even</strong>. Sensationalistic? Maybe, but it's grounded in the very dull, non-sensational&nbsp;mathematics of rakeback and player promotions, which I've outlined below, and which we'll revisit in future posts.</p>
<blockquote>Botting Rule #232: Wherever mouse clicks or other human-computer interactions are worth money,&nbsp;hordes of people will try to write software to simulate those interactions.</blockquote>
<h3>Why online poker clients&nbsp;are basically spyware</h3>
<p>I want to preface this by saying: the online poker sites aren't evil. They're trying to protect their business, and that's perfectly normal. But I think they've strayed from the beaten path when it comes to respecting the privacy of their users.</p>
<p>Many online poker players have no idea that major poker sites silently&nbsp;install a browser plugin which has access to every page you visit in your browser, and potentially every piece of information on that page (the text of private emails; credit card numbers; user login information; etc):</p>

<p><img src="http://www.codingthewheel.com/image.axd?picture=online_poker_privacy.g if" alt=""></p>
<p>Many online poker players have no idea that poker clients can and will snoop around on your system, potentially viewing sensitive data:</p>
<ul>
<li>By examining your list of running processes</li>
<li>By reading body and titlebar text from every window you have open</li>
<li>By taking occasional screenshots</li>
<li>By snooping around on your file system, and in the system registry</li>
<li>By doing who knows what else, since there's zero oversight.</li>
</ul>
<p><strong>This&nbsp;is the definition of spyware. These "safeguards" constitute a basic invasion of your digital privacy and you should be angry about it</strong>. It doesn't matter whether the sites actually collect, pay attention to, store, or transmit that information. It doesn't matter if they do it with the best of intentions. It doesn't matter if they tell you they're going to do it in the EULA. They quite simply have no business doing it at all, and if they're going to do it, they should be doing a better job.</p>

<p>In other words, online poker is really the worst of both worlds:&nbsp;extreme invasion of privacy unheard of outside the realm of spyware, and zilch to show for it&nbsp;- zero effective safeguards against bots or other supposedly malicious software.</p>
<p>And yes: it's true that many sites will recognize well-known botting software such as WinHoldem. But they currently do very little in the way of preventing home-grown bots.</p>
<blockquote>Botting Rule #472: The biggest advantage of a poker bot is its obscurity.</blockquote>
<h3>Using Spy++ or Winspector&nbsp;to get basic information from the poker client</h3>
<p>Spy++ and Winspector&nbsp;are&nbsp;useful window analysis and debugging tools which allow you to view window properties and messages for any window in the system, including poker client windows:</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=pokerstars_spy.jpg" alt=""></p>
<p>If you take a close look at the above screen shot, you'll see that you'll see that Spy++ has extracted the handle (HWND), caption, class, style, location, and other properties&nbsp;of a Poker Stars table window. We can also drill down and find its child windows, parent window (if any), window class (PokerStarsTableFrameClass, in case you're curious) and other assorted information.</p>

<p>We can also use Spy++ to snoop on the exact messages received by a given window:&nbsp;</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=pokerstars_spy2.jpg" alt=""></p>
<p>Spy++ is included in all versions of Visual Studio, as part of an MSDN subscription. Winspector has a larger feature set than Spy++ and&nbsp;is&nbsp;is available as a free download from <a href="http://www.windows-spy.com/">http://www.windows-spy.com/</a>.</p>
<p>Later, we'll be using this tool to help us figure out what the poker client is doing, beneath the hood. It's also an extremely useful all-purpose window debugging tool, and an important part of a bot developer's (or any&nbsp;Windows developer's)&nbsp;toolkit.</p>
<h3>Why a bot doesn't have to win, in order to win</h3>
<p>I've stated repeatedly&nbsp;that a poker bot only needs to break even in order to generate a profit. Here's how it works, for those who aren't familiar with rakeback or other online poker promotions:</p>

<ul>
<li>IF you play X hands of online poker within a certain amount of time (such as a calendar year).</li>
<li>THEN the poker site gives you&nbsp;Y amount of&nbsp;money, or "player points" which are worth money.</li>
</ul>
<p>That's a simplified, but otherwise accurate, description. And listen. Y can be very large, even "life-changingly" large. Let's look at some actual figures.</p>
<p>Consider that it's fairly standard for a (human) player to play 8 or even 12 tables&nbsp;simultaneously.&nbsp;</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=multitabling_safe.jpg" alt="" height="334" width="500"></p>
<p>Furthermore, in online poker you're generally getting between 50 and 70 hands per table per&nbsp;hour. Let's call it 55, just to be conservative.</p>

<p>So that's 10 tables&nbsp;@&nbsp;55 hands per table per hour, for&nbsp;10 hours a day, 6 days a week, 50 weeks a year.</p>
<p>If you do the math, you'll find it comes out to around <strong>1.65 million hands per year</strong>. If your bot is playing anything other than the microlimits, this is easily enough to qualify you for (just as an example) the Poker Stars Supernova Elite promotion, which when properly liquidated is worth&nbsp;around <strong>seventy or eighty thousand dollars</strong> the year you achieve it, and two or three times that amount the following year (because of the multiplier effect of FPP bonuses).</p>
<p>Similarly, other sites&nbsp;offer rakeback promotions (~30% rakeback is fairly standard) along with assorted perks. <strong>If your bot is playing break-even poker, then your rakeback - quite substantial, as you move up from the microlimits -&nbsp;is pure profit</strong>. Ironically, your profit would shrink to zero if the site stopped collecting rake! (Update: a few readers have questioned this statement, claiming that a break-even bot with rake equates to a winning bot without rake. This is true, but the statement was tongue in cheek. It's ironic that a break-even bot ultimately ends up making money because of, rather than in spite of, the&nbsp;rake.) The thing that more than any other makes games tough to beat - the rake - makes it possible for your bot to turn a healthy profit. And that, as a long-time online poker player, makes me smile.</p>

<blockquote>Botting Rule #1274: Many online poker sites would love to allow bots,&nbsp;if only their users would let them.<br>Botting Rule #47: Online poker players fear bots all out of proportion to the average bot's ability to win in competitive poker.</blockquote>
<h3>How to simulate human input (an overview)</h3>
<p>In next week's post we'll cover this topic in detail, but for now: in order for your bot to be able to perform actions such as betting, raising, or folding, it needs to know how to talk to the poker client. There are at least three basic mechanisms you can use:</p>
<ul>
<li>(Most difficult) Reverse-engineer the network protocol and communicate directly with the poker server.</li>
<li>(Somewhat difficult) Hook into the poker client just beneath the user-interface. In this scenario, you don't simulate mouse clicks; you figure out what internal function(s) handle those mouse clicks, and call those functions directly.</li>
<li>(Easy) Simulate user input - mouse clicks, keyboard input, whatever - at the operating system or even the driver level.</li>
</ul>
<p>The first two techniques are mostly black magic. This third technique - user input simulation - can be further broken down into:</p>

<ul>
<li>Using the <a href="http://msdn.microsoft.com/en-us/library/ms646310%28VS.85%29.aspx">SendInput</a> API.</li>
<li>Directly generating and posting&nbsp;<a href="http://msdn.microsoft.com/en-us/library/ms645616%28VS.85%29.aspx">WM_MOUSEMOVE</a>, <a href="http://msdn.microsoft.com/en-us/library/ms645607%28VS.85%29.aspx">WM_LBUTTONDOWN </a>, and other messages to the poker window.</li>
<li>Using the (deprecated)&nbsp;<a href="http://msdn.microsoft.com/en-us/library/ms646304%28VS.85%29.aspx">keybd_event</a> and <a href="http://msdn.microsoft.com/en-us/library/ms646260%28VS.85%29.aspx">mouse_event</a> APIs.</li>

<li>Writing a <a href="http://www.microsoft.com/mspress/books/sampchap/6262.aspx">custom mouse or keyboard driver</a>.</li>
<li>Possibly other techniques..</li>
</ul>
<p>And regardless of which method you use, you'll&nbsp;want to make it realistic:</p>
<ul>
<li>By incorporating subtle timing randomizations.</li>
<li>By creating realistic mouse-movement trails.</li>
<li>By occasionally clicking and interacting with unrelated windows.</li>

</ul>
<p>You'll find that the SendInput method offered the best tradeoff between power and ease of use, but this is a complex topic. I mean: <em>the interactions between user input events and the various Windows subsystems are complex, and will require tweaking to get right</em>. But the code to generate those interactions is fairly simple.</p>
<h3>Why poker bots will soon be accepted as some of the strongest players in the world</h3>
<p>In the first-ever Man vs. Machine Poker Championship,&nbsp;a University of Alberta research team lead by Dr. Jonathan Schaeffer (the guy&nbsp;behind Chinook, the program that effectively&nbsp;<a href="http://www.nytimes.com/2007/12/09/magazine/09_15_checkers.html?ref=magazine">solved the game of checkers</a>)...</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=polaris_bot.jpg" alt=""></p>
<p>...piitted the <a href="http://en.wikipedia.org/wiki/Polaris_%28poker_bot%29">Polaris poker bot</a> against famous poker professionals, Phil "the Unabomber" Laak and Ali Eslami.</p>

<p>Laak/Eslami&nbsp;won the match with 2 wins, 1 draw, and 1 loss. That's not a hugely convincing margin, and in fact, as the <a href="http://www.cs.ualberta.ca/%7Egames/poker/man-machine/">University of Alberta website points out</a>:</p>
<blockquote>The match was a success in many ways. <strong>Polaris proved that it was able to compete with some of the best poker players in the world</strong>. In fact, the 2-1-1 record of the humans is a little misleading. The actual difference in monetary outcome was just $395 which is a very small amount. The format of the match did a great deal to reduce the large variance in the game of poker, but it does not remove it all. The $395 sum could be as few as one or two hands where Polaris decided to fold when the human who got the same cards decided to continue. For this reason, a future match should prove particularly interesting, as the bot continues to develop in strength.</blockquote>
<p>As for Phil Laak, he had this to say about Polaris, and about&nbsp;poker bots in general:</p>
<blockquote>We're already at the point where artificial intelligence crushes players that are unsophisticated, beats handily intermediate players, and loses small or wins small against savvy opponents... For Round 1, I'd say the bots have it.</blockquote>
<p>Polaris's performance is reminiscent of the 1996 match in which world&nbsp;chess champion <a href="http://en.wikipedia.org/wiki/Gary_Kasparov">Gary Kasparov</a>&nbsp;fended off the&nbsp;<a href="http://en.wikipedia.org/wiki/Deep_Blue_%28chess_computer%29">Deep Blue supercomputer</a>, for the last time.</p>

<p>&nbsp;<img src="http://www.codingthewheel.com/image.axd?picture=deep_blue.jpg" alt=""></p>
<p>The IBM team responsible for Deep Blue made a few tweaks, and one year later, in 1997, Deep Blue came back and won a historic match,&nbsp;3.5 to 2.5 (that's two wins, one loss, and three draws). Kasparov's allegations of unfair software-coaching practices were mostly ignored, and IBM never granted him a rematch. That caused some people to question the authenticity of Deep Blue's victory, for almost a decade.</p>
<p>Until 2006,&nbsp;when another chess program,&nbsp;<a href="http://en.wikipedia.org/wiki/Fritz_%28chess%29">Deep Fritz</a>, handily beat world champion <a href="http://en.wikipedia.org/wiki/Vladimir_Kramnik">Vladimir Kramnik</a>. The crucial difference between Deep Blue and Deep Fritz:</p>
<ul>
<li>Deep Blue ran on specially designed supercomputer-grade hardware</li>
<li>Deep Fritz ran on a workstation PC with two Intel Core 2 Duo CPUs</li>
</ul>

<p>For now I just want&nbsp;to make the point that&nbsp;intelligent, commercial-quality poker bots&nbsp;are a reality in the low and middle limits, and have been for a few years.</p>
<ul>
<li><a href="http://www.msnbc.msn.com/id/6002298/">MSNBC: Are poker 'bots' raking online pots?</a></li>
<li><a href="http://www.wired.com/wired/archive/13.09/pokerbots.html">Wired: On the Internet, Nobody Knows You're a Bot</a></li>
<li><a href="http://www.codinghorror.com/blog/archives/000374.html">Coding Horror: The Rise of the Poker Bots</a></li>
<li><a href="http://www.thisismoney.co.uk/money-savers/article.html?in_article_id=405335&amp;in _page_id=5">ThisIsMoney.co.uk: We put poker bots to the test...</a></li>
</ul>
<h3>Why DLL injection is so powerful</h3>

<p>Several readers have stated that techniques like DLL injection are either a) overkill or b) likely to get you in trouble with the online poker sites. So I'd like to address this issue in a little more detail.</p>
<p>First, here's a video which demonstrates a simple, harmless&nbsp;use of DLL injection in practice:&nbsp;overwriting the Poker Stars cashier balance with a balance dreamt up by the user.</p>
<ul>
<li>Inject the DLL</li>
<li>Subclass the Cashier window</li>
<li>Detect when the Cashier window is invoked</li>
<li>Override WM_PAINT and display a "fake" balance to the user</li>
</ul>
<p>

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" height="355" width="425">
<param name="wmode" value="transparent">
<param name="src" value="http://www.youtube.com/v/Zh6RNpgUA5s&amp;hl=en&amp;rel=0"><embed type="application/x-shockwave-flash" src="http://www.youtube.com/v/Zh6RNpgUA5s&amp;hl=en&amp;rel=0" wmode="transparent" height="355" width="425">
</object>
</p>
<p>First, I recommended it earlier, and I'm going to recommend it again: <a href="http://www.amazon.com/gp/product/0735624240?ie=UTF8&amp;tag=codithewhee-20&amp;linkCode=as2&amp;camp=1789&amp;cr eative=9325&amp;creativeASIN=0735624240" >Jeffrey Richter's excellent book on advanced Windows API development: <em>Windows via C/C++</em></a><img style="border: medium none ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=codithewhee-20&amp;l=as2&amp;o=1&amp;a=0735624240" alt="" border="0" height="1" width="1">. Buy it. Borrow it. Steal it if you must.&nbsp;Most of the information you'll find inside is available somewhere on the Internet, but you'll spend hours upon hours tracking it down. And nobody - nobody - speaks on this subject with Richter's authority.</p>
<p>Here are some thing to keep in mind when deciding whether or not DLL injection is for you:</p>
<ul>
<li>DLL injection isn't a hack.&nbsp;It's a&nbsp;formal&nbsp;capability offered by the Windows API, without which&nbsp;hundreds of legitimate applications (ranging from computer-based training apps to&nbsp;instant messaging applications) would stop working.</li>

<li>There are at least 6 ways to inject a DLL (or binary) code into another process on Windows operating systems: 1) via the Registry 2) using Windows hooks 3) as a Debugger 4) with Remote Threads 5) by creating a Trojan DLL 6) CreateProcess/WriteProcessMemory.</li>
<li>DLL injection isn't particularly difficult to implement, and it's not a poorly-documented, error-prone procedure. It more or less just works.</li>
<li>A&nbsp;given&nbsp;poker client&nbsp;can't simply&nbsp;declare that <strong>all injected DLLs&nbsp;are evil</strong>. The operating system, as well as legitimate third-party&nbsp;applications, can both cause DLLs to be mapped into a process's address&nbsp;space. If Poker Stars, World of Warcraft, or whatever other application were to simply shut down whenever this happened, they'd be unusable.</li>
<li>While it's possible to detect when DLLs are injected into the process's address space, it's <em>not</em> possible to determine whether a given DLL is innocent or malicious. Sure, you can look for the DLL's name, but the name can be changed, with every invocation if need be. You can&nbsp;create some sort of checksum to try to identify malicious DLLs at the binary level. Again, easy to get around by creating a self-modifying .EXE.</li>

</ul>
<p>That said, is it possible to create a bot without DLL injection? Absolutely. But if you can't get your code to run in the poker client's process, your&nbsp;powers are somewhat limited. For example, you won't be able to subclass poker client application windows. You won't be able to query various process data structures. You won't be able to intercept Windows messages intended for the poker client. And so forth.</p>
<h3>Why screen-scraping is a bad idea</h3>
<p>A lot of people have argued that some of the screen-scraping techniques I mentioned - such as pixel-testing for hole cards - are difficult to code, error-prone, and tedious to maintain. I couldn't agree more. <strong>Screen scraping is a last resort</strong>. The bot's Input Component needs to be structured such that it falls back on screen-scraping techniques only when all other options are exhausted.</p>
<p>That said, a mature bot capable of playing at multiple sites will probably require some sort of&nbsp;screen-scraping capability. The trick is to <strong>create a generic screen-scraping mechanism driven by XML or some other easily-edited format</strong>. That way, when some minor aspect of the poker client UI changes, all you have to do is update the "schema" for that particular online poker venue, without rebuilding the poker bot executables.</p>
<p>This will be the subject of (you guessed it) a future article.</p>

<h3><a name="reading"></a>Recommended Reading</h3>
<p>This is by no means a complete list of recommended programming and/or poker books. However, all the books on this are a) relevant to building a poker bot and b)&nbsp; contain information which isn't readily available on the Internet, at least not without a good deal of sleuthing. I own a dog-eared, coffee-splattered copy of every book on this list, and have read most of them multiple times. Note: the programming books are coached from a&nbsp;C++ and Windows perspective&nbsp;but the techniques can be ported to other environments/languages.</p>
<p>Programming books:</p>
<ul>
<li><a href="http://www.amazon.com/gp/product/0735624240?ie=UTF8&amp;tag=codithewhee-20&amp;linkCode=as2&amp;camp=1789&amp;cr eative=9325&amp;creativeASIN=0735624240" >Windows via C/C++</a><img style="border: medium none ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=codithewhee-20&amp;l=as2&amp;o=1&amp;a=0735624240" alt="" border="0" height="1" width="1">. Jeffrey Richter. Everything you ever wanted to know about the Windows API. Should be required reading for all Windows developers, and for anybody working with .NET, as it addresses many of the API constructs on which .NET is built.</li>
<li><a href="http://www.amazon.com/gp/product/0132271915?ie=UTF8&amp;tag=codithewhee-20&amp;linkCode=as2&amp;camp=1789&amp;cr eative=9325&amp;creativeASIN=0132271915" >Exploiting Online Games: Cheating Massively Distributed Systems (Addison-Wesley Software Security Series)</a><img style="border: medium none ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=codithewhee-20&amp;l=as2&amp;o=1&amp;a=0132271915" alt="" border="0" height="1" width="1">. Greg Hoglund and Gary McGraw. If you actually plan on building an online poker bot, this is the book for you. Discusses many of the same techniques discussed in this series, but with a focus on World of Warcraft and other MMORPGs. All of the techniques discussed apply to poker, however.</li>

<li><a href="http://www.amazon.com/gp/product/0201786958?ie=UTF8&amp;tag=codithewhee-20&amp;linkCode=as2&amp;camp=1789&amp;cr eative=9325&amp;creativeASIN=0201786958" >Exploiting Software: How to Break Code (Addison-Wesley Software Security Series)</a><img style="border: medium none ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=codithewhee-20&amp;l=as2&amp;o=1&amp;a=0201786958" alt="" border="0" height="1" width="1">. Greg Hoglund and Gary McGraw. Companion volume to the above, with an emphasis on local applications (e.g., the poker client application running on your machine).</li>
</ul>
<p>Poker books:</p>
<ul>
<li><a href="http://www.amazon.com/gp/product/1880685000?ie=UTF8&amp;tag=codithewhee-20&amp;linkCode=as2&amp;camp=1789&amp;cr eative=9325&amp;creativeASIN=1880685000" >The Theory of Poker</a><img style="border: medium none ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=codithewhee-20&amp;l=as2&amp;o=1&amp;a=1880685000" alt="" border="0" height="1" width="1">. David Sklansky. Quite possibly the most influential book in poker, written by the father of modern poker theory, David Sklansky. The value of this book is that it explains poker theory in a way that's universally applicable to all poker games. Required reading for all poker players and poker bot programmers.</li>
<li><a href="http://www.amazon.com/gp/product/1886070253?ie=UTF8&amp;tag=codithewhee-20&amp;linkCode=as2&amp;camp=1789&amp;cr eative=9325&amp;creativeASIN=1886070253" >The Mathematics of Poker</a><img style="border: medium none ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=codithewhee-20&amp;l=as2&amp;o=1&amp;a=1886070253" alt="" border="0" height="1" width="1">. Bill Chen and Jerrod Ankenman. Difficult but extremely rewarding exposition of&nbsp;poker mathematics. In order to program a fluent poker AI you'll want to understand a lot, though not necessarily all, of this material.</li>
<li><a href="http://www.amazon.com/gp/product/188068540X?ie=UTF8&amp;tag=codithewhee-20&amp;linkCode=as2&amp;camp=1789&amp;cr eative=9325&amp;creativeASIN=188068540X" >Professional No-Limit Hold 'em: Volume I</a><img style="border: medium none ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=codithewhee-20&amp;l=as2&amp;o=1&amp;a=188068540X" alt="" border="0" height="1" width="1">. Matt Flynn, Sunny Mehta, and Ed Miller. In my opinion this is the best book on no-limit Hold'em ever written, and the notion of planning hands around commitment and SPR squares very well with the poker bot AI we'll get into later.</li>

<li><a href="http://www.amazon.com/gp/product/188068537X?ie=UTF8&amp;tag=codithewhee-20&amp;linkCode=as2&amp;camp=1789&amp;cr eative=9325&amp;creativeASIN=188068537X" >No Limit Hold'em: Theory and Practice</a><img style="border: medium none ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=codithewhee-20&amp;l=as2&amp;o=1&amp;a=188068537X" alt="" border="0" height="1" width="1">. David Sklansky and Ed Miller. Another excellent no-limit Hold'em book.</li>
<li><a href="http://www.amazon.com/gp/product/1880685035?ie=UTF8&amp;tag=codithewhee-20&amp;linkCode=as2&amp;camp=1789&amp;cr eative=9325&amp;creativeASIN=1880685035" >Gambling Theory and Other Topics</a><img style="border: medium none ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=codithewhee-20&amp;l=as2&amp;o=1&amp;a=1880685035" alt="" border="0" height="1" width="1">. Mason Malmuth. A somewhat dry, rarely-read masterpiece, with some non-trivial mathematics. Not everything here is directly applicable to playing, or building software for, online poker, but it's all useful.</li>
<li><a href="http://www.amazon.com/gp/product/1880685345?ie=UTF8&amp;tag=codithewhee-20&amp;linkCode=as2&amp;camp=1789&amp;cr eative=9325&amp;creativeASIN=1880685345" >Getting Started in Hold 'em</a><img style="border: medium none ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=codithewhee-20&amp;l=as2&amp;o=1&amp;a=1880685345" alt="" border="0" height="1" width="1">. Ed Miller. Introductory text. There are many good introductions to poker and to Texas Hold'em; this is one of the better ones, and introduces a short-stacked strategy that will be useful in deriving a competitive bot AI for real-money games, down the road.</li>
</ul>
<h3>Conclusion</h3>
<p>We took a break from the source code in this installment as I don't want to alienate too quickly the readers who've subscribed in the past week. In the next installment, we're going to have to plunge right back in, beginning with an in-depth introduction to the architecture of the bot's AI component, expressed in C++, C#, or the language of your choice, and concluding with specific code you can use to simulate a realistic stream of human input. We'll also perform explorative surgery on various online poker clients, exposing their inner resources and code structures to the light of day. Last but not least, we'll answer the question of: how do I snoop on the poker client's log or hand history file in real time?</p>
<p>As always, thanks for reading, and stay tuned for the next installment in the&nbsp;series. Until then...</p>
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-21-2008, 12:48 PM   #12
Data
 
Data's Avatar
Join Date: 11-27-07
Posts: 1,444
 
Default

Quote:
NOTE: While I believe building and running an online poker bot to be neither cheating nor unethical, building a ring of such bots is a different story. As a long time poker-player, I absolutely don't condone cheating people out of their money by colluding in online poker or any other game.
This has always been my take on the issue as well.
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-21-2008, 01:01 PM   #13
MrX
 
MrX's Avatar
Join Date: 01-10-06
Posts: 1,226
 
Default

I think if it is against the rules of the poker room, it is clearly cheating and unethical.

I also doubt there are any poker rooms these days that don't specifically disallow bots.
__________________
The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it. --Terry Pratchett
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-21-2008, 01:36 PM   #14
pico
USC ml
 
pico's Avatar
Join Date: 04-05-07
Posts: 20,786
 
Default

poker bot is fine because you're playing your hand only.

i agree with data, collusion is a no no...but people do collude in casinos...that means the online poker is like the training course for the real poker.

they can check IPs. but a ring of buts with proxy is hard to detect unless they have some kind of program that look at playing time for every table for all players...that is a lot of calulation. i think pokerstar and ftp have those programs running when you play.
__________________
话说天下大势,分久必合,合久必分。

钱 錢 argent Geld soldi お金 돈 dinheiro деньги dinero เงิน כסף, ממון raha λεφτά pengar danh từ
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-21-2008, 03:36 PM   #15
Data
 
Data's Avatar
Join Date: 11-27-07
Posts: 1,444
 
Default

Quote:
Originally Posted by MrX View Post
I think if it is against the rules of the poker room, it is clearly cheating and unethical.
The same thing cannot be ethical and unethical at the same time depending on the rules in place. In contrary, the rules may not necessarily adequately reflect the reality. In general, breaking obsolete rules is not unethical but rather a norm.

Last edited by Data; 05-22-2008 at 08:45 AM.. Reason: spelling
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-21-2008, 05:04 PM   #16
MonkeyF0cker
 
MonkeyF0cker's Avatar
Join Date: 06-12-07
Posts: 6,302
 
Default

Quote:
Originally Posted by picoman View Post
poker bot is fine because you're playing your hand only.

i agree with data, collusion is a no no...but people do collude in casinos...that means the online poker is like the training course for the real poker.

they can check IPs. but a ring of buts with proxy is hard to detect unless they have some kind of program that look at playing time for every table for all players...that is a lot of calulation. i think pokerstar and ftp have those programs running when you play.
You are NOT playing your hand if you are using a poker bot. Just because you may have programmed the bot, it doesn't equate to playing the hands live. No matter how well you program, you cannot completely replicate how you would play each and every hand live. This may eliminate situational hands or or even worse, just plain mistakes. It eliminates influences that live players may encounter such as hunger or fatigue. It is clearly cheating. I'm actually glad that the online sites are so proactive in catching botters. Poker is a game of minimal edge. Anyone who benefits from external aid to give themselves extra edge is a cheater in my book and should be banned, blacklisted, and exposed as a cheater.
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-22-2008, 10:54 AM   #17
MrX
 
MrX's Avatar
Join Date: 01-10-06
Posts: 1,226
 
Default

Quote:
Originally Posted by Data View Post
The same thing cannot be ethical and unethical at the same time depending on the rules in place.
I disagree. Your opponents are playing under the reasonable assumption that others are following the rules.

If the rules forbid bots, it is reasonable for the players at that site to have the expectation that they are playing real people. To break the rules and sick a bot on them is unethical, in my opinion.

If the rules specifically allow bots, it's clearly not unethical to use one.
__________________
The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it. --Terry Pratchett
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-22-2008, 10:57 AM   #18
MrX
 
MrX's Avatar
Join Date: 01-10-06
Posts: 1,226
 
Default

Quote:
Originally Posted by Data View Post
The same thing cannot be ethical and unethical at the same time depending on the rules in place.
I'm actually really surprised that you would take this stance.

Cheating in games is almost universally considered unethical. Whether or not an action is cheating is dependent on the rules in place.
__________________
The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it. --Terry Pratchett
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-22-2008, 12:53 PM   #19
Data
 
Data's Avatar
Join Date: 11-27-07
Posts: 1,444
 
Default

Quote:
Originally Posted by MrX View Post
I'm actually really surprised that you would take this stance.
As an android I am against discriminating my fellow e-braniacs.

Quote:
Cheating in games is almost universally considered unethical. Whether or not an action is cheating is dependent on the rules in place.
True. What you are missing is that the bots are NOT against the poker rules but are against arbitrary poker sites' rules that are not necessarily fair. The reason the bots are prohibited is that the sites must play along the public's fear of bots while that fear comes due to public's lack of understanding what the bots can and cannot do.

The public seems to think that a bot has an advantage over a poker player just like a chess computer has an advantage over a chess player, while in fact there is nothing further from the truth. The bot's owner does not gain in the level of play sending a bot to play for him. In fact, he gives up quite a bit of his level of play. Where he gains is in ability to multitable. More "players" is good for the game, so bots are actually good for the game, not bad.

In a better world, the poker sites would develop and freely distribute "make-your-own-bot" kits where any player could chose his bots' strategy and playing style while all the technical details were already programmed. Then, anyone will have a choice to play himself or send a bot instead. Actually, that seems like a decent business idea for a site to make a separate room open for any type of player welcoming bots to play there. This can work even today. The better future awaits online poker if that becomes a standard.

What poker sites should do is providing a platform. It is none of their business however player chose to play. They should not make rules such as "a player must sit in front of the computer in a suit and a tie and keep a hand that does not hold a mouse on his head". That rule in my view is an equivalent to "no bots" rule. To what extent the players should be allowed to employ computer help? Can they use bots? Can they use player databases? Can they Windows Calculator? Realize, there is no difference. Those are only tools and as such any player should be allowed to use them.

Last edited by Data; 05-22-2008 at 01:17 PM..
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-22-2008, 01:38 PM   #20
20Four7
 
20Four7's Avatar
Join Date: 04-08-07
Posts: 2,751
 
Default

Quote:
Originally Posted by MrX View Post
I think if it is against the rules of the poker room, it is clearly cheating and unethical.

I also doubt there are any poker rooms these days that don't specifically disallow bots.
I believe Titan doesn't specifically disallow bots (I know it used to be true but I haven't played there in years). However to have multiple bots/people in the same game colluding to cheat is certainly wrong.

I have played against what I am sure is a bot and you can kick their ass easily with some creative raising and reraising. Unless they have a real strong hand they will fold to that.
__________________
I support gay marriage because I think gay people have the right to be just as miserable as straight people.
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-22-2008, 02:13 PM   #21
MrX
 
MrX's Avatar
Join Date: 01-10-06
Posts: 1,226
 
Default

While the assumption that bots play worse than humans is true on the whole, there are notable exceptions in certain games. For the time being, no-limit ring games (probably limit ring as well) are safe from superior bots, but with more processing speed will come better and better bots.
__________________
The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it. --Terry Pratchett
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 05-23-2008, 01:43 PM   #22
CrazyLou
Tennis evaluator
 
CrazyLou's Avatar
Join Date: 08-02-07
Posts: 25,542
 
Default

I'm not all that shocked by Data's take on this. Most brilliant math and computer minded guys are usually in favor of these creations. They'd probably rather live in 2508 than 2008, because of the robots which would walk around in replace of human life.

In all seriousness, it's not just that it's against the rules, it's also against the spirit of online play. Players go online for a number of reasons, convenience, multi-tabling, always get a game etc. Players don't go online to play against artificial intelligence, they go online to play against other people.

If there's an area designated for 'bots' as Data suggested, that's different, however I suspect many bot users would never do this. They are not interested in "pro bot competition", they are interested in beating up on unsophisticated players, breaking even against the sharp ones etc. They would not consciously choose to play another bot, their whole thing is they want artificial intelligence vs a real player. While they won't always win, they'll never tilt, and depending their configurations they'll always play close to (if not entirely) optimally given each situation.
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 07-03-2008, 12:50 PM   #23
bigboydan
 
bigboydan's Avatar
Join Date: 08-10-05
Posts: 50,755
 
Default

Here is parts 3 and 4 of this series fellas. Very interesting read to say the least

http://www.codingthewheel.com/archiv...ne-poker-bot-3

http://www.codingthewheel.com/archiv...ne-poker-bot-4
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 07-03-2008, 04:48 PM   #24
rm18
 
rm18's Avatar
Join Date: 09-20-05
Posts: 4,850
 
Default

I do not think it is fair especially guys putting bots into freerolls is another issue
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 07-17-2008, 07:02 PM   #25
bigboydan
 
bigboydan's Avatar
Join Date: 08-10-05
Posts: 50,755
 
Default

How I built a Poker bot parts 5 through 7.

Part 5: Deciphering Poker Stars and Full Tilt
http://www.codingthewheel.com/archiv...ne-poker-bot-5

Part 6: Guerilla-Style File Monitoring on Windows with C# and C++
http://www.codingthewheel.com/archiv...ne-poker-bot-6

Part 7: Extracting Text from 3rd-Party Applications
http://www.codingthewheel.com/archiv...ne-poker-bot-7
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 07-26-2008, 03:44 PM   #26
Cappy
 
Cappy's Avatar
Join Date: 07-26-08
Posts: 395
 
Default

thanks for sharing this
Reply With Quote Multi-Quote This Message Quick reply to this message
Old 12-07-2008, 12:55 PM   #27
semtex
 
semtex's Avatar
Join Date: 12-07-08
Posts: 1
 
Default

My advice for the two of you..

Don't be silly !


Quote:
We at PokerStars have noticed that recently you have tried out a program called "XPokerBot" by Coding The Wheel". We would like you to know that among this program's features are automated robot playing that makes it against the rules of PokerStars.

Perhaps you were unaware that XPokerBot was against the rules, or were just curious about the program, but use of this software under any circumstances is against our terms of service. Those terms of service are located here:

http://www.pokerstars.com/poker/room/tos/

Among them are these terms:

5.5. AUTOMATIC PLAYERS (BOTS). The use of artificial
intelligence including, without limitation, "robots" is
strictly forbidden in connection with the Service. All
actions taken in relation to the Service by a User must
be executed personally by players through the user
interface accessible by use of the Software.

5.6. You agree that PokerStars may take steps to detect and
prevent the use of prohibited EPA Programs. These steps
may include, but are not limited to, examination of
software programs running concurrently with the PokerStars
Software on the User's computer.

5.8. FRAUDULENT BEHAVIOR. In the event that PokerStars deems
that a User has engaged .... in any of the activities set
forth above or any other game manipulation ... PokerStars
shall be entitled to take such action as it sees fit,
including immediately blocking access to the Service,
terminating such User's account with PokerStars, seizing
all monies held in the User's PokerStars account...

PokerStars takes its obligation to the integrity of its games seriously, and cannot permit such programs as XPokerBot to operate.

We realize that you probably were unaware of the forbidden nature of this program, and therefore we will not take any of the above stern reactions due to this detection. Instead, all we ask is that you reply to this Email stating that you're now aware of the rule against bots, and that you won't use such programs on PokerStars again in the future.

Until we receive such an acknowledgement, we have temporarily suspended your PokerStars account. The account closure isn't intended as punishment nor anything other than to get your attention and to have your acknowledgement of the rules on record. Once you've acknowledged the above rules and agreed to refrain from the use of "bots", we will be pleased to restore your account to good standing.

Please don't protest that you didn't use XPokerBot, or that it did not actually play any poker. We are aware that codingthewheel.com has not yet published a complete working bot capable of poker logic. Even the degree of experimentation you have done thus far is against our terms of service, and cannot be permitted. Therefore, any reply that doesn't include something like "I understand that bots are against the rules and I won't use or experiment with them on PokerStars" will only delay the re-opening of your account.


Thank you for your cooperation in this matter.

Best Regards,

XXXXXXXXX
PokerStars Game Security



Last edited by semtex; 12-07-2008 at 01:34 PM..
Reply With Quote Multi-Quote This Message Quick reply to this message
Reply

Thread Tools
Display Modes



All times are GMT -5. The time now is 08:26 PM.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33