Initial commit.
This commit is contained in:
parent
52b483674c
commit
71a032e3ef
@ -1,57 +0,0 @@
|
|||||||
from nio import AsyncClient, RoomMessageText
|
|
||||||
import random
|
|
||||||
|
|
||||||
class BooeehBot:
|
|
||||||
|
|
||||||
def generate_boeh(self):
|
|
||||||
boeh = "b"
|
|
||||||
for _ in range(random.randint(1, 10)):
|
|
||||||
boeh += "o"
|
|
||||||
for _ in range(random.randint(1, 5)):
|
|
||||||
boeh += "e"
|
|
||||||
for _ in range(random.randint(1, 3)):
|
|
||||||
boeh += "e"
|
|
||||||
return boeh
|
|
||||||
|
|
||||||
def __init__(self, url, username, password):
|
|
||||||
self.url = url
|
|
||||||
self.username = username
|
|
||||||
self.password = password
|
|
||||||
self.client = AsyncClient(url, username)
|
|
||||||
|
|
||||||
async def login(self):
|
|
||||||
try:
|
|
||||||
response = await self.client.login(self.password)
|
|
||||||
print(f"Logged in. Serving {self.username}.")
|
|
||||||
return response
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Login error: {e}")
|
|
||||||
return None
|
|
||||||
|
|
||||||
async def handle_message(self, room, event):
|
|
||||||
specific_user_id = "@joewilliams007:matrix.org"
|
|
||||||
|
|
||||||
if isinstance(event, RoomMessageText):
|
|
||||||
if event.sender == specific_user_id:
|
|
||||||
response_text = self.generate_boeh()
|
|
||||||
try:
|
|
||||||
await self.client.room_send(
|
|
||||||
room.room_id,
|
|
||||||
message_type="m.room.message",
|
|
||||||
content={"msgtype": "m.text", "body": response_text},
|
|
||||||
)
|
|
||||||
print(f"Response to {event.sender}: " + response_text)
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Failed to send message: {e}")
|
|
||||||
|
|
||||||
async def start(self):
|
|
||||||
login_response = await self.login()
|
|
||||||
if not login_response:
|
|
||||||
return
|
|
||||||
|
|
||||||
self.client.add_event_callback(self.handle_message, RoomMessageText)
|
|
||||||
|
|
||||||
await self.client.sync_forever(timeout=30000)
|
|
||||||
|
|
||||||
async def stop(self):
|
|
||||||
await self.client.close()
|
|
@ -0,0 +1,146 @@
|
|||||||
|
from app.app import Application as BaseApplication
|
||||||
|
from aiohttp import web
|
||||||
|
import aiohttp
|
||||||
|
import json
|
||||||
|
import uuid
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
class BaseView(web.View):
|
||||||
|
|
||||||
|
@property
|
||||||
|
def ip(self):
|
||||||
|
return self.request.headers.get("X-Forwarded-For",self.request.remote)
|
||||||
|
def uid(self):
|
||||||
|
return str(uuid.uuid4())
|
||||||
|
|
||||||
|
@property
|
||||||
|
def app(self):
|
||||||
|
return self.request.app
|
||||||
|
|
||||||
|
@property
|
||||||
|
def db(self):
|
||||||
|
return self.app.db
|
||||||
|
|
||||||
|
def set(self,key, value,**kwargs):
|
||||||
|
record = dict(
|
||||||
|
ip=self.ip,
|
||||||
|
key=key,
|
||||||
|
value=json.dumps(value,default=str),
|
||||||
|
created=datetime.now()
|
||||||
|
)
|
||||||
|
record.update(kwargs)
|
||||||
|
self.db['session'].upsert(dict(
|
||||||
|
key=key,
|
||||||
|
value=json.dumps(value,default=str),
|
||||||
|
ip=self.ip,
|
||||||
|
created=datetime.now()
|
||||||
|
),['session_id','key'])
|
||||||
|
return record
|
||||||
|
|
||||||
|
def get(self,key,default=None):
|
||||||
|
try:
|
||||||
|
return json.loads(self.db['session'].find_one(dict(session_id=self.session_id,key=key))['value'])
|
||||||
|
except:
|
||||||
|
return default
|
||||||
|
|
||||||
|
def insert(self, table, data):
|
||||||
|
data['session_id'] = self.session_id
|
||||||
|
data['created'] = datetime.now()
|
||||||
|
return self.db[table].insert(data)
|
||||||
|
|
||||||
|
def find(self,table,data=None):
|
||||||
|
if not data:
|
||||||
|
data = {}
|
||||||
|
data['session_id'] = self.session_id
|
||||||
|
return [dict(d) for d in self.db[table].find(**data)]
|
||||||
|
|
||||||
|
class EventView(BaseView):
|
||||||
|
|
||||||
|
document_fields = ['html','title','html','domain','href']
|
||||||
|
|
||||||
|
event_fields = ['target','event','tag','scroll_height','scroll_left','scroll_top','client_width','client_height','page_x','page_y','screen_x','screen_y','client_x','client_y','target_x','target_y']
|
||||||
|
|
||||||
|
def is_document_record(self, data):
|
||||||
|
return self.data.get('html') and True or False
|
||||||
|
|
||||||
|
def get_record(self, data):
|
||||||
|
|
||||||
|
try:
|
||||||
|
record = {}
|
||||||
|
for field in self.document_fields:
|
||||||
|
if field in data:
|
||||||
|
record[field] = data[field]
|
||||||
|
if len(record.keys()) == len(document_fields):
|
||||||
|
return record
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
record = {}
|
||||||
|
for field in self.event_fields:
|
||||||
|
if field in data:
|
||||||
|
record[field] = data[field]
|
||||||
|
if len(record.keys()) == len(event_fields):
|
||||||
|
return record
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
async def get(self):
|
||||||
|
ws = web.WebSocketResponse()
|
||||||
|
await ws.prepare(request)
|
||||||
|
|
||||||
|
html = None
|
||||||
|
visit_id = self.uid()
|
||||||
|
print(f"Socket connected from {self.ip}.")
|
||||||
|
|
||||||
|
async for msg in ws:
|
||||||
|
if msg.type == web.WSMsgType.TEXT:
|
||||||
|
# Echo the received message back to the client
|
||||||
|
try:
|
||||||
|
data = data.json()
|
||||||
|
except:
|
||||||
|
continue
|
||||||
|
|
||||||
|
data = self.get_record(data)
|
||||||
|
if self.is_document_record(data):
|
||||||
|
html = data.get('html')
|
||||||
|
record = dict(
|
||||||
|
html=html,
|
||||||
|
visit_id=visit_id,
|
||||||
|
domain=data.get('domain'),
|
||||||
|
href=data.get('href'),
|
||||||
|
title=data.get('title')
|
||||||
|
)
|
||||||
|
self.insert('visit', record)
|
||||||
|
self.app.view_count += 1
|
||||||
|
else:
|
||||||
|
data['visit_id'] = visit_id
|
||||||
|
self.insert('event', record)
|
||||||
|
self.app.event_count += 1
|
||||||
|
|
||||||
|
print(self.app.view_count, self.app.event_count)
|
||||||
|
|
||||||
|
elif msg.type == web.WSMsgType.ERROR:
|
||||||
|
print(f'Socket closed: {ws.exception()}')
|
||||||
|
|
||||||
|
print("Socket cracefully closed.")
|
||||||
|
return ws
|
||||||
|
|
||||||
|
class Application(BaseApplication):
|
||||||
|
|
||||||
|
async def __init__(self, db_path, *args, **kwargs):
|
||||||
|
self.view_count = 0
|
||||||
|
self.event_count = 0
|
||||||
|
await super().__init__(db_path=db_path, *args, **kwargs)
|
||||||
|
self.router.add_get("/", self.index_handler)
|
||||||
|
self.router.add_view("/event", EventView)
|
||||||
|
|
||||||
|
async def index_handler(self, request):
|
||||||
|
return web.Response(
|
||||||
|
text="\n".join(["Under the spreading chestnut tree"
|
||||||
|
"I sold you, and you sold me"
|
||||||
|
"There lie they, and here lie we,"
|
||||||
|
"Under the spreading chestnut tree."
|
||||||
|
]),content_type='text/plain')
|
Loading…
Reference in New Issue
Block a user