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