Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Club Penguin Follow Bot
- Aurora's (Arthur) Python PCL (Penguin)
- Features (v1.0) (v2.0) (v3.0):
- Copies target penguin's message (uses pcam)
- Copies target penguin's emotes
- Copies target penguin's position in room
- Copies target penguin's joined room
- Copies target penguin's frame
- Copies target penguin's action
- Copies target penguin's snowballs
- Set an offset for each bot
- Option to load accounts from a file
- Create formations w/ offset for each bot
- Script
- from Penguin.ClubPenguin import ClubPenguin
- from Penguin.Penguin import Penguin
- from Penguin.ClubPenguin import PenguinFactory
- '''
- Followbot Script - CPKarth123
- Penguin (PCL) - Aurora (Arthur)
- '''
- class MyPenguin(Penguin):
- def __init__(self, player, offset_x, offset_y):
- super(MyPenguin, self).__init__(player)
- self.name = 'Billybob' #Change this to the penguin you wish to follow!
- self.mixTarget = ''
- self.offset_x = offset_x
- self.offset_y = offset_y
- self.addListener("sp", self.handleMove)
- self.addListener("se", self.handleEmote)
- self.addListener("sm", self.handleMessage)
- self.addListener("sb", self.handleSnowball)
- self.addListener("sf", self.handleFrame)
- self.addListener("sa", self.handleAction)
- self.addListener("jr", self.handleJoinRoom)
- self.addListener("pbn",self.handlePlayerByName)
- self.addListener("bf", self.handleBf)
- self.addListener("rp", self.handleRp)
- def handleMove(self, data):
- if data[3] == self.mixTarget:
- self.sendPosition(int(data[4]) + self.offset_x, int(data[5]) + self.offset_y)
- def handleEmote(self, data):
- if data[3] == self.mixTarget:
- self.sendEmote(data[4])
- def handleMessage(self, data):
- if data[3] == self.mixTarget:
- self.sendPhraseMessage(data[4])
- def handleSnowball(self, data):
- if data[3] == self.mixTarget:
- self.sendSnowball(data[4], data[5])
- def handleFrame(self, data):
- if data[3] == self.mixTarget:
- self.sendFrame(data[4])
- def handleAction(self, data):
- if data[3] == self.mixTarget:
- self.sendAction(data[4])
- def handleJoinRoom(self, data):
- self.getPlayerInfoByName(self.name)
- def handlePlayerByName(self, data):
- self.mixTarget = data[4]
- self.findBuddy(self.mixTarget)
- def handleBf(self, data):
- if data[3] == '-1':
- self.logger.error("Target is offline!")
- exit()
- self.joinRoom(data[3])
- def handleRp(self, data):
- if data[3] == self.mixTarget:
- self.findBuddy(self.mixTarget)
- class FollowBotFactory(PenguinFactory):
- def __init__(self, offset_x=0, offset_y=0):
- self.offset_x = offset_x
- self.offset_y = offset_y
- super(FollowBotFactory, self).__init__()
- self.logger.debug("FollowBotFactory constructed")
- def buildProtocol(self, addr):
- player = self.queue.pop()
- penguin = MyPenguin(player, self.offset_x, self.offset_y)
- return penguin
- cp = ClubPenguin()
- accounts = []
- for account in open("accounts.txt", "r").read().split("\n"):
- if account!= "":
- accounts.append(dict({"username":account.split(":")[0], "password":account.split(":")[1]}))
- else:
- break
- '''
- Cube Formation
- '''
- cp.connect(username=accounts[0]["username"], password=accounts[0]["password"], server="Ice Pond", \
- factory=FollowBotFactory(45,0))
- cp.connect(username=accounts[1]["username"], password=accounts[1]["password"], server="Ice Pond", \
- factory=FollowBotFactory(-45,0))
- cp.connect(username=accounts[2]["username"], password=accounts[2]["password"], server="Ice Pond", \
- factory=FollowBotFactory(45,45))
- cp.connect(username=accounts[3]["username"], password=accounts[3]["password"], server="Ice Pond", \
- factory=FollowBotFactory(45,-45))
- cp.connect(username=accounts[4]["username"], password=accounts[4]["password"], server="Ice Pond", \
- factory=FollowBotFactory(0,45))
- cp.connect(username=accounts[5]["username"], password=accounts[5]["password"], server="Ice Pond", \
- factory=FollowBotFactory(0,-45))
- cp.connect(username=accounts[6]["username"], password=accounts[6]["password"], server="Ice Pond", \
- factory=FollowBotFactory(-45,-45))
- cp.connect(username=accounts[7]["username"], password=accounts[7]["password"], server="Ice Pond", \
- factory=FollowBotFactory(-45,45))
- cp.start()
- Reveal hidden contents
- NOTE: Please add the following methods in the Penguin class of Penguin.py:
- def findBuddy(self, id):
- self.sendXt("s", "u#bf", id)
- def sendEmote(self, id):
- self.sendXt("s", "u#se", id)
- def sendAction(self, id):
- self.sendXt("s", "u#sa", id)
- def sendSnowball(self, x, y):
- self.sendXt("s", "u#sb", x, y)
- def sendFrame(self, id):
- self.sendXt("s", "u#sf", id)
- Usage
- Download all the files from the GitHub repo then open FollowBot.py, the first thing you need to change is the 'self.name' variable - change this to the penguin you wish to follow. Now you will need a file called 'accounts.txt' w/ a lot of accounts OR you can simply fill in the username and password for the bot manually like so:
- cp.connect(username="USERNAME HERE", password="PASSWORD HERE", server="SERVER HERE", \
- factory=FollowBotFactory())
- If you were to load an account from accounts.txt it will be:
- cp.connect(username=accounts[0]["username"], password=accounts[0]["password"], server="Ice Pond", \
- factory=FollowBotFactory())
- Offset: To set an offset for each bot:
- cp.connect(username=accounts[0]["username"], password=accounts[0]["password"], server="Ice Pond", \
- factory=FollowBotFactory(10,10))
- You can change 10,10 to anything w/ multiple different bots and the right offset you can create cool formations.
- Formations (For formations I recommend having an accounts.txt file)
- Cube Formation
- cp.connect(username=accounts[0]["username"], password=accounts[0]["password"], server="Ice Pond", \
- factory=FollowBotFactory(45,0))
- cp.connect(username=accounts[1]["username"], password=accounts[1]["password"], server="Ice Pond", \
- factory=FollowBotFactory(-45,0))
- cp.connect(username=accounts[2]["username"], password=accounts[2]["password"], server="Ice Pond", \
- factory=FollowBotFactory(45,45))
- cp.connect(username=accounts[3]["username"], password=accounts[3]["password"], server="Ice Pond", \
- factory=FollowBotFactory(45,-45))
- cp.connect(username=accounts[4]["username"], password=accounts[4]["password"], server="Ice Pond", \
- factory=FollowBotFactory(0,45))
- cp.connect(username=accounts[5]["username"], password=accounts[5]["password"], server="Ice Pond", \
- factory=FollowBotFactory(0,-45))
- cp.connect(username=accounts[6]["username"], password=accounts[6]["password"], server="Ice Pond", \
- factory=FollowBotFactory(-45,-45))
- cp.connect(username=accounts[7]["username"], password=accounts[7]["password"], server="Ice Pond", \
- factory=FollowBotFactory(-45,45))
- Reveal hidden contents
- Circle Formation
- cp.connect(username=accounts[0]["username"], password=accounts[0]["password"], server="Ice Pond", \
- factory=FollowBotFactory(-0,-60))
- cp.connect(username=accounts[1]["username"], password=accounts[1]["password"], server="Ice Pond", \
- factory=FollowBotFactory(0,60))
- cp.connect(username=accounts[2]["username"], password=accounts[2]["password"], server="Ice Pond", \
- factory=FollowBotFactory(60,0))
- cp.connect(username=accounts[3]["username"], password=accounts[3]["password"], server="Ice Pond", \
- factory=FollowBotFactory(-60,-0))
- cp.connect(username=accounts[4]["username"], password=accounts[4]["password"], server="Ice Pond", \
- factory=FollowBotFactory(-40,40))
- cp.connect(username=accounts[5]["username"], password=accounts[5]["password"], server="Ice Pond", \
- factory=FollowBotFactory(40,40))
- cp.connect(username=accounts[6]["username"], password=accounts[6]["password"], server="Ice Pond", \
- factory=FollowBotFactory(-40,-40))
- cp.connect(username=accounts[7]["username"], password=accounts[7]["password"], server="Ice Pond", \
- factory=FollowBotFactory(40,-40))
- Reveal hidden contents
- Account Generator (For accounts.txt file) - Written by Aurora (Arthur) w/ a slight modification so it writes accounts in accounts.txt file (Original Post)
- from string import join
- from random import choice, randrange
- from urllib import urlencode
- from operator import xor
- from urllib2 import urlopen, Request
- from bs4 import BeautifulSoup
- class AccountMaker(object):
- header = {
- "User-Agent": "Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11"
- }
- def __init__(self, username, password, email, color="random", amount=1):
- if len(username) > 12:
- print "Username is too long!"
- elif len(username) < 3:
- print "Username is too short."
- elif amount != 1 and len(username) > 9:
- print "Username is too long!"
- elif xor(type(amount) != int, amount < 1):
- print "Invalid amount specified."
- else:
- self.username = username
- self.password = password
- self.email = email
- self.color = color if color != "random" else randrange(1, 13)
- self.amount = amount
- self.create()
- def generateRandomString(self, length=8):
- return join((choice("qwertyuiopasdfghjklzxcvbnm") for _ in range(length)), "")
- def retrieveCookies(self):
- initialRequest = Request("https://secured.clubpenguin.com/penguin/create", headers=self.header)
- initialResponse = urlopen(initialRequest)
- cookie = initialResponse.info().getheader("Set-Cookie")
- initialMarkup = initialResponse.read()
- initialResponse.close()
- soup = BeautifulSoup(initialMarkup)
- self.anonToken = soup.find("input", {"name": "anon_token"})["value"]
- self.formBuildId = soup.find("input", {"name": "form_build_id"})["value"]
- randomString = self.generateRandomString()
- self.header["Cookie"] = "{0} playspanTRANSID=arthur-{1}; cpBROWSERID=vortexal-{1};".format(cookie, randomString)
- self.header["Content-Type"] = "application/x-www-form-urlencoded"
- self.header["Origin"] = "https://secured.clubpenguin.com"
- self.header["Referer"] = "https://secured.clubpenguin.com/penguin/create"
- def register(self, username, email):
- self.retrieveCookies()
- if username == "random":
- username = self.generateRandomString(randrange(5, 11))
- if email == "random":
- randomLocal = self.generateRandomString()
- email = "{0}@gmail.com".format(randomLocal)
- print "Registering with {0} and {1}".format(username, email)
- data = {
- "anon_token": self.anonToken,
- "color": self.color,
- "name": username,
- "pass": self.password,
- "pass_show": randrange(0, 1),
- "email": email,
- "email_confirm": email,
- "terms": 1,
- "op":"Next",
- "form_build_id": self.formBuildId,
- "form_id": "penguin_create_form"
- }
- finalRequest = Request("https://secured.clubpenguin.com/penguin/create", urlencode(data), self.header)
- finalResponse = urlopen(finalRequest)
- setCookieResponse = finalResponse.info().getheader("Set-Cookie")
- finalResponse.close()
- if setCookieResponse != None:
- print "Registration Success"
- with open("accounts.txt", "a") as file:
- file.write(username + ":" + self.password + "\n")
- else:
- print "Registration failed"
- del self.header["Cookie"], self.header["Content-Type"], \
- self.header["Origin"], self.header["Referer"]
- def create(self):
- if self.amount > 1:
- for account in range(self.amount):
- if self.username == "random":
- self.register(self.username, self.email)
- else:
- self.register(self.username + str(account), self.email)
- else:
- self.register(self.username, self.email)
- try:
- AccountMaker(username="random", password="ComplexPassword1", email="random", amount=100)
- except KeyboardInterrupt:
- print "Stopping.."
- Reveal hidden contents
- View the GitHub Repo
- Update Log
- Release. (v1.0)
- Added more handlers (snowball, frames, actions). Tidied the program up. (v2.0)
- Ability to add an offset for each bot. Option to load accounts from accounts.txt file. Create cool formations (v3.0)
- If you have any problems using this script or have any suggestions for improvements please comment down below and I will respond ASAP
- Enjoy!
- Edited Tuesday at 11:55 PM by Karth123
- v3.0 - Ability to add an offset for each bot. Option to load accounts from accounts.txt file. Create cool formations (Updated post w/ GitHub repo)
- Logan, Dote, Hidden Files and 6 others like this Like this
- Screen_Shot_2015-07-11_at_16.28.10.thumb Reveal hidden contents
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement