forked from rDrama/rDrama
1
0
Fork 0

Merge branch 'frost' of https://github.com/Aevann1/rDrama into frost

master
Aevann1 2022-07-20 02:53:14 +02:00
commit f6a26cef62
38 changed files with 685 additions and 107 deletions

View File

@ -839,6 +839,7 @@
{"name":"gigachad","tags": ["chad"],"class":"Misc"},
{"name":"gigachad2", "tags": ["chad"], "class":"Misc"},
{"name":"gigachad3", "tags": ["chad"], "class":"Misc"},
{"name":"pedobear", "class":"Misc"},
{"name":"kippy","class":"Misc"},
{"name":"onerat","class":"Misc"},
{"name":"gunt","class":"Misc"}

View File

@ -378,5 +378,6 @@
{"name":"wholesomeseal","class":"Misc"},
{"name":"gigachadglow","tags": ["chad", "glow", "fbi"],"class":"Misc"},
{"name":"gigachad","tags": ["chad"],"class":"Misc"},
{"name":"gigachad2", "tags": ["chad"], "class":"Misc"}
{"name":"gigachad2", "tags": ["chad"], "class":"Misc"},
{"name":"pedobear", "class":"Misc"}
]

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -36,13 +36,15 @@ function popclick(e) {
let popover = document.getElementsByClassName("popover")
popover = popover[popover.length-1]
const badgesDOM = popover.getElementsByClassName('pop-badges')[0];
badgesDOM.innerHTML = "";
for (const badge of author["badges"]) {
const badgeDOM = popClickBadgeTemplateDOM.cloneNode();
badgeDOM.src = badge + "?v=1021";
if (popover.getElementsByClassName('pop-badges').length > 0) {
const badgesDOM = popover.getElementsByClassName('pop-badges')[0];
badgesDOM.innerHTML = "";
for (const badge of author["badges"]) {
const badgeDOM = popClickBadgeTemplateDOM.cloneNode();
badgeDOM.src = badge + "?v=1021";
badgesDOM.append(badgeDOM);
badgesDOM.append(badgeDOM);
}
}
popover.getElementsByClassName('pop-banner')[0].src = author["bannerurl"]

View File

@ -187,7 +187,7 @@ class User(Base):
@lazy
def mod_date(self, sub):
if self.id == AEVANN_ID: return 1
if self.admin_level >= 3: return 1
mod = g.db.query(Mod).filter_by(user_id=self.id, sub=sub).one_or_none()
if not mod: return None
return mod.created_utc

View File

@ -152,7 +152,7 @@ def execute_snappy(post, v):
if body.startswith('!slots'):
check_for_slots_command(body, snappy, c)
if PIN_ENABLED and (body.startswith(':#marseypin:') or body.startswith(':#marseypin2:')):
if FEATURES['PINS'] and (body.startswith(':#marseypin:') or body.startswith(':#marseypin2:')):
post.stickied = "Snappy"
post.stickied_utc = int(time.time()) + 3600

View File

@ -1,6 +1,7 @@
from json.encoder import INFINITY
import random
from math import floor
from files.helpers.const import *
deck_count = 4
ranks = ("2", "3", "4", "5", "6", "7", "8", "9", "X", "J", "Q", "K", "A")
@ -51,7 +52,7 @@ def format_all(player_hand, dealer_hand, deck, status, wager, kind, is_insured=0
def check_for_blackjack_commands(in_text, from_user, from_comment):
if not from_user.can_gamble:
if not FEATURES['GAMBLING'] or not from_user.can_gamble:
return
for command_word in (coins_command_word, marseybux_command_word):

View File

@ -133,17 +133,31 @@ AGENDAPOSTER_MSG_HTML = """<p>Hi <a href="/id/{id}"><img loading="lazy" src="/pp
PERMS = { # Minimum admin_level to perform action.
'HOLE_CREATE': 0,
'CONTENT_THREADS': 3,
'FLAGS_VISIBLE': 0,
'FLAGS_VISIBLE_REPORTER': 0,
'FLAGS_REMOVE': 2,
'CONTENT_THREADS': 3,
'VOTES_VISIBLE': 0,
'USER_BLOCKS_VISIBLE': 0,
'USER_FOLLOWS_VISIBLE': 0,
'USER_VOTERS_VISIBLE': 0,
}
FEATURES = {
'PROCOINS': True,
'AWARDS': True,
'CHAT': True,
'PINS': True,
'PRONOUNS': False,
'BADGES': True,
'HOUSES': False,
'USERS_SUICIDE': True,
'GAMBLING': True,
}
EMOJI_MARSEYS = True
EMOJI_SRCS = ['files/assets/emojis.json']
PROCOINS_ENABLED = True
PIN_ENABLED = True
PIN_LIMIT = 3
POST_RATE_LIMIT = '1/second;2/minute;10/hour;50/day'
LOGGEDIN_ACTIVE_TIME = 15 * 60
@ -210,8 +224,13 @@ if SITE in ('rdrama.net', 'devrama.xyz'):
elif SITE == 'deuxrama.net':
SIDEBAR_THREAD = 175
BADGE_THREAD = 142
elif SITE == 'lgbdropthet.com':
GAMBLING_THREAD = 25
if SITE in {'rdrama.net', 'devrama.xyz', 'deuxrama.net'}:
FEATURES['PRONOUNS'] = True
FEATURES['HOUSES'] = True
HOLE_COST = 50000
HOLE_INACTIVITY_DELETION = True
@ -285,7 +304,8 @@ elif SITE == 'watchpeopledie.co':
PERMS['HOLE_CREATE'] = 2
PERMS['FLAGS_VISIBLE'] = 2
PROCOINS_ENABLED = False
FEATURES['PROCOINS'] = False
HOLE_NAME = 'flair'
HOLE_STYLE_FLAIR = True
HOLE_REQUIRED = True
@ -302,11 +322,21 @@ elif SITE == 'watchpeopledie.co':
elif SITE == 'lgbdropthet.com':
PERMS['HOLE_CREATE'] = 3
PERMS['FLAGS_VISIBLE_REPORTER'] = 2
PERMS['VOTES_VISIBLE'] = 2
PERMS['USER_BLOCKS_VISIBLE'] = 2
PERMS['USER_FOLLOWS_VISIBLE'] = 2
PERMS['USER_VOTERS_VISIBLE'] = 2
FEATURES['PROCOINS'] = False
FEATURES['AWARDS'] = False
FEATURES['CHAT'] = False
FEATURES['BADGES'] = False
FEATURES['USERS_SUICIDE'] = False
FEATURES['GAMBLING'] = False
EMOJI_MARSEYS = False
EMOJI_SRCS = ['files/assets/emojis.lgbdropthet.json']
PROCOINS_ENABLED = False
PFP_DEFAULT_MARSEY = False
HOLE_NAME = 'community'
@ -319,9 +349,12 @@ elif SITE == 'lgbdropthet.com':
AEVANN_ID = 10
SNAKES_ID = 9
WELCOME_MSG = "**Welcome to LGBDropTheT!**\n\nWe are a community of gay, lesbian, and bisexual men and women (and our allies) who believe that the LGB community should separate from the Transgender and Queer+ communities. \n\nWe believe sexuality and gender identity are distinct and unrelated concepts, and that the interests and goals of our communities are misrepresented by grouping our experiences and politics as one. LGB and TQ+ both deserve a supportive community, but neither one should be at the expense of the other. We feel our rights and protections are under attack due to the Transgender and Queer+ movements silencing and condemning our beliefs. \n\nWe believe that men are adult human males and women are adult human females. Our orientations are based towards an individual's sex, not gender identity. The same organizations and communities that we created in order to solidify ourselves now label us as \"phobic\", \"preferential\", or \"genital fetishists\". The TQ+ dogma and rhetoric are coercing gay men, lesbians, and bisexuals to suppress same-sex attraction in favor of fluidity and non-distinction of the opposite sex. Our gender non-conforming LGB youth are being taught that they're born in the wrong body, and persuaded to take life-altering medications to correct their \"sex assigned at birth\". \n\nThis is nothing more than homophobia and conversion therapy disguised as progress. \n\nIt's time to reclaim our organizations and movement by and for our own people. We want to \"Drop The T\" and all the letters after it, and ensure that the needs of lesbians, gay men, and bisexuals are centered once-again. \n\n* If you're new to our movement and how we operate, we recommend starting with our **[Rules and FAQs](https://lgbdropthet/kb/rulesfaqs)** to better understand our community guidelines. \n\n* To familiarize yourself with how the site works, we recommend visiting our **[Help and Support](https://lgbdropthet.com/h/help_and_support)** community. Feel free to make a test post of your own there so you can get used to using the features - you can always delete your post later. \n\n* Feeling a little overwhelmed and don't know where to start? Consider introducing yourself in our **[Off-Topic / Social](https://lgbdropthet.com/h/off_topic_social)** community. \n\nThank you for being a part of our growing movement, we look forward to seeing you! \n\n**~ The LGBDropTheT team**"
LOTTERY_ENABLED = False
else: # localhost or testing environment implied
pass
FEATURES['PRONOUNS'] = True
FEATURES['HOUSES'] = True
if SITE == 'deuxrama.net':
PERMS['HOLE_CREATE'] = 3
@ -754,7 +787,7 @@ if SITE == 'pcmemes.net':
AWARDS_DISABLED.remove('ghost')
elif SITE_NAME == 'WPD':
AWARDS_DISABLED.remove('lootbox')
if not PROCOINS_ENABLED:
if not FEATURES['PROCOINS']:
AWARDS_DISABLED.append('benefactor')
AWARDS2 = {x: AWARDS[x] for x in AWARDS if x not in AWARDS_DISABLED}

View File

@ -53,8 +53,9 @@ def inject_constants():
"AUTOJANNY_ID":AUTOJANNY_ID, "PUSHER_ID":PUSHER_ID,
"CC":CC, "CC_TITLE":CC_TITLE, "listdir":listdir, "MOOSE_ID":MOOSE_ID, "AEVANN_ID":AEVANN_ID,
"PIZZASHILL_ID":PIZZASHILL_ID, "DEFAULT_COLOR":DEFAULT_COLOR,
"COLORS":COLORS, "time":time,
"COLORS":COLORS, "time":time, "PERMS": PERMS, "FEATURES": FEATURES,
"HOLE_NAME": HOLE_NAME, "HOLE_STYLE_FLAIR": HOLE_STYLE_FLAIR, "HOLE_REQUIRED": HOLE_REQUIRED,
"LOTTERY_ENABLED": LOTTERY_ENABLED, "GUMROAD_LINK": GUMROAD_LINK,
"DEFAULT_THEME": DEFAULT_THEME, "DESCRIPTION": DESCRIPTION, "PERMS": PERMS,
"PROCOINS_ENABLED": PROCOINS_ENABLED, "has_sidebar": has_sidebar, "has_logo": has_logo, "FP": FP, "NOTIF_MODACTION_JL_MIN": NOTIF_MODACTION_JL_MIN}
"DEFAULT_THEME": DEFAULT_THEME, "DESCRIPTION": DESCRIPTION,
"has_sidebar": has_sidebar, "has_logo": has_logo,
"FP": FP, "NOTIF_MODACTION_JL_MIN": NOTIF_MODACTION_JL_MIN}

View File

@ -104,6 +104,8 @@ git_regex = re.compile("ref: (refs/.+)", flags=re.A)
pronouns_regex = re.compile("([a-z]{2,5}|i)/[a-z]{2,5}", flags=re.A)
knowledgebase_page_regex = re.compile("[a-zA-Z0-9_\-]+", flags=re.A)
def sub_matcher(match, upper=False):
if match.group(0).startswith('<'):
return match.group(0)

View File

@ -19,7 +19,7 @@ def shuffle(stuff):
return stuff
def check_for_slots_command(in_text, from_user, from_comment):
if not from_user.can_gamble:
if not FEATURES['GAMBLING'] or not from_user.can_gamble:
return
in_text = in_text.lower()

View File

@ -131,7 +131,7 @@ def stats(site=None):
"users online in the past 7 days": g.db.query(User).filter(User.last_active > week).count(),
}
if site == 'rDrama':
if site == 'rDrama' or FEATURES['HOUSES']:
stats2 = {
"House furry members": g.db.query(User).filter(User.house.like('Furry%')).count(),
"House femboy members": g.db.query(User).filter(User.house.like('Femboy%')).count(),

View File

@ -12,7 +12,7 @@ lotterizer_rate = 33
def check_for_treasure(in_text, from_comment):
user = from_comment.author
if not user.can_gamble:
if not FEATURES['GAMBLING'] or not user.can_gamble:
return
if '!slots' not in in_text and '!blackjack' not in in_text and '!wordle' not in in_text:

View File

@ -507,6 +507,9 @@ def under_attack(v):
@app.get("/admin/badge_grant")
@admin_level_required(2)
def badge_grant_get(v):
if not FEATURES['BADGES']:
abort(404)
badges = g.db.query(BadgeDef).order_by(BadgeDef.id).all()
return render_template("admin/badge_grant.html", v=v, badge_types=badges)
@ -515,6 +518,9 @@ def badge_grant_get(v):
@limiter.limit("1/second;30/minute;200/hour;1000/day")
@admin_level_required(2)
def badge_grant_post(v):
if not FEATURES['BADGES']:
abort(404)
badges = g.db.query(BadgeDef).order_by(BadgeDef.id).all()
user = get_user(request.values.get("username").strip(), graceful=True)
@ -562,6 +568,9 @@ def badge_grant_post(v):
@app.get("/admin/badge_remove")
@admin_level_required(2)
def badge_remove_get(v):
if not FEATURES['BADGES']:
abort(404)
badges = g.db.query(BadgeDef).order_by(BadgeDef.id).all()
return render_template("admin/badge_remove.html", v=v, badge_types=badges)
@ -571,6 +580,9 @@ def badge_remove_get(v):
@limiter.limit("1/second;30/minute;200/hour;1000/day")
@admin_level_required(2)
def badge_remove_post(v):
if not FEATURES['BADGES']:
abort(404)
badges = g.db.query(BadgeDef).order_by(BadgeDef.id).all()
user = get_user(request.values.get("username").strip(), graceful=True)
@ -1196,7 +1208,7 @@ def api_distinguish_post(post_id, v):
@app.post("/sticky/<post_id>")
@admin_level_required(2)
def sticky_post(post_id, v):
if not PIN_ENABLED:
if not FEATURES['PINS']:
abort(403)
post = get_post(post_id)

View File

@ -16,6 +16,9 @@ from copy import deepcopy
@app.get("/settings/shop")
@auth_required
def shop(v):
if not FEATURES['AWARDS']:
abort(404)
AWARDS = deepcopy(AWARDS2)
for val in AWARDS.values(): val["owned"] = 0
@ -34,6 +37,9 @@ def shop(v):
@app.post("/buy/<award>")
@auth_required
def buy(v, award):
if not FEATURES['AWARDS']:
abort(404)
if award == 'benefactor' and not request.values.get("mb"):
return {"error": "You can only buy the Benefactor award with marseybux."}, 403
@ -106,6 +112,8 @@ def buy(v, award):
@limiter.limit("1/second;30/minute;200/hour;1000/day", key_func=lambda:f'{SITE}-{session.get("lo_user")}')
@is_not_permabanned
def award_thing(v, thing_type, id):
if not FEATURES['AWARDS']:
abort(404)
if thing_type == 'post': thing = get_post(id)
else: thing = get_comment(id)
@ -199,7 +207,7 @@ def award_thing(v, thing_type, id):
if note: text += f" ({note})"
notify_mod_action(v.id, text)
elif kind == "pin":
if not PIN_ENABLED:
if not FEATURES['PINS']:
abort(403)
if thing.stickied and thing.stickied_utc:
thing.stickied_utc += 3600
@ -275,7 +283,7 @@ def award_thing(v, thing_type, id):
author.fish = True
badge_grant(badge_id=90, user=author)
elif kind == "progressivestack":
if not PIN_ENABLED:
if not FEATURES['PINS']:
abort(403)
if author.progressivestack: author.progressivestack += 21600
else: author.progressivestack = int(time.time()) + 21600
@ -315,6 +323,9 @@ def award_thing(v, thing_type, id):
@app.get("/admin/awards")
@admin_level_required(2)
def admin_userawards_get(v):
if not FEATURES['AWARDS']:
abort(404)
if SITE == 'pcmemes.net' and v.admin_level < 3: abort(403)
if v.admin_level != 3:
@ -326,6 +337,9 @@ def admin_userawards_get(v):
@limiter.limit("1/second;30/minute;200/hour;1000/day")
@admin_level_required(2)
def admin_userawards_post(v):
if not FEATURES['AWARDS']:
abort(404)
if SITE == 'pcmemes.net' and v.admin_level < 3: abort(403)
try: u = request.values.get("username").strip()

View File

@ -846,7 +846,7 @@ def undelete_comment(cid, v):
@app.post("/pin_comment/<cid>")
@auth_required
def pin_comment(cid, v):
if not PIN_ENABLED:
if not FEATURES['PINS']:
abort(403)
comment = get_comment(cid, v=v)
@ -890,7 +890,7 @@ def unpin_comment(cid, v):
@app.post("/mod_pin/<cid>")
@auth_required
def mod_pin(cid, v):
if not PIN_ENABLED:
if not FEATURES['PINS']:
abort(403)
comment = get_comment(cid, v=v)

View File

@ -260,7 +260,7 @@ def settings_profile_post(v):
else: abort(400)
house = request.values.get("house")
if house and house in ("None","Furry","Femboy","Vampire","Racist"):
if house and house in ("None","Furry","Femboy","Vampire","Racist") and FEATURES['HOUSES']:
if v.house: cost = 2000
else: cost = 500
@ -877,6 +877,8 @@ def settings_title_change(v):
@limiter.limit("1/second;30/minute;200/hour;1000/day", key_func=lambda:f'{SITE}-{session.get("lo_user")}')
@auth_required
def settings_pronouns_change(v):
if not FEATURES['PRONOUNS']:
abort(403)
pronouns = request.values.get("pronouns").replace("𒐪","").lower().strip()

View File

@ -323,11 +323,14 @@ def badge_list(site):
@app.get("/badges")
@auth_required
def badges(v):
if not FEATURES['BADGES']:
abort(404)
badges, counts = badge_list(SITE)
return render_template("badges.html", v=v, badges=badges, counts=counts)
@app.get("/blocks")
@auth_required
@admin_level_required(PERMS['USER_BLOCKS_VISIBLE'])
def blocks(v):
@ -403,4 +406,16 @@ def transfers(v):
comments = comments.offset(25 * (page - 1)).limit(26).all()
next_exists = len(comments) > 25
comments = comments[:25]
return render_template("transfers.html", v=v, page=page, comments=comments, standalone=True, next_exists=next_exists)
return render_template("transfers.html", v=v, page=page, comments=comments, standalone=True, next_exists=next_exists)
@app.get("/kb/<page>")
@auth_desired
def knowledgebase(v, page):
if not knowledgebase_page_regex.fullmatch(page):
abort(404)
template_path = f'kb/{SITE_NAME}/{page}.html'
if not os.path.exists('files/templates/' + template_path):
abort(404)
return render_template(template_path, v=v)

View File

@ -62,6 +62,7 @@ gevent.spawn(leaderboard_thread())
def upvoters_posts(v, username, uid):
u = get_user(username)
if u.is_private and (not v or (v.id != u.id and v.admin_level < 2 and not v.eye)): abort(403)
if not (v.id == u.id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']): abort(403)
id = u.id
uid = int(uid)
@ -83,6 +84,7 @@ def upvoters_posts(v, username, uid):
def upvoters_comments(v, username, uid):
u = get_user(username)
if u.is_private and (not v or (v.id != u.id and v.admin_level < 2 and not v.eye)): abort(403)
if not (v.id == u.id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']): abort(403)
id = u.id
uid = int(uid)
@ -104,6 +106,7 @@ def upvoters_comments(v, username, uid):
def downvoters_posts(v, username, uid):
u = get_user(username)
if u.is_private and (not v or (v.id != u.id and v.admin_level < 2 and not v.eye)): abort(403)
if not (v.id == u.id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']): abort(403)
id = u.id
uid = int(uid)
@ -125,6 +128,7 @@ def downvoters_posts(v, username, uid):
def downvoters_comments(v, username, uid):
u = get_user(username)
if u.is_private and (not v or (v.id != u.id and v.admin_level < 2 and not v.eye)): abort(403)
if not (v.id == u.id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']): abort(403)
id = u.id
uid = int(uid)
@ -149,6 +153,7 @@ def downvoters_comments(v, username, uid):
def upvoting_posts(v, username, uid):
u = get_user(username)
if u.is_private and (not v or (v.id != u.id and v.admin_level < 2 and not v.eye)): abort(403)
if not (v.id == u.id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']): abort(403)
id = u.id
uid = int(uid)
@ -170,6 +175,7 @@ def upvoting_posts(v, username, uid):
def upvoting_comments(v, username, uid):
u = get_user(username)
if u.is_private and (not v or (v.id != u.id and v.admin_level < 2 and not v.eye)): abort(403)
if not (v.id == u.id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']): abort(403)
id = u.id
uid = int(uid)
@ -191,6 +197,7 @@ def upvoting_comments(v, username, uid):
def downvoting_posts(v, username, uid):
u = get_user(username)
if u.is_private and (not v or (v.id != u.id and v.admin_level < 2 and not v.eye)): abort(403)
if not (v.id == u.id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']): abort(403)
id = u.id
uid = int(uid)
@ -212,6 +219,7 @@ def downvoting_posts(v, username, uid):
def downvoting_comments(v, username, uid):
u = get_user(username)
if u.is_private and (not v or (v.id != u.id and v.admin_level < 2 and not v.eye)): abort(403)
if not (v.id == u.id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']): abort(403)
id = u.id
uid = int(uid)
@ -255,6 +263,8 @@ def agendaposters(v):
@auth_required
def upvoters(v, username):
id = get_user(username).id
if not (v.id == id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']):
abort(403)
votes = g.db.query(Vote.user_id, func.count(Vote.user_id)).join(Submission).filter(Submission.ghost == False, Submission.is_banned == False, Submission.deleted_utc == 0, Vote.vote_type==1, Submission.author_id==id).group_by(Vote.user_id).order_by(func.count(Vote.user_id).desc()).all()
@ -286,6 +296,8 @@ def upvoters(v, username):
@auth_required
def downvoters(v, username):
id = get_user(username).id
if not (v.id == id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']):
abort(403)
votes = g.db.query(Vote.user_id, func.count(Vote.user_id)).join(Submission).filter(Submission.ghost == False, Submission.is_banned == False, Submission.deleted_utc == 0, Vote.vote_type==-1, Submission.author_id==id).group_by(Vote.user_id).order_by(func.count(Vote.user_id).desc()).all()
@ -315,6 +327,8 @@ def downvoters(v, username):
@auth_required
def upvoting(v, username):
id = get_user(username).id
if not (v.id == id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']):
abort(403)
votes = g.db.query(Submission.author_id, func.count(Submission.author_id)).join(Vote).filter(Submission.ghost == False, Submission.is_banned == False, Submission.deleted_utc == 0, Vote.vote_type==1, Vote.user_id==id).group_by(Submission.author_id).order_by(func.count(Submission.author_id).desc()).all()
@ -344,6 +358,8 @@ def upvoting(v, username):
@auth_required
def downvoting(v, username):
id = get_user(username).id
if not (v.id == id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']):
abort(403)
votes = g.db.query(Submission.author_id, func.count(Submission.author_id)).join(Vote).filter(Submission.ghost == False, Submission.is_banned == False, Submission.deleted_utc == 0, Vote.vote_type==-1, Vote.user_id==id).group_by(Submission.author_id).order_by(func.count(Submission.author_id).desc()).all()
@ -376,6 +392,9 @@ def downvoting(v, username):
@limiter.limit("1/second;5/day", key_func=lambda:f'{SITE}-{session.get("lo_user")}')
@auth_required
def suicide(v, username):
if not FEATURES['USERS_SUICIDE']:
abort(403)
user = get_user(username)
suicide = f"Hi there,\n\nA [concerned user](/id/{v.id}) reached out to us about you.\n\nWhen you're in the middle of something painful, it may feel like you don't have a lot of options. But whatever you're going through, you deserve help and there are people who are here for you.\n\nThere are resources available in your area that are free, confidential, and available 24/7:\n\n- Call, Text, or Chat with Canada's [Crisis Services Canada](https://www.crisisservicescanada.ca/en/)\n- Call, Email, or Visit the UK's [Samaritans](https://www.samaritans.org/)\n- Text CHAT to America's [Crisis Text Line](https://www.crisistextline.org/) at 741741.\nIf you don't see a resource in your area above, the moderators keep a comprehensive list of resources and hotlines for people organized by location. Find Someone Now\n\nIf you think you may be depressed or struggling in another way, don't ignore it or brush it aside. Take yourself and your feelings seriously, and reach out to someone.\n\nIt may not feel like it, but you have options. There are people available to listen to you, and ways to move forward.\n\nYour fellow users care about you and there are people who want to help."
if not v.shadowbanned:
@ -854,6 +873,9 @@ def redditor_moment_redirect(username, v):
@auth_required
def followers(username, v):
u = get_user(username, v=v)
if not (v.id == u.id or v.admin_level >= PERMS['USER_FOLLOWS_VISIBLE']):
abort(403)
users = g.db.query(User).join(Follow, Follow.target_id == u.id) \
.filter(Follow.user_id == User.id) \
.order_by(Follow.created_utc).all()
@ -863,6 +885,9 @@ def followers(username, v):
@auth_required
def following(username, v):
u = get_user(username, v=v)
if not (v.id == u.id or v.admin_level >= PERMS['USER_FOLLOWS_VISIBLE']):
abort(403)
users = g.db.query(User).join(Follow, Follow.user_id == u.id) \
.filter(Follow.target_id == User.id) \
.order_by(Follow.created_utc).all()

View File

@ -6,7 +6,7 @@ from flask import *
from files.__main__ import app, limiter, cache
@app.get("/votes/<link>")
@auth_required
@admin_level_required(PERMS['VOTES_VISIBLE'])
def vote_info_get(v, link):
try:
if "t2_" in link: thing = get_post(int(link.split("t2_")[1]), v=v)
@ -199,4 +199,4 @@ def api_vote_comment(comment_id, new, v):
comment.realupvotes = g.db.query(CommentVote).filter_by(comment_id=comment.id, real=True).count()
if comment.author.progressivestack: comment.realupvotes *= 2
g.db.add(comment)
return "", 204
return "", 204

View File

@ -12,6 +12,7 @@
<h4>Content</h4>
<ul>
<li><a href="/log">Moderation Log</a></li>
<li><a href="/admin/image_posts">Image Posts</a></li>
<li><a href="/admin/reported/posts">Reported Posts/Comments</a></li>
<li><a href="/admin/removed/posts">Removed Posts/Comments</a></li>
@ -22,9 +23,13 @@
<li><a href="/admin/users">Users Feed</a></li>
<li><a href="/admin/shadowbanned">Shadowbanned Users</a></li>
<li><a href="/banned">Permabanned Users</a></li>
<li><a href="/agendaposters">Users with Chud Theme</a></li>
<li><a href="/grassed">Currently Grassed Users</a></li>
<li><a href="/patrons">Patrons / Paypigs</a></li>
{% if FEATURES['AWARDS'] -%}
<li><a href="/agendaposters">Users with Chud Theme</a></li>
<li><a href="/grassed">Currently Grassed Users</a></li>
{%- endif %}
{% if FEATURES['PROCOINS'] -%}
<li><a href="/patrons">Patrons / Paypigs</a></li>
{%- endif %}
<li><a href="/admin/loggedin">Currently Logged-in Users</a></li>
<li><a href="/admin/loggedout">Currently Logged-out Users</a></li>
</ul>
@ -35,12 +40,18 @@
<li><a href="/admin/alt_votes">Multi Vote Analysis</a></li>
</ul>
{% if FEATURES['BADGES'] or FEATURES['AWARDS'] -%}
<h4>Grant</h4>
<ul>
<li><a href="/admin/awards">Give User Award</a></li>
<li><a href="/admin/badge_grant">Grant Badges</a></li>
<li><a href="/admin/badge_remove">Remove Badges</a></li>
{% if FEATURES['AWARDS'] -%}
<li><a href="/admin/awards">Give User Award</a></li>
{%- endif %}
{% if FEATURES['BADGES'] -%}
<li><a href="/admin/badge_grant">Grant Badges</a></li>
<li><a href="/admin/badge_remove">Remove Badges</a></li>
{%- endif %}
</ul>
{%- endif %}
<h4>API Access Control</h4>
<ul>

View File

@ -8,7 +8,7 @@
</script>
{% endif %}
{% if v %}
{% if v and FEATURES['AWARDS'] %}
{% include "award_modal.html" %}
{% endif %}
@ -25,8 +25,10 @@
<span class="pop-bio popover-bio text-black"></span>
</div>
{% if FEATURES['BADGES'] -%}
<div class="pop-badges ml-3 mr-3 my-2">
</div>
{%- endif %}
<div class="border-top d-flex align-items-center p-3 gap-3 smol">
<span>
@ -192,7 +194,7 @@
{% if c.ghost %}
<span {% if c.distinguish_level %}class="mod"{% endif %}>👻</span>
{% else %}
{% if SITE_NAME=='rDrama' and c.author.house %}
{% if FEATURES['HOUSES'] and c.author.house %}
<img loading="lazy" src="/i/{{SITE_NAME}}/houses/{{c.author.house}}.webp?v=2000" height="20" data-bs-toggle="tooltip" data-bs-placement="bottom" title="House {{c.author.house}}" alt="House {{c.author.house}}">
{% endif %}
@ -206,7 +208,7 @@
{% endif %}
<span {% if c.author.patron and not c.distinguish_level %}class="patron" style="background-color:#{{c.author.namecolor}};"{% elif c.distinguish_level %}class="mod"{% endif %}>{{c.author_name}}</span>
</a>
{% if SITE_NAME == 'rDrama' %}
{% if FEATURES['PRONOUNS'] %}
<span class="pronouns" style="color:#{{c.author.titlecolor}};border-color:#{{c.author.titlecolor}}">{{c.author.pronouns}}</span>
{% endif %}
{% if c.author.customtitle %}
@ -437,7 +439,7 @@
{% endif %}
{% if not c.ghost or v.id == AEVANN_ID %}<a href="/votes/{{c.fullname}}" class="btn caction nobackground px-1 text-muted"><i class="fas fa-arrows-v"></i>Votes</a>{% endif %}
{% if v and ((not c.ghost and v.admin_level >= PERMS['VOTES_VISIBLE']) or v.id == AEVANN_ID) %}<a href="/votes/{{c.fullname}}" class="btn caction nobackground px-1 text-muted"><i class="fas fa-arrows-v"></i>Votes</a>{% endif %}
<a class="btn caction nobackground px-1 text-muted" href="{{c.permalink}}"><i class="fas fa-book-open"></i>Context</a>
@ -448,7 +450,9 @@
<button class="btn caction py-0 nobackground px-1 text-muted" data-bs-toggle="modal" data-bs-target="#reportCommentModal" onclick="report_commentModal('{{c.id}}','{{c.author_name}}',)"><i class="fas fa-flag fa-fw"></i>Report</button>
{% if FEATURES['AWARDS'] -%}
<button class="btn caction py-0 nobackground px-1 text-muted" role="button" data-bs-toggle="modal" data-bs-target="#awardModal" data-url="/award/comment/{{c.id}}"><i class="fas fa-gift" aria-hidden="true"></i>Give Award</button>
{%- endif %}
<button id="unsave-{{c.id}}" class="btn caction py-0 nobackground px-1 {% if c.id in v.saved_comment_idlist %}d-md-inline-block{% endif %} text-muted d-none" role="button" onclick="post_toast(this,'/unsave_comment/{{c.id}}','save-{{c.id}}','unsave-{{c.id}}','d-md-inline-block')"><i class="fas fa-save"></i>Unsave</button>
@ -644,7 +648,7 @@
<div class="modal-body">
<ul class="list-group comment-actions">
{% if not c.ghost or v.id == AEVANN_ID %}<a href="/votes/{{c.fullname}}"><li class="list-group-item"><i class="fas fa-arrows-v mr-2"></i>Votes</li></a>{% endif %}
{% if v and ((not c.ghost and v.admin_level >= PERMS['VOTES_VISIBLE']) or v.id == AEVANN_ID) %}<a href="/votes/{{c.fullname}}"><li class="list-group-item"><i class="fas fa-arrows-v mr-2"></i>Votes</li></a>{% endif %}
<a class="list-group-item" href="{{c.permalink}}"><i class="fas fa-book-open mr-2"></i>Context</a>
@ -653,7 +657,9 @@
{% if v %}
<a role="button" data-bs-toggle="modal" data-bs-dismiss="modal" data-bs-target="#reportCommentModal" onclick="report_commentModal('{{c.id}}','{{c.author_name}}')" class="list-group-item"><i class="fas fa-flag mr-2"></i>Report</a>
{% if FEATURES['AWARDS'] -%}
<a class="list-group-item" role="button" data-bs-toggle="modal" data-bs-target="#awardModal" data-url="/award/comment/{{c.id}}"><i class="fas fa-gift mr-2" aria-hidden="true"></i>Give Award</a>
{%- endif %}
<a id="save2-{{c.id}}" class="list-group-item {% if c.id in v.saved_comment_idlist %}d-none{% endif %}" role="button" data-bs-dismiss="modal" onclick="post_toast(this,'/save_comment/{{c.id}}','save2-{{c.id}}','unsave2-{{c.id}}','d-none')"><i class="fas fa-save mr-2"></i>Save</a>

View File

@ -13,7 +13,9 @@
<img alt=":#marseymerchant:" loading="lazy" class="mb-2" src="/e/marseymerchant.webp">
<h1 class="h5">401 Not Authorized</h1>
<p class="text-muted">This page is only available to {% if SITE_NAME == 'rDrama' %}paypigs{% else %}patrons{% endif %}:</p>
{% if FEATURES['PROCOINS'] -%}
<a rel="nofollow noopener noreferrer" href="{{GUMROAD_LINK}}">{{GUMROAD_LINK}}</a>
{%- endif %}
</div>
</div>
</div>

View File

@ -599,25 +599,27 @@ line breaks
</tr>
</thead>
<tbody>
<tr>
<td>!slots100</td>
<td>Play slots using coins - minimum 100 coins</td>
</tr>
{% if SITE_NAME != 'WPD' %}
{% if FEATURES['GAMBLING'] %}
<tr>
<td>!slotsmb100</td>
<td>Play slots using marseybux - minimum 100 marseybux</td>
<td>!slots100</td>
<td>Play slots using coins - minimum 100 coins</td>
</tr>
{% endif %}
<tr>
<td>!blackjack100</td>
<td>Play blackjack using coins - minimum 100 coins</td>
</tr>
{% if SITE_NAME != 'WPD' %}
{% if FEATURES['PROCOINS'] %}
<tr>
<td>!slotsmb100</td>
<td>Play slots using marseybux - minimum 100 marseybux</td>
</tr>
{% endif %}
<tr>
<td>!blackjackmb100</td>
<td>Play blackjack using marseybux - minimum 100 marseybux</td>
<td>!blackjack100</td>
<td>Play blackjack using coins - minimum 100 coins</td>
</tr>
{% if FEATURES['PROCOINS'] %}
<tr>
<td>!blackjackmb100</td>
<td>Play blackjack using marseybux - minimum 100 marseybux</td>
</tr>
{% endif %}
{% endif %}
<tr>
<td>!wordle</td>

View File

@ -130,11 +130,9 @@
<a class="mobile-nav-icon d-md-none" href="/random_user"><i class="fas fa-music align-middle text-gray-500 black"></i></a>
{% if v and v.can_gamble and LOTTERY_ENABLED %}
<span data-bs-toggle="tooltip" data-bs-placement="bottom" title="Lottershe">
<a href="/lottery" class="mobile-nav-icon d-md-none">
<a class="mobile-nav-icon d-md-none" href="/lottery">
<i class="fas fa-ticket align-middle text-gray-500"></i>
</a>
</span>
{% endif %}
<button class="navbar-toggler" role="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive"
@ -168,9 +166,11 @@
<a class="nav-link" href="{% if sub %}/h/{{sub.name}}{% endif %}/submit" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Create Post"><i class="fas fa-feather-alt"></i></a>
</li>
{% if FEATURES['CHAT'] -%}
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
<a class="nav-link" href="/chat/" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Chat"><i class="fas fa-messages"></i></a>
</li>
{%- endif %}
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
<a class="nav-link" href="/leaderboard" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Leaderboard"><i class="fas fa-trophy"></i></a>
@ -186,9 +186,11 @@
</li>
{% endif %}
{% if FEATURES['AWARDS'] -%}
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
<a class="nav-link" href="/shop" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Shop"><i class="fas fa-store"></i></a>
</li>
{%- endif %}
<li class="nav-item d-flex align-items-center justify-content-center text-center mx-1">
<a class="nav-link" href="/comments" data-bs-toggle="tooltip" data-bs-placement="bottom" title="All Comments"><i class="fas fa-comment-dots"></i></a>
@ -207,8 +209,8 @@
</div>
<div class="text-left pl-2">
<div style="color: #{{v.namecolor}}" class="text-small font-weight-bold" id="header--username"><span {% if v.patron %}class="patron" style="background-color:#{{v.namecolor}}"{% endif %}>{{v.username}}</span></div>
<div class="header--currency"><img alt="coins" class="mr-1 ml-1" data-bs-toggle="tooltip" data-bs-placement="bottom" src="{{asset_siteimg('coins.webp')}}" title="coins" aria-label="coins"><span id="user-coins-amount">{{v.coins}}</span>{% if not PROCOINS_ENABLED %} Coin{{ help.plural(v.coins) }}{% endif %}</div>
{% if PROCOINS_ENABLED %}
<div class="header--currency"><img alt="coins" class="mr-1 ml-1" data-bs-toggle="tooltip" data-bs-placement="bottom" src="{{asset_siteimg('coins.webp')}}" title="coins" aria-label="coins"><span id="user-coins-amount">{{v.coins}}</span>{% if not FEATURES['PROCOINS'] %} Coin{{ help.plural(v.coins) }}{% endif %}</div>
{% if FEATURES['PROCOINS'] %}
<div class="header--currency"><img alt="marseybux" class="mr-1 ml-1" data-bs-toggle="tooltip" data-bs-placement="bottom" src="/i/marseybux.webp?v=2000" title="Marseybux" aria-label="Marseybux"><span id="user-bux-amount">{{v.procoins}}</span></div>
{% endif %}
</div>
@ -238,7 +240,7 @@
<a class="dropdown-item" href="/discord"><i class="fab fa-discord fa-fw mr-3"></i>Discord</a>
<a class="dropdown-item" href="/post/75863/"><i class="fas fa-square-share-nodes fa-fw mr-3"></i>Fediverse</a>
{% endif %}
{% if SITE_NAME != 'WPD' %}
{% if FEATURES['PROCOINS'] %}
<a class="dropdown-item" rel="nofollow noopener noreferrer" href="{{GUMROAD_LINK}}"><i class="fas fa-dollar-sign fa-fw mr-3"></i>Donate</a>
{% endif %}
{% if SITE_NAME == 'rDrama' %}
@ -297,7 +299,7 @@
<a class="nav-item nav-link" href="/discord"><i class="fab fa-discord fa-fw mr-3"></i>Discord</a>
<a class="nav-item nav-link" href="/post/75863/"><i class="fas fa-square-share-nodes fa-fw mr-3"></i>Fediverse</a>
{% endif %}
{% if SITE_NAME != 'WPD' %}
{% if FEATURES['PROCOINS'] %}
<a class="nav-item nav-link" rel="nofollow noopener noreferrer" href="{{GUMROAD_LINK}}"><i class="fas fa-dollar-sign fa-fw mr-3"></i>Donate</a>
{% endif %}
{% if SITE_NAME == 'rDrama' %}<a class="nav-item nav-link" href="/archives"><i class="fas fa-book fa-fw mr-3"></i>Archives</a>{% endif %}

View File

@ -0,0 +1,200 @@
{% extends 'default.html' %}
{% block content %}
<h1><u>LGB RESOURCES AND ORGANIZATIONS</u></h1>
<br>
<p>If you would like to add additional resources, or find any information on this page is out-of-date, please visit our <a href="/post/47/resources-organizations-megathread-meta">Resources & Organizations mega-thread</a>. to alert site Admins.</p>
<br>
<br>
<div class="sources-wrapper">
<div class="sources">
<input type="radio" id="radio1" name="radio">
<label class="sources-label" for="radio1">Activist Groups</label>
<div class="sources-content">
<p><h2><u>INCLUSIVE</u></h2></p>
<p><a href="https://saidit.net/s/LGBAlliance/wiki/lgba_orgs">LGB Alliance</a><i> - this link will be updated from SaidIt once we get a proper Wiki on this site</i></p>
<dl><ul>
<li><i>About: </i>LGB Alliance began as a UK-based charity advocating for lesbians, gay men, and bisexuals. It now has chapters around the world.</li>
</ul></dl>
<p><a href="https://lgbfightback.org/">LGB Fight Back</a></p>
<dl><ul>
<li><i>About: </i>US organization of lesbians, gay men, and bisexuals who advocate for the interests of the LGB community.</li>
</ul></dl>
<br>
<p><h2><u>EXCLUSIVE</u></h2></p>
<p><a href="https://www.lglf.org/#/">New Gay Liberation Front</a></p>
<dl><ul>
<li><i>About: </i>US organization that advocates for the rights of lesbians and gay men.</li>
</ul></dl>
<p><a href="#">Get The L Out</a><i> - this link will be updated from SaidIt once we get a proper Wiki on this site</i></p>
<dl><ul>
<li><i>About: </i>GetTheLOut is primarily a UK-based group representing lesbians. There are a few other chapters around the world.</li>
</ul></dl>
</div>
</div>
<div class="sources">
<input type="radio" id="radio2" name="radio">
<label class="sources-label" for="radio2">News Outlets & Articles</label>
<div class="sources-content">
<p><h2><u>LGB-SPECIFIC</u></h2></p>
<p><a href="https://afterellen.com/">After Ellen</a></p>
<dl><ul>
<li><i>About: </i>News outlet for lesbian and bisexual women.</li>
<li><i>Example Article: </i><a href="https://afterellen.com/how-to-write-a-love-letter-tips-from-historys-lesbians/">How to Write a Love Letter Tips From Historys Lesbians</a></li>
</ul></dl>
<p><a href="https://lesbianandgaynews.com/">Lesbian and Gay News</a><i> - closed / shut down</i></p>
<dl><ul>
<li><i>About: </i>News outlet by lesbian/gay people, for lesbian/gay people. Does sometimes platform transsexuals (e.g. Rose of Dawn ).</li>
<li><i>Example Article: </i><a href="https://archive.ph/FFApM">Lesbian women talk about meeting transbians on women-only dating sites</a></li>
</ul></dl>
<br>
<p><h2><u>SUPPORTIVE / RELEVANT / ALLIES</u></h2></p>
<p><a href="https://www.segm.org/">Society for Evidence-based Gender Medicine</a></p>
<dl><ul>
<li><i>About: </i>Organization of physical and mental health practitioners, researchers and experts who are concerned about the lack of scientific evidence for popular treatments of gender dysphoria.</li>
<li><i>Example Article: </i><a href="https://www.segm.org/typology_of_gender_detransition">A Typology of Gender Detransition and Its Implications for Healthcare Providers</a></li>
</ul></dl>
<p><a href="https://grahamlinehan.substack.com/">The Glinner Update</a></p>
<dl><ul>
<li><i>About: </i>Newsletter put out by Graham Linehan (the TV writer), an ally who is against transgender ideology.</li>
<li><i>Example Article: </i><a href="https://grahamlinehan.substack.com/p/these-are-not-lesbians">These are not lesbians</a></li>
</ul></dl>
<p><a href="https://www.transgendertrend.com/">Transgender Trend</a></p>
<dl><ul>
<li><i>About: </i>UK-based group of "parents, professionals and academics" who are concerned about the growing trend of transgender identification.</li>
<li><i>Example Article: </i><a href="https://www.transgendertrend.com/the-tavistocks-experiment-with-puberty-blockers-part-5-the-belated-results/">
The Tavistocks experiment with puberty blockers, part 5: the belated results</a></li>
</ul></dl>
<br>
<p><h2><u>INDIVIDUAL ARTICLES / VIDEOS</u></h2></p>
<dl><ul>
<li><b>Channel 4</b> V segment about the Tavistock: <a href="https://www.channel4.com/news/children-have-been-very-seriously-damaged-by-nhs-gender-clinic-says-former-tavistock-staff-governor">'Children have been very seriously damaged' by NHS gender clinic, says former Tavistock staff governor</a></li>
<li><b>Economist</b> article about the Keira Bell verdict: <a href="https://www.economist.com/international/2020/12/12/an-english-ruling-on-transgender-teens-could-have-global-repercussions">An English Ruling on Transgender Teens Could Have Global Repercussions</a> (free version <a href="https://www.segm.org/Keira_Bell_ruling_global_repercussions">available on SEGM website</a> )</li>
<li><b>BBC </b> article about LGB people being forced to transition in Iran: <a href="https://www.bbc.com/news/magazine-29832690">The gay people pushed to change their gender</a></li>
<li><b>BBC </b> article about Tavistock wait times, quoted LGB Alliance (and later got lambasted by trans rights activists for it): <a href="https://www.bbc.com/news/health-55015959">Trans teen in legal action over gender clinic wait</a></li>
<li><b>The Telegraph</b> article about LGB Alliance: <a href="https://archive.vn/cFamJ">Lesbians facing 'extinction' as transgenderism becomes pervasive, campaigners warn</a></li>
<li><b>KHN (Kaiser Health News)</b> article about Lupron, a harmful puberty blocker drug (one of many) which is prescribed to teenagers who want to medically "transition": <a href="https://khn.org/news/women-fear-drug-they-used-to-halt-puberty-led-to-health-problems/">Women Fear Drug They Used To Halt Puberty Led To Health Problems</a></li>
<li><b>Seattle Times</b> article about the Keira Bell court ruling: <a href="https://www.seattletimes.com/seattle-news/health/uk-court-rules-against-clinic-in-puberty-blocking-drugs-case/">UK court rules against clinic in puberty blocking drugs case</a></li>
<li><b>The New York Times</b> article (old, from 1979) by Thomas Szasz (academic/psychiatrist): <a href="https://www.nytimes.com/1979/06/10/archives/male-and-female-created-he-them-transexual.html"> Male and Female Created He Them</a></li>
</ul></dl>
</div>
</div>
<div class="sources">
<input type="radio" id="radio3" name="radio">
<label class="sources-label" for="radio3">YouTube</label>
<div class="sources-content">
<p><h2><u>LGB-SPECIFIC</u></h2></p>
<p><a href="https://www.youtube.com/c/ArtyMorty/about">Arty Morty</a></p>
<dl><ul>
<li><i>About: </i>Gay man in Canada who does videos and interviews about transgender ideology, and the differences between the trans rights movement and the gay rights movement.</li>
<li><i>Example Video: </i><a href="https://www.youtube.com/watch?v=Z0imz7OFktE">Trans Rights Are Not Like Gay Rights! Trans is NOT the New Gay</a></li>
</ul></dl>
<p><a href="https://www.youtube.com/c/GNCCentric/about">GNC Centric</a></p>
<dl><ul>
<li><i>About: </i>Lesbian and detransitioner (formerly FtM) who posts videos about her experience and about transgender ideology.</li>
<li><i>Example Video: </i><a href="https://www.youtube.com/watch?v=hnkuEsGFcUY">How a lesbian can believe she is a gay trans man...</a></li>
</ul></dl>
<p><a href="https://www.youtube.com/c/MagdalenBerns/about">Magdalen Berns</a></p>
<dl><ul>
<li><i>About: </i>Lesbian and feminist who is critical of identity politics, the destruction of women's rights due to transgender activism, and more. Sadly, Magdalen passed away in 2019 but her family has kept her channel active.</li>
<li><i>Example Video: </i><a href="https://www.youtube.com/watch?v=dQ35T3H7Arg">The Cotton Ceiling: A Post Modern Affront to Lesbianism</a></li>
</ul></dl>
<p><a href="https://www.youtube.com/user/Perzikyoghurt/about">Peachyoghurt Genderfree</a></p>
<dl><ul>
<li><i>About: </i>Lesbian who is against the enforcement of gender (sex stereotypes), including the transing of children.</li>
<li><i>Example Video: </i><a href="https://www.youtube.com/watch?v=7jSJQDc2y-g">Understanding Transgender Issues: Puberty Blockers (documentary)</a></li>
</ul></dl>
<br>
<p><h2><u>SUPPORTIVE / RELEVANT / ALLIES</u></h2></p>
<p><a href="https://www.youtube.com/c/BenjaminABoyce/about">Benjamin Boyce</a></p>
<dl><ul>
<li><i>About: </i>Does videos that are critical of "queer theory" (and of other strains of "critical theory", which is the intellectual parent of queer theory). Also interviews detransitioners, many of whom are LGB.</li>
<li><i>Example Video: </i><a href="https://www.youtube.com/watch?v=xP7nLI_Hizo">GNC_Centric: Banned But Not Broken</a></li>
</ul></dl>
<p><a href="https://www.youtube.com/channel/UCYj9xEuFEQORfVK3k1kPxQw/about">You're Kiddin', Right?</a></p>
<dl><ul>
<li><i>About: </i>Ally who is against transgender ideology.</li>
<li><i>Example Video: </i><a href="https://www.youtube.com/watch?v=Zm_mv6fsfiY">DEAR TRANS DOGMATISTS, STOP TELLING WOMEN TO INVADE GAY MEN'S SPACES!</a></li>
</ul></dl>
<br>
<p><h2><u>INDIVIDUAL VIDEOS</u></h2></p>
<dl><ul>
<li><b>Library of Congress</b> video about a gay rights demonstration in 1970: <a href="https://www.youtube.com/watch?v=OevqwHmeEFI">Gay and Proud</a></li>
<li><b>New York Times</b> video about Stonewall, the event: <a href="https://www.youtube.com/watch?v=S7jnzOMxb14">The Stonewall You Know Is a Myth. And Thats O.K. | NYT Celebrating Pride</a></li>
<li><b>MADtv</b> video about a "lesbian" who is a man: <a href="https://www.youtube.com/watch?v=bgcLfohtFbE">MADtv Lesbian Coffeehouse</a></li>
<li><b>Aba & Preach</b> video about pressure to date trans people: <a href="https://www.youtube.com/watch?v=vVY_j-eHWEI">If youre not open to dating a transgender person you're....</a></li>
</ul></dl>
</div>
</div>
<div class="sources">
<input type="radio" id="radio4" name="radio">
<label class="sources-label" for="radio4">Facebook</label>
<div class="sources-content">
<p><h2><u>LGB-SPECIFIC</u></h2></p>
<p><a href="https://www.facebook.com/BoxerCeiling/">The Boxer Ceiling</a></p>
<dl><ul>
<li><i>About: </i>Catalogues hate and harassment directed at gay men by the trans rights movement.</li>
</ul></dl>
<br>
<p><h2><u>SUPPORTIVE / RELEVANT / ALLIES</u></h2></p>
<p><a href="#">Placeholder Name</a></p>
<dl><ul>
<li><i>About: </i> placeholder text</li>
</ul></dl>
</div>
</div>
</div>
<style>
#main-content-col {
margin: 2rem 1rem;
}
/******** Hides the checkbox/radio button */
.sources-wrapper input {
position: absolute;
opacity: 0;
z-index: -1;
}
.sources-wrapper input[type='radio'] {
display: none;
}
/******** SOURCE TITLES */
.sources {
color: var(--black);
margin-bottom: 3rem;
}
.sources-label {
font-size: 1.5rem;
display: flex;
align-items: center;
justify-content: space-between;
padding: 1em;
color: var(--primary);
border: 1px solid var(--primary);
border-radius: 1rem;
font-weight: bold;
cursor: pointer;
user-select: none;
}
/******** SOURCE CONTENT */
.sources-content {
max-height: 0;
padding: 0 1em;
background: transparent !important;
transition: all 0.35s;
display: none;
}
.sources-wrapper input:checked ~ .sources-content {
max-height: 100%;
padding: 1em;
display: block;
transition: all 0.35s;
}
</style>
{% endblock %}

View File

@ -0,0 +1,227 @@
{% extends 'default.html' %}
{% block content %}
<h1><u>RULES AND FAQS</u></h1>
<h2>All rules are subject to Admin and Moderator discretion.</h2>
<p>We will not spell out every edge case for you. Common sense and accountability are required. That said, we do have a list of common FAQs below.</p>
<p>You may be banned immediately for rule violations, or may be given warnings and temporarily muted from participation. You can appeal any action by <a href="/contact">messaging Admins</a>. An appeal does not guarantee a ban/mute will be overturned. An appeal also does not mean you will get an explanation or response - trolls and instigators will be ignored.</p>
<p><b>DO NOT send private chats or messages directly to Admins or Moderators about rules or site issues.</b> Admins are also users like yourselves. Chat and messages are private and personal, and are not the appropriate venue to discuss actions taken on behalf of this site.</p>
<p>If you have additional questions or concerns about these rules, please visit our <a href="/h/help_and_support/post/18/rules-faqs-megathread">Rules and FAQs mega-thread</a>.</p>
<br>
<br>
<div class="faqs">
<div class="faq">
<input type="radio" id="radio1" name="radio">
<label class="faq-label" for="radio1">1. General Guidelines / Civility</label>
<div class="faq-content">
<p><i>All LGB are welcome here, regardless of background or ideology.</i></p>
<p><i>Be respectful of each other's differences. Discuss and debate ideas, not individuals.</i></p>
<p><i>No slap-fights or name-calling.</i></p>
<br>
<dl><ul>
<li><b>There are right-wing sources being posted here, I thought LGB were on the left?</b></li>
<br>
<dd><p>LGB are not a monolith of political beliefs. We are non-partisan, and support users of all foundations - left, right, or otherwise. You may disagree personally with another user's beliefs, but they are allowed to have different core values.</p>
<p>Right-wing/conservative LGB people are welcome here. Left-wing/progressive people are welcome here. Anyone from any political party is welcome here, as long as they follow the rules and can have composed conversations about the issues at hand.</p>
<p>If we say right-wingers can't be part of this site and LGB, we're saying the same thing the TQ+ movement tells us: "we'll revoke your gay card because you're not playing by our specific rules". You can feel how you want to feel about the right and/or conservatives, but the LGB among them do have a seat at this table.</p></dd>
<br>
<li><b>Why can't I stand up for myself if someone's calling me names, they started it!</b></li>
<br>
<dd><p>We ask you to consider the LGB community as a whole, and how you want LGB represented.</p>
<dd><p>You may critique a topic or behavior, but remember there is a real person on the other side of the screen. Take the high road, and remove yourself from the conversation if you cannot disagree respectfully.</p>
<dd><p>If you have an issue with a user or a particular stance, take it up with them privately. Public fighting and taunting will be removed, and repeat offendors will be banned.</p></dd>
</ul></dl>
</div>
</div>
<div class="faq">
<input type="radio" id="radio2" name="radio">
<label class="faq-label" for="radio2">2. Appropriate Content</label>
<div class="faq-content">
<p><i>Why LGB and TQ+ should no longer be part of the same organization.</i></p>
<p><i>LGB news, concerns, history, and/or personal affairs.</i></p>
<p><i>Other topics must demonstrate applicability towards LGB or "dropping the T".</i></p>
<br>
<dl><ul>
<li><b>Why was my post about mens/womens issues removed?</b></li>
<br>
<dd><p>The most likely reason is because it focused on how trans people are broadly impacting men/women, without mentioning LGB at all.</p>
<p>This is an LGB site first and foremost. We are separatists, and others may find this site seeking understanding of our stance, with no prior knowledge of the LGBTQ+ climate.</p>
<p>We support both men's and women's rights <b>as they relate to LGB</b>. We're not a platform for supporting men's or women's rights generally, such as "gender critical" or "the red pill".</p>
<p>Please be sure to demonstrate why/how LGB should take note of what's presented and "join hands across the aisle" of our respective groups, or the post will be removed.</p></dd>
<br>
<li><b>Why was my post about politics removed?</b></li>
<br>
<dd><p>The most likely reason is because it focused on how trans people are broadly impacting society, without mentioning LGB at all.</p>
<p>We're not here to discuss trans rights being changed legally - unless those changes have a direct impact on LGB.</p>
<p>While some politics are naturally involved in a civil rights movement, we are not a political organization. We are not pro- or anti-politics, so please remember to center LGB or "dropping the T" in your posts.</p></dd>
</ul></dl>
</div>
</div>
<div class="faq">
<input type="radio" id="radio3" name="radio">
<label class="faq-label" for="radio3">3. Off-Topic Posts/Comments</label>
<div class="faq-content">
<p><i>No anti-trans memes/mockery. Posts about "trans people behaving badly" are not allowed unless it shows a clear and direct impact on LGB.</i></p>
<p><i>We're not here for AMAs or outside debate - no whataboutism or "why do you want to" or "Keep The T!" posts.</i></p>
<p><i>Straight/trans allies may post as long as content is LGB-relevant. No validation threads.</i></p>
<p><i>No agenda-pushing, dividing the community, or derailing.</i></p>
<br>
<dl><ul>
<li><b>Trans and/or straight people are allowed here? I thought this was LGB only!</b></li>
<br>
<dd><p>Allies are allowed to share here as long as they follow our rules. There are trans people who support the separation, as do straight people.</p>
<p>We will not allow this to become a forum about them and their needs though. We do not allow "I'm trans, ask me anything!" or "I'm straight, I have a few questions" types of posts.</p>
<p>We don't have any questions, we're not here to debate, and we're not here to validate you for supporting us. These kinds of posts will be removed, and repeat offenders will be banned.</p></dd>
<br>
<li><b>What do you mean by "agenda-pushing" and "dividing the community"?</b></li>
<br>
<dd><p>While certainly not an all-encompassing list, some examples are:</p>
<br>
<p>- Posting about trans actions which impact groups other than LGB.</p>
<p>- Asserting your political or ideological belief as the only "real" truth.</p>
<p>- Asking questions that pit members of LGB against each other.</p>
<p>- Promoting TQ+ or GSRM, or other similar dogma. </p>
<p>- Adding a comment to a thread which has no bearing or relation to the post.</p>
<br>
<p>Always keep the goal of LGB representation in mind, and consider our solidarity as a community.</p></dd>
<br>
<li><b>No "whataboutism"? But I'm queer and have something to say that you need to hear! You're not allowing free speech!</b></li>
<br>
<dd><p>We don't particularly care what you think about your freedom of speech in our space. Get out if you don't like it.</p></dd>
</ul></dl>
</div>
</div>
<div class="faq">
<input type="radio" id="radio4" name="radio">
<label class="faq-label" for="radio4">4. Disallowed Language</label>
<div class="faq-content">
<p><i>No implying that men/women are defined by gender. Men are adult human males, and women are adult human females.</i></p>
<p><i>No implying that sexuality is defined by gender. Sexuality is an orientation, not an identity.</i></p>
<p><i>No homophobia/biphobia or accusations of bigotry.</i></p>
<p><i>No racism or anti-semitism.</i></p>
<p><i>No slurs, crudity, or shock/gore.</i></p>
<br>
<dl><ul>
<li><b>Aren't you erasing trans people? They can be gay too!</b></li>
<br>
<dd><p>Of course they can. But if a trans person feels they're lesbian/gay due to their gender identity, then we refute that.</p>
<p>A male who likes other males and transitions is still gay, he is merely a homosexual trans (HSTS) male presenting as female. A female who likes other females and transitions is still a lesbian, she is merely a homosexual trans female presenting as male.</p>
<p>We'll say it louder for the people in the back... <b>SEXUAL ORIENTATION IS BASED ON BIOLOGICAL SEX, NOT GENDER IDENTITY. WE DO NOT BELIEVE HUMANS CAN CHANGE SEX.</b></p></dd>
<br>
<li><b>What kind of slurs aren't allowed?</b></li>
<br>
<dd><p>If you have to ask this, you may need to re-read rule 1.</p>
<p>We do not allow trancel, troon/troom, or any other slang devised to mock trans people. Language like that is better suited for <a href="https://cringetopia.org">Cringetopia</a>.</p>
<p>Use of the word "tranny" will be reviewed on a case-by-case basis. Quoting someone else, referring to yourself, or discussing the usage is okay. Using the term towards someone else is not. Not everyone has accepted and made peace with it or reclaimed it, and we will respect that.</p></dd>
<br>
<li><b>What do you mean by "crudity" or "shock/gore"?</b></li>
<br>
<dd><p>Do you remember r/NeoVaginaDisasters? Pepperidge Farms remembers.</p>
<p>Nothing of that sort is allowed. That also includes written phrases like "pus-filled axe wound" or "sliced and flayed flesh hotdog".</p>
<p>Remember there is a real person on the other side, with actual feelings, who made a choice to transition and is now living with it. It's a slippery slope from "expression of truth" into disgust and/or hate speech, and it's not our place to shame people into regret.</p></dd>
</ul></dl>
</div>
</div>
<div class="faq">
<input type="radio" id="radio5" name="radio">
<label class="faq-label" for="radio5">5. SITEWIDE RULES</label>
<div class="faq-content">
<p><i>Don't post anything illegal.</i></p>
<p><i>No pornography or nudity.</i></p>
<p><i>No sexualizing minors.</i></p>
<p><i>No doxxing.</i></p>
<br>
<dl><ul>
<li><b>What's illegal?</b></li>
<br>
<dd><p>This can be considered as, but not limited to:</p>
<br>
<p>- Piracy</p>
<p>- Advocating for or calls to violence</p>
<p>- Defamation/libel</p>
<p>- Production of counterfeit currency</p>
<p>- Copyright infringement</p>
<p>- Child, elder, or animal abuse</p>
<p>- Buying/selling anything (we are not a licensed marketplace or retailer)</p>
<br>
<p>Whatever you're thinking of - if you walk out of your house doing it, will you get arrested? Don't do it here then. And for things you can do in secret inside, don't do that either.</p></dd>
<br>
<li><b>What if pornography/nudity is demonstrative, like medical photos or someone's blog of their transition?</b></li>
<br>
<dd><p>This will be reviewed on a case-by-case basis, and in conjunction with the rest of our rules.</p>
<p>If appropriate content, it must be in the form of a direct link, and publicly hosted on another site (no archives). Posts must be marked 18+ (NSFW).</p>
<p>We do not allow it to be on our site in the form of GIFs, images, backgrounds, PFPs, etc.</p></dd>
<br>
<li><b>What counts as sexualizing minors?</b></li>
<br>
<dd><p><a href="https://tips.fbi.gov"><img src="/e/pedobear.webp" width="100" height="100"></a></p></dd>
<br>
<li><b>With doxxing, what if the person is a public figure and/or the information is already available online?</b></li>
<br>
<dd><p>This will be reviewed on a case-by-case basis, and in conjunction with the rest of our rules.</p>
<p>If appropriate content, it must be in the form of a direct link, and publicly hosted on another site (no archives).</p>
<p>In general, we don't see much need for this sort of content. You might find <a href="https://kiwifarms.net/">Kiwi Farms</a> more to your liking, if this is your thing.</p></dd>
</ul></dl>
</div>
</div>
</div>
<style>
#main-content-col {
margin: 2rem 1rem;
}
/******** Hides the checkbox/radio button */
.faqs input {
position: absolute;
opacity: 0;
z-index: -1;
}
.faqs input[type='radio'] {
display: none;
}
/******** FAQ titles */
.faq {
color: var(--black);
margin-bottom: 3rem;
}
.faq-label {
font-size: 1.5rem;
display: flex;
align-items: center;
justify-content: space-between;
padding: 1em;
color: var(--primary);
border: 1px solid var(--primary);
border-radius: 1rem;
font-weight: bold;
cursor: pointer;
user-select: none;
}
/******** FAQ content */
.faq-content {
max-height: 0;
padding: 0 1em;
background: transparent !important;
transition: all 0.35s;
display: none;
}
.faqs input:checked ~ .faq-content {
max-height: 100%;
padding: 1em;
display: block;
transition: all 0.35s;
}
</style>
{% endblock %}

View File

@ -47,6 +47,7 @@
</a>
</button>
{% if v %}
{% if FEATURES['CHAT'] -%}
<button class="col px-0 btn btn-dead m-0" style="background: None !important; border: None;">
<a href="/chat" class="text-decoration-none" role="button">
<div class="text-center {% if request.path=='/chat' %}text-primary{% else %}text-muted{% endif %}">
@ -55,6 +56,8 @@
</div>
</a>
</button>
{%- endif %}
{% if FEATURES['AWARDS'] -%}
<button class="col px-0 mr-3 btn btn-dead m-0" style="background: None !important; border: None;">
<a href="/shop" class="text-decoration-none" role="button">
<div class="text-center {% if request.path=='/shop' %}text-primary{% else %}text-muted{% endif %}">
@ -63,6 +66,7 @@
</div>
</a>
</button>
{%- endif %}
{% else %}
<button class="col px-0 mr-3 btn btn-dead m-0" style="background: None !important; border: None;">
<a href="/signup" class="text-decoration-none" role="button">

View File

@ -6,9 +6,9 @@
{% endif %}
{% if not p.ghost or v.id == AEVANN_ID %}<a class="list-inline-item" href="/votes/{{p.fullname}}"><i class="fas fa-arrows-v"></i>Votes</a>{% endif %}
{% if v and ((not p.ghost and v.admin_level >= PERMS['VOTES_VISIBLE']) or v.id == AEVANN_ID) %}<a class="list-inline-item" href="/votes/{{p.fullname}}"><i class="fas fa-arrows-v"></i>Votes</a>{% endif %}
{% if v %}
{% if v and FEATURES['AWARDS'] %}
<a class="list-inline-item text-muted d-none d-md-inline-block" role="button" data-bs-toggle="modal" data-bs-target="#awardModal" data-url='/award/post/{{p.id}}'><i class="fas fa-gift fa-fw"></i>Give Award</a>
{% endif %}

View File

@ -6,13 +6,15 @@
{% endif %}
{% if not p.ghost or v.id == AEVANN_ID %}<a class="btn-block" href="/votes/{{p.fullname}}"><button class="nobackground btn btn-link btn-block btn-lg text-left text-muted"><i class="fas fa-arrows-v text-center text-muted mr-3"></i>Votes</button></a>{% endif %}
{% if v and ((not p.ghost and v.admin_level >= PERMS['VOTES_VISIBLE']) or v.id == AEVANN_ID) %}<a class="btn-block" href="/votes/{{p.fullname}}"><button class="nobackground btn btn-link btn-block btn-lg text-left text-muted"><i class="fas fa-arrows-v text-center text-muted mr-3"></i>Votes</button></a>{% endif %}
<button data-bs-dismiss="modal" class="copy-link nobackground btn btn-link btn-block btn-lg text-left text-muted" data-clipboard-text="{% if SITE == 'rdrama.net' %}https://rdrama.co{{p.shortlink}}{% else %}{{p.permalink}}{% endif %}"><i class="far fa-copy text-center text-muted mr-3"></i>Copy link</button>
<button class="nobackground btn btn-link btn-block btn-lg text-left text-muted" data-bs-toggle="modal" data-bs-dismiss="modal" data-bs-target="#reportPostModal" onclick="report_postModal('{{p.id}}')"><i class="far fa-flag text-center text-muted mr-3"></i>Report</button>
{% if FEATURES['AWARDS'] -%}
<button class="nobackground btn btn-link btn-block btn-lg text-left text-muted" data-bs-toggle="modal" data-bs-dismiss="modal" data-bs-target="#awardModal" data-url='/award/post/{{p.id}}'><i class="fas fa-gift text-center text-muted mr-3"></i>Give Award</button>
{%- endif %}
<button id="subscribe2-{{p.id}}" class="{% if p.id in v.subscribed_idlist %}d-none{% endif %} nobackground btn btn-link btn-block btn-lg text-left text-muted" role="button" onclick="post_toast(this,'/subscribe/{{p.id}}','subscribe2-{{p.id}}','unsubscribe2-{{p.id}}','d-none')" data-bs-dismiss="modal"><i class="fas fa-eye text-center text-muted mr-3"></i>Subscribe</button>
<button id="unsubscribe2-{{p.id}}" class="{% if not p.id in v.subscribed_idlist %}d-none{% endif %} nobackground btn btn-link btn-block btn-lg text-left text-muted" role="button" onclick="post_toast(this,'/unsubscribe/{{p.id}}','subscribe2-{{p.id}}','unsubscribe2-{{p.id}}','d-none')" data-bs-dismiss="modal"><i class="fas fa-eye-slash text-center text-muted mr-3"></i>Unsubscribe</button>

View File

@ -74,9 +74,11 @@
<li class="nav-item">
<a class="nav-link{% if request.path == '/banned' %} active{% endif %}" href="/banned"><i class="fas fa-user-slash pr-2"></i>Permabanned Users</a>
</li>
{% if v and v.admin_level >= PERMS['USER_BLOCKS_VISIBLE'] -%}
<li class="nav-item">
<a class="nav-link{% if request.path == '/blocks' %} active{% endif %}" href="/blocks"><i class="fas fa-user-slash pr-2"></i>Blocks</a>
</li>
{%- endif %}
<li class="nav-item">
<a class="nav-link{% if request.path == '/h/changelog' %} active{% endif %}" href="https://rdrama.net/h/changelog"><i class="fas fa-clipboard pr-2"></i>Changelog</a>
</li>

View File

@ -24,7 +24,7 @@
<div class="settings">
{% if SITE_NAME == 'rDrama' %}
{% if FEATURES['HOUSES'] %}
<h2 class="h5" name="referral">House</h2>
<div class="settings-section rounded">
@ -458,7 +458,7 @@
</div>
</div>
{% if SITE_NAME == 'rDrama' %}
{% if FEATURES['PRONOUNS'] %}
<div class="body d-lg-flex border-bottom">
<label class="text-black w-lg-25">Pronouns</label>

View File

@ -44,7 +44,7 @@
</div>
<div class="footer">
<div class="d-flex">
{% if SITE_NAME != 'WPD' %}
{% if FEATURES['PROCOINS'] %}
<a class="btn btn-success" role="button" onclick="post_toast(this,'/settings/gumroad')">Claim paypig rewards</a>
{% endif %}
{% if v.email %}
@ -53,7 +53,7 @@
<input autocomplete="off" class="btn btn-primary ml-auto" type="submit" onclick="disable(this)" value="Add email">
{% endif %}
</div>
{% if SITE_NAME != 'WPD' %}
{% if FEATURES['PROCOINS'] %}
<span class="text-small text-muted pl-1">Must be same email as gumroad</span>
{% endif %}
</div>

View File

@ -24,7 +24,7 @@
<h5 class="mt-4">Coins spent by you: {{v.coins_spent}} coins</h5>
<h5 class="mt-4">Lootboxes bought by you: {{v.lootboxes_bought}} lootbox{{'es' if v.lootboxes_bought != 1}}</h5>
<h5 class="mt-4">Your current coins: {{v.coins}}</h5>
{% if PROCOINS_ENABLED %}
{% if FEATURES['PROCOINS'] %}
<h5 class="mt-4">Your current marseybux: {{v.procoins}}</h3>
{% endif %}
</header>
@ -84,7 +84,7 @@
{% set kind = a['kind'] %}
<td class="shop-table-actions">
{% if a['kind'] != "benefactor" %}<a class="d-flex btn btn-success {% if v.coins < a['price'] %}disabled{% endif %}" role="button" onclick="post_toast(this,'/buy/{{kind}}')"><span class="m-auto">Buy</span></a>{% endif %}
{% if SITE_NAME != 'WPD' %}
{% if FEATURES['PROCOINS'] %}
{% if a['kind'] != "grass" %}<a class="d-flex marseybux btn btn-success {% if v.procoins < a['price'] %}disabled{% endif %}" role="button" onclick="post_toast(this,'/buy/{{kind}}?mb=true')"><span class="m-auto">Buy with MBux</span></a>{% endif %}
{% endif %}
</td>

View File

@ -663,7 +663,7 @@
{% if p.ghost %}
<span {% if p.distinguish_level %}class="mod"{% endif %}>👻</span>
{% else %}
{% if SITE_NAME=='rDrama' and p.author.house %}
{% if FEATURES['HOUSES'] and p.author.house %}
<img loading="lazy" src="/i/{{SITE_NAME}}/houses/{{p.author.house}}.webp?v=2000" height="20" data-bs-toggle="tooltip" data-bs-placement="bottom" title="House {{p.author.house}}" alt="House {{p.author.house}}">
{% endif %}
@ -676,7 +676,7 @@
{% endif %}
<span {% if p.author.patron and not p.distinguish_level %}class="patron" style="background-color:#{{p.author.namecolor}};"{% elif p.distinguish_level %}class="mod"{% endif %}>{{p.author_name}}</span>
</a>
{% if SITE_NAME == 'rDrama' %}
{% if FEATURES['PRONOUNS'] %}
<span class="pronouns" style="color:#{{p.author.titlecolor}};border-color:#{{p.author.titlecolor}}">{{p.author.pronouns}}</span>
{% endif %}
{% if p.author.customtitle %}

View File

@ -1,7 +1,7 @@
{%- from 'util/assetcache.html' import asset, asset_siteimg with context -%}
{%- import 'util/helpers.html' as help -%}
{% if v %}
{% if v and FEATURES['AWARDS'] %}
{% include "award_modal.html" %}
{% endif %}
@ -28,8 +28,10 @@
<span class="pop-bio popover-bio text-black"></span>
</div>
{% if FEATURES['BADGES'] -%}
<div class="pop-badges ml-3 mr-3 my-2">
</div>
{%- endif %}
<div class="border-top d-flex align-items-center p-3 gap-3 smol">
<span>
@ -194,7 +196,7 @@
{% if p.ghost %}
<span {% if p.distinguish_level %}class="mod"{% endif %}>👻</span>
{% else %}
{% if SITE_NAME=='rDrama' and p.author.house %}
{% if FEATURES['HOUSES'] and p.author.house %}
<img loading="lazy" src="/i/{{SITE_NAME}}/houses/{{p.author.house}}.webp?v=2000" height="20" data-bs-toggle="tooltip" data-bs-placement="bottom" title="House {{p.author.house}}" alt="House {{p.author.house}}">
{% endif %}
@ -207,7 +209,7 @@
{% endif %}
<span {% if p.author.patron and not p.distinguish_level %}class="patron" style="background-color:#{{p.author.namecolor}};"{% elif p.distinguish_level %}class="mod"{% endif %}>{{p.author_name}}</span>
</a>
{% if SITE_NAME == 'rDrama' %}
{% if FEATURES['PRONOUNS'] %}
<span class="pronouns" style="color:#{{p.author.titlecolor}};border-color:#{{p.author.titlecolor}}">{{p.author.pronouns}}</span>
{% endif %}
{% if p.author.customtitle %}

View File

@ -64,7 +64,7 @@
</span>
{% endif %}
{% if SITE_NAME=='rDrama' and u.house %}
{% if FEATURES['HOUSES'] and u.house %}
<img loading="lazy" class="ml-3" id="profile--house" src="/i/{{SITE_NAME}}/houses/{{u.house}}.webp?v=2000" height="20" data-bs-toggle="tooltip" data-bs-placement="bottom" title="House {{u.house}}" alt="House {{u.house}}">
{% endif %}
@ -105,7 +105,7 @@
</div>
</div>
{% if SITE_NAME == 'rDrama' %}
{% if FEATURES['PRONOUNS'] %}
<p class="font-weight-bolder" id="profile--pronouns" style="color: #{{u.titlecolor}}">{{u.pronouns}}</p>
{% endif %}
@ -115,13 +115,15 @@
<pre></pre>
{% endif %}
{% if v and (v.id == u.id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']) -%}
<div class="font-weight-bolder mb-2" id="profile--simphate"><a class="mr-1" href="/@{{u.username}}/upvoters">Simps</a> | <a class="mx-1" href="/@{{u.username}}/downvoters">Haters</a> | <a class="mx-1" href="/@{{u.username}}/upvoting">Simps for</a> | <a class="ml-1" href="/@{{u.username}}/downvoting">Hates</a></div>
{%- endif %}
<div class="font-weight-bolder">
<span id="profile-coins-amount">{{u.coins}}</span>
<img alt="coins" class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="coins" height="20" src="{{asset_siteimg('coins.webp')}}">&nbsp;&nbsp;
{% if PROCOINS_ENABLED %}
{% if FEATURES['PROCOINS'] %}
<span id="profile-bux-amount">{{u.procoins}}</span>
<img alt="marseybux" class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Marseybux" height="20" width="46" src="/i/marseybux.webp?v=2000">&nbsp;&nbsp;
{% endif %}
@ -155,7 +157,7 @@
<div id="profile--enemies">{{u.enemies_html | safe}}</div>
{% endif %}
{% if u.received_awards %}
{% if u.received_awards and FEATURES['AWARDS'] %}
<div class="text-white rounded p-2 mb-3" id="profile--awards" style="background-color: rgba(50, 50, 50, 0.6); width: 30%;">
<p class="text-uppercase my-0" style="font-weight: bold; font-size: 12px;">Awards received</p>
{% for a in u.received_awards %}
@ -187,11 +189,13 @@
<a id="button-sub" class="btn btn-primary {% if is_following or u.is_nofollow or u.is_blocked %}d-none{% endif %}" role="button" onclick="post_toast(this,'/follow/{{u.username}}','button-unsub','button-sub','d-none')">Follow</a>
<a class="btn btn-primary" role="button" onclick="toggleElement('message', 'input-message')">Message</a>
<a class="btn btn-primary" role="button" onclick="post_toast(this,'/@{{u.username}}/suicide')">Get them help</a>
<a class="btn btn-primary" role="button" onclick="toggleElement('coin-transfer', 'coin-transfer-amount')">Gift coins</a>
{% if PROCOINS_ENABLED %}
{% if FEATURES['USERS_SUICIDE'] -%}
<a class="btn btn-primary" role="button" onclick="post_toast(this,'/@{{u.username}}/suicide')">Get Them Help</a>
{%- endif %}
<a class="btn btn-primary" role="button" onclick="toggleElement('coin-transfer', 'coin-transfer-amount')">Gift Coins</a>
{% if FEATURES['PROCOINS'] -%}
<a class="btn btn-primary" role="button" onclick="toggleElement('bux-transfer', 'bux-transfer-amount')">Gift Marseybux</a>
{% endif %}
{%- endif %}
<a class="btn btn-primary" role="button" onclick="post_toast(this,'/settings/block?username={{u.username}}',true)">Block</a>
@ -348,17 +352,18 @@
</div>
</div>
</div>
<div id="profile--badges">
{% for b in u.badges %}
{% if b.url %}
<a rel="nofollow noopener noreferrer" href="{{b.url}}"><img alt="{{b.name}}" width=55 height=60 loading="lazy" src="{{b.path}}?v=1021" data-bs-toggle="tooltip" data-bs-placement="bottom" title="{{b.text}}" {% if b.until %}data-until="{{b.until}}" onmouseover="badge_timestamp(this)"{% endif %}></a>
{% else %}
<img alt="{{b.name}}" width=55 height=60 loading="lazy" src="{{b.path}}?v=1021" data-bs-toggle="tooltip" data-bs-placement="bottom" title="{{b.text}}" {% if b.until %}data-until="{{b.until}}" onmouseover="badge_timestamp(this)"{% endif %}>
{% endif %}
{% endfor %}
</div>
{% if FEATURES['BADGES'] -%}
<div id="profile--badges">
{% for b in u.badges %}
{% if b.url %}
<a rel="nofollow noopener noreferrer" href="{{b.url}}"><img alt="{{b.name}}" width=55 height=60 loading="lazy" src="{{b.path}}?v=1021" data-bs-toggle="tooltip" data-bs-placement="bottom" title="{{b.text}}" {% if b.until %}data-until="{{b.until}}" onmouseover="badge_timestamp(this)"{% endif %}></a>
{% else %}
<img alt="{{b.name}}" width=55 height=60 loading="lazy" src="{{b.path}}?v=1021" data-bs-toggle="tooltip" data-bs-placement="bottom" title="{{b.text}}" {% if b.until %}data-until="{{b.until}}" onmouseover="badge_timestamp(this)"{% endif %}>
{% endif %}
{% endfor %}
</div>
{%- endif %}
</div>
</div>
</div>
@ -399,7 +404,7 @@
</span>
{% endif %}
{% if SITE_NAME=='rDrama' and u.house %}
{% if FEATURES['HOUSES'] and u.house %}
<img loading="lazy" class="ml-2" id="profile-mobile--house" src="/i/{{SITE_NAME}}/houses/{{u.house}}.webp?v=2000" height="20" data-bs-toggle="tooltip" data-bs-placement="bottom" title="House {{u.house}}" alt="House {{u.house}}">
{% endif %}
@ -416,7 +421,7 @@
<span class="followsyou badge badge-secondary text-small align-middle mx-1" id="profile-mobile--follows-you">Follows you</span>
{% endif %}
{% if SITE_NAME == 'rDrama' %}
{% if FEATURES['PRONOUNS'] %}
<p style="color: #{{u.titlecolor}}" id="profile-mobile--pronouns">{{u.pronouns}}</p>
{% endif %}
@ -426,13 +431,15 @@
<pre></pre>
{% endif %}
{% if v and (v.id == u.id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']) -%}
<div class="font-weight-bolder mb-2" id="profile-mobile--simphate"><a class="mr-1" href="/@{{u.username}}/upvoters">Simps</a> | <a class="mx-1" href="/@{{u.username}}/downvoters">Haters</a> | <a class="mx-1" href="/@{{u.username}}/upvoting">Simps for</a> | <a class="ml-1" href="/@{{u.username}}/downvoting">Hates</a></div>
{%- endif %}
<div class="font-weight-normal">
<span id="profile-coins-amount-mobile" class="font-weight-bold">{{u.coins}}</span>
<img alt="coins" class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="coins" height="15" src="{{asset_siteimg('coins.webp')}}">&nbsp;&nbsp;
{% if PROCOINS_ENABLED %}
{% if FEATURES['PROCOINS'] %}
<span id="profile-bux-amount-mobile" class="font-weight-bold">{{u.procoins}}</span>
<img alt="marseybux" class="ml-1 mb-1" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Marseybux" height="15" width="35" src="/i/marseybux.webp?v=2000">&nbsp;&nbsp;
{% endif %}
@ -465,7 +472,7 @@
<div id="profile-mobile--enemies">{{u.enemies_html | safe}}</div>
{% endif %}
{% if u.received_awards %}
{% if u.received_awards and FEATURES['AWARDS'] %}
<div class="text-white rounded p-2 my-3 text-center" id="profile-mobile--awards" style="background-color: rgba(50, 50, 50, 0.6);">
<p class="text-uppercase my-0" style="font-weight: bold; font-size: 12px;">Awards received</p>
{% for a in u.received_awards %}
@ -511,11 +518,13 @@
<a id="button-sub2" class="btn btn-primary {% if is_following or u.is_nofollow or u.is_blocked %}d-none{% endif %}" role="button" onclick="post_toast(this,'/follow/{{u.username}}','button-unsub2','button-sub2','d-none')">Follow</a>
<a class="btn btn-primary" role="button" onclick="toggleElement('message-mobile', 'input-message-mobile')">Message</a>
<a class="btn btn-primary" role="button" onclick="post_toast(this,'/@{{u.username}}/suicide')">Get them help</a>
<a class="btn btn-primary" role="button" onclick="toggleElement('coin-transfer-mobile', 'coin-transfer-amount-mobile')">Gift coins</a>
{% if PROCOINS_ENABLED %}
{% if FEATURES['USERS_SUICIDE'] -%}
<a class="btn btn-primary" role="button" onclick="post_toast(this,'/@{{u.username}}/suicide')">Get Them Help</a>
{%- endif %}
<a class="btn btn-primary" role="button" onclick="toggleElement('coin-transfer-mobile', 'coin-transfer-amount-mobile')">Gift Coins</a>
{% if FEATURES['PROCOINS'] -%}
<a class="btn btn-primary" role="button" onclick="toggleElement('bux-transfer-mobile', 'bux-transfer-amount-mobile')">Gift Marseybux</a>
{% endif %}
{%- endif %}
<a class="btn btn-primary" role="button" onclick="post_toast(this,'/settings/block?username={{u.username}}',true)">Block</a>

View File

@ -18,7 +18,7 @@ set CACHE_VER = {
'js/award_modal.js': 253,
'js/bootstrap.js': 275,
'js/comments+submission_listing.js': 263,
'js/comments+submission_listing.js': 264,
'js/submission_listing.js': 261,
'js/emoji_modal.js': 312,
'js/formatting.js': 240,