murder deuxrama.net
Before Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 231 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 18 KiB |
|
@ -126,10 +126,7 @@ single_words = "|".join([slur.lower() for slur in SLURS.keys()])
|
||||||
LONGPOST_REPLIES = ('Wow, you must be a JP fan.', 'This is one of the worst posts I have EVER seen. Delete it.', "No, don't reply like this, please do another wall of unhinged rant please.", '<h1>😴😴😴</h1>', "Ma'am we've been over this before. You need to stop.", "I've known more coherent downies.", "Your pulitzer's in the mail", "That's great and all, but I asked for my burger without cheese.", 'That degree finally paying off', "That's nice sweaty. Why don't you have a seat in the time out corner with Pizzashill until you calm down, then you can have your Capri Sun.", "All them words won't bring your pa back.", "You had a chance to not be completely worthless, but it looks like you threw it away. At least you're consistent.", 'Some people are able to display their intelligence by going on at length on a subject and never actually saying anything. This ability is most common in trades such as politics, public relations, and law. You have impressed me by being able to best them all, while still coming off as an absolute idiot.', "You can type 10,000 characters and you decided that these were the one's that you wanted.", 'Have you owned the libs yet?', "I don't know what you said, because I've seen another human naked.", 'Impressive. Normally people with such severe developmental disabilities struggle to write much more than a sentence or two. He really has exceded our expectations for the writing portion. Sadly the coherency of his writing, along with his abilities in the social skills and reading portions, are far behind his peers with similar disabilities.', "This is a really long way of saying you don't fuck.", "Sorry ma'am, looks like his delusions have gotten worse. We'll have to admit him.", 'If only you could put that energy into your relationships', 'Posts like this is why I do Heroine.', 'still unemployed then?', 'K', 'look im gunna have 2 ask u 2 keep ur giant dumps in the toilet not in my replys 😷😷😷', "Mommy is soooo proud of you, sweaty. Let's put this sperg out up on the fridge with all your other failures.", "Good job bobby, here's a star", "That was a mistake. You're about to find out the hard way why.", f'You sat down and wrote all this shit. You could have done so many other things with your life. What happened to your life that made you decide writing novels of bullshit here was the best option?', "I don't have enough spoons to read this shit", "All those words won't bring daddy back.", 'OUT!', "Damn, you're really mad over this, but thanks for the effort you put into typing that all out! Sadly I won't read it all.", "Jesse what the fuck are you talking about??", "▼you're fucking bananas if you think I'm reading all that, take my downvote and shut up idiot", "Are you feeling okay bud?", '<img loading="lazy" data-bs-toggle="tooltip" alt=":#marseywoah:" src="/e/marseywoah.webp" b title=":#marseywoah:">')
|
LONGPOST_REPLIES = ('Wow, you must be a JP fan.', 'This is one of the worst posts I have EVER seen. Delete it.', "No, don't reply like this, please do another wall of unhinged rant please.", '<h1>😴😴😴</h1>', "Ma'am we've been over this before. You need to stop.", "I've known more coherent downies.", "Your pulitzer's in the mail", "That's great and all, but I asked for my burger without cheese.", 'That degree finally paying off', "That's nice sweaty. Why don't you have a seat in the time out corner with Pizzashill until you calm down, then you can have your Capri Sun.", "All them words won't bring your pa back.", "You had a chance to not be completely worthless, but it looks like you threw it away. At least you're consistent.", 'Some people are able to display their intelligence by going on at length on a subject and never actually saying anything. This ability is most common in trades such as politics, public relations, and law. You have impressed me by being able to best them all, while still coming off as an absolute idiot.', "You can type 10,000 characters and you decided that these were the one's that you wanted.", 'Have you owned the libs yet?', "I don't know what you said, because I've seen another human naked.", 'Impressive. Normally people with such severe developmental disabilities struggle to write much more than a sentence or two. He really has exceded our expectations for the writing portion. Sadly the coherency of his writing, along with his abilities in the social skills and reading portions, are far behind his peers with similar disabilities.', "This is a really long way of saying you don't fuck.", "Sorry ma'am, looks like his delusions have gotten worse. We'll have to admit him.", 'If only you could put that energy into your relationships', 'Posts like this is why I do Heroine.', 'still unemployed then?', 'K', 'look im gunna have 2 ask u 2 keep ur giant dumps in the toilet not in my replys 😷😷😷', "Mommy is soooo proud of you, sweaty. Let's put this sperg out up on the fridge with all your other failures.", "Good job bobby, here's a star", "That was a mistake. You're about to find out the hard way why.", f'You sat down and wrote all this shit. You could have done so many other things with your life. What happened to your life that made you decide writing novels of bullshit here was the best option?', "I don't have enough spoons to read this shit", "All those words won't bring daddy back.", 'OUT!', "Damn, you're really mad over this, but thanks for the effort you put into typing that all out! Sadly I won't read it all.", "Jesse what the fuck are you talking about??", "▼you're fucking bananas if you think I'm reading all that, take my downvote and shut up idiot", "Are you feeling okay bud?", '<img loading="lazy" data-bs-toggle="tooltip" alt=":#marseywoah:" src="/e/marseywoah.webp" b title=":#marseywoah:">')
|
||||||
|
|
||||||
|
|
||||||
if SITE_NAME == 'Deuxrama':
|
AGENDAPOSTER_PHRASE = 'trans lives matter'
|
||||||
AGENDAPOSTER_PHRASE = 'there are only two genders'
|
|
||||||
else:
|
|
||||||
AGENDAPOSTER_PHRASE = 'trans lives matter'
|
|
||||||
|
|
||||||
|
|
||||||
AGENDAPOSTER_MSG = """Hi @{username},\n\nYour {type} has been automatically removed because you forgot to include `{AGENDAPOSTER_PHRASE}`.\n\nDon't worry, we're here to help! We won't let you post or comment anything that doesn't express your love and acceptance towards the trans community. Feel free to resubmit your {type} with `{AGENDAPOSTER_PHRASE}` included. \n\n*This is an automated message; if you need help, you can message us [here](/contact).*"""
|
AGENDAPOSTER_MSG = """Hi @{username},\n\nYour {type} has been automatically removed because you forgot to include `{AGENDAPOSTER_PHRASE}`.\n\nDon't worry, we're here to help! We won't let you post or comment anything that doesn't express your love and acceptance towards the trans community. Feel free to resubmit your {type} with `{AGENDAPOSTER_PHRASE}` included. \n\n*This is an automated message; if you need help, you can message us [here](/contact).*"""
|
||||||
|
@ -249,16 +246,7 @@ if SITE in ('rdrama.net', 'devrama.xyz'):
|
||||||
SNAPPY_THREAD = 37749
|
SNAPPY_THREAD = 37749
|
||||||
MARSEY_THREAD = 37838
|
MARSEY_THREAD = 37838
|
||||||
GAMBLING_THREAD = 39413
|
GAMBLING_THREAD = 39413
|
||||||
elif SITE == 'deuxrama.net':
|
if SITE in {'rdrama.net', 'devrama.xyz'}:
|
||||||
PERMS['HOLE_CREATE'] = 3
|
|
||||||
PERMS['CONTENT_THREADS'] = 2
|
|
||||||
|
|
||||||
FEATURES['PROCOINS'] = False
|
|
||||||
|
|
||||||
SIDEBAR_THREAD = 175
|
|
||||||
BADGE_THREAD = 142
|
|
||||||
|
|
||||||
if SITE in {'rdrama.net', 'devrama.xyz', 'deuxrama.net'}:
|
|
||||||
HOLE_COST = 50000
|
HOLE_COST = 50000
|
||||||
HOLE_INACTIVITY_DELETION = True
|
HOLE_INACTIVITY_DELETION = True
|
||||||
|
|
||||||
|
@ -930,8 +918,7 @@ SNAPPY_QUOTES = []
|
||||||
if not SITE_NAME in ['PCM', 'LGBDropTheT']:
|
if not SITE_NAME in ['PCM', 'LGBDropTheT']:
|
||||||
SNAPPY_QUOTES = [f':#{x}:' for x in marseys_const2]
|
SNAPPY_QUOTES = [f':#{x}:' for x in marseys_const2]
|
||||||
|
|
||||||
if SITE_NAME == 'Deuxrama': snappy_name = 'rDrama'
|
snappy_name = SITE_NAME
|
||||||
else: snappy_name = SITE_NAME
|
|
||||||
|
|
||||||
if path.isfile(f'snappy_{snappy_name}.txt'):
|
if path.isfile(f'snappy_{snappy_name}.txt'):
|
||||||
with open(f'snappy_{snappy_name}.txt', "r", encoding="utf-8") as f:
|
with open(f'snappy_{snappy_name}.txt', "r", encoding="utf-8") as f:
|
||||||
|
@ -953,7 +940,6 @@ approved_embed_hosts = {
|
||||||
'devrama.xyz',
|
'devrama.xyz',
|
||||||
'lgbdropthet.com',
|
'lgbdropthet.com',
|
||||||
'chudrama.net',
|
'chudrama.net',
|
||||||
'deuxrama.net',
|
|
||||||
'imgur.com',
|
'imgur.com',
|
||||||
'lain.la',
|
'lain.la',
|
||||||
'pngfind.com',
|
'pngfind.com',
|
||||||
|
|
|
@ -157,69 +157,6 @@ def on_login(account, redir=None):
|
||||||
|
|
||||||
check_for_alts(account.id)
|
check_for_alts(account.id)
|
||||||
|
|
||||||
@app.get("/loginshared/auth/<site_for>")
|
|
||||||
@auth_required
|
|
||||||
def loginshared_authenticate(v, site_for):
|
|
||||||
# Despite providing an interface for general site_for for forward-compat,
|
|
||||||
# loginshared_* is only designed at present for login on Deux using rDrama.
|
|
||||||
if not (SITE == 'rdrama.net' and site_for == 'deuxrama.net'):
|
|
||||||
abort(403)
|
|
||||||
|
|
||||||
# Kludge to prevent accounts created after the DB seeding (on either site)
|
|
||||||
# from being improperly logged into. The only account matching we have is
|
|
||||||
# based on user_id, which isn't guaranteed identical post-seeding.
|
|
||||||
if v.id > 12335:
|
|
||||||
abort(500)
|
|
||||||
|
|
||||||
token = loginshared_secret_token(site_for, v.id)
|
|
||||||
|
|
||||||
# Must be https! Downgrading security leaks secrets in query string.
|
|
||||||
redirect_url = f'https://deuxrama.net/loginshared/verify/' \
|
|
||||||
+ f'rdrama.net/{v.id}/{token}'
|
|
||||||
return redirect(redirect_url)
|
|
||||||
|
|
||||||
@app.get("/loginshared/secret/<site_for>/<user_id>")
|
|
||||||
@auth_trusted_server
|
|
||||||
def loginshared_secret(site_for, user_id):
|
|
||||||
if not (SITE == 'rdrama.net' and site_for == 'deuxrama.net'):
|
|
||||||
abort(403)
|
|
||||||
|
|
||||||
return loginshared_secret_token(site_for, user_id)
|
|
||||||
|
|
||||||
def loginshared_secret_token(site_for, user_id):
|
|
||||||
cache_key = f'loginshared_secret_token:{site_for}:{user_id}'
|
|
||||||
|
|
||||||
token = cache.get(cache_key)
|
|
||||||
if token is None:
|
|
||||||
token = secrets.token_urlsafe(32)
|
|
||||||
cache.set(cache_key, token, timeout=15)
|
|
||||||
|
|
||||||
return token
|
|
||||||
|
|
||||||
@app.get("/loginshared/verify/<site_from>/<user_id>/<token>")
|
|
||||||
def loginshared_verify(site_from, user_id, token):
|
|
||||||
if not TRUSTED_SERVER_PSK:
|
|
||||||
abort(403)
|
|
||||||
if not (SITE == 'deuxrama.net' and site_from == 'rdrama.net'):
|
|
||||||
abort(403)
|
|
||||||
|
|
||||||
provider_url = f'https://rdrama.net/loginshared/secret/deuxrama.net/{user_id}'
|
|
||||||
provider_auth = f'TrustedServer {TRUSTED_SERVER_PSK}'
|
|
||||||
provider_resp = requests.get(provider_url,
|
|
||||||
headers={'Authorization': provider_auth},
|
|
||||||
timeout=5)
|
|
||||||
if provider_resp.status_code != 200:
|
|
||||||
abort(500)
|
|
||||||
|
|
||||||
if provider_resp.text != token:
|
|
||||||
time.sleep(random.uniform(0, 2))
|
|
||||||
return render_template("login.html", failed=True)
|
|
||||||
|
|
||||||
account = get_account(user_id)
|
|
||||||
on_login(account)
|
|
||||||
|
|
||||||
return redirect('/')
|
|
||||||
|
|
||||||
@app.get("/me")
|
@app.get("/me")
|
||||||
@app.get("/@me")
|
@app.get("/@me")
|
||||||
@auth_required
|
@auth_required
|
||||||
|
|
|
@ -19,7 +19,7 @@ def rdrama(id, title):
|
||||||
@app.get("/marseys")
|
@app.get("/marseys")
|
||||||
@auth_required
|
@auth_required
|
||||||
def marseys(v):
|
def marseys(v):
|
||||||
if SITE in ('rdrama.net','devrama.xyz','deuxrama.net'):
|
if SITE in ('rdrama.net','devrama.xyz'):
|
||||||
marseys = g.db.query(Marsey, User).join(User)
|
marseys = g.db.query(Marsey, User).join(User)
|
||||||
sort = request.values.get("sort", "usage")
|
sort = request.values.get("sort", "usage")
|
||||||
if sort == "usage": marseys = marseys.order_by(Marsey.count.desc(), User.username)
|
if sort == "usage": marseys = marseys.order_by(Marsey.count.desc(), User.username)
|
||||||
|
@ -37,7 +37,7 @@ def marsey_list():
|
||||||
if EMOJI_MARSEYS:
|
if EMOJI_MARSEYS:
|
||||||
emojis = [{
|
emojis = [{
|
||||||
"name": emoji.name,
|
"name": emoji.name,
|
||||||
"author": author if SITE in ('rdrama.net','devrama.xyz','deuxrama.net') or author == "anton-d" else None,
|
"author": author if SITE in ('rdrama.net','devrama.xyz') or author == "anton-d" else None,
|
||||||
# yikes, I don't really like this DB schema. Next time be better
|
# yikes, I don't really like this DB schema. Next time be better
|
||||||
"tags": emoji.tags.split(" ") + [emoji.name[len("marsey"):] \
|
"tags": emoji.tags.split(" ") + [emoji.name[len("marsey"):] \
|
||||||
if emoji.name.startswith("marsey") else emoji.name],
|
if emoji.name.startswith("marsey") else emoji.name],
|
||||||
|
|
|
@ -70,7 +70,7 @@
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
{% if sub %}
|
{% if sub %}
|
||||||
<a href="/h/{{sub.name}}" class="font-weight-bold ml-2 flex-grow-1 mt-1" style="font-size:max(14px,1.2vw)">{% if not HOLE_STYLE_FLAIR %}/h/{% endif %}{{sub.name}}</a>
|
<a href="/h/{{sub.name}}" class="sub-name font-weight-bold ml-2 flex-grow-1 mt-1" style="font-size:max(14px,1.2vw)">{% if not HOLE_STYLE_FLAIR %}/h/{% endif %}{{sub.name}}</a>
|
||||||
{% elif has_logo %}
|
{% elif has_logo %}
|
||||||
<style>
|
<style>
|
||||||
{% if g.webview %}
|
{% if g.webview %}
|
||||||
|
|
|
@ -83,14 +83,6 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
{% if SITE_NAME == 'Deuxrama' -%}
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
<div class="small pt-4">Already signed in on rDrama on this device?</div>
|
|
||||||
<a class="btn btn-primary login w-100 mt-3" id="loginshared_button" href="https://rdrama.net/loginshared/auth/deuxrama.net">Sign In with rDrama</a>
|
|
||||||
{%- endif %}
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
<th>Marsey</th>
|
<th>Marsey</th>
|
||||||
<th><a href="?sort=usage">Usage</a></th>
|
<th><a href="?sort=usage">Usage</a></th>
|
||||||
{% if SITE in ('rdrama.net','devrama.xyz','deuxrama.net') %}<th><a href="?sort=author">Author</a></th>{% endif %}
|
{% if SITE in ('rdrama.net','devrama.xyz') %}<th><a href="?sort=author">Author</a></th>{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="followers-table">
|
<tbody id="followers-table">
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
<td>{{marsey.name}}</td>
|
<td>{{marsey.name}}</td>
|
||||||
<td><img class="marsey" loading="lazy" data-bs-toggle="tooltip" alt=":#{{marsey.name}}:" title=":{{marsey.name}}:" src="/e/{{marsey.name}}.webp"></td>
|
<td><img class="marsey" loading="lazy" data-bs-toggle="tooltip" alt=":#{{marsey.name}}:" title=":{{marsey.name}}:" src="/e/{{marsey.name}}.webp"></td>
|
||||||
<td>{{marsey.count}}</td>
|
<td>{{marsey.count}}</td>
|
||||||
{% if SITE in ('rdrama.net','devrama.xyz','deuxrama.net') %}
|
{% if SITE in ('rdrama.net','devrama.xyz') %}
|
||||||
<td><a style="color:#{{author.namecolor}};font-weight:bold" href="/@{{author.username}}"><img loading="lazy" src="{{author.profile_url}}" class="pp20"><span {% if author.patron %}class="patron" style="background-color:#{{author.namecolor}}"{% endif %}>{{author.username}}</span></a></td>
|
<td><a style="color:#{{author.namecolor}};font-weight:bold" href="/@{{author.username}}"><img loading="lazy" src="{{author.profile_url}}" class="pp20"><span {% if author.patron %}class="patron" style="background-color:#{{author.namecolor}}"{% endif %}>{{author.username}}</span></a></td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
<div class="col sidebar text-left {% if '/sidebar' not in request.path %}d-none d-lg-block{% endif %} pt-3 pb-5 bg-white" {% if request.path != '/sidebar' %}id="sidebar-content"{% endif %}>
|
|
||||||
|
|
||||||
{%- set art_path = "assets/images/" + SITE_NAME + "/sidebar/" -%}
|
|
||||||
{%- set sidebar_art = "/" + art_path + listdir('files/' + art_path)|random() + '?v=1' -%}
|
|
||||||
|
|
||||||
{% if request.path != '/sidebar' %}
|
|
||||||
<img class="mb-4" alt="sidebar art" role="button" onclick="expandDesktopImage()" loading="lazy" src="{{sidebar_art}}" style="width: 100%">
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<p class="text-center text-md mb-4">
|
|
||||||
<a class="sidebar-link" href="/marseys" data-bs-toggle="tooltip" data-bs-placement="top" title="Marseys"><i class="fas fa-cat"></i></a>
|
|
||||||
<a class="sidebar-link" href="/badges" data-bs-toggle="tooltip" data-bs-placement="top" title="Badges"><i class="fas fa-hexagon"></i></a>
|
|
||||||
<a class="sidebar-link" href="/admins" data-bs-toggle="tooltip" data-bs-placement="top" title="Admins"><i class="fas fa-crown"></i></a>
|
|
||||||
<a class="sidebar-link" href="/log" data-bs-toggle="tooltip" data-bs-placement="top" title="Moderation Log"><i class="fas fa-scroll-old"></i></a>
|
|
||||||
<a class="sidebar-link" href="/transfers" data-bs-toggle="tooltip" data-bs-placement="top" title="Transfers"><i class="fas fa-arrow-right-arrow-left"></i></a>
|
|
||||||
<a class="sidebar-link" href="/random_post/" data-bs-toggle="tooltip" data-bs-placement="top" title="Random Post"><i class="fas fa-random"></i></a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
{% if v and v.admin_level >= 2 -%}
|
|
||||||
<p class="mt-1 ml-2 mb-4 text-center">
|
|
||||||
<span id="sidebar--counter--admin">
|
|
||||||
<a href="/admin/loggedin">Logged In</a> | <a href="/admin/loggedout">Logged Out</a>
|
|
||||||
</span>
|
|
||||||
</p>
|
|
||||||
{%- endif %}
|
|
||||||
|
|
||||||
<div class="rules mt-3">
|
|
||||||
Deux must secure the existence of our people and a future for dramatic children.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% if not v -%}
|
|
||||||
<hr>
|
|
||||||
<div class="small pt-2">Already signed in on rDrama on this device?</div>
|
|
||||||
<a class="btn btn-primary login w-100 mt-3" id="loginshared_button" href="https://rdrama.net/loginshared/auth/deuxrama.net">Sign In with rDrama</a>
|
|
||||||
{%- endif %}
|
|
||||||
<pre>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
|
@ -1,7 +1,7 @@
|
||||||
[![Build status](https://img.shields.io/github/workflow/status/TheMotte/rDrama/run_tests.py/frost)](https://github.com/Aevann1/rDrama/actions?query=workflow%3Arun_tests.py+branch%3Afrost)
|
[![Build status](https://img.shields.io/github/workflow/status/TheMotte/rDrama/run_tests.py/frost)](https://github.com/Aevann1/rDrama/actions?query=workflow%3Arun_tests.py+branch%3Afrost)
|
||||||
|
|
||||||
|
|
||||||
This code runs https://rdrama.net, https://pcmemes.net, https://watchpeopledie.co, and https://deuxrama.net
|
This code runs https://rdrama.net, https://pcmemes.net and https://watchpeopledie.co
|
||||||
|
|
||||||
# Installation (Windows/Linux/MacOS)
|
# Installation (Windows/Linux/MacOS)
|
||||||
|
|
||||||
|
|