Skip to content

Showdown Intro

5-Minute Summary

In the poketypes package, we include the module showdown, which contains pydantic BaseModel subclasses for General and Battle Message formats. This allows for a smoother communication process with Pokemon Showdown, as rather than needing to build a message parser yourself, relying on relatively limited documentation from Showdown directly, you can instead build logic to take as input either Message or BattleMessage objects, which will come pre-parsed, with full type-hinting and data validation built in.

To start, you can import both from the module showdown like so:

from poketypes.showdown import Message, BattleMessage

Both Message and BattleMessage are subclasses of pydantic.BaseModel, and both also have an additional function called from_message, which takes as input a string, and returns an initialized and parsed object from the input string message.

message = BattleMessage.from_string("|poke|p1|Metagross, L80|item")

At this point, message will automatically be identified as a poke battle message, and will be an instance of the class poketypes.showdown.battlemessage.BattleMessage_poke. Rather than checking with isinstance, however, we recommend instead checking the message.BMTYPE (or message.MTYPE for general messages), which is of the type poketypes.showdown.BMType, an Enum of all the different battle message types you can receive. For type hinting purposes, such as in the signature of a function that would process a given BattleMessage subclass, you would do the following:

def process_bm_poke(message: poketypes.showdown.battlemessage.BattleMessage_poke):

This will ensure that your IDE will have type hinting support as you process the message, and in the specific example of BattleMessage_poke, will give support in directly accessing the data fields like message.PLAYER that are unique to this BattleMessage subclass.

Check out the Guides in this section for some common use-cases of this module, eith step-by-step instructions on each part of the process. Or if you prefer to learn by reading docs, check out the Reference links below or on the sidebar to familiarize yourself with some of the different categories of messages.

For details on all the different kinds of Message subclasses, see the reference page here

For details on all the different kinds of BattleMessage subclasses, see the reference page here