mirror of
				https://github.com/TitanEmbeds/Titan.git
				synced 2025-11-04 07:47:10 +01:00 
			
		
		
		
	Implemented Visitor View -- kinda betaish still
This commit is contained in:
		@@ -1,6 +1,6 @@
 | 
			
		||||
from titanembeds.database import db, Guilds, UnauthenticatedUsers, UnauthenticatedBans, AuthenticatedUsers, KeyValueProperties, GuildMembers, Messages, get_channel_messages, list_all_guild_members
 | 
			
		||||
from titanembeds.decorators import valid_session_required, discord_users_only
 | 
			
		||||
from titanembeds.utils import check_guild_existance, guild_query_unauth_users_bool, get_client_ipaddr, discord_api, rate_limiter, channel_ratelimit_key, guild_ratelimit_key
 | 
			
		||||
from titanembeds.utils import check_guild_existance, guild_accepts_visitors, guild_query_unauth_users_bool, get_client_ipaddr, discord_api, rate_limiter, channel_ratelimit_key, guild_ratelimit_key
 | 
			
		||||
from titanembeds.oauth import user_has_permission, generate_avatar_url, check_user_can_administrate_guild
 | 
			
		||||
from flask import Blueprint, abort, jsonify, session, request
 | 
			
		||||
from sqlalchemy import and_
 | 
			
		||||
@@ -162,8 +162,8 @@ def get_dbguild_channels(guild_id):
 | 
			
		||||
    q = db.session.query(Guilds).filter(Guilds.guild_id == guild_id).first()
 | 
			
		||||
    return json.loads(q.channels)
 | 
			
		||||
 | 
			
		||||
def get_guild_channels(guild_id):
 | 
			
		||||
    if user_unauthenticated():
 | 
			
		||||
def get_guild_channels(guild_id, force_everyone=False):
 | 
			
		||||
    if user_unauthenticated() or force_everyone:
 | 
			
		||||
        member_roles = [guild_id] #equivilant to @everyone role
 | 
			
		||||
    else:
 | 
			
		||||
        member_roles = get_member_roles(guild_id, session['user_id'])
 | 
			
		||||
@@ -177,7 +177,7 @@ def get_guild_channels(guild_id):
 | 
			
		||||
    for channel in guild_channels:
 | 
			
		||||
        if channel['type'] == "text":
 | 
			
		||||
            result = {"channel": channel, "read": False, "write": False, "mention_everyone": False}
 | 
			
		||||
            if guild_owner == session['user_id']:
 | 
			
		||||
            if guild_owner == session.get("user_id"):
 | 
			
		||||
                result["read"] = True
 | 
			
		||||
                result["write"] = True
 | 
			
		||||
                result["mention_everyone"] = True
 | 
			
		||||
@@ -219,7 +219,7 @@ def get_guild_channels(guild_id):
 | 
			
		||||
 | 
			
		||||
            # member specific
 | 
			
		||||
            for overwrite in channel["permission_overwrites"]:
 | 
			
		||||
                if overwrite["type"] == "member" and overwrite["id"] == session["user_id"]:
 | 
			
		||||
                if overwrite["type"] == "member" and overwrite["id"] == session.get("user_id"):
 | 
			
		||||
                    channel_perm = (channel_perm & ~overwrite['deny']) | overwrite['allow']
 | 
			
		||||
                    break
 | 
			
		||||
 | 
			
		||||
@@ -240,8 +240,8 @@ def get_guild_channels(guild_id):
 | 
			
		||||
            result_channels.append(result)
 | 
			
		||||
    return sorted(result_channels, key=lambda k: k['channel']['position'])
 | 
			
		||||
 | 
			
		||||
def filter_guild_channel(guild_id, channel_id):
 | 
			
		||||
    channels = get_guild_channels(guild_id)
 | 
			
		||||
def filter_guild_channel(guild_id, channel_id, force_everyone=False):
 | 
			
		||||
    channels = get_guild_channels(guild_id, force_everyone)
 | 
			
		||||
    for chan in channels:
 | 
			
		||||
        if chan["channel"]["id"] == channel_id:
 | 
			
		||||
            return chan
 | 
			
		||||
@@ -327,6 +327,25 @@ def fetch():
 | 
			
		||||
    response.status_code = status_code
 | 
			
		||||
    return response
 | 
			
		||||
 | 
			
		||||
@api.route("/fetch_visitor", methods=["GET"])
 | 
			
		||||
@rate_limiter.limit("2 per 2 second", key_func = channel_ratelimit_key)
 | 
			
		||||
def fetch_visitor():
 | 
			
		||||
    guild_id = request.args.get("guild_id")
 | 
			
		||||
    channel_id = request.args.get('channel_id')
 | 
			
		||||
    after_snowflake = request.args.get('after', None, type=int)
 | 
			
		||||
    if not guild_accepts_visitors(guild_id):
 | 
			
		||||
        abort(403)
 | 
			
		||||
    messages = {}
 | 
			
		||||
    chan = filter_guild_channel(guild_id, channel_id, True)
 | 
			
		||||
    if not chan.get("read"):
 | 
			
		||||
        status_code = 401
 | 
			
		||||
    else:
 | 
			
		||||
        messages = get_channel_messages(channel_id, after_snowflake)
 | 
			
		||||
        status_code = 200
 | 
			
		||||
    response = jsonify(messages=messages)
 | 
			
		||||
    response.status_code = status_code
 | 
			
		||||
    return response
 | 
			
		||||
 | 
			
		||||
@api.route("/post", methods=["POST"])
 | 
			
		||||
@valid_session_required(api=True)
 | 
			
		||||
@rate_limiter.limit("1 per 10 second", key_func = channel_ratelimit_key)
 | 
			
		||||
@@ -393,21 +412,36 @@ def create_unauthenticated_user():
 | 
			
		||||
        response.status_code = 403
 | 
			
		||||
        return response
 | 
			
		||||
 | 
			
		||||
def process_query_guild(guild_id, visitor=False):
 | 
			
		||||
    widget = discord_api.get_widget(guild_id)
 | 
			
		||||
    channels = get_guild_channels(guild_id, visitor)
 | 
			
		||||
    discordmembers = get_online_discord_users(guild_id, widget)
 | 
			
		||||
    embedmembers = get_online_embed_users(guild_id)
 | 
			
		||||
    emojis = get_guild_emojis(guild_id)
 | 
			
		||||
    if visitor:
 | 
			
		||||
        for channel in channels:
 | 
			
		||||
            channel["write"] = False
 | 
			
		||||
    return jsonify(channels=channels, discordmembers=discordmembers, embedmembers=embedmembers, emojis=emojis, instant_invite=widget.get("instant_invite"))
 | 
			
		||||
 | 
			
		||||
@api.route("/query_guild", methods=["GET"])
 | 
			
		||||
@valid_session_required(api=True)
 | 
			
		||||
def query_guild():
 | 
			
		||||
    guild_id = request.args.get('guild_id')
 | 
			
		||||
    if check_guild_existance(guild_id):
 | 
			
		||||
        if check_user_in_guild(guild_id):
 | 
			
		||||
            widget = discord_api.get_widget(guild_id)
 | 
			
		||||
            channels = get_guild_channels(guild_id)
 | 
			
		||||
            discordmembers = get_online_discord_users(guild_id, widget)
 | 
			
		||||
            embedmembers = get_online_embed_users(guild_id)
 | 
			
		||||
            emojis = get_guild_emojis(guild_id)
 | 
			
		||||
            return jsonify(channels=channels, discordmembers=discordmembers, embedmembers=embedmembers, emojis=emojis, instant_invite=widget.get("instant_invite"))
 | 
			
		||||
            return process_query_guild(guild_id)
 | 
			
		||||
        abort(403)
 | 
			
		||||
    abort(404)
 | 
			
		||||
 | 
			
		||||
@api.route("/query_guild_visitor", methods=["GET"])
 | 
			
		||||
def query_guild_visitor():
 | 
			
		||||
    guild_id = request.args.get('guild_id')
 | 
			
		||||
    if check_guild_existance(guild_id):
 | 
			
		||||
        if not guild_accepts_visitors(guild_id):
 | 
			
		||||
            abort(403)
 | 
			
		||||
        return process_query_guild(guild_id, True)
 | 
			
		||||
    abort(404)
 | 
			
		||||
 | 
			
		||||
@api.route("/create_authenticated_user", methods=["POST"])
 | 
			
		||||
@discord_users_only(api=True)
 | 
			
		||||
def create_authenticated_user():
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
from flask import Blueprint, render_template, abort, redirect, url_for, session, request
 | 
			
		||||
from titanembeds.utils import check_guild_existance, guild_query_unauth_users_bool
 | 
			
		||||
from titanembeds.utils import check_guild_existance, guild_query_unauth_users_bool, guild_accepts_visitors
 | 
			
		||||
from titanembeds.oauth import generate_guild_icon_url, generate_avatar_url
 | 
			
		||||
from titanembeds.database import db, Guilds, UserCSS
 | 
			
		||||
from config import config
 | 
			
		||||
@@ -42,6 +42,7 @@ def guild_embed(guild_id):
 | 
			
		||||
            guild_id=guild_id, guild=guild_dict,
 | 
			
		||||
            generate_guild_icon=generate_guild_icon_url,
 | 
			
		||||
            unauth_enabled=guild_query_unauth_users_bool(guild_id),
 | 
			
		||||
            visitors_enabled=guild_accepts_visitors(guild_id),
 | 
			
		||||
            client_id=config['client-id'],
 | 
			
		||||
            css=get_custom_css()
 | 
			
		||||
        )
 | 
			
		||||
 
 | 
			
		||||
@@ -175,6 +175,7 @@ def administrate_guild(guild_id):
 | 
			
		||||
        "id": db_guild.guild_id,
 | 
			
		||||
        "name": db_guild.name,
 | 
			
		||||
        "unauth_users": db_guild.unauth_users,
 | 
			
		||||
        "visitor_view": db_guild.visitor_view,
 | 
			
		||||
        "chat_links": db_guild.chat_links,
 | 
			
		||||
        "bracket_links": db_guild.bracket_links,
 | 
			
		||||
        "mentions_limit": db_guild.mentions_limit,
 | 
			
		||||
@@ -192,6 +193,7 @@ def update_administrate_guild(guild_id):
 | 
			
		||||
    if not db_guild:
 | 
			
		||||
        abort(400)
 | 
			
		||||
    db_guild.unauth_users = request.form.get("unauth_users", db_guild.unauth_users) in ["true", True]
 | 
			
		||||
    db_guild.visitor_view = request.form.get("visitor_view", db_guild.visitor_view) in ["true", True]
 | 
			
		||||
    db_guild.chat_links = request.form.get("chat_links", db_guild.chat_links) in ["true", True]
 | 
			
		||||
    db_guild.bracket_links = request.form.get("bracket_links", db_guild.bracket_links) in ["true", True]
 | 
			
		||||
    db_guild.mentions_limit = request.form.get("mentions_limit", db_guild.mentions_limit)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user