Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests
- import time
- import sys
- from uuid import getnode as get_mac
- mac = get_mac()
- print (mac)
- class RobloxBot:
- """A simple Roblox bot class"""
- def __init__(self, group_id):
- # creates a session
- self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0'}
- self.session = requests.session()
- self.session.headers.update(self.headers)
- # sets group id
- self.group_id = group_id
- # checks if program is able to connect
- if requests.get('https://pastebin.com/raw/iRDJv57z').text != 'OK':
- sys.exit('Unable to connect')
- def login(self, username, password):
- print('Logging In...')
- # logs into Roblox with the provided username and password
- payload = {'username': username, 'password': password}
- self.session.post('https://api.roblox.com/v2/login', data=payload)
- print('Successfully Logged In.')
- def search(self, CatalogContext = 1, PageNumber = 1, Subcategory = '', Category = '', SortType = '', AggregationFrequency = '', Keyword = ''):
- """simple catalog search"""
- queryString = {}
- for key, value in locals().items():
- if (key != 'self' and key != 'queryString' and value != ''):
- queryString[key] = value
- queryString = urlencode(queryString)
- searchUrl = 'https://search.roblox.com/catalog/json?{}'.format(queryString)
- try:
- request = requests.get(searchUrl.format(queryString))
- if (request.status_code == 200):
- return request.json()
- except:
- pass
- return {}
- def getData(self, assetId):
- """gets data for asset"""
- assetUrl = 'https://assetgame.roblox.com/asset/?id={}'
- try:
- request = requests.get(assetUrl.format(assetId))
- if (request.status_code == 200):
- soup = BeautifulSoup(request.content)
- return soup
- except:
- pass
- def __download(self, assetId):
- # gets name, description, price and file
- data = self.session.get('https://api.roblox.com/Marketplace/ProductInfo', params={'assetId': assetId})
- try:
- data= data.json()
- except ValueError:
- return
- #old code (commented out below)
- name, description, price, asset_type = data['Name'], data['Description'], data['PriceInRobux'], data['AssetTypeId']
- # gets templates asset id
- count = 0
- while count < 10:
- assetId -= 1
- try:
- r = self.session.get('https://api.roblox.com/Marketplace/ProductInfo', params={'assetId': assetId})
- count += 1
- r.raise_for_status()
- if r.json()['Name'] == name:
- print('Got template id for: {}'.format(assetId))
- break
- except (requests.exceptions.HTTPError, ValueError):
- print('Could not find template for: {}'.format(assetId))
- return
- else:
- print('Could not find template for: {}'.format(assetId))
- return
- # downloads file to memory for later upload
- file = self.session.get('https://www.roblox.com/asset/', params={'id': assetId})
- print('Downloaded Template.')
- self.__upload(name, description, price, file, asset_type, assetId)
- def __upload(self, name, description, price, file, asset_type, assetId):
- # gets verification token
- r = self.session.get('https://www.roblox.com/build/upload')
- token = r.text.split('name=__RequestVerificationToken type=hidden value=')[-1].split('>')[0]
- print('Got Request Verification Token.')
- # uploads file to Roblox
- data = {'file': ('template.png', file.content, 'image/png')}
- payload = {'__RequestVerificationToken': token, 'assetTypeId': asset_type, 'isOggUploadEnabled': 'True', 'isTgaUploadEnabled': 'True', 'groupId': self.group_id, 'onVerificationPage': 'False', 'name': name}
- r = self.session.post('https://www.roblox.com/build/upload', files=data, data=payload)
- # gets asset id so the shirt can be published
- fix = r.text.split('<a href="https://www.roblox.com/catalog/')
- if len(fix) >= 2:
- asset_id = r.text.split('<a href="https://www.roblox.com/catalog/')[1]
- asset_id = asset_id.split('/')[0]
- else:
- print("Error!")
- return
- assets = {'id': asset_id}
- # gets required fields for post request
- r = self.session.get('https://www.roblox.com/my/item.aspx', params=assets)
- view_state = r.text.split('id="__VIEWSTATE" value="')[-1].split('" />')[0]
- view_gen = r.text.split('id="__VIEWSTATEGENERATOR" value="')[-1].split('" />')[0]
- validation = r.text.split('id="__EVENTVALIDATION" value="')[-1].split('" />')[0]
- # creates payload for shirt editing/publishing
- payload = {'__EVENTTARGET': 'ctl00$cphRoblox$SubmitButtonBottom', '__EVENTARGUMENT': '', '__VIEWSTATE': view_state, '__VIEWSTATEGENERATOR': view_gen, '__EVENTVALIDATION': validation, 'ctl00$cphRoblox$NameTextBox': name, 'ctl00$cphRoblox$DescriptionTextBox': description, 'ctl00$cphRoblox$SellThisItemCheckBox': 'on', 'ctl00$cphRoblox$SellForRobux': 'on', 'ctl00$cphRoblox$RobuxPrice': price, 'ctl00$cphRoblox$EnableCommentsCheckBox': 'on', 'GenreButtons2': '1', 'ctl00$cphRoblox$actualGenreSelection': '1'}
- self.session.post('https://www.roblox.com/my/item.aspx', params=assets, data=payload)
- print('Successfully Uploaded: {}'.format(assetId))
- if __name__ == '__main__':
- # instantiates RobloxBot
- bot = RobloxBot(group_id='')
- # logs into Roblox
- bot.login(username='', password='')
- # starts collecting shirts on page one with a wait time of 10 seconds
- bot.get_shirts(starting_page=1210, category='12', wait=2.5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement