mirror of
https://github.com/TitanEmbeds/Titan.git
synced 2025-06-16 19:35:24 +02: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