rDrama/files/routes/chat.py

122 lines
1.9 KiB
Python

import time
from os import remove
from PIL import Image as IMAGE
from files.helpers.wrappers import *
from files.helpers.alerts import *
from files.helpers.sanitize import *
from files.helpers.security import *
from files.helpers.get import *
from files.helpers.images import *
from files.helpers.const import *
from files.classes import *
from flask import *
from files.__main__ import app, cache, limiter, db_session
from .front import frontlist
from files.helpers.discord import add_role
from datetime import datetime
import requests
from urllib.parse import quote, urlencode
import sys
from flask_socketio import *
month = datetime.now().strftime('%B')
sex = SocketIO(
app
)
@app.get("/chat")
@auth_required
def chat( v):
return render_template("chat.html", v=v)
SIDS={}
COMMANDS={}
HELP={}
TYPING={}
@sex.on('connect')
def socket_connect_auth_user():
g.db=db_session()
v=get_logged_in_user()
if v.id in SIDS:
SIDS[v.id].append(request.sid)
else:
SIDS[v.id]=[request.sid]
emit("status", {'status':"connected"})
g.db.close()
def socket_auth_required(f):
def wrapper(*args, **kwargs):
g.db=db_session()
v=get_logged_in_user()
if request.sid not in SIDS.get(v.id, []):
if v.id in SIDS:
SIDS[v.id].append(request.sid)
else:
SIDS[v.id]=[request.sid]
f(*args, v, **kwargs)
g.db.close()
wrapper.__name__=f.__name__
return wrapper
@sex.on('join room')
@socket_auth_required
def join_guild_room(data, v):
return True
@sex.on('leave room')
@socket_auth_required
def leave_guild_room(data, v):
emit("status", {'status':f"Left #{guild.name}"})
@sex.on('speak')
@socket_auth_required
def speak(data, v):
raw_text=data['text'][0:1000].lstrip().rstrip()
if not raw_text:return
text = sanitize(raw_text)
data={
"avatar": v.profile_url,
"username":v.username,
"text":text,
"time": time.strftime("%d %b %Y at %H:%M:%S", time.gmtime(int(time.time()))),
"userlink":v.url
}
emit('speak', data)