parent
d23df9c51c
commit
4978e66028
|
@ -1,3 +1,13 @@
|
||||||
*.py[cow]
|
*.py[cow]
|
||||||
__pycache__/
|
__pycache__/
|
||||||
venv/
|
venv/
|
||||||
|
index.5da4dcc7.js
|
||||||
|
index.5da4dcc7.js.map
|
||||||
|
index.js
|
||||||
|
state.*
|
||||||
|
bot.py
|
||||||
|
boykisser-big.png
|
||||||
|
image.png
|
||||||
|
logs.txt
|
||||||
|
rgb111-full.png
|
||||||
|
state-new.json
|
||||||
|
|
15
async-bot.py
15
async-bot.py
|
@ -1,7 +1,9 @@
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
|
from typing import Optional
|
||||||
from socketio import AsyncSimpleClient
|
from socketio import AsyncSimpleClient
|
||||||
from aiohttp import ClientSession
|
from aiohttp import ClientSession
|
||||||
|
from aiohttp_proxy import ProxyConnector
|
||||||
from PIL import Image, ImageFont, ImageDraw, ImageFilter
|
from PIL import Image, ImageFont, ImageDraw, ImageFilter
|
||||||
from base64 import b64decode
|
from base64 import b64decode
|
||||||
from random import choice
|
from random import choice
|
||||||
|
@ -15,6 +17,7 @@ class AsyncBotManager:
|
||||||
self.font = ImageFont.load_default(8)
|
self.font = ImageFont.load_default(8)
|
||||||
|
|
||||||
self.difference: dict[int, bool] = {}
|
self.difference: dict[int, bool] = {}
|
||||||
|
self._last_update = 0
|
||||||
self._shutdown: bool = False
|
self._shutdown: bool = False
|
||||||
|
|
||||||
def put_text(self, x: int, y: int, text: str):
|
def put_text(self, x: int, y: int, text: str):
|
||||||
|
@ -41,6 +44,7 @@ class AsyncBotManager:
|
||||||
data = await req.json()
|
data = await req.json()
|
||||||
buffer = b64decode(data["full_state"].encode() + b"=")
|
buffer = b64decode(data["full_state"].encode() + b"=")
|
||||||
self.canvas.paste(Image.frombytes("1", (1000, 1000), buffer))
|
self.canvas.paste(Image.frombytes("1", (1000, 1000), buffer))
|
||||||
|
self._last_update: int = data["timestamp"]
|
||||||
async with AsyncSimpleClient(http_session=http) as sio:
|
async with AsyncSimpleClient(http_session=http) as sio:
|
||||||
await sio.connect(f"{self.base}/socket.io")
|
await sio.connect(f"{self.base}/socket.io")
|
||||||
while not self._shutdown:
|
while not self._shutdown:
|
||||||
|
@ -50,8 +54,11 @@ class AsyncBotManager:
|
||||||
image = Image.frombytes("1", (1000, 1000), buffer)
|
image = Image.frombytes("1", (1000, 1000), buffer)
|
||||||
self.canvas.paste(image)
|
self.canvas.paste(image)
|
||||||
image.close()
|
image.close()
|
||||||
|
self._last_update: int = data["timestamp"]
|
||||||
elif event == "batched_bit_toggles":
|
elif event == "batched_bit_toggles":
|
||||||
bits_on, bits_off, timestamp = data
|
bits_on, bits_off, timestamp = data
|
||||||
|
if timestamp < self._last_update:
|
||||||
|
print("SKIPPING UPDATES: TOO OLD")
|
||||||
for ndx in bits_on:
|
for ndx in bits_on:
|
||||||
y, x = divmod(ndx, 1000)
|
y, x = divmod(ndx, 1000)
|
||||||
self.canvas.putpixel((x, y), 255)
|
self.canvas.putpixel((x, y), 255)
|
||||||
|
@ -61,8 +68,9 @@ class AsyncBotManager:
|
||||||
else:
|
else:
|
||||||
print("unknown event", event, data)
|
print("unknown event", event, data)
|
||||||
|
|
||||||
async def writer(self):
|
async def writer(self, proxy_url: Optional[str] = None):
|
||||||
async with ClientSession() as http:
|
proxy = ProxyConnector.from_url(proxy_url) if proxy_url else None
|
||||||
|
async with ClientSession(connector=proxy) as http:
|
||||||
async with AsyncSimpleClient(http_session=http) as sio:
|
async with AsyncSimpleClient(http_session=http) as sio:
|
||||||
await sio.connect(f"{self.base}/socket.io")
|
await sio.connect(f"{self.base}/socket.io")
|
||||||
while not self._shutdown:
|
while not self._shutdown:
|
||||||
|
@ -119,8 +127,9 @@ async def amain():
|
||||||
mgr.difference[ndx_start + 1] = g > 128
|
mgr.difference[ndx_start + 1] = g > 128
|
||||||
mgr.difference[ndx_start + 2] = b > 128
|
mgr.difference[ndx_start + 2] = b > 128
|
||||||
|
|
||||||
|
if (n_proxies := len(settings["proxies"])):
|
||||||
await asyncio.gather(*[
|
await asyncio.gather(*[
|
||||||
mgr.writer() for _ in range(settings["n_bots"])
|
mgr.writer(settings["proxies"][i % n_proxies]) for i in range(settings["n_bots"])
|
||||||
], return_exceptions=True)
|
], return_exceptions=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
from socketio import SimpleClient
|
||||||
|
|
||||||
|
from json import dumps
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
with open("logs.txt", "a") as fp:
|
||||||
|
with SimpleClient() as sio:
|
||||||
|
sio.connect("https://onemillioncheckboxes.com/socket.io")
|
||||||
|
while True:
|
||||||
|
event = sio.receive()
|
||||||
|
now = datetime.utcnow()
|
||||||
|
print(now, event)
|
||||||
|
fp.write(str(now.timestamp()) + " " + dumps(event) + "\n")
|
Loading…
Reference in New Issue