phBot Plugins

Example Plugins

Plugins must be saved inside the Plugins folder otherwise they will not be loaded.

Packet Processing Plugin

This simple plugin will display all packets going to/from Silkroad/Joymax.
from phBot import *
# Called when the bot successfully connects to the game server
def connected():
# All packets received from Silkroad will be passed to this function
# Returning True will keep the packet and False will not forward it to the game server
def handle_silkroad(opcode, data):
log('Python: (Silkroad) 0x%02X' % opcode)
return True
# All packets received from Joymax will be passed to this function
# Returning True will keep the packet and False will not forward it to the client
def handle_joymax(opcode, data):
log('Python: (Joymax) 0x%02X' % opcode)
return True
# Called when the character enters the game world
def joined_game():
# Called when the character teleports
# This function will also be called after the "joined_game" function
def teleported():
log('[%s] Loaded' % __name__)

GUI Plugin

This next plugin creates a basic GUI on the Plugins tab inside the bot.
from phBot import *
import QtBind
gui = QtBind.init(__name__, 'GUI Example')
QtBind.createLabel(gui, 'Welcome to the GUI example Python script! From here you\'ll be able to add your own GUI to the \'Plugins\' tab inside phBot. Being able to create a UI\nopens up far more possibilies.\n\n- Do not replace the __name__ var in the QtBind.init() call. It is used for passing events to the correct module.\n- Only call QtBind.init() during module load\n- Labels are auto resized after text is set', 10, 10)
button1 = QtBind.createButton(gui, 'button_clicked', 'Button', 10, 125)
checkbox1 = QtBind.createCheckBox(gui, 'checkbox_clicked', 'Check Box', 10, 150)
label1 = QtBind.createLabel(gui, 'Label', 10, 175)
lineedit1 = QtBind.createLineEdit(gui, 'Text in box', 10, 200, 32, 16)
QtBind.createLabel(gui, 'The only downside is that you must create the UI by hand.', 10, 250)
def button_clicked():
log('Button clicked')
def checkbox_clicked(checked):
log('Check Box: %s' % checked)
log('[%s] Loaded' % __name__)

Socket Plugin

Sockets are now supported as of v2.0.0. Some "pyd" files were missing (aka DLLs) which caused it to not work previously.
from phBot import *
import socket
log('[%s] Loaded' % __name__)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('', 80))
s.send('GET / HTTP/1.0\r\nHost:\r\n\r\n'.encode('utf-8'))
data = s.recv(1024)
log('%s' % data)
[01:21:03] [socket_test] Loaded
[01:21:03] b'HTTP/1.0 200 OK\r\nCache-Control: max-age=604800\r\nContent-Type: text/html\r\nDate: Sun, 01 Apr 2018 05:21:01 GMT\r\nEtag: "1541025663+gzip+ident"\r\nExpires: Sun, 08 Apr 2018 05:21:01 GMT\r\nLast-Modified: Fri, 09 Aug 2013 23:54:35 GMT\r\nServer: ECS (phl/9D2C)\r\nVary: Accept-Encoding\r\nX-Cache: HIT\r\nContent-Length: 1270\r\nConnection: close\r\n\r\n<!doctype html>\n<html>\n<head>\n <title>Example Domain</title>\n\n <meta charset="utf-8" />\n <meta http-equiv="Content-type" content="text/html; charset=utf-8" />\n <meta name="viewport" content="width=device-width, initial-scale=1" />\n <style type="text/css">\n body {\n background-color: #f0f0f2;\n margin: 0;\n padding: 0;\n font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;\n \n }\n div {\n width: 600px;\n margin: 5em auto;\n padding: 50px;\n background-color: #fff;\n border-radius: 1em;\n }\n a:link, a:visited {\n color: #38488f;\n text-decoration: none;\n }\n @med'