# Events

If you do not need one of these functions, you should not add it to your Python script.

## finished

This function gets called when Python is being unloaded and the bot is exiting. You should close any open files here.

## connected

This function gets called when the bot connects to the game server.

## disconnected

This function is called when the bot disconnects from the server. It can be called several times on a disconnect.

## handle\_joymax(opcode, data)

All packets received from the server are passed to this function.

## handle\_silkroad(opcode, data)

All packets received from the game client are passed to this function.

## joined\_game()

Called when the user successfully selects a character. No character data has been loaded yet.

## teleported()

Called when the character teleports and right after `joined_game()`

## event\_loop()

Called every 500ms.

## character\_listing(args)

Called when the character listing is received. `args` is a string list of character names. Character name will include `*` at the beginning of its name if it is being deleted.

## handle\_chat(t, player, msg)

Called when a chat message is received. `t` is the type sent by the server.

All chat messages received are sent to this function. `player` can be `None` if it's not a private message.

## handle\_event(t, data)

Called for specific events. `data` field will always be a string. Cast it to an `int` if needed.

Current event list (`t`):

```
EVENT_UNIQUE_SPAWN = 0 # data = monster name
EVENT_HUNTER_SPAWN = 1 # data = player name (includes traders)
EVENT_THIEF_SPAWN = 2 # data = player name
EVENT_TRANSPORT_DIED = 3 # data = transport id (includes horses)
EVENT_PLAYER_ATTACKING = 4 # data = player name
EVENT_RARE_DROP = 5 # data = item model (equippable only)
EVENT_ITEM_DROP = 6 # data = item model (equippable only)
EVENT_DIED = 7 # data = empty string
EVENT_ALCHEMY_FINISHED = 8 # data = empty string
EVENT_GM_SPAWNED = 9 # data = player name
EVENT_LEVEL_UP = 10 # data = new level
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://plugins.phbot.org/phbot-api/events.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
