Discuss Scratch

wvzack
Scratcher
100+ posts

scratchattach - A Scratch API wrapper (Python)

BreadcatGames wrote:

wvzack wrote:

Redstone1080 wrote:

Vortextgamer wrote:

(#1460)

codeywhizz wrote:

Can someone explain why when I type:

pip install scratchattach
import scratchattach as scratch3
session = scratch3.login(“username”, “password”)

It doesn't work and it says install is an invalid syntax

Thanks!
IDK. ive also tried
Because you need to type “pip install scratchattach” in your terminal, not your code editor.
what is a terminal
*vine boom*
It’s the mysterious black hacker box
lol

Likes: Programing (python scratch Lua c++ I am bad at c++ a) Aiviation (B787 Queen of the sky F35) Mountain Biking and Messing around with computers (not a gamer at all)
My projects I am most happy with also the few “polished games I have:
MonkeyBean2
Scratcher
100+ posts

scratchattach - A Scratch API wrapper (Python)

TimMcCool, please do something to make it clearer that people are supposed to run
pip install scratchattach
in their terminal, and not add it to their python script.

Last edited by MonkeyBean2 (Feb. 16, 2023 17:39:39)



9NAwRfSR-%dWFS$a$g&zBMTj2?;jvS?L5%^X%qpCX|A<*paJ=lU07c)wmt$v{TxL5



scratchGui.timeTravel.year = '2020'
PPPDUD
Scratcher
1000+ posts

scratchattach - A Scratch API wrapper (Python)

BreadcatGames wrote:

wvzack wrote:

Redstone1080 wrote:

Vortextgamer wrote:

(#1460)

codeywhizz wrote:

Can someone explain why when I type:

pip install scratchattach
import scratchattach as scratch3
session = scratch3.login(“username”, “password”)

It doesn't work and it says install is an invalid syntax

Thanks!
IDK. ive also tried
Because you need to type “pip install scratchattach” in your terminal, not your code editor.
what is a terminal
*vine boom*
It’s the mysterious black hacker box
With it, you can try to bug your friend's computer.

Fun fact: If you have malware on a Windows NT device, it's possible that deleting system32 will severely damage the malware. It will also damage your Windows install.

Help keep this topic alive!

The rest of my signature was eaten by an evil kumquat attacked by a terrible president who ate my banana shot down this signature instead of shooting down the TikTok Cell Tower white balloon that probably had a camera bundled with it.

https://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA1isnZw.img?w=800&h=435&q=60&m=2&f=jpg
wvzack
Scratcher
100+ posts

scratchattach - A Scratch API wrapper (Python)

PPPDUD wrote:

BreadcatGames wrote:

wvzack wrote:

Redstone1080 wrote:

Vortextgamer wrote:

(#1460)

codeywhizz wrote:

Can someone explain why when I type:

pip install scratchattach
import scratchattach as scratch3
session = scratch3.login(“username”, “password”)

It doesn't work and it says install is an invalid syntax

Thanks!
IDK. ive also tried
Because you need to type “pip install scratchattach” in your terminal, not your code editor.
what is a terminal
*vine boom*
It’s the mysterious black hacker box
With it, you can try to bug your friend's computer.
ehhh i have definitely not installed a fake virus i made with the terminal

Likes: Programing (python scratch Lua c++ I am bad at c++ a) Aiviation (B787 Queen of the sky F35) Mountain Biking and Messing around with computers (not a gamer at all)
My projects I am most happy with also the few “polished games I have:
wvzack
Scratcher
100+ posts

scratchattach - A Scratch API wrapper (Python)

MonkeyBean2 wrote:

TimMcCool, please do something to make it clearer that people are supposed to run
pip install scratchattach
in their terminal, and not add it to their python script.
yes definitely and make sure you say that the command prompt is the same thing as your terminal

Likes: Programing (python scratch Lua c++ I am bad at c++ a) Aiviation (B787 Queen of the sky F35) Mountain Biking and Messing around with computers (not a gamer at all)
My projects I am most happy with also the few “polished games I have:
Nobhold
Scratcher
11 posts

scratchattach - A Scratch API wrapper (Python)

Esben_Flavogle wrote:

when green flag clicked
change [Timmccools follows v] by (100000)

TY SO MUCH FOR MAKING THIS
A little nonsense now and the then, is cherished by the wisest men. -Roald Dahl

Last edited by Nobhold (Feb. 17, 2023 09:40:16)

xxxxxxx-70
Scratcher
1000+ posts

scratchattach - A Scratch API wrapper (Python)

MonkeyBean2 wrote:

TimMcCool wrote:

Update: The development of this library is pretty much discontinued, there probably won't be new features.

What app do I install this in? I got the file downloaded now all I need is to find an app to open this in.

You have to install Python (you can download it at python.org), then you need to run “pip install scratchattach” in your command prompt. I'd recommend you to learn python before programming with it
Can other people still contribute?
Cool snake

<<Xxxxxxx-70>>
______________________________________________________________ Oh hi there im xxxxxxx-70 an 16 year old i enjoy my life and it’s pretty chill I have accomplished many milestone and I’m happy to have them :) I also do a lot of art and very few codes if you want to support my alts check down here
Here are all my alts @Bluevubeman @nicescracher @the-guy-who-cares :D
by someone i dont know feel free to vistit my ◆-Profile-◆ page
by xxxxxxx-70
MonkeyBean2
Scratcher
100+ posts

scratchattach - A Scratch API wrapper (Python)

xxxxxxx-70 wrote:

MonkeyBean2 wrote:

Cool snake
Thanks, but please comment about peoples' signatures on their profiles, instead of in an unrelated forum thread.


9NAwRfSR-%dWFS$a$g&zBMTj2?;jvS?L5%^X%qpCX|A<*paJ=lU07c)wmt$v{TxL5



scratchGui.timeTravel.year = '2020'
Happy_Asya_Duck
Scratcher
3 posts

scratchattach - A Scratch API wrapper (Python)


WojtekGame
Scratcher
1000+ posts

scratchattach - A Scratch API wrapper (Python)

Happy_Asya_Duck wrote:

same.


forgot to update sig, i own minecraft months ago lol
JS: code-gui | scratch-player | Roost.js | Pandoa | TOP: Roost.js || C++: Gamine | Gamiinuu | TOP: Gamine
Else: Emoji Painter | Forum Shopping Mall | TOP: Emoji Painter || Profile:Scratch | GitHub
Orgs: Chroast | Twerkish | Komond OS | JS Inventions | TOP: JS Inventions || Ocular Naming: 0 | 1 | 2 | 3
Games: Mom Hid My Game! | Creeper Adventuring
else might be outdated or removed by the ST.
VIGARPAST_777
Scratcher
55 posts

scratchattach - A Scratch API wrapper (Python)

Cloud Interactions
#—– Cloud interactions

import websocket
import json
import requests
from threading import Thread
import time
from . import _exceptions

class _CloudMixin:

def __init__(self, *, project_id, username=“python”, session_id=None, cloud_host=None):
self._session_id = session_id
self._username = username
self.project_id = str(project_id)
self._ratelimited_until = 0#deals with the 0.1 second rate limit for cloud variable sets
self._connect(cloud_host=cloud_host)
self.cloud_host = cloud_host

def _send_packet(self, packet):
self.websocket.send(json.dumps(packet) + “\n”)

def disconnect(self):
self.websocket.close()

def _handshake(self):
try:
self._send_packet(
{“method”: “handshake”, “user”: self._username, “project_id”: self.project_id}
)
except Exception:
self._connect(cloud_host=self.cloud_host)
self._handshake()

class CloudConnection(_CloudMixin):

def _connect(self, *, cloud_host):
try:
self.websocket = websocket.WebSocket()
self.websocket.connect(
“wss/clouddata.scratch.mit.edu”,
cookie=“scratchsessionsid=” + self._session_id + “;”,
origin="https://scratch.mit.edu“,
enable_multithread=True,
)
except Exception:
raise(_exceptions.ConnectionError)

def set_var(self, variable, value):
value = str(value)
if len(value) > 256:
print(”invalid cloud var (too long):“, value)
raise(_exceptions.InvalidCloudValue)
x = value.replace(”.“, ”“)
if not x.isnumeric():
print(”invalid cloud var (not numeric):“, value)
raise(_exceptions.InvalidCloudValue)
while self._ratelimited_until + 0.1 >= time.time():
pass
try:
self._send_packet(
{
”method“: ”set“,
”name“: ”☁ “ + variable,
”value“: str(value),
”user“: self._username,
”project_id“: self.project_id,
}
)
except Exception as e:
try:
self._handshake()
except Exception:
self._connect(cloud_host=self.cloud_host)
self._handshake()

time.sleep(0.1)
self.set_var(variable, value)
self._ratelimited_until = time.time()

class TwCloudConnection(_CloudMixin):

def _connect(self, *, cloud_host):
try:
if cloud_host is None:
cloud_host = ”wss/clouddata.turbowarp.org/“
self.websocket = websocket.WebSocket()
self.websocket.connect(
cloud_host,
)
self._handshake()
except Exception:
raise(_exceptions.ConnectionError)

def set_var(self, variable, value):
value = str(value)
x = value.replace(”.“, ”“)
if not value.isnumeric():
raise(_exceptions.InvalidCloudValue)
while self._ratelimited_until + 0.11 > time.time():
pass
try:
self._send_packet(
{
”method“: ”set“,
”name“: ”☁ “ + variable,
”value“: str(value),
”user“: self._username,
”project_id“: self.project_id,
}
)
self.websocket.recv()
except Exception as e:
try:
self._handshake()
except Exception:
self._connect(cloud_host=None)
self._handshake()

time.sleep(0.1)
self.set_var(variable, value)
self._ratelimited_until = time.time()


class CloudEvents:

class Event:
def __init__(self, **entries):
self.__dict__.update(entries)

def __init__(self, project_id):
self.project_id = int(project_id)
self.data = get_cloud_logs(project_id=self.project_id, limit = 15)
self._thread = None
self.running = False
self._events = {}

def start(self, *, update_interval = 0.1):
if self.running is False:
self.update_interval = update_interval
self.running = True
self._thread = Thread(target=self._update, args)).start()
if ”on_ready" in self._events:
self._events()

def _update(self):
while True:
if self.running:
data = get_cloud_logs(project_id = self.project_id, limit = 15)
if data != self.data:
for activity in data:
if activity in self.data:
break
if “on_”+activity in self._events:
self._events[“on_”+activity](self.Event(user=activity, var=activity, name=activity, value=activity, timestamp=activity))
self.data = data
else:
return
time.sleep(self.update_interval)

def stop(self):
if self._thread is not None:
self.running = False
self.project_id = None
self._thread.join()
self._thread = None

def event(self, function):
self._events = function
# —–

def get_cloud(project_id):
try:
response = json.loads(requests.get(f"https://clouddata.scratch.mit.edu/logs?projectid={project_id}&limit=100&offset=0").text)
response.reverse()
clouddata = {}
for activity in response:
clouddata[activity] = activity
return clouddata
except Exception:
return

def get_var(project_id, variable):
try:
response = json.loads(requests.get(f"https://clouddata.scratch.mit.edu/logs?projectid={project_id}&limit=100&offset=0").text)
response = list(filter(lambda k: k == “☁ ”+variable, response))
if response == :
return None
else:
return response
except Exception:
return None

def get_cloud_logs(project_id, *, filter_by_var_named =None, limit=25, offset=0):
try:
response = json.loads(requests.get(f"https://clouddata.scratch.mit.edu/logs?projectid={project_id}&limit={limit}&offset={offset}").text)
if filter_by_var_named is None: return response
else:
return list(filter(lambda k: k == “☁ ”+filter_by_var_named, response))
except Exception:
return

Bye
Knightbot63
Scratcher
1000+ posts

scratchattach - A Scratch API wrapper (Python)

VIGARPAST_777 wrote:

(#1496)
-snip-
What? Also, please don't spam nonsense.

I wait…… and I wait……. because I am the one who waits………..
Highlight + Shift + Down

2 Years on Scratch……
Real grind to 1,000,000 Animal Crossing Nook Miles, Current: 900,050
I don't use Scratch as much as I used to like in 2022-2023… Heavily inactive due to School and a big project.
This part you're seeing is a Signature. This has nothing to do with my post.
I have 1 more Challenge Board tile until I 100% the Challenge Board in Smash Ultimate. Last ones are from online.

I am a basic Wii homebrewer. I have made custom WADs. Installation in my github website.

Captain Falcon VS. Level 9 Captain Falcon. I won with 3 stocks.

:)




































Subscribe to Caseoh_ on twitch.
I want to work on making it possible to put caseoh on the ban page for Scratch.
Wii Modification things I have:
RiiConnect24 + WiiLink Patch
CTGP-R (Custom Track Grand Prix Revolution)
Wiimmfi
BootMii and Priiloader for brick protection in case I go too far.
VIGARPAST_777
Scratcher
55 posts

scratchattach - A Scratch API wrapper (Python)

Getting projects
#—– Getting projects

import json
import requests
from . import _user
from . import _exceptions
headers = {
‘user-agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36’,
“x-csrftoken”: “a”,
“x-requested-with”: “XMLHttpRequest”,
“referer”: "https://scratch.mit.edu“,
}

class PartialProject:

# This class is for unshared projects

def __init__(self, **entries):

self.shared = None

self.__dict__.update(entries)

if ”_session" not in self.__dict__.keys():
self._session = None
if self._session is None:
self._headers = headers
self._cookies = {}
else:
self._headers = self._session._headers
self._cookies = self._session._cookies

self._json_headers = self._headers
self._json_headers = “application/json”
self._json_headers = “application/json”


def download(self, *, filename=None, dir=“”):
try:
if filename is None:
filename = str(self.id)
response = requests.get(f"https://projects.scratch.mit.edu/{self.id}“)
filename = filename.replace(”.sb3“, ”“)
open(f”{dir}{filename}.sb3“, ‘wb’).write(response.content)
except Exception:
raise(_exceptions.FetchError)

def get_raw_json(self):
return requests.get(f”https://projects.scratch.mit.edu/{self.id}/“).json()

def get_creator_agent(self):
try:
return requests.get(f”https://projects.scratch.mit.edu/{self.id}/").json()
except Exception:
raise(_exceptions.FetchError)

def remixes(self, *, limit=None, offset=0):
if limit is None:
_projects = json.loads(requests.get(
f"https://api.scratch.mit.edu/projects/{self.id}/remixes/?offset={offset}“,
headers = {
”x-csrftoken“: ”a“,
”x-requested-with“: ”XMLHttpRequest“,
”Cookie“: ”scratchcsrftoken=a;scratchlanguage=en;“,
”referer“: ”https://scratch.mit.edu“,
‘user-agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36’,
}
).text)
else:
_projects = requests.get(
f”https://api.scratch.mit.edu/projects/{self.id}/remixes/?limit={limit}&offset={offset}“,
headers = {
”x-csrftoken“: ”a“,
”x-requested-with“: ”XMLHttpRequest“,
”Cookie“: ”scratchcsrftoken=a;scratchlanguage=en;“,
”referer“: ”https://scratch.mit.edu",
‘user-agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36’,
}
).json()
projects =
for project in _projects:
projects.append(Project(
author = project,
comments_allowed = project,
description=project,
created = project,
last_modified = project,
share_date = project,
id = project,
thumbnail_url = project,
instructions = project,
remix_parent = project,
remix_root = project,
favorites = project,
loves = project,
remixes = project,
views = project,
title = project,
url = "https://scratch.mit.edu/projects/" + str(project),
_session = self._session,
))
return projects


class Project(PartialProject):


def __str__(self):
return self.title

def update(self):
if self._session is not None:
project = requests.get(
f"https://api.scratch.mit.edu/projects/{self.id}“,
headers = {
”user-agent“: ”Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36“,
”x-token“: self._session.xtoken,
}
).json()
else:
project = requests.get(f”https://api.scratch.mit.edu/projects/{self.id}“).json()
if ”code" in list(project.keys()):
return False
else:
return self._update_from_dict(project)

def _update_from_dict(self, project):
try:
self.id = int(project)
except KeyError:
pass
self.url = "https://scratch.mit.edu/projects/"+str(self.id)
self.author = project
self.comments_allowed = project
self.instructions = project
self.notes=project
self.created = project
self.last_modified = project
self.share_date = project
self.thumbnail_url = project
try:
self.remix_parent = project
self.remix_root = project
except Exception:
self.remix_parent = None
self.remix_root = None
self.favorites = project
self.loves = project
self.remix_count = project
self.views = project
self.title = project
return True

def get_author(self):
try:
return self._session.connect_user(self.author)
except AttributeError:
return _user.get_user(self.author)

def comments(self, *, limit=40, offset=0):
while len(comments) < limit:
r = requests.get(
f"https://api.scratch.mit.edu/users/{self.author}/projects/{self.id}/comments/?limit={limit}&offset={offset}“
).json()
if len(response) != 40:
break
offset += 40
comments.append(r)
return comments

def get_comment_replies(self, *, comment_id, limit=40, offset=0):
while len(comments) < limit:
r = requests.get(
f”https://api.scratch.mit.edu/users/{self.author}/projects/{self.id}/comments/{comment_id}/replies?limit={limit}&offset={offset}“
).json()
if len(response) != 40:
break
offset += 40
comments.append(r)
return comments

def love(self):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
r = requests.post(
f”https://api.scratch.mit.edu/proxy/projects/{self.id}/loves/user/{self._session._username}",
headers=self._headers,
cookies=self._cookies,
).json()
if r is False:
self.love()

def unlove(self):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
return requests.post(
f"https://api.scratch.mit.edu/proxy/projects/{self.id}/loves/user/{self._session._username}",
headers = self._headers,
cookies = self._cookies,
).json()
if r is True:
self.love()

def favorite(self):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
return requests.post(
f"https://api.scratch.mit.edu/proxy/projects/{self.id}/loves/user/{self._session._username}",
headers = self._headers,
cookies = self._cookies,
).json()
if r is False:
self.love()

def unfavorite(self):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
return requests.post(
f"https://api.scratch.mit.edu/proxy/projects/{self.id}/loves/user/{self._session._username}",
headers = self._headers,
cookies = self._cookies,
).json()
if r is False:
self.love()


def post_view(self):
requests.post(
f"https://api.scratch.mit.edu/users/{self.author}/projects/{self.id}/views/“,
headers=headers,
)

def turn_off_commenting(self):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
if self._session._username != self.author:
raise(_exceptions.Unauthorized)
return
data = {
”comments_allowed“ : False
}
self._update_from_dict(requests.put(
f”https://api.scratch.mit.edu/projects/{self.id}/“,
headers = self._json_headers,
cookies = self._cookies,
data = json.dumps(data)
).json())

def turn_on_commenting(self):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
if self._session._username != self.author:
raise(_exceptions.Unauthorized)
return
data = {
”comments_allowed“ : True
}
self._update_from_dict(requests.put(
f”https://api.scratch.mit.edu/projects/{self.id}/“,
headers = self._json_headers,
cookies = self._cookies,
data = json.dumps(data)
).json())



def toggle_commenting(self):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
if self._session._username != self.author:
raise(_exceptions.Unauthorized)
return
data = {
”comments_allowed“ : not self.comments_allowed
}
self._update_from_dict(requests.put(
f”https://api.scratch.mit.edu/projects/{self.id}/“,
headers = self._json_headers,
cookies = self._cookies,
data = json.dumps(data)
).json())

def share(self):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
if self._session._username != self.author:
raise(_exceptions.Unauthorized)
return
if self.shared is not True:
requests.put(f”https://api.scratch.mit.edu/proxy/projects/{self.id}/share/“,
headers = self._json_headers,
cookies = self._cookies,
)

def unshare(self):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
if self._session._username != self.author:
raise(_exceptions.Unauthorized)
return
if self.shared is not False:
requests.put(f”https://api.scratch.mit.edu/proxy/projects/{self.id}/unshare/“,
headers = self._json_headers,
cookies = self._cookies,
)

def set_thumbnail(self, *, file):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
if self._session._username != self.author:
raise(_exceptions.Unauthorized)
return
with open(file, ”rb“) as f:
thumbnail = f.read()
requests.post(
f”https://scratch.mit.edu/internalapi/project/thumbnail/{self.id}/set/“,
data = thumbnail,
headers = self._headers,
cookies = self._cookies,
)

def delete_comment(self, *, comment_id):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
if self._session._username != self.author:
raise(_exceptions.Unauthorized)
return
return requests.delete(
f”https://api.scratch.mit.edu/proxy/comments/project/{self.id}/comment/{comment_id}/“,
headers = self._headers,
cookies = self._cookies,
).headers

def report_comment(self, *, comment_id):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
return requests.delete(
f”https://api.scratch.mit.edu/proxy/comments/project/{self.id}/comment/{comment_id}/report“,
headers = self._headers,
cookies = self._cookies,
)

def post_comment(self, content, *, parent_id=”“, commentee_id=”“):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
data = {
”commentee_id“: commentee_id,
”content“: content,
”parent_id": parent_id,
}
headers = self._json_headers
headers = "https://scratch.mit.edu/projects/“ + str(self.id) + ”/“
return requests.post(
f”https://api.scratch.mit.edu/proxy/comments/project/{self.id}/“,
headers = headers,
cookies = self._cookies,
data=json.dumps(data),
).text


def reply_comment(self, content, *, parent_id, commentee_id=”“):
return self.post_comment(content, parent_id=parent_id, commentee_id=commentee_id)


def set_title(self, text):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
if self._session._username != self.author:
raise(_exceptions.Unauthorized)
return
r = requests.put(f”https://api.scratch.mit.edu/projects/{self.id}“,
headers = self._headers,
cookies = self._cookies,
data=json.dumps({”title“:text})).json()
return self._update_from_dict(r)

def set_instructions(self, text):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
if self._session._username != self.author:
raise(_exceptions.Unauthorized)
return
r = requests.put(f”https://api.scratch.mit.edu/projects/{self.id}“,
headers = self._headers,
cookies = self._cookies,
data=json.dumps({”instructions“:text})).json()
return self._update_from_dict(r)

def set_notes(self, text):
if self._headers is None:
raise(_exceptions.Unauthenticated)
return
if self._session._username != self.author:
raise(_exceptions.Unauthorized)
return
r = requests.put(f”https://api.scratch.mit.edu/projects/{self.id}“,
headers = self._headers,
cookies = self._cookies,
data=json.dumps({”description“:text})).json()
return self._update_from_dict(r)

def studios(self):
return requests.get(f”https://api.scratch.mit.edu/users/{self.author}/projects/{self.id}/studios“).json()

def ranks(self):
return requests.get(f”https://scratchdb.lefty.one/v3/project/info/{self.id}").json()


# —— #

def get_project(project_id):
try:
project = Project(id=int(project_id))
if not project.update():
project = PartialProject(id=int(project_id))
return project
except KeyError:
return None

Bye
fluo1234
Scratcher
100+ posts

scratchattach - A Scratch API wrapper (Python)

aw they banned replit thats the only ide i have

do you need he- nvm

I wrote:

ok
something
VIGARPAST_777
Scratcher
55 posts

scratchattach - A Scratch API wrapper (Python)

#1500!

Bye
ItBeJC
Scratcher
1000+ posts

scratchattach - A Scratch API wrapper (Python)

Can someone teach me how to code in Python and use this extension? It sounds really cool, and I've seen many projects that use this or that could be made with this, such as BlockBit. Also, could you make an MMO with this?

Game Is Game.

My King Message:
King like Drake hotline bling I'm like Rod Wave cuz I sing but I'm black yea we got a brotha as a king I needa queen like elizabeth can't be broke or else I might choke yea I'm with the times I'm woke yea I speak and I spoke I'm Light Yagami cuz' I write a note yea my life is an anime, spiderman and aunt may, this ain't no game no I do not play yea like the mando this is the way and I could freestyle like this all day cuz i got that crown and this golden ring cuz I'm king. –>–>–>–>–>–>–>–>–>–>–>–>–> {Shift + Down Arrow To See The Gang}

Da Gang: (There's no order, just a list so don't take any offense)
@OneTapTK
@Mrhaxalot123
@depresso-boiyo
@-YourLocalPhantom
@TheGl1tchedDrag0n
@-GaIaxy_cat- (spelled with capitol i and not a lowercase L)
@glitcX
@MistaLOD
@TeslaDummy
@-cloudcoding-
@kinosaurs515
@semisupervised
@-The_Destroyer-
@iiucandyfloss
@xxxxxxx-70
@just-a-hriday
WojtekGame
Scratcher
1000+ posts

scratchattach - A Scratch API wrapper (Python)

ItBeJC wrote:

Can someone teach me how to code in Python and use this extension? It sounds really cool, and I've seen many projects that use this or that could be made with this, such as BlockBit. Also, could you make an MMO with this?
docs.python.org and unsure, but for leaderboards, sure.


forgot to update sig, i own minecraft months ago lol
JS: code-gui | scratch-player | Roost.js | Pandoa | TOP: Roost.js || C++: Gamine | Gamiinuu | TOP: Gamine
Else: Emoji Painter | Forum Shopping Mall | TOP: Emoji Painter || Profile:Scratch | GitHub
Orgs: Chroast | Twerkish | Komond OS | JS Inventions | TOP: JS Inventions || Ocular Naming: 0 | 1 | 2 | 3
Games: Mom Hid My Game! | Creeper Adventuring
else might be outdated or removed by the ST.
Redstone1080
Scratcher
1000+ posts

scratchattach - A Scratch API wrapper (Python)

ItBeJC wrote:

(#1501)
Can someone teach me how to code in Python and use this extension? It sounds really cool, and I've seen many projects that use this or that could be made with this, such as BlockBit. Also, could you make an MMO with this?
For stuff like MMOs I would recommend the scratchcloud module by SansStudios (who is known as yuwex elsewhere). It's much faster than scratchattach.

const juniper = programmer && musician;
// my pronouns are she/her
// i am trans and bi :P
// you can call me june or juni for short but i prefer juniper
python version:
juniper = programmer and musician
# my pronouns are she/her
# i am trans and bi :P
# you can call me june or juni for short but i prefer juniper
WojtekGame
Scratcher
1000+ posts

scratchattach - A Scratch API wrapper (Python)

Redstone1080 wrote:

ItBeJC wrote:

(#1501)
Can someone teach me how to code in Python and use this extension? It sounds really cool, and I've seen many projects that use this or that could be made with this, such as BlockBit. Also, could you make an MMO with this?
For stuff like MMOs I would recommend the scratchcloud module by SansStudios (who is known as yuwex elsewhere). It's much faster than scratchattach.
^


forgot to update sig, i own minecraft months ago lol
JS: code-gui | scratch-player | Roost.js | Pandoa | TOP: Roost.js || C++: Gamine | Gamiinuu | TOP: Gamine
Else: Emoji Painter | Forum Shopping Mall | TOP: Emoji Painter || Profile:Scratch | GitHub
Orgs: Chroast | Twerkish | Komond OS | JS Inventions | TOP: JS Inventions || Ocular Naming: 0 | 1 | 2 | 3
Games: Mom Hid My Game! | Creeper Adventuring
else might be outdated or removed by the ST.
VIGARPAST_777
Scratcher
55 posts

scratchattach - A Scratch API wrapper (Python)

WojtekGame wrote:

Redstone1080 wrote:

ItBeJC wrote:

(#1501)
Can someone teach me how to code in Python and use this extension? It sounds really cool, and I've seen many projects that use this or that could be made with this, such as BlockBit. Also, could you make an MMO with this?
For stuff like MMOs I would recommend the scratchcloud module by SansStudios (who is known as yuwex elsewhere). It's much faster than scratchattach.
^
No, you can't made a MMO game with python, because this only connect scratch with project

Bye

Powered by DjangoBB