From b131e5127804ddd30e692a2e77bf2d68bab37477 Mon Sep 17 00:00:00 2001 From: gooseman <16601315+geese-suck@users.noreply.github.com> Date: Wed, 23 Nov 2022 10:33:27 -0800 Subject: [PATCH 001/130] rework awards --- files/assets/css/main.css | 28 ++++----- files/templates/awards.html | 109 +++++++++++++++--------------------- 2 files changed, 59 insertions(+), 78 deletions(-) diff --git a/files/assets/css/main.css b/files/assets/css/main.css index 959ff605c..242b6ffba 100644 --- a/files/assets/css/main.css +++ b/files/assets/css/main.css @@ -5022,20 +5022,21 @@ img[src="/i/hand.webp"]+img[glow]:not([data-src]) { pat-pfp-anim .3s infinite; } -@keyframes rb { - 10% { color: red; } - 20% { color: orange; } - 30% { color: yellow; } - 40% { color: green; } - 50% { color: cyan; } - 70% { color: blue; } - 80% { color: indigo; } - 90% { color: violet; } +.glow .post-title, .glow a, .glow .post-meta *, .glow .user-info *, .glow .comment-text, .glow .comment-actions *, .glow { + color:lightgreen !important; + text-shadow:1px 1px 1px darkgreen, 0 0 5px green; } - -.zozbot { - font-weight: bold; - animation: rb 8s linear infinite; +.glow .score-up, .glow .active.arrow-up::before, .glow .arrow-up::after, .glow .arrow-up:hover::before { + color: lime !important; +} +.glow .score-down, .glow .active.arrow-down::before, .glow .arrow-down::after, .glow .arrow-down:hover::before { + color: lime !important; +} +.glow .arrow-up::before, .glow .arrow-down::before, .glow .score { + color: lightgreen; +} +.glow .post-body a, .glow .comment-text a { + text-decoration: underline; } .text-black { @@ -5999,7 +6000,6 @@ g { .fa-discord:before{content:"\f392"} .fa-github:before{content:"\f09b"} .fa-twitter:before{content:"\f099"} -.fa-git-alt:before{content:"\f841"} .fa-head-side:before{content:"\f6e9"} .fa-crab:before{content:"\e3ff"} .fa-socks:before{content:"\f696"} diff --git a/files/templates/awards.html b/files/templates/awards.html index 738cb320f..8b2c7a92f 100644 --- a/files/templates/awards.html +++ b/files/templates/awards.html @@ -1,40 +1,52 @@ -{% if SITE_NAME == 'PCM' %} - {% set wholesome = '/i/wholesome.webp' %} -{% else %} - {% set wholesome = '/e/marseywholesome.webp' %} +
+{% macro stackable_award(award, src, alt) %} + {% for i in range(min(p.award_count(award, v), 4)) %} +
+ {{alt}} +
+ {% endfor %} +{% endmacro %} + +{% if p.award_count("wholesome", v) %} + {% set wholesome = '/i/wholesome.webp' if SITE_NAME == PCM else '/e/marseywholesome.webp' %} + {{ stackable_award('wholesome', wholesome, ':#marseywholesome:') }} {% endif %} -{% for i in range(min(p.award_count("wholesome", v), 4)) %} - {% if g.inferior_browser %} -
- :#marseywholesome: +{% if p.award_count("train", v) %} + {{ stackable_award('train', '/e/marseytrain.webp', ':#marseytrain:') }} +{% endif %} + +{% if p.award_count("scooter", v) %} + {{ stackable_award('scooter', '/e/marseyscooter.webp', ':#marseyscooter:') }} +{% endif %} + +{% if p.award_count("firework", v) %} + + {{ stackable_award('firework', i) }} +{% endif %} + +{% if p.award_count("confetti", v) %} +
+{% endif %} + +{% if p.award_count("ricardo", v) %} + + {% for i in range(min(p.award_count("ricardo", v), 3)) %} +
+
- {% else %} - {% set seal_vertical = 'up' if (i % 2) == 0 else 'down' %} - {% set seal_horizontal = 'right' if i < 2 else 'left' %} - - - :#marseywholesome: - - - {% endif %} -{% endfor %} + {% endfor %} +{% endif %} -{% for i in range(min(p.award_count("train", v), 4)) %} - {% set train_dir = 'left' if (i % 2) == 0 else 'right' %} - {% set train_mirror = ' mirrored' if (i % 2) == 0 else '' %} - - :#marseytrain: - -{% endfor %} +{% if p.award_count("shit", v) %} + + +{% endif %} -{% for i in range(min(p.award_count("scooter", v), 4)) %} - {% set scooter_dir = 'right' if (i % 2) == 0 else 'left' %} - {% set scooter_mirror = '' if (i % 2) == 0 else ' mirrored' %} - - :#marseyscooter: - -{% endfor %} +{% if p.award_count("fireflies", v) %} + + +{% endif %} {% if p.award_count("tilt", v) %} {% endif %} -{% if p.award_count("confetti", v) %} -
-{% endif %} - -{% if p.award_count("firework", v) %} - - {% for i in range(min(p.award_count("firework", v), 4)) %} -
- -
- {% endfor %} -{% endif %} - -{% if p.award_count("ricardo", v) %} - - {% for i in range(min(p.award_count("ricardo", v), 3)) %} -
- -
- {% endfor %} -{% endif %} - -{% if p.award_count("shit", v) %} - - -{% endif %} - -{% if p.award_count("fireflies", v) %} - - -{% endif %} - +
-- 2.34.1 From 187251eb01a627fa047292bc5bfba1f9d08d4b6c Mon Sep 17 00:00:00 2001 From: gooseman <16601315+geese-suck@users.noreply.github.com> Date: Wed, 23 Nov 2022 10:53:41 -0800 Subject: [PATCH 002/130] oops forgot lol --- files/assets/css/awards.css | 249 +++++++++++++----------------------- 1 file changed, 89 insertions(+), 160 deletions(-) diff --git a/files/assets/css/awards.css b/files/assets/css/awards.css index 56e7b4a45..cce79688b 100644 --- a/files/assets/css/awards.css +++ b/files/assets/css/awards.css @@ -1,47 +1,103 @@ +#awards-container { + position:fixed; + pointer-events: none; + z-index:9999; +} +#awards-container > div { + position: absolute; +} + +/*seal*/ +.wholesome img { + width: 100px !important; + height: 89.5px !important; +} +@media (max-width: 992px) { + .wholesome img { + width: 40px !important; + height: 27px !important; + } +} + +.wholesome {animation: sealX 9s linear 0s infinite} +.wholesome img {animation: sealY 10s linear 0s infinite} + +.wholesome1 {animation-direction: alternate} +.wholesome1 img {animation-direction: alternate} +.wholesome2 {animation-direction: alternate-reverse} +.wholesome2 img {animation-direction: alternate-reverse} +.wholesome3 {animation-direction: alternate} +.wholesome3 img {animation-direction: alternate-reverse} +.wholesome4 {animation-direction: alternate-reverse} +.wholesome4 img {animation-direction: alternate} + +@keyframes sealX { + from {} to {transform: translateX(98vw)} +} +@keyframes sealY { + from {} to {transform: translateY(85vh)} +} + +/*train common*/ +.train1, .scooter1 {top:2%} +.train2, .scooter2 {top:27%} +.train3, .scooter3 {top:52%} +.train4, .scooter4 {top:77%} + +@keyframes train { + from {transform: translateX(-3vw)} + to {transform: translateX(99vw)} +} + +/*train*/ +.train img { + width: 100px !important; + height: 51px !important; +} +@media (max-width: 992px) { + .train img { + width: 40px !important; + height: 20px !important; + } +} +.train{animation: train 11s linear 0s infinite;} +.train:nth-of-type(odd) {animation-direction: reverse;} +.train:nth-of-type(odd) img {transform: scaleX(-1);} + +/*scooter*/ +.scooter img { + width: 100px !important; + height: 135px !important; +} +@media (max-width: 992px) { + .scooter img { + width: 40px !important; + height: 54px !important; + } +} + +.scooter {animation: train 11s linear 0s infinite;} +.scooter:nth-of-type(even) {animation-direction: reverse;} +.scooter:nth-of-type(even) img {transform: scaleX(-1);} + /*confetti*/ -#post-award-confetti { - position: fixed; - z-index: 9998; - width: 100%; - height: 100%; - pointer-events: none !important; +.confetti { background-image: url(/assets/images/confetti2.webp); background-repeat: repeat; } /*fireworks*/ -.firework { - position:fixed; - z-index:9999; - pointer-events: none; - width: 100% !important; - height: 100% !important; - pointer-events: none !important; -} - .firework img { max-width: 15rem; } /*ricardo*/ -.ricardo { - position: fixed; - z-index: 9997; - pointer-events: none !important; -} - .ricardo img { - max-height: 15rem !important; - max-height: min(30vw,15rem) !important; + max-height: min(30vw,15rem); } -.ricardoleft { - animation: ricardoleft 2.9s 2 alternate !important; -} - -.ricardoright { - animation: ricardoright 2.9s 2 alternate !important; -} +.ricardoleft {animation: ricardoleft 2.9s 2 alternate !important;} +.ricardoright {animation: ricardoright 2.9s 2 alternate !important;} @keyframes ricardoleft { from {} @@ -54,19 +110,19 @@ } #ricardo1 { - top:70%; + top:60%; left:-10%; } #ricardo2 { - top:80%; + top:70%; left:50%; animation: ricardo2 1.7s linear infinite !important; max-height:200px; } #ricardo3 { - top:85%; + top:75%; animation: ricardo3 10s linear infinite !important; max-height:150px; } @@ -90,130 +146,3 @@ 100% {transform: translate(-70vw,-86vh) rotate(180deg);} } } - -/*glow*/ -.glow .post-title, .glow a, .glow .post-meta *, .glow .user-info *, .glow .comment-text, .glow .comment-actions *, .glow { - color:lightgreen !important; - text-shadow:1px 1px 1px darkgreen, 0 0 5px green; -} - -.glow .score-up, .glow .active.arrow-up::before, .glow .arrow-up::after, .glow .arrow-up:hover::before { - color: lime !important; -} - -.glow .score-down, .glow .active.arrow-down::before, .glow .arrow-down::after, .glow .arrow-down:hover::before { - color: lime !important; -} - -.glow .arrow-up::before, .glow .arrow-down::before, .glow .score { - color: lightgreen; -} - -.glow .post-body a, .glow .comment-text a { - text-decoration: underline; -} - -/*train*/ -.train { - position:fixed; - z-index:9999; - pointer-events: none; -} - -.trainimg { - width: 100px !important; - height: 51px !important; -} - -@media (max-width: 992px) { - .trainimg { - width: 40px !important; - height: 20px !important; - } -} - -.train1 { - top: 10% -} - -.train2 { - top: 35% -} - -.train3 { - top: 60% -} - -.train4 { - top: 85% -} - -/*scooter*/ -.scooterimg { - width: 100px !important; - height: 135px !important; -} -@media (max-width: 992px) { - .scooterimg { - width: 40px !important; - height: 54px !important; - } -} - -/*seal*/ -.seal { - position:fixed; - z-index:9999; - pointer-events: none; - width: 100% !important; - height: 100% !important; -} - -.sealimg { - width: 100px !important; - height: 89.5px !important; -} -@media (max-width: 992px) { - .sealimg { - width: 30px !important; - height: 27px !important; - } -} - -@keyframes moveX { - from {} to {transform: translateX(98vw)} -} - -@keyframes moveY { - from {} to {transform: translateY(90vh)} -} - -.seal1 { - animation: moveX 4s linear 0s infinite alternate !important; -} - -.seal1 > img { - animation: moveY 6.8s linear 0s infinite alternate !important; -} - -.seal2 { - animation: moveX 5s linear 0s infinite alternate-reverse !important; -} - -.seal2 > img { - animation: moveY 8s linear 0s infinite alternate-reverse !important; -} - -.seal3 { - animation: moveX 4s linear 0s infinite alternate !important; -} -.seal3 > img { - animation: moveY 5s linear 0s infinite alternate-reverse !important; -} - -.seal4 { - animation: moveX 5s linear 0s infinite alternate-reverse !important; -} -.seal4 > img { - animation: moveY 6.8s linear 0s infinite alternate !important; -} -- 2.34.1 From 218a571b2c2d43c858d3ce55c8d3dd59c0ae4579 Mon Sep 17 00:00:00 2001 From: geese_suck <16601315+geese-suck@users.noreply.github.com> Date: Thu, 24 Nov 2022 21:12:59 -0800 Subject: [PATCH 003/130] make ricardo less retardo --- files/assets/css/awards.css | 93 +++++++++++++++++++++---------------- files/assets/js/ricardo.js | 26 ----------- files/templates/awards.html | 3 +- 3 files changed, 53 insertions(+), 69 deletions(-) delete mode 100644 files/assets/js/ricardo.js diff --git a/files/assets/css/awards.css b/files/assets/css/awards.css index cce79688b..93f540411 100644 --- a/files/assets/css/awards.css +++ b/files/assets/css/awards.css @@ -3,6 +3,7 @@ pointer-events: none; z-index:9999; } + #awards-container > div { position: absolute; } @@ -19,8 +20,8 @@ } } -.wholesome {animation: sealX 9s linear 0s infinite} -.wholesome img {animation: sealY 10s linear 0s infinite} +.wholesome {animation: sealX 9s linear infinite} +.wholesome img {animation: sealY 10s linear infinite} .wholesome1 {animation-direction: alternate} .wholesome1 img {animation-direction: alternate} @@ -60,7 +61,8 @@ height: 20px !important; } } -.train{animation: train 11s linear 0s infinite;} + +.train{animation: train 11s linear infinite;} .train:nth-of-type(odd) {animation-direction: reverse;} .train:nth-of-type(odd) img {transform: scaleX(-1);} @@ -76,7 +78,7 @@ } } -.scooter {animation: train 11s linear 0s infinite;} +.scooter {animation: train 11s linear infinite;} .scooter:nth-of-type(even) {animation-direction: reverse;} .scooter:nth-of-type(even) img {transform: scaleX(-1);} @@ -92,57 +94,66 @@ } /*ricardo*/ +.ricardo { + position: fixed !important; + bottom: 0; +} .ricardo img { max-height: min(30vw,15rem); } -.ricardoleft {animation: ricardoleft 2.9s 2 alternate !important;} -.ricardoright {animation: ricardoright 2.9s 2 alternate !important;} +.ricardo1 {animation: ricardo1Xa 5.8s linear infinite, ricardo1Xb 11.6s linear infinite, ricardo1Y 23.2s linear infinite;} +.ricardo2 {animation: ricardo2 8.5s linear infinite;} +.ricardo3 {animation: ricardo3 10s linear infinite;} -@keyframes ricardoleft { - from {} - to {transform: translateX(200px);} +@keyframes ricardo1Xa { + 0% {right: -200px} + 50% {right: 200px} + 100% {right: -200px} } -@keyframes ricardoright { - from {transform: translateX(110vw);} - to {transform: translateX(95vw);} +@keyframes ricardo1Xb { + 0%{left:unset} + 49% {left: unset} + 50% {left: -200px} + 75% {left:200px} + 100% {left: -200px} } -#ricardo1 { - top:60%; - left:-10%; +@keyframes ricardo1Y { + 0% {bottom:20vh} + 24% {bottom: 20vh} + 25% {bottom: 60vh} + 49% {bottom: 60vh} + 50% {bottom: 10vh} + 74% {bottom: 10vh} + 75% {bottom: 50vh} + 99% {bottom: 50vh} + 100% {bottom: 20vh} } -#ricardo2 { - top:70%; - left:50%; - animation: ricardo2 1.7s linear infinite !important; - max-height:200px; -} - -#ricardo3 { - top:75%; - animation: ricardo3 10s linear infinite !important; - max-height:150px; -} @keyframes ricardo2 { - 0% {opacity:20%} - 50% {opacity:100%} - 100% {opacity:0%} + 0% { opacity: 1; left: 0; right: unset;} + 18% {opacity: 0; left: 0; right: unset;} + 19% {opacity: 0; left: unset; right: 20vw;} + 20% {opacity: 1; left: unset; right: 20vw;} + 38% {opacity: 0; left: unset; right: 20vw;} + 39% {opacity: 0; left: 20vw; right: unset;} + 40% {opacity: 1; left: 20vw; right: unset;} + 58% {opacity: 0; left: 20vw; right: unset;} + 59% {opacity: 0; left: unset;right: 60vw;} + 60% {opacity: 1; left: unset; right: 60vw;} + 78% {opacity: 0; left: unset; right: 60vw;} + 79% {opacity: 0; left: 80vw; right: unset;} + 80% {opacity: 1; left: 80vw; right: unset;} + 98% {opacity: 0; left: 80vw; right: unset;} + 99% {opacity: 0; left: 0; right: unset;} + 100% {opacity: 1; left: 0; right: unset;} } @keyframes ricardo3 { - 50% {transform: translateX(105vw);} - 51% {transform: translate(105vw,-86vh) rotate(180deg);} - 100% {transform: translate(-15vw,-86vh) rotate(180deg);} -} - -@media (max-width: 768px) { - @keyframes ricardo3 { - 50% {transform: translateX(105vw);} - 51% {transform: translate(105vw,-86vh) rotate(180deg);} - 100% {transform: translate(-70vw,-86vh) rotate(180deg);} - } + 50% {transform: translateX(100vw); top: unset; bottom: 0;} + 51% {transform: translateX(100vw) rotate(180deg); top: 0; bottom: unset;} + 100% {transform: translateX(-15vw) rotate(180deg); top: 0; bottom: unset;} } diff --git a/files/assets/js/ricardo.js b/files/assets/js/ricardo.js deleted file mode 100644 index a7b178d6d..000000000 --- a/files/assets/js/ricardo.js +++ /dev/null @@ -1,26 +0,0 @@ -var isleft = true -setInterval(() => { - let ricardo1 = document.getElementById("ricardo1") - var height = Math.floor(Math.random()*60)+10 - if (ricardo1) { - ricardo1.firstElementChild.src = "" - - if (isleft == true) { - ricardo1.className = "ricardo ricardoright" - isleft = false - } else { - ricardo1.className = "ricardo ricardoleft" - isleft = true - } - - ricardo1.firstElementChild.src = "/i/ricardo1.webp" - ricardo1.style.top=height+"%" - } -}, 5800) - -setInterval(() => { - let ricardo2 = document.getElementById("ricardo2") - var xpos = Math.floor(Math.random()*9)*10 - - if (ricardo2) ricardo2.style.left=xpos+"%" -}, 1700) \ No newline at end of file diff --git a/files/templates/awards.html b/files/templates/awards.html index 8b2c7a92f..425735cd3 100644 --- a/files/templates/awards.html +++ b/files/templates/awards.html @@ -30,9 +30,8 @@ {% endif %} {% if p.award_count("ricardo", v) %} - {% for i in range(min(p.award_count("ricardo", v), 3)) %} -
+
{% endfor %} -- 2.34.1 From f75958144ae8718acd70ffc5ea1f6e500eef7899 Mon Sep 17 00:00:00 2001 From: geese_suck <16601315+geese-suck@users.noreply.github.com> Date: Thu, 24 Nov 2022 21:16:35 -0800 Subject: [PATCH 004/130] add that back in idk how it got deleted --- files/assets/css/main.css | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/files/assets/css/main.css b/files/assets/css/main.css index 242b6ffba..6bb5fdfe2 100644 --- a/files/assets/css/main.css +++ b/files/assets/css/main.css @@ -5039,6 +5039,22 @@ img[src="/i/hand.webp"]+img[glow]:not([data-src]) { text-decoration: underline; } +@keyframes rb { + 10% { color: red; } + 20% { color: orange; } + 30% { color: yellow; } + 40% { color: green; } + 50% { color: cyan; } + 70% { color: blue; } + 80% { color: indigo; } + 90% { color: violet; } +} + +.zozbot { + font-weight: bold; + animation: rb 8s linear infinite; +} + .text-black { color: var(--black); } -- 2.34.1 From 4631c72c2cce88050fea6addc261f3a68d227f04 Mon Sep 17 00:00:00 2001 From: geese_suck <16601315+geese-suck@users.noreply.github.com> Date: Thu, 24 Nov 2022 21:18:44 -0800 Subject: [PATCH 005/130] bro --- files/assets/css/main.css | 1 + 1 file changed, 1 insertion(+) diff --git a/files/assets/css/main.css b/files/assets/css/main.css index 6bb5fdfe2..f45d05064 100644 --- a/files/assets/css/main.css +++ b/files/assets/css/main.css @@ -6016,6 +6016,7 @@ g { .fa-discord:before{content:"\f392"} .fa-github:before{content:"\f09b"} .fa-twitter:before{content:"\f099"} +.fa-git-alt:before{content:"\f841"} .fa-head-side:before{content:"\f6e9"} .fa-crab:before{content:"\e3ff"} .fa-socks:before{content:"\f696"} -- 2.34.1 From e44bd135506573ede14aca68340c7d32dc981f65 Mon Sep 17 00:00:00 2001 From: justcool393 Date: Wed, 23 Nov 2022 14:45:09 -0600 Subject: [PATCH 006/130] make antispam a bit less :marseyshook: --- files/helpers/actions.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/files/helpers/actions.py b/files/helpers/actions.py index 472e938e2..6bc781c2e 100644 --- a/files/helpers/actions.py +++ b/files/helpers/actions.py @@ -394,14 +394,15 @@ def execute_antispam_duplicate_comment_check(v:User, body_html:str): ''' Sanity check for newfriends ''' + ANTISPAM_DUPLICATE_THRESHOLD = 3 if v.id in ANTISPAM_BYPASS_IDS or v.admin_level: return if v.age >= NOTIFICATION_SPAM_AGE_THRESHOLD: return if len(body_html) < 16: return if body_html == '!wordle': return # wordle compare_time = int(time.time()) - 60 * 60 * 24 - comment = g.db.query(Comment.id).filter(Comment.body_html == body_html, - Comment.created_utc >= compare_time).first() - if not comment: return + count = g.db.query(Comment.id).filter(Comment.body_html == body_html, + Comment.created_utc >= compare_time).count() + if count <= ANTISPAM_DUPLICATE_THRESHOLD: return v.ban(reason="Spamming.", days=0.0) send_repeatable_notification(v.id, "Your account has been banned **permanently** for the following reason:\n\n> Too much spam!") g.db.add(v) -- 2.34.1 From 2800e5dfe6902e630480109f5875d5514f080af0 Mon Sep 17 00:00:00 2001 From: AverageBen10Enjoyer Date: Wed, 23 Nov 2022 21:17:21 +0000 Subject: [PATCH 007/130] Removing references to old repo --- files/helpers/const.py | 2 +- readme.md | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/files/helpers/const.py b/files/helpers/const.py index d85d5d025..6a1440e51 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -564,7 +564,7 @@ elif SITE == 'pcmemes.net': BANNER_THREAD = 28307 elif SITE == 'watchpeopledie.tv': PIN_LIMIT = 4 - WELCOME_MSG = """Hi, you! Welcome to WatchPeopleDie.tv, this really cool site where you can go to watch people die. I'm @CLiTPEELER! If you have any questions about how things work here, or suggestions on how to make them work better than they already do, definitely slide on into my DMs (no fat chicks).\nThere's an enormously robust suite of fun features we have here and we're always looking for more to add. Way, way too many to go over in an automated welcome message. And you're probably here for the videos of people dying more than any sort of weird, paradoxical digital community aspect anyway, so I won't bore you with a tedious overview of them. Just head on over to [your settings page](https://watchpeopledie.tv/settings/profile) and have a look at some of the basic profile stuff, at least. You can change your profile picture, username, flair, colors, banners, bio, profile anthem (autoplaying song on your page, like it's MySpace or some shit, hell yeah), CSS, all sorts of things.\nOr you can just go back to the main feed and carry on with watching people die. That's what the site is for, after all. Have fun!\nAnyway, in closing, WPD is entirely open source. We don't really need new full-time coders or anything, but if you'd like to take a look at our repo - or even submit a PR to change, fix, or add some things - go right ahead! We are on [GitHub](https://github.com/Aevann1/rDrama).\nWell, that's all. Thanks again for signing up. It's an automated message and all, but I really do mean that. Thank you, specifically. I love you. Romantically. Deeply. Passionately.\nHave fun!""" + WELCOME_MSG = """Hi, you! Welcome to WatchPeopleDie.tv, this really cool site where you can go to watch people die. I'm @CLiTPEELER! If you have any questions about how things work here, or suggestions on how to make them work better than they already do, definitely slide on into my DMs (no fat chicks).\nThere's an enormously robust suite of fun features we have here and we're always looking for more to add. Way, way too many to go over in an automated welcome message. And you're probably here for the videos of people dying more than any sort of weird, paradoxical digital community aspect anyway, so I won't bore you with a tedious overview of them. Just head on over to [your settings page](https://watchpeopledie.tv/settings/profile) and have a look at some of the basic profile stuff, at least. You can change your profile picture, username, flair, colors, banners, bio, profile anthem (autoplaying song on your page, like it's MySpace or some shit, hell yeah), CSS, all sorts of things.\nOr you can just go back to the main feed and carry on with watching people die. That's what the site is for, after all. Have fun!\nAnyway, in closing, WPD is entirely open source. We don't really need new full-time coders or anything, but if you'd like to take a look at our repo - or even submit a PR to change, fix, or add some things - go right ahead! Our codebase lives at [git.rdrama.net](https://git.rdrama.net/).\nWell, that's all. Thanks again for signing up. It's an automated message and all, but I really do mean that. Thank you, specifically. I love you. Romantically. Deeply. Passionately.\nHave fun!""" FEATURES['PATRON_ICONS'] = True diff --git a/readme.md b/readme.md index 2c74f0c99..ed4fabff0 100644 --- a/readme.md +++ b/readme.md @@ -1,18 +1,13 @@ -[![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 and https://watchpeopledie.tv # Installation (Windows/Linux/MacOS) -1- Install Docker on your machine. - -[Docker installation](https://docs.docker.com/get-docker/) +1- Install Docker on your machine. [Docker installation](https://docs.docker.com/get-docker/) 2- Run the following commands in the terminal: ``` -git clone https://github.com/Aevann1/rDrama/ +git clone https://fsdfsd.net/rDrama/rDrama.git cd rDrama -- 2.34.1 From b1398d2ed6ce25a6e30c075734d69fb787103ba9 Mon Sep 17 00:00:00 2001 From: Snakes Date: Wed, 23 Nov 2022 20:28:39 -0500 Subject: [PATCH 008/130] Restrict New User hat to rDrama. --- files/classes/user.py | 2 +- files/helpers/const.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/files/classes/user.py b/files/classes/user.py index 71d4fc5fb..a04966a66 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -261,7 +261,7 @@ class User(Base): if self.is_cakeday: return '/i/hats/Cakeday.webp' - if self.age < 86400 * 7: + if self.age < NEW_USER_HAT_AGE: return '/i/new-user.webp' if self.forced_hat: diff --git a/files/helpers/const.py b/files/helpers/const.py index 6a1440e51..a1f3d64d5 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -394,6 +394,7 @@ TRUESCORE_GHOST_LIMIT = 0 LOGGEDIN_ACTIVE_TIME = 15 * 60 PFP_DEFAULT_MARSEY = True +NEW_USER_HAT_AGE = 0 # seconds of age to show new-user forced hat NOTIFICATION_SPAM_AGE_THRESHOLD = 0.5 * 86400 COMMENT_SPAM_LENGTH_THRESHOLD = 50 @@ -490,9 +491,9 @@ if SITE == 'rdrama.net': NOTIFICATION_THREAD = 6489 CHAT_LENGTH_LIMIT = 200 - TRUESCORE_CHAT_LIMIT = 10 TRUESCORE_GHOST_LIMIT = 10 + NEW_USER_HAT_AGE = 7 * 86400 HOLE_COST = 50000 HOLE_INACTIVITY_DELETION = True -- 2.34.1 From be3d4b7ebc6128e54559878c27a90c6ba683409b Mon Sep 17 00:00:00 2001 From: SneedBot Date: Thu, 24 Nov 2022 01:32:24 +0000 Subject: [PATCH 009/130] sneed --- files/assets/images/rDrama/banners/147.webp | Bin 0 -> 18294 bytes files/assets/images/rDrama/banners/148.webp | Bin 0 -> 33822 bytes files/assets/images/rDrama/banners/149.webp | Bin 0 -> 1392 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 files/assets/images/rDrama/banners/147.webp create mode 100644 files/assets/images/rDrama/banners/148.webp create mode 100644 files/assets/images/rDrama/banners/149.webp diff --git a/files/assets/images/rDrama/banners/147.webp b/files/assets/images/rDrama/banners/147.webp new file mode 100644 index 0000000000000000000000000000000000000000..8e74343eb37b78d2fbe7692008111bf5f945cec6 GIT binary patch literal 18294 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 literal 0 HcmV?d00001 diff --git a/files/assets/images/rDrama/banners/149.webp b/files/assets/images/rDrama/banners/149.webp new file mode 100644 index 0000000000000000000000000000000000000000..3ce6f6d16b469c9c9e640fc835ee8f5c4ad5dd7a GIT binary patch literal 1392 zcmWIYbaTsKWnc(*bqWXzuuzBrvOk0~%w^Qtz%q%!Zlc><@1=_uEnHBR?Xf|KGdb^J zSv|*{{{R0O{{NSMzy9+Id;5l`{F^0i*YZD6{xkg(e}Qz`o&$BetIqtA`@--t^b5nM ztKVk*xBFYPB{BELq6ge( zorQOc#4uK_NGeb2ZqPU7@p}_k!1`=q=iM$n28h;Unvu09rbpaq^75)SB%T?QwqYVC z!W66ySZFgf$intJA=fMy+)x>=_ILTc1F0J!th>vfZ(ROn<`;|mqOx%_G;S$(Y<|B_ zT~ps|%kLXJ+syd2p4`XDa=7v>=vrFGv)#)P=v`-Z!0H5yQ#{0c8suH$aU#&_|STu%Yp!CThO z7yB4)Si5Ib86J>kx9w-i@tbG*lKHUJzB8E88E^UBESMAC$}ZYEqli;e^UcxJ?@F=B zL^DP9rED_`M6wTV;KCQj8FFM7Z?Tnlz}vi~tbMTzBOa$3S-wv&x^cs1_2jzC_*gj% z4F6sww(M~G|4%mVhMMNSpoWsi_W$Rb{_8yW%gRaf&a1PEB9|9dHZW~J^Y{4sjh`Z; zX6py1zRKC_JALJ*uV!(}PG7lMHCsO@|KsLu+1^~N&0+CgI~(%?7=VCVu+!`<%dSu# zj)r?RMZCLvg^J@mR>*;*xK@bG<2mB&s-ebu?%ETFm%p|P*sQVF+7~9x`FPV&qh$g; z$Ilmd9}4Oen;QA!OX$buXO+nvg@1ksY@OpI?fsb5O0MM5l5bfXox>}SdfUoK{Y#i} z?aF^;OV&%V`s{Clw=7;&EBdVLm6V0*Yl{cR-zB!je=l7mv5;+hs^g7)HSb#MX9ThO zh07GJV_@!^xW&6+>Z_ao6HWdXIJR>fEe=~Oabk}$@4sEgcqF*AI5{>-#yjkZ^SDxT z?N3&N-7THjInR{$-%)3tG)XuutGXj%GwZf}hojHFTzYqFHnaJsy^oI;a(3?G73^(( zbHXdl=C}2Xw11&`9-pgL*)8Qeynywd;l4Qs7&zBbJ-U#s3#uD^c3<$vEV@lcaI&Zk;gALr;g&gfh7X|ME4BlG)g3@5yg z+%(^Rs4GURGkM*fDQXuhu2#*iJ}^=E|M?%BkNVfyAADc3)I>~`dB?3NM;En#lG3u$ z_408E^-nJxx|Fl$Ts~iXYrbam206LnKXW(Br3tcE3vnbd@VNclAmExFS*2zzlJ?Fh z(?Mc_I=jKmPr0urS~@LfS-x+^a%=wuu4;Q`eab$$9*Nq(Icv9Zcv{w*v#~Q*TPV2J zS}?u4eP!{=yO*zc@A#_KBoH(Ezss)!zy!c3Hih{BBNKyaqIrY3(*uS{jcY*Z0s;WR Cp_Y#T literal 0 HcmV?d00001 -- 2.34.1 From 4e59dc5b55b7b69788f9e131fd44a23bb9c89b08 Mon Sep 17 00:00:00 2001 From: justcool393 Date: Fri, 25 Nov 2022 07:10:05 -0600 Subject: [PATCH 010/130] security: fix DoS on title getter the `timeout` parameter only applies to seconds per *byte* received (and time to first byte), not the entire request this means an attacker could theoretically send a very... slow... stream... of... bytes... and... crash... the... worker... when... the... timeout... is... reached... --- files/routes/posts.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/files/routes/posts.py b/files/routes/posts.py index e145c9002..a6068efbd 100644 --- a/files/routes/posts.py +++ b/files/routes/posts.py @@ -1075,6 +1075,7 @@ extensions = IMAGE_FORMATS + VIDEO_FORMATS + AUDIO_FORMATS @ratelimit_user("3/minute") @auth_required def get_post_title(v): + POST_TITLE_TIMEOUT = 5 url = request.values.get("url") if not url or '\\' in url: abort(400) url = url.strip() @@ -1084,7 +1085,8 @@ def get_post_title(v): if any((checking_url.endswith(f'.{x}') for x in extensions)): abort(400) - try: x = requests.get(url, headers=titleheaders, timeout=5, proxies=proxies) + try: + x = gevent.with_timeout(POST_TITLE_TIMEOUT, requests.get, url, headers=titleheaders, timeout=POST_TITLE_TIMEOUT, proxies=proxies) except: abort(400) content_type = x.headers.get("Content-Type") -- 2.34.1 From 269a2c71fa77089fe1dc49b77891f4647b6dabad Mon Sep 17 00:00:00 2001 From: justcool393 Date: Fri, 25 Nov 2022 11:49:37 -0600 Subject: [PATCH 011/130] css: fix alignment on ghost posts --- files/assets/css/main.css | 5 +++++ files/templates/submission.html | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/files/assets/css/main.css b/files/assets/css/main.css index f45d05064..90dda5bf4 100644 --- a/files/assets/css/main.css +++ b/files/assets/css/main.css @@ -3528,6 +3528,11 @@ small, .small { .post-meta::-webkit-scrollbar { display: none; } + +.ghost-post .post-meta { + height: 30px; +} + .sub-flair { padding: 3px 5px 2px 5px; border-radius: 5px; diff --git a/files/templates/submission.html b/files/templates/submission.html index a489f3343..b99139730 100644 --- a/files/templates/submission.html +++ b/files/templates/submission.html @@ -78,7 +78,7 @@

-
+
{% if not p.is_image and p.thumb_url and not p.embed_url %}
-- 2.34.1 From c3e86bcbe113b2dc3231dd03233c4946f0765213 Mon Sep 17 00:00:00 2001 From: justcool393 Date: Fri, 25 Nov 2022 12:27:18 -0600 Subject: [PATCH 012/130] errors: use abort for sign up errors --- files/routes/login.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/files/routes/login.py b/files/routes/login.py index 6cd003703..1b368e041 100644 --- a/files/routes/login.py +++ b/files/routes/login.py @@ -151,7 +151,7 @@ def logout(v): @auth_desired def sign_up_get(v): if not get_setting('Signups'): - return {"error": "New account registration is currently closed. Please come back later."}, 403 + abort(403, "New account registration is currently closed. Please come back later.") if v: return redirect(SITE_FULL) @@ -201,7 +201,7 @@ def sign_up_get(v): @auth_desired def sign_up_post(v): if not get_setting('Signups'): - return {"error": "New account registration is currently closed. Please come back later."}, 403 + abort(403, "New account registration is currently closed. Please come back later.") if v: abort(403) -- 2.34.1 From 8e04975144d008b4f3af9068283d4b27ece18a09 Mon Sep 17 00:00:00 2001 From: justcool393 Date: Fri, 25 Nov 2022 13:18:43 -0600 Subject: [PATCH 013/130] submit: don't disable submit button by default this doesn't create an issue because HTML form validation does work here --- files/templates/submit.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/templates/submit.html b/files/templates/submit.html index 67ae18674..13d587f5d 100644 --- a/files/templates/submit.html +++ b/files/templates/submit.html @@ -105,7 +105,7 @@
{% if error %}{{error | safe}}{% endif %} - +
-- 2.34.1 From 4422ef7900e72216c154cddb7dc30ae624e269aa Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Fri, 25 Nov 2022 21:34:12 +0200 Subject: [PATCH 014/130] remove sitemap.xml --- files/assets/sitemap.xml | 2013 -------------------------------------- 1 file changed, 2013 deletions(-) delete mode 100644 files/assets/sitemap.xml diff --git a/files/assets/sitemap.xml b/files/assets/sitemap.xml deleted file mode 100644 index 956da5b3d..000000000 --- a/files/assets/sitemap.xml +++ /dev/null @@ -1,2013 +0,0 @@ - - - - - https://rdrama.net - 2022-06-10T23:42:26+00:00 - 1.00 - - - https://rdrama.net/post/19236/ - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/contact - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/signup - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fmarseys%3F - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fbadges%3F - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Flog%3F - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Ftransfers%3F - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Frandom_user%2F%3F - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Frandom_post%2F%3F - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fcomments%3F - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/holes - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/16583 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/18459 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75878 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/33652 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/35835 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/37677 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/39413 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/19711/a-short-guide-on-how-to - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/?sort=hot&t=hour - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/?sort=hot&t=week - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/?sort=hot&t=month - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/?sort=hot&t=year - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/?sort=hot&t=all - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/?sort=bump&t=day - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/?sort=top&t=day - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/?sort=bottom&t=day - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/?sort=new&t=day - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/?sort=old&t=day - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/?sort=controversial&t=day - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/?sort=comments&t=day - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75837/dramafitness-megathread-9-the-biggining-of - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75837 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fsearch%2Fposts%2F%3Fq%3Ddomain%253Atwitter.com%26sort%3Dnew%26t%3Dall - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75977/india-is-currently-feuding-with-the - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75977 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fsearch%2Fposts%2F%3Fq%3Ddomain%253Awsj.com%26sort%3Dnew%26t%3Dall - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75950/grift-zero-of-the-adderall-epidemic - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75950 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75959/twitter-marseytrain-activates-the-nuclear-option - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75959 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75968/marseylove-love-for-metadrama-marseylove - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75968 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/6345 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/5800 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/2663 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/8494 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fsearch%2Fposts%2F%3Fq%3Ddomain%253Areddit.com%26sort%3Dnew%26t%3Dall - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75957/they-hated-her-because-she-told - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75957 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75945/who-factchecks-the-factchecker - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75945 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/76001/scrotes-are-so-fucking-pathetic-omg - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_76001 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fsearch%2Fposts%2F%3Fq%3Ddomain%253Ardrama.net%26sort%3Dnew%26t%3Dall - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75914/gentlemen-ladies-after-a-month-of - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75914 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/58808/alright-dramatards-time-to-vote-marseyridin - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/5526 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75921/this-schizosorenspam-shit-is-annoying-and - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75921 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/h/schizocel/post/75609/replace-soren-with-schizocel-and-this - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/1376 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/2546 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/10092 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/3511 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/560 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/636 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/541 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/4003 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/9334 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/5188 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/h/schizocel/post/75884/the-magnitude-of-convoluted-inside-jokes - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/h/schizocel - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75884 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75989/foid-refused-mandatory-sympathy-while-posting - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75989 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75987/tw-i-need-to-get-a - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75987 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75976/internal-server-error - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75976 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/h/braincels - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75897/jokers-2-is-confirmed - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75994/i-really-love-marseyismywaifu - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75994 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75931/marseyklennyclap - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75931 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75899/do-not-forgive-do-not-forget - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75899 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75913/just-found-out-that-im-trans - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75913 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75981/you-dont-want-to-try-anything - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75981 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75820/what-do-most-people-not-realize - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75820 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fsearch%2Fposts%2F%3Fq%3Ddomain%253Abbc.co.uk%26sort%3Dnew%26t%3Dall - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75819/terf-islanders-decide-theyd-rather-die - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75819 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75815/trans-allies-get-what-they-asked - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75815 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/h/anime - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/h/anime/post/75831/this-is-cirno - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75831 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/7813 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/296 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/1994 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/9397 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/1357 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/8654 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/1203 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/7466 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/7580 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/3016 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/9755 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/5099 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/7615 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/10272 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/9287 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/10881 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/1378 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/1387 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fsearch%2Fposts%2F%3Fq%3Ddomain%253Adailymail.co.uk%26sort%3Dnew%26t%3Dall - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75847/terf-island-people-study-disturbing-moment - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75847 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/75943/serious-question-is-russia-winning-the - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75943 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/id/30 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/post/76000/marseymuhammad-pbuh - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_76000 - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/?sort=hot&page=2&t=day - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/?sort=new&t=all - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=%2Fleaderboard%3F - 2022-06-10T23:42:26+00:00 - 0.80 - - - https://rdrama.net/login?redirect=/post/19236/ - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_19236 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/?sort=bottom - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/?sort=new - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/?sort=old - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/?sort=controversial - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_477392 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/477392?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fformatting%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_477413 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/477413?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_478434 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/478434?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475015 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475015?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475051 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475051?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475057 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475057?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475105 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475105?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475734 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475734?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475737 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475737?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475766 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475766?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475773 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475773?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475949 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475949?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_476002 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/476002?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/476002 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475919 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_478275 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/478275?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_478149 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/478149?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_478992 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/478992?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_479126 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/479126?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_479546 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/479546?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_478895 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/478895?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475025 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475025?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475043 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475043?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475068 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475068?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475084 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475084?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475089 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475089?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475097 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475097?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475112 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475112?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475220 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475220?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475026 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475026?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475027 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475028 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475028?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475035 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475035?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475085 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475085?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475044 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475044?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475081 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475081?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475140 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475140?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475215 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475215?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_1892325 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/1892325?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_1892423 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/1892423?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_1894344 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/1894344?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475036 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475036?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475134 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475134?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475717 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475717?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_479427 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/479427?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_476009 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/476009?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475038 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475118 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475118?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475159 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475159?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475304 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475304?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475082 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475082?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_475325 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/475325?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_476597 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/19236/marseylaugh-marseylaugh-marseylaugh/476597?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/60443/ - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/?sort=hot&t=hour - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/?sort=hot&t=week - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/?sort=hot&t=month - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/?sort=hot&t=year - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/?sort=hot&t=all - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/?sort=bump&t=day - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/?sort=top&t=day - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/?sort=bottom&t=day - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/?sort=new&t=day - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/?sort=old&t=day - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/?sort=controversial&t=day - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/?sort=comments&t=day - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/?sort=hot&page=2&t=day - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/forgot - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/signup?redirect=/contact? - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/signup?redirect=/marseys? - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/signup?redirect=/badges? - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/signup?redirect=/log? - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/signup?redirect=/transfers? - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/signup?redirect=/random_user/? - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/signup?redirect=/random_post/? - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/signup?redirect=/comments? - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/64305/ - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=/holes - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/h/furry - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Ffurry%2Ffollowers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Ffurry%2Fblockers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/h/moemorphism - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fmoemorphism%2Ffollowers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fmoemorphism%2Fblockers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/h/music - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fmusic%2Ffollowers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fmusic%2Fblockers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/h/random - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Frandom%2Ffollowers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Frandom%2Fblockers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fschizocel%2Ffollowers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fschizocel%2Fblockers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fanime%2Ffollowers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fanime%2Fblockers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/h/dankchristianmemes - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fdankchristianmemes%2Ffollowers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fdankchristianmemes%2Fblockers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/h/slackernews - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fslackernews%2Ffollowers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fslackernews%2Fblockers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/h/ducks - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fducks%2Ffollowers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fducks%2Fblockers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/h/eevee - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Feevee%2Ffollowers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Feevee%2Fblockers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/h/borgar - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fborgar%2Ffollowers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fborgar%2Fblockers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/h/shrek_dick_dimension - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fshrek_dick_dimension%2Ffollowers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fshrek_dick_dimension%2Fblockers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/h/carpathianflorist - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fcarpathianflorist%2Ffollowers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fh%2Fcarpathianflorist%2Fblockers%3F - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583/megathread-posts-here-marseys-or-other - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_16583 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583?sort=top - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583?sort=bottom - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583?sort=old - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583?sort=controversial - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2099220 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583/megathread-posts-here-marseys-or-other/2099220?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2098425 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583/megathread-posts-here-marseys-or-other/2098425?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2099170 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583/megathread-posts-here-marseys-or-other/2099170?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2098186 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583/megathread-posts-here-marseys-or-other/2098186?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2097709 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583/megathread-posts-here-marseys-or-other/2097709?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2096229 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583/megathread-posts-here-marseys-or-other/2096229?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2094034 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583/megathread-posts-here-marseys-or-other/2094034?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2093551 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583/megathread-posts-here-marseys-or-other/2093551?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2087416 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583/megathread-posts-here-marseys-or-other/2087416?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2086725 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583/megathread-posts-here-marseys-or-other/2086725?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2084709 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/16583/megathread-posts-here-marseys-or-other/2084709?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=/post/18459 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459/marseycapywalking-megathread-for-bugs-and-suggestions - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_18459 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459?sort=top - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459?sort=bottom - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459?sort=old - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459?sort=controversial - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2099175 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459/marseycapywalking-megathread-for-bugs-and-suggestions/2099175?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75637/changelog-hole-improvements-follow-holes-for/2091847?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2093336 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459/marseycapywalking-megathread-for-bugs-and-suggestions/2093336?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2090949 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459/marseycapywalking-megathread-for-bugs-and-suggestions/2090949?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2091000 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459/marseycapywalking-megathread-for-bugs-and-suggestions/2091000?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2089369 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459/marseycapywalking-megathread-for-bugs-and-suggestions/2089369?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2089221 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459/marseycapywalking-megathread-for-bugs-and-suggestions/2089221?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2088542 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459/marseycapywalking-megathread-for-bugs-and-suggestions/2088542?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2088023 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459/marseycapywalking-megathread-for-bugs-and-suggestions/2088023?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2086651 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459/marseycapywalking-megathread-for-bugs-and-suggestions/2086651?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2086711 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459/marseycapywalking-megathread-for-bugs-and-suggestions/2086711?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2091665 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459/marseycapywalking-megathread-for-bugs-and-suggestions/2091665?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2091794 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/18459/marseycapywalking-megathread-for-bugs-and-suggestions/2091794?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2080052 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=/post/75878 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dp_75878 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878?sort=top - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878?sort=bottom - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878?sort=old - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878?sort=controversial - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2097292 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2097292?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2097440 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2097440?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2097510 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2097510?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2097560 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2097560?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2097768 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2097768?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2097794 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2097794?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2097830 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2097830?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/id/4284 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2097659 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2097659?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/login?redirect=%2Fvotes%3Flink%3Dc_2097668 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2097668?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2097707?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2097783?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2098316?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2098333?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2099121?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2099067?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2097681?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - - https://rdrama.net/post/75878/megathread-post-your-favourite-rdramathemed-oc/2097537?context=8 - 2022-06-10T23:42:26+00:00 - 0.64 - - -- 2.34.1 From 196964b163521d9d45c8e15de879e91ead332490 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Fri, 25 Nov 2022 21:35:13 +0200 Subject: [PATCH 015/130] fix 61a4ab4f39 --- files/templates/submission_listing.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/templates/submission_listing.html b/files/templates/submission_listing.html index a406159e6..0ddb842ef 100644 --- a/files/templates/submission_listing.html +++ b/files/templates/submission_listing.html @@ -45,7 +45,7 @@
{% endif %} -
+
-- 2.34.1 From e3e0bb8beab7613b551bac0716f2123a02e54b26 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Fri, 25 Nov 2022 21:36:09 +0200 Subject: [PATCH 016/130] remove lmbo profanity filter --- files/helpers/const.py | 1 - 1 file changed, 1 deletion(-) diff --git a/files/helpers/const.py b/files/helpers/const.py index a1f3d64d5..c0c0158ae 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -153,7 +153,6 @@ PROFANITIES = { 'fuck': 'frick', ' ass ': ' butt ', 'shitting': 'pooping', - 'lmao': 'lmbo', 'damn': 'darn', 'bastard': 'fatherless child', 'bitch': 'b-word', -- 2.34.1 From 7f72504f9a137215c65cf62a5cf48850b636a2ef Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Fri, 25 Nov 2022 21:36:37 +0200 Subject: [PATCH 017/130] make "snekchad" ping sneks --- files/helpers/const.py | 1 + 1 file changed, 1 insertion(+) diff --git a/files/helpers/const.py b/files/helpers/const.py index c0c0158ae..1617fb198 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -1397,6 +1397,7 @@ NOTIFIED_USERS = { 'snakes': SNAKES_ID, 'sneks': SNAKES_ID, 'snekky': SNAKES_ID, + 'snekchad': SNAKES_ID, 'jc': JUSTCOOL_ID, 'justcool': JUSTCOOL_ID, 'geese': GEESE_ID, -- 2.34.1 From 3cbaf7f69f6e96d1118264acbe94c6bcc897bffe Mon Sep 17 00:00:00 2001 From: justcool393 Date: Fri, 25 Nov 2022 14:11:34 -0600 Subject: [PATCH 018/130] tests: it never worked anyway --- run_tests.py | 52 ---------------------------------------------------- 1 file changed, 52 deletions(-) delete mode 100755 run_tests.py diff --git a/run_tests.py b/run_tests.py deleted file mode 100755 index 2b3ca6193..000000000 --- a/run_tests.py +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/python3 - -import subprocess -import sys - -# we want to leave the container in whatever state it currently is, so check to see if it's running -docker_inspect = subprocess.run([ - "docker", - "container", - "inspect", - "-f", "{{.State.Status}}", - "rDrama", - ], - capture_output = True, - ).stdout.decode("utf-8").strip() - -was_running = docker_inspect == "running" - -# update containers, just in case they're out of date -if was_running: - print("Updating containers . . .", flush=True) -else: - print("Starting containers . . .", flush=True) -subprocess.run([ - "docker-compose", - "up", - "--build", - "-d", - ], - check = True, - ) - -# run the test -print("Running test . . .", flush=True) -result = subprocess.run([ - "docker", - "exec", - "rDrama", - "bash", "-c", "cd service && python3 -m pytest -s" - ]) - -if not was_running: - # shut down, if we weren't running in the first place - print("Shutting down containers . . .", flush=True) - subprocess.run([ - "docker-compose", - "stop", - ], - check = True, - ) - -sys.exit(result.returncode) -- 2.34.1 From 98d53f217f83ee88daa3f1aea55010184146ac75 Mon Sep 17 00:00:00 2001 From: justcool393 Date: Fri, 25 Nov 2022 14:31:07 -0600 Subject: [PATCH 019/130] api: don't hit calc_users if this is the API sometimes we render HTML where we probably... shouldn't. in most cases this is fine, but if API clients hit it it can errenously set --- files/routes/wrappers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/files/routes/wrappers.py b/files/routes/wrappers.py index 7a979058e..caf13c5c7 100644 --- a/files/routes/wrappers.py +++ b/files/routes/wrappers.py @@ -18,6 +18,7 @@ def session_init(): session["session_id"] = secrets.token_hex(49) def calc_users(v): + if g.is_api_or_xhr: return loggedin = cache.get(f'{SITE}_loggedin') or {} loggedout = cache.get(f'{SITE}_loggedout') or {} timestamp = int(time.time()) -- 2.34.1 From 2718ab6b05095b7df6472fa7db1f0e6340b141fb Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Fri, 25 Nov 2022 22:34:53 +0200 Subject: [PATCH 020/130] fix github url in bard snappy quote --- snappy_rDrama.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/snappy_rDrama.txt b/snappy_rDrama.txt index 012bcd492..37e6d66ab 100644 --- a/snappy_rDrama.txt +++ b/snappy_rDrama.txt @@ -2993,7 +2993,7 @@ https://media.giphy.com/media/3oz8xLd9DJq2l2VFtu/giphy.webp {[para]} Rape {[para]} -Here is the Contributors listing for the github project: https://github.com/Aevann1/rDrama +Here is the Contributors listing for the github project: https://fsdfsd.net/rDrama/rDrama/activity That list shows CarpathianFlorist as a contributor. CarpathianFlorist is a Racially Motivated Violent Extremist - a White Identity Extremist - who was involved in /r/MillionDollarExtreme and its many hundreds of spinoffs and descendants. I've collected dozens of his Reddit accts. @@ -3173,4 +3173,4 @@ Normies can't understand the thrill of pinning the Weasel. Night spent chasing a {[para]} I am the “office manager” of AHS. I’ve spent the past three years keeping spreadsheets and have inboxes full of ticket closures, and have written reports characterizing the response accuracy of Reddit AEO. -Would you like to escalate and mansplain my field of expertise to me more? \ No newline at end of file +Would you like to escalate and mansplain my field of expertise to me more? -- 2.34.1 From b2210c68336fef37a7ebbb9a800caf721f038e29 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Fri, 25 Nov 2022 22:56:11 +0200 Subject: [PATCH 021/130] make me not see modmail, if its important the other jannies will tell me --- files/routes/static.py | 4 +--- files/routes/users.py | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/files/routes/static.py b/files/routes/static.py index 6c90bc49f..975b7d820 100644 --- a/files/routes/static.py +++ b/files/routes/static.py @@ -235,9 +235,7 @@ def submit_contact(v): execute_blackjack(v, new_comment, new_comment.body_html, 'modmail') new_comment.top_comment_id = new_comment.id - admins = g.db.query(User).filter(User.admin_level >= PERMS['NOTIFICATIONS_MODMAIL']) - if SITE == 'watchpeopledie.tv': - admins = admins.filter(User.id != AEVANN_ID) + admins = g.db.query(User).filter(User.admin_level >= PERMS['NOTIFICATIONS_MODMAIL'], User.id != AEVANN_ID) for admin in admins.all(): notif = Notification(comment_id=new_comment.id, user_id=admin.id) diff --git a/files/routes/users.py b/files/routes/users.py index 605cc1178..09e1373b3 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -550,9 +550,7 @@ def messagereply(v): top_comment = c.top_comment(g.db) if top_comment.sentto == MODMAIL_ID: - admins = g.db.query(User.id).filter(User.admin_level >= PERMS['NOTIFICATIONS_MODMAIL'], User.id != v.id) - if SITE == 'watchpeopledie.tv': - admins = admins.filter(User.id != AEVANN_ID) + admins = g.db.query(User.id).filter(User.admin_level >= PERMS['NOTIFICATIONS_MODMAIL'], User.id != v.id, User.id != AEVANN_ID) admins = [x[0] for x in admins.all()] -- 2.34.1 From 80d91a60d8ede7a3bf0b5c4b4a7fe08608a60cd1 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Fri, 25 Nov 2022 23:01:35 +0200 Subject: [PATCH 022/130] do this https://rdrama.life/post/125878/colorado-shooter-proves-his-idpol-credentials/3129042?context=8#context --- files/helpers/const.py | 1 + 1 file changed, 1 insertion(+) diff --git a/files/helpers/const.py b/files/helpers/const.py index 1617fb198..43cc3c0a1 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -145,6 +145,7 @@ if SITE_NAME == 'rDrama': "kys ": "keep yourself safe ", "republican": 'republiKKKan', "america": 'ameriKKKa', + "it's almost as if": "I'm a retard but", } SLURS.update(RDRAMA_SLURS) -- 2.34.1 From cc9e007581b7d7c4a76a4c7548984a4024540f6c Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Fri, 25 Nov 2022 23:33:38 +0200 Subject: [PATCH 023/130] limit polls to 10 options to prevent spam --- files/routes/comments.py | 8 ++++---- files/routes/posts.py | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/files/routes/comments.py b/files/routes/comments.py index 5dc148383..7c71fc6b6 100644 --- a/files/routes/comments.py +++ b/files/routes/comments.py @@ -132,12 +132,12 @@ def comment(v): abort(403, "You can't reply to users who have blocked you or users that you have blocked.") options = [] - for i in poll_regex.finditer(body): + for i in list(poll_regex.finditer(body))[:10]: options.append(i.group(1)) body = body.replace(i.group(0), "") choices = [] - for i in choice_regex.finditer(body): + for i in list(choice_regex.finditer(body))[:10]: choices.append(i.group(1)) body = body.replace(i.group(0), "") @@ -390,7 +390,7 @@ def edit_comment(cid, v): elif v.bird and len(body) > 140: abort(403, "You have to type less than 140 characters!") - for i in poll_regex.finditer(body): + for i in list(poll_regex.finditer(body))[:10]: body = body.replace(i.group(0), "") body_html = filter_emojis_only(i.group(1)) if len(body_html) > 500: abort(400, "Poll option too long!") @@ -401,7 +401,7 @@ def edit_comment(cid, v): ) g.db.add(option) - for i in choice_regex.finditer(body): + for i in list(choice_regex.finditer(body))[:10]: body = body.replace(i.group(0), "") body_html = filter_emojis_only(i.group(1)) if len(body_html) > 500: abort(400, "Poll option too long!") diff --git a/files/routes/posts.py b/files/routes/posts.py index a6068efbd..987eabdad 100644 --- a/files/routes/posts.py +++ b/files/routes/posts.py @@ -360,7 +360,7 @@ def edit_post(pid, v): ) g.db.add(bet) - for i in poll_regex.finditer(body): + for i in list(poll_regex.finditer(body))[:10]: body = body.replace(i.group(0), "") body_html = filter_emojis_only(i.group(1)) if len(body_html) > 500: abort(400, "Poll option too long!") @@ -371,7 +371,7 @@ def edit_post(pid, v): ) g.db.add(option) - for i in choice_regex.finditer(body): + for i in list(choice_regex.finditer(body))[:10]: body = body.replace(i.group(0), "") body_html = filter_emojis_only(i.group(1)) if len(body_html) > 500: abort(400, "Poll option too long!") @@ -754,12 +754,12 @@ def submit_post(v, sub=None): body = body.replace(i.group(0), "") options = [] - for i in poll_regex.finditer(body): + for i in list(poll_regex.finditer(body))[:10]: options.append(i.group(1)) body = body.replace(i.group(0), "") choices = [] - for i in choice_regex.finditer(body): + for i in list(choice_regex.finditer(body))[:10]: choices.append(i.group(1)) body = body.replace(i.group(0), "") -- 2.34.1 From 7e8674db6ee4ca3af7a8c90cc203c99f6df6d101 Mon Sep 17 00:00:00 2001 From: justcool393 Date: Fri, 25 Nov 2022 15:43:35 -0600 Subject: [PATCH 024/130] fix saved subscribers stuff --- files/classes/user.py | 24 +++++++++++++++++++++--- files/helpers/get.py | 14 +++++++++----- files/routes/users.py | 11 ++++++++--- 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/files/classes/user.py b/files/classes/user.py index a04966a66..4853538c5 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -873,6 +873,24 @@ class User(Base): def userblocks(self): return [x[0] for x in g.db.query(UserBlock.target_id).filter_by(user_id=self.id).all()] + def get_relationship_count(self, relationship_cls): + # TODO: deduplicate (see routes/users.py) + if relationship_cls in [SaveRelationship, Subscription]: + query = relationship_cls.submission_id + join = relationship_cls.post + cls = Submission + elif relationship_cls is CommentSaveRelationship: + query = relationship_cls.comment_id + join = relationship_cls.comment + cls = Comment + else: + raise TypeError("Relationships supported is SaveRelationship, Subscription, CommentSaveRelationship") + + query = g.db.query(query).join(join).filter(relationship_cls.user_id == self.id) + if not self.admin_level >= PERMS['POST_COMMENT_MODERATION']: + query = query.filter(cls.is_banned == False, cls.deleted_utc == 0) + return query.count() + @property @lazy def saved_idlist(self): @@ -895,17 +913,17 @@ class User(Base): @property @lazy def saved_count(self): - return g.db.query(SaveRelationship).filter_by(user_id=self.id).count() + return self.get_relationship_count(SaveRelationship) @property @lazy def saved_comment_count(self): - return g.db.query(CommentSaveRelationship).filter_by(user_id=self.id).count() + return self.get_relationship_count(CommentSaveRelationship) @property @lazy def subscribed_count(self): - return g.db.query(Subscription).filter_by(user_id=self.id).count() + return self.get_relationship_count(Subscription) @property @lazy diff --git a/files/helpers/get.py b/files/helpers/get.py index 33ec03736..a2c1d8a9b 100644 --- a/files/helpers/get.py +++ b/files/helpers/get.py @@ -2,7 +2,7 @@ from typing import Callable, Iterable, List, Optional, Union from flask import * from sqlalchemy import and_, any_, or_ -from sqlalchemy.orm import joinedload, selectinload +from sqlalchemy.orm import joinedload, selectinload, Query from files.classes import Comment, CommentVote, Hat, Sub, Submission, User, UserBlock, Vote from files.helpers.const import AUTOJANNY_ID @@ -145,7 +145,7 @@ def get_post(i:Union[str, int], v:Optional[User]=None, graceful=False) -> Option return x -def get_posts(pids:Iterable[int], v:Optional[User]=None, eager:bool=False) -> List[Submission]: +def get_posts(pids:Iterable[int], v:Optional[User]=None, eager:bool=False, extra:Optional[Callable[[Query], Query]]=None) -> List[Submission]: if not pids: return [] if v: @@ -178,6 +178,8 @@ def get_posts(pids:Iterable[int], v:Optional[User]=None, eager:bool=False) -> Li else: query = g.db.query(Submission).filter(Submission.id.in_(pids)) + if extra: query = extra(query) + if eager: query = query.options( selectinload(Submission.author).options( @@ -276,12 +278,14 @@ def add_vote_and_block_props(target:Union[Submission, Comment], v:Optional[User] target = add_block_props(target, v) return add_vote_props(target, v, vote_cls) -def get_comments(cids:Iterable[int], v:Optional[User]=None) -> List[Comment]: +def get_comments(cids:Iterable[int], v:Optional[User]=None, extra:Optional[Callable[[Query], Query]]=None) -> List[Comment]: if not cids: return [] if v: - output = get_comments_v_properties(v, True, None, Comment.id.in_(cids))[1] + output = get_comments_v_properties(v, True, None, Comment.id.in_(cids))[1] # TODO: support 'extra' for get_comments_v_properties else: - output = g.db.query(Comment).join(Comment.author).filter(User.shadowbanned == None, Comment.id.in_(cids)).all() + output = g.db.query(Comment).join(Comment.author) + if extra: output = extra(output) + output = output.filter(User.shadowbanned == None, Comment.id.in_(cids)).all() return sorted(output, key=lambda x: cids.index(x.id)) def get_comments_v_properties(v:User, include_shadowbanned=True, should_keep_func:Optional[Callable[[Comment], bool]]=None, *criterion): diff --git a/files/routes/users.py b/files/routes/users.py index 09e1373b3..086ee9e25 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -935,7 +935,6 @@ def user_profile_name(username): return redirect(x.profile_url) def get_saves_and_subscribes(v, template, relationship_cls, page:int, standalone=False): - PAGE_SIZE = 25 if relationship_cls in [SaveRelationship, Subscription]: query = relationship_cls.submission_id join = relationship_cls.post @@ -949,12 +948,18 @@ def get_saves_and_subscribes(v, template, relationship_cls, page:int, standalone ids = [x[0] for x in g.db.query(query).join(join).filter(relationship_cls.user_id == v.id).order_by(cls.created_utc.desc()).offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE + 1).all()] next_exists = len(ids) > PAGE_SIZE ids = ids[:PAGE_SIZE] + + extra = None + if not v.admin_level >= PERMS['POST_COMMENT_MODERATION']: + extra = lambda q:q.filter(cls.is_banned == False, cls.deleted_utc == 0) + if cls is Submission: - listing = get_posts(ids, v=v, eager=True) + listing = get_posts(ids, v=v, eager=True, extra=extra) elif cls is Comment: - listing = get_comments(ids, v=v) + listing = get_comments(ids, v=v, extra=extra) else: raise TypeError("Only supports Submissions and Comments. This is probably the result of a bug with *this* function") + if v.client: return {"data": [x.json(g.db) for x in listing]} return render_template(template, u=v, v=v, listing=listing, page=page, next_exists=next_exists, standalone=standalone) -- 2.34.1 From e5f54243ea7d1b01390c649e53fe53bef55b3c1f Mon Sep 17 00:00:00 2001 From: justcool393 Date: Fri, 25 Nov 2022 16:12:25 -0600 Subject: [PATCH 025/130] polls: constantify max poll options --- files/helpers/const.py | 1 + files/routes/comments.py | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/files/helpers/const.py b/files/helpers/const.py index 43cc3c0a1..134f2b7ea 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -436,6 +436,7 @@ MODMAIL_ID = 2 POLL_THREAD = 0 POLL_BET_COINS = 200 +POLL_MAX_OPTIONS = 10 WELCOME_MSG = f"Welcome to {SITE_NAME}!" LOTTERY_TICKET_COST = 12 diff --git a/files/routes/comments.py b/files/routes/comments.py index 7c71fc6b6..e6766f93b 100644 --- a/files/routes/comments.py +++ b/files/routes/comments.py @@ -132,12 +132,12 @@ def comment(v): abort(403, "You can't reply to users who have blocked you or users that you have blocked.") options = [] - for i in list(poll_regex.finditer(body))[:10]: + for i in list(poll_regex.finditer(body))[:POLL_MAX_OPTIONS]: options.append(i.group(1)) body = body.replace(i.group(0), "") choices = [] - for i in list(choice_regex.finditer(body))[:10]: + for i in list(choice_regex.finditer(body))[:POLL_MAX_OPTIONS]: choices.append(i.group(1)) body = body.replace(i.group(0), "") @@ -390,7 +390,7 @@ def edit_comment(cid, v): elif v.bird and len(body) > 140: abort(403, "You have to type less than 140 characters!") - for i in list(poll_regex.finditer(body))[:10]: + for i in list(poll_regex.finditer(body))[:POLL_MAX_OPTIONS]: body = body.replace(i.group(0), "") body_html = filter_emojis_only(i.group(1)) if len(body_html) > 500: abort(400, "Poll option too long!") @@ -401,7 +401,7 @@ def edit_comment(cid, v): ) g.db.add(option) - for i in list(choice_regex.finditer(body))[:10]: + for i in list(choice_regex.finditer(body))[:POLL_MAX_OPTIONS]: body = body.replace(i.group(0), "") body_html = filter_emojis_only(i.group(1)) if len(body_html) > 500: abort(400, "Poll option too long!") -- 2.34.1 From 5aac54f0dcf1b9366a4ed9a3bef4c9c643dc4cee Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Fri, 25 Nov 2022 23:50:21 +0200 Subject: [PATCH 026/130] remove annoying excalmation sign in notifs --- files/helpers/const.py | 2 +- files/routes/admin.py | 8 ++++---- files/routes/comments.py | 6 +++--- files/routes/login.py | 2 +- files/routes/subs.py | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/files/helpers/const.py b/files/helpers/const.py index 134f2b7ea..2d19150e8 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -558,7 +558,7 @@ elif SITE == 'pcmemes.net': AEVANN_ID = 1 SNAKES_ID = 2279 - WELCOME_MSG = "Welcome to pcmemes.net! Don't forget to turn off the slur filter [here](/settings/content#slurreplacer)!" + WELCOME_MSG = "Welcome to pcmemes.net! Don't forget to turn off the slur filter [here](/settings/content#slurreplacer)" LOTTERY_TICKET_COST = 12 LOTTERY_SINK_RATE = -8 diff --git a/files/routes/admin.py b/files/routes/admin.py index 3be5fb03e..047e10a65 100644 --- a/files/routes/admin.py +++ b/files/routes/admin.py @@ -1262,7 +1262,7 @@ def sticky_post(post_id, v): pin_time = 'for 1 hour' code = 200 if v.id != post.author_id: - send_repeatable_notification(post.author_id, f"@{v.username} (Admin) has pinned [{post.title}](/post/{post_id})!") + send_repeatable_notification(post.author_id, f"@{v.username} (Admin) has pinned [{post.title}](/post/{post_id})") else: if pins >= PIN_LIMIT + 1: abort(403, f"Can't exceed {PIN_LIMIT} pinned posts limit!") @@ -1307,7 +1307,7 @@ def unsticky_post(post_id, v): g.db.add(ma) if v.id != post.author_id: - send_repeatable_notification(post.author_id, f"@{v.username} (Admin) has unpinned [{post.title}](/post/{post_id})!") + send_repeatable_notification(post.author_id, f"@{v.username} (Admin) has unpinned [{post.title}](/post/{post_id})") cache.delete_memoized(frontlist) return {"message": "Post unpinned!"} @@ -1329,7 +1329,7 @@ def sticky_comment(cid, v): g.db.add(ma) if v.id != comment.author_id: - message = f"@{v.username} (Admin) has pinned your [comment]({comment.shortlink})!" + message = f"@{v.username} (Admin) has pinned your [comment]({comment.shortlink})" send_repeatable_notification(comment.author_id, message) return {"message": "Comment pinned!"} @@ -1354,7 +1354,7 @@ def unsticky_comment(cid, v): g.db.add(ma) if v.id != comment.author_id: - message = f"@{v.username} (Admin) has unpinned your [comment]({comment.shortlink})!" + message = f"@{v.username} (Admin) has unpinned your [comment]({comment.shortlink})" send_repeatable_notification(comment.author_id, message) return {"message": "Comment unpinned!"} diff --git a/files/routes/comments.py b/files/routes/comments.py index e6766f93b..a7ced47b4 100644 --- a/files/routes/comments.py +++ b/files/routes/comments.py @@ -514,8 +514,8 @@ def pin_comment(cid, v): g.db.add(comment) if v.id != comment.author_id: - if comment.post.ghost: message = f"OP has pinned your [comment]({comment.shortlink})!" - else: message = f"@{v.username} (OP) has pinned your [comment]({comment.shortlink})!" + if comment.post.ghost: message = f"OP has pinned your [comment]({comment.shortlink})" + else: message = f"@{v.username} (OP) has pinned your [comment]({comment.shortlink})" send_repeatable_notification(comment.author_id, message) return {"message": "Comment pinned!"} @@ -537,7 +537,7 @@ def unpin_comment(cid, v): g.db.add(comment) if v.id != comment.author_id: - message = f"@{v.username} (OP) has unpinned your [comment]({comment.shortlink})!" + message = f"@{v.username} (OP) has unpinned your [comment]({comment.shortlink})" send_repeatable_notification(comment.author_id, message) return {"message": "Comment unpinned!"} diff --git a/files/routes/login.py b/files/routes/login.py index 1b368e041..90eee9ee7 100644 --- a/files/routes/login.py +++ b/files/routes/login.py @@ -113,7 +113,7 @@ def login_post(): def log_failed_admin_login_attempt(account:User, type:str): if not account or account.admin_level < PERMS['SITE_WARN_ON_INVALID_AUTH']: return ip = get_CF() - print(f"Admin user from {ip} failed to login to account @{account.user_name} (invalid {type})!") + print(f"Admin user from {ip} failed to login to account @{account.user_name} (invalid {type})") try: with open("/admin_failed_logins", "a+", encoding="utf-8") as f: t = str(time.strftime("%d/%B/%Y %H:%M:%S UTC", time.gmtime(time.time()))) diff --git a/files/routes/subs.py b/files/routes/subs.py index 55c5348b4..5f4a74e26 100644 --- a/files/routes/subs.py +++ b/files/routes/subs.py @@ -665,7 +665,7 @@ def mod_pin(cid, v): g.db.add(ma) if v.id != comment.author_id: - message = f"@{v.username} (/h/{comment.post.sub} Mod) has pinned your [comment]({comment.shortlink})!" + message = f"@{v.username} (/h/{comment.post.sub} Mod) has pinned your [comment]({comment.shortlink})" send_repeatable_notification(comment.author_id, message) return {"message": "Comment pinned!"} @@ -691,7 +691,7 @@ def mod_unpin(cid, v): g.db.add(ma) if v.id != comment.author_id: - message = f"@{v.username} (/h/{comment.post.sub} Mod) has unpinned your [comment]({comment.shortlink})!" + message = f"@{v.username} (/h/{comment.post.sub} Mod) has unpinned your [comment]({comment.shortlink})" send_repeatable_notification(comment.author_id, message) return {"message": "Comment unpinned!"} -- 2.34.1 From e728ec922bef9356b2160d6168d22fcfe18bdb60 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 01:25:15 +0200 Subject: [PATCH 027/130] dude consistency lmao --- files/assets/js/core.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/files/assets/js/core.js b/files/assets/js/core.js index 228fbaa0b..5f8d31533 100644 --- a/files/assets/js/core.js +++ b/files/assets/js/core.js @@ -324,13 +324,12 @@ function formatDate(d) { const timestamps = document.querySelectorAll('[data-time]'); for (const e of timestamps) { - const date = new Date(e.dataset.time*1000); - e.innerHTML = formatDate(date); + e.innerHTML = formatDate(new Date(e.dataset.time*1000)); }; function timestamp(str, ti) { - const date = new Date(ti*1000); - document.getElementById(str).setAttribute("data-bs-original-title", formatDate(date)); + const date = formatDate(new Date(ti*1000)); + document.getElementById(str).setAttribute("data-bs-original-title", date); }; function areyousure(t) { -- 2.34.1 From 191cee7293cd952ca24d30977a9f7fc97c6884ed Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 01:37:04 +0200 Subject: [PATCH 028/130] move ratelimit_user after auth --- files/routes/comments.py | 4 ++-- files/routes/posts.py | 4 ++-- files/routes/settings.py | 6 +++--- files/routes/static.py | 2 +- files/routes/subs.py | 8 ++++---- files/routes/users.py | 8 +++----- 6 files changed, 15 insertions(+), 17 deletions(-) diff --git a/files/routes/comments.py b/files/routes/comments.py index a7ced47b4..2503431fd 100644 --- a/files/routes/comments.py +++ b/files/routes/comments.py @@ -81,8 +81,8 @@ def post_pid_comment_cid(cid, pid=None, anything=None, v=None, sub=None): @app.post("/comment") @limiter.limit("1/second;20/minute;200/hour;1000/day") -@ratelimit_user("1/second;20/minute;200/hour;1000/day") @auth_required +@ratelimit_user("1/second;20/minute;200/hour;1000/day") def comment(v): if v.is_suspended: abort(403, "You can't perform this action while banned.") @@ -368,8 +368,8 @@ def comment(v): @app.post("/edit_comment/") @limiter.limit("1/second;10/minute;100/hour;200/day") -@ratelimit_user("1/second;10/minute;100/hour;200/day") @is_not_permabanned +@ratelimit_user("1/second;10/minute;100/hour;200/day") def edit_comment(cid, v): c = get_comment(cid, v=v) diff --git a/files/routes/posts.py b/files/routes/posts.py index 987eabdad..52f331929 100644 --- a/files/routes/posts.py +++ b/files/routes/posts.py @@ -310,8 +310,8 @@ def morecomments(v, cid): @app.post("/edit_post/") @limiter.limit("1/second;10/minute;100/hour;200/day") -@ratelimit_user("1/second;10/minute;100/hour;200/day") @is_not_permabanned +@ratelimit_user("1/second;10/minute;100/hour;200/day") def edit_post(pid, v): p = get_post(pid) if v.id != p.author_id and v.admin_level < PERMS['POST_EDITING']: @@ -1072,8 +1072,8 @@ extensions = IMAGE_FORMATS + VIDEO_FORMATS + AUDIO_FORMATS @app.get("/submit/title") @limiter.limit("3/minute") -@ratelimit_user("3/minute") @auth_required +@ratelimit_user("3/minute") def get_post_title(v): POST_TITLE_TIMEOUT = 5 url = request.values.get("url") diff --git a/files/routes/settings.py b/files/routes/settings.py index cfe3f02fd..ff4045db7 100644 --- a/files/routes/settings.py +++ b/files/routes/settings.py @@ -581,8 +581,8 @@ def settings_security(v): @app.post("/settings/block") @limiter.limit("1/second;20/day") -@ratelimit_user("1/second;20/day") @auth_required +@ratelimit_user("1/second;20/day") def settings_block_user(v): user = get_user(request.values.get("username"), graceful=True) if not user: abort(404, "This user doesn't exist.") @@ -671,8 +671,8 @@ def settings_name_change(v): @app.post("/settings/song_change_mp3") @feature_required('USERS_PROFILE_SONG') @limiter.limit("3/second;10/day") -@ratelimit_user("3/second;10/day") @auth_required +@ratelimit_user("3/second;10/day") def settings_song_change_mp3(v): file = request.files['file'] if file.content_type != 'audio/mpeg': @@ -699,8 +699,8 @@ def settings_song_change_mp3(v): @app.post("/settings/song_change") @feature_required('USERS_PROFILE_SONG') @limiter.limit("3/second;10/day") -@ratelimit_user("3/second;10/day") @auth_required +@ratelimit_user("3/second;10/day") def settings_song_change(v): song=request.values.get("song").strip() diff --git a/files/routes/static.py b/files/routes/static.py index 975b7d820..be1e81ce5 100644 --- a/files/routes/static.py +++ b/files/routes/static.py @@ -208,8 +208,8 @@ def contact(v): @app.post("/send_admin") @limiter.limit("1/second;1/2 minutes;10/day") -@ratelimit_user("1/second;1/2 minutes;10/day") @auth_required +@ratelimit_user("1/second;1/2 minutes;10/day") def submit_contact(v): body = request.values.get("message") if not body: abort(400) diff --git a/files/routes/subs.py b/files/routes/subs.py index 5f4a74e26..815f09879 100644 --- a/files/routes/subs.py +++ b/files/routes/subs.py @@ -232,8 +232,8 @@ def sub_followers(v, sub): @app.post("/h//add_mod") @limiter.limit("1/second;30/day") -@ratelimit_user("1/second;30/day") @is_not_permabanned +@ratelimit_user("1/second;30/day") def add_mod(v, sub): if SITE_NAME == 'WPD': abort(403) sub = get_sub_by_name(sub).name @@ -457,8 +457,8 @@ def get_sub_css(sub): @app.post("/h//banner") @limiter.limit("1/second;10/day") -@ratelimit_user("1/second;10/day") @is_not_permabanned +@ratelimit_user("1/second;10/day") def sub_banner(v, sub): if g.is_tor: abort(403, "Image uploads are not allowed through TOR.") @@ -490,8 +490,8 @@ def sub_banner(v, sub): @app.post("/h//sidebar_image") @limiter.limit("1/second;10/day") -@ratelimit_user("1/second;10/day") @is_not_permabanned +@ratelimit_user("1/second;10/day") def sub_sidebar(v, sub): if g.is_tor: abort(403, "Image uploads are not allowed through TOR.") @@ -522,8 +522,8 @@ def sub_sidebar(v, sub): @app.post("/h//marsey_image") @limiter.limit("1/second;10/day") -@ratelimit_user("1/second;10/day") @is_not_permabanned +@ratelimit_user("1/second;10/day") def sub_marsey(v, sub): if g.is_tor: abort(403, "Image uploads are not allowed through TOR.") diff --git a/files/routes/users.py b/files/routes/users.py index 086ee9e25..3565a5b01 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -254,11 +254,9 @@ def downvoting(v, username): @app.post("/@/suicide") @feature_required('USERS_SUICIDE') @limiter.limit("1/second;5/day") -@ratelimit_user("1/second;5/day") @auth_required +@ratelimit_user("1/second;5/day") def suicide(v, username): - - 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: @@ -414,8 +412,8 @@ def unsubscribe(v, post_id): @app.post("/@/message") @limiter.limit("1/second;10/minute;20/hour;50/day") -@ratelimit_user("1/second;10/minute;20/hour;50/day") @is_not_permabanned +@ratelimit_user("1/second;10/minute;20/hour;50/day") def message2(v, username): user = get_user(username, v=v, include_blocks=True, include_shadowbanned=False) @@ -479,8 +477,8 @@ def message2(v, username): @app.post("/reply") @limiter.limit("1/second;6/minute;50/hour;200/day") -@ratelimit_user("1/second;6/minute;50/hour;200/day") @auth_required +@ratelimit_user("1/second;6/minute;50/hour;200/day") def messagereply(v): body = sanitize_raw_body(request.values.get("body"), False) if not body and not request.files.get("file"): abort(400, "Message is empty!") -- 2.34.1 From 88248b7a121ea7a1326fd3ed8fa16cecedb4dde9 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 01:39:37 +0200 Subject: [PATCH 029/130] add dailystormer.in to BOOSTED_SITES --- files/helpers/const.py | 1 + 1 file changed, 1 insertion(+) diff --git a/files/helpers/const.py b/files/helpers/const.py index 2d19150e8..7815cd87a 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -1659,6 +1659,7 @@ if SITE_NAME == 'rDrama': 'backloggd.com', 'tildes.net', 'blacktwitterapp.com', + 'dailystormer.in', #fediverse 'rdrama.cc', -- 2.34.1 From 2d77b1af693298283602f5423f6df8db44da0ea0 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 01:43:23 +0200 Subject: [PATCH 030/130] add quad to BOOSTED_USERS --- files/helpers/const.py | 1 + 1 file changed, 1 insertion(+) diff --git a/files/helpers/const.py b/files/helpers/const.py index 7815cd87a..cca1b075b 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -1690,6 +1690,7 @@ if SITE_NAME == 'rDrama': SNAKES_ID, JUSTCOOL_ID, 2008, #TransGirlTradWife + 29, #QuadNarca } BOOSTED_USERS_EXCLUDED = {8768, 5214, 12719, 3402} -- 2.34.1 From e18fdbf5f7ea6b81552571e0b96805476f79e4e9 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 01:49:21 +0200 Subject: [PATCH 031/130] add joan to BOOSTED_USERS --- files/helpers/const.py | 1 + 1 file changed, 1 insertion(+) diff --git a/files/helpers/const.py b/files/helpers/const.py index cca1b075b..6cc91acca 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -1691,6 +1691,7 @@ if SITE_NAME == 'rDrama': JUSTCOOL_ID, 2008, #TransGirlTradWife 29, #QuadNarca + JOAN_ID, } BOOSTED_USERS_EXCLUDED = {8768, 5214, 12719, 3402} -- 2.34.1 From 32dc989ebb3c82a61f2c86df09c21eb63b16399d Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 01:50:25 +0200 Subject: [PATCH 032/130] make shit award not give DC --- files/routes/awards.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/routes/awards.py b/files/routes/awards.py index 6b3a18d9f..0aad201cb 100644 --- a/files/routes/awards.py +++ b/files/routes/awards.py @@ -198,7 +198,7 @@ def award_thing(v, thing_type, id): msg = f"{safe_username} is under the effect of a deflector award; your {AWARDS[kind]['title']} Award has been deflected back to you :marseytroll:" send_repeatable_notification(v.id, msg) author = v - elif kind != 'spider': + elif kind not in ('spider', 'shit'): awarded_coins = int(AWARDS[kind]['price'] * COSMETIC_AWARD_COIN_AWARD_PCT) if AWARDS[kind]['cosmetic'] else 0 if AWARDS[kind]['cosmetic']: author.pay_account('coins', awarded_coins) -- 2.34.1 From 8e94cf869d82d1f30c1b0ea09feae4bd4f43b7cc Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 01:52:39 +0200 Subject: [PATCH 033/130] fix prev commit lol --- files/routes/awards.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/files/routes/awards.py b/files/routes/awards.py index 0aad201cb..05a33bcdd 100644 --- a/files/routes/awards.py +++ b/files/routes/awards.py @@ -198,9 +198,9 @@ def award_thing(v, thing_type, id): msg = f"{safe_username} is under the effect of a deflector award; your {AWARDS[kind]['title']} Award has been deflected back to you :marseytroll:" send_repeatable_notification(v.id, msg) author = v - elif kind not in ('spider', 'shit'): + elif kind != 'spider': awarded_coins = int(AWARDS[kind]['price'] * COSMETIC_AWARD_COIN_AWARD_PCT) if AWARDS[kind]['cosmetic'] else 0 - if AWARDS[kind]['cosmetic']: + if AWARDS[kind]['cosmetic'] and kind != 'shit': author.pay_account('coins', awarded_coins) msg = f"@{v.username} has given your [{thing_type}]({thing.shortlink}) the {AWARDS[kind]['title']} Award" -- 2.34.1 From 8ce673686ce235e273bb49d77ba596bef495a789 Mon Sep 17 00:00:00 2001 From: justcool393 Date: Fri, 25 Nov 2022 19:15:39 -0600 Subject: [PATCH 034/130] admin: remove meme admin vestige --- files/helpers/const.py | 1 - files/routes/static.py | 6 +----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/files/helpers/const.py b/files/helpers/const.py index 6cc91acca..831a95db4 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -253,7 +253,6 @@ PERMS = { # Minimum admin_level to perform action. 'VIEW_PRIVATE_PROFILES': 2, 'VIEW_ALTS': 2, 'VIEW_PROFILE_VIEWS': 2, - 'VIEW_SORTED_ADMIN_LIST': 3, 'VIEW_ACTIVE_USERS': 2, 'VIEW_ALL_USERS': 2, 'VIEW_ALT_VOTES': 2, diff --git a/files/routes/static.py b/files/routes/static.py index be1e81ce5..1601ba3e7 100644 --- a/files/routes/static.py +++ b/files/routes/static.py @@ -116,13 +116,9 @@ def patrons(v): @app.get("/badmins") @auth_required def admins(v): - if v.admin_level >= PERMS['VIEW_SORTED_ADMIN_LIST']: - admins = g.db.query(User).filter(User.admin_level>1).order_by(User.truescore.desc()).all() - admins += g.db.query(User).filter(User.admin_level==1).order_by(User.truescore.desc()).all() - else: admins = g.db.query(User).filter(User.admin_level>0).order_by(User.truescore.desc()).all() + admins = g.db.query(User).filter(User.admin_level >= PERMS['ADMIN_MOP_VISIBLE']).order_by(User.truescore.desc()).all() return render_template("admins.html", v=v, admins=admins) - @app.get("/log") @app.get("/modlog") @auth_required -- 2.34.1 From 700e91986eebc097be7d4c28d6e4495577cae3a3 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 03:19:22 +0200 Subject: [PATCH 035/130] add "negroid" to slur filter --- files/helpers/const.py | 1 + 1 file changed, 1 insertion(+) diff --git a/files/helpers/const.py b/files/helpers/const.py index 831a95db4..c8eac3f19 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -95,6 +95,7 @@ AJ_REPLACEMENTS = { SLURS = { "nigger": "BIPOC", + "negroid": "BIPOC", "niglet": 'BIPOClet', "negress": "BIPOC woman", 'nigga': 'neighbor', -- 2.34.1 From ea054e926eb27989e9ce5c388395521b0b0fa088 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 03:31:17 +0200 Subject: [PATCH 036/130] sneed --- files/helpers/const.py | 2 -- files/routes/votes.py | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/files/helpers/const.py b/files/helpers/const.py index c8eac3f19..1b9b3c640 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -1694,8 +1694,6 @@ if SITE_NAME == 'rDrama': JOAN_ID, } - BOOSTED_USERS_EXCLUDED = {8768, 5214, 12719, 3402} - IMAGE_FORMATS = ['png','gif','jpg','jpeg','webp'] VIDEO_FORMATS = ['mp4','webm','mov','avi','mkv','flv','m4v','3gp'] AUDIO_FORMATS = ['mp3','wav','ogg','aac','m4a','flac'] diff --git a/files/routes/votes.py b/files/routes/votes.py index 5d6d21e4e..b82ba0ded 100644 --- a/files/routes/votes.py +++ b/files/routes/votes.py @@ -150,7 +150,7 @@ def vote_post_comment(target_id, new, v, cls, vote_cls): elif cls == Submission: if target.domain.endswith('.win') or (target.domain in BOOSTED_SITES and not target.url.startswith('/')) or target.sub in BOOSTED_HOLES: mul = 2 - elif not target.sub and target.body_html and target.author.id not in BOOSTED_USERS_EXCLUDED: + elif not target.sub and target.body_html and target.author.id not in {8768, 5214, 12719, 3402}: x = target.body_html.count('" target="_blank" rel="nofollow noopener">') x += target.body_html.count('") - - -def test_signup(): - client = app.test_client() - with client: # this keeps the session between requests, which we need - signup_get_response = client.get("/signup") - assert signup_get_response.status_code == 200 - soup = BeautifulSoup(signup_get_response.text, 'html.parser') - # these hidden input values seem to be used for anti-bot purposes and need to be submitted - formkey = next(tag for tag in soup.find_all("input") if tag.get("name") == "formkey").get("value") - form_timestamp = next(tag for tag in soup.find_all("input") if tag.get("name") == "now").get("value") - - sleep(5) # too-fast submissions are rejected (bot check?) - username = "testuser" + str(round(time())) - signup_post_response = client.post("/signup", data={ - "username": username, - "password": "password", - "password_confirm": "password", - "email": "", - "formkey": formkey, - "now": form_timestamp - }) - print(f"Signing up as {username}", flush=True) - assert signup_post_response.status_code == 302 - assert "error" not in signup_post_response.location - - # we should now be logged in and able to post diff --git a/requirements.txt b/requirements.txt index 258d80ac3..ad4a75c58 100644 --- a/requirements.txt +++ b/requirements.txt @@ -28,7 +28,6 @@ tldextract user-agents psycopg2-binary pusher_push_notifications -pytest youtube-dl yattag webptools -- 2.34.1 From 9f77cf0c9165943b044c774392ca1c70d029135e Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 03:45:20 +0200 Subject: [PATCH 038/130] remove SITE url from badge urls to make them relative in the event of a future domain change --- files/routes/admin.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/files/routes/admin.py b/files/routes/admin.py index 047e10a65..7d5c45b1b 100644 --- a/files/routes/admin.py +++ b/files/routes/admin.py @@ -546,9 +546,11 @@ def badge_grant_post(v): if desc: new_badge.description = desc url = request.values.get("url") - if '\\' in url: abort(400) - - if url: new_badge.url = url + if url: + if '\\' in url: abort(400) + if url.startswith(SITE_FULL): + url = url.split(SITE_FULL, 1)[1] + new_badge.url = url g.db.add(new_badge) g.db.flush() -- 2.34.1 From f0896d7ecded6db61ac011ed5a747d33c233a45d Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 03:50:21 +0200 Subject: [PATCH 039/130] stop centering media in submission_listing.html and make it consistent with submission.html --- files/templates/submission_listing.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/files/templates/submission_listing.html b/files/templates/submission_listing.html index 0ddb842ef..5bcc18cb7 100644 --- a/files/templates/submission_listing.html +++ b/files/templates/submission_listing.html @@ -245,17 +245,17 @@ {% endif %} {% if p.is_image and not p.over_18 and ((v and v.cardview) or (not v and CARD_VIEW)) %} -
+ {% elif p.is_video %} -
+
{% elif p.is_audio %} -
+
{% elif p.is_youtube %} -- 2.34.1 From 34c82853a41acc9685659063bcfc0bcbee2729ce Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 03:56:04 +0200 Subject: [PATCH 040/130] since lawlz got demopped, make his automatic mod actions be executed by autojanny instead --- files/helpers/actions.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/files/helpers/actions.py b/files/helpers/actions.py index 6bc781c2e..092fab7bf 100644 --- a/files/helpers/actions.py +++ b/files/helpers/actions.py @@ -457,18 +457,18 @@ def execute_lawlz_actions(v:User, p:Submission): pin_time = 'for 1 day' ma_1=ModAction( kind="pin_post", - user_id=v.id, + user_id=AUTOJANNY_ID, target_submission_id=p.id, _note=pin_time ) ma_2=ModAction( kind="distinguish_post", - user_id=v.id, + user_id=AUTOJANNY_ID, target_submission_id=p.id ) ma_3=ModAction( kind="flair_post", - user_id=v.id, + user_id=AUTOJANNY_ID, target_submission_id=p.id, _note=f'"{p.flair}"' ) -- 2.34.1 From eafa7688f12455565f098b22d27ca4f8018e2151 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 03:59:53 +0200 Subject: [PATCH 041/130] dont hide hats overflow in chat --- chat/src/features/chat/ChatMessage.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chat/src/features/chat/ChatMessage.css b/chat/src/features/chat/ChatMessage.css index 13b1be018..d338ad70f 100644 --- a/chat/src/features/chat/ChatMessage.css +++ b/chat/src/features/chat/ChatMessage.css @@ -1,7 +1,6 @@ .ChatMessage { position: relative; padding-right: 1.5rem; - overflow: hidden; max-height: 300px; } @@ -39,6 +38,7 @@ align-items: center; justify-content: space-between; padding-left: 30px; + overflow: hidden; } .ChatMessage-content { -- 2.34.1 From 5d995a933f8587bbbcb75414f1d67b7adf9d5448 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 04:02:41 +0200 Subject: [PATCH 042/130] fix 500 error --- files/routes/wrappers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/files/routes/wrappers.py b/files/routes/wrappers.py index caf13c5c7..7a979058e 100644 --- a/files/routes/wrappers.py +++ b/files/routes/wrappers.py @@ -18,7 +18,6 @@ def session_init(): session["session_id"] = secrets.token_hex(49) def calc_users(v): - if g.is_api_or_xhr: return loggedin = cache.get(f'{SITE}_loggedin') or {} loggedout = cache.get(f'{SITE}_loggedout') or {} timestamp = int(time.time()) -- 2.34.1 From 47df4e6c8055662b543afdbc5de3128f10a9d207 Mon Sep 17 00:00:00 2001 From: justcool393 Date: Fri, 25 Nov 2022 20:03:53 -0600 Subject: [PATCH 043/130] ranking: be site specific when boosting users or excluding users from boosts otherwise we may unintentionally rank for the wrong users (since we're using literal IDs) --- files/helpers/const.py | 54 +++++++++++++++++++++++------------------- files/routes/votes.py | 2 +- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/files/helpers/const.py b/files/helpers/const.py index 1b9b3c640..a5d114a26 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -458,7 +458,8 @@ MAX_VIDEO_SIZE_MB = 32 MAX_VIDEO_SIZE_MB_PATRON = 64 MAX_IMAGE_CONVERSION_TIMEOUT = 15 # seconds -ANTISPAM_BYPASS_IDS = () +ANTISPAM_BYPASS_IDS = set() +BOOSTED_USERS_EXCLUDED = set() PAGE_SIZE = 25 LEADERBOARD_LIMIT = PAGE_SIZE @@ -527,7 +528,34 @@ if SITE == 'rdrama.net': GEESE_ID = 1710 BLACKJACKBTZ_ID = 12732 - ANTISPAM_BYPASS_IDS = (1703, 13427) + ANTISPAM_BYPASS_IDS = {1703, 13427} + + BOOSTED_HOLES = { + 'furry', + 'femboy', + 'anime', + 'gaybros', + 'againsthateholes', + 'masterbaiters', + 'changelog', + } + + BOOSTED_USERS = { + IMPASSIONATA_ID, + PIZZASHILL_ID, + SNAKES_ID, + JUSTCOOL_ID, + 2008, #TransGirlTradWife + 29, #QuadNarca + JOAN_ID, + } + + BOOSTED_USERS_EXCLUDED = { + 8768, + 3402, + 5214, + 12719 + } GIFT_NOTIF_ID = CARP_ID @@ -1416,9 +1444,7 @@ NOTIFIED_USERS = { } FORTUNE_REPLIES = ('Your fortune: Allah Wills It','Your fortune: Inshallah, Only Good Things Shall Come To Pass','Your fortune: Allah Smiles At You This Day','Your fortune: Your Bussy Is In For A Blasting','Your fortune: You Will Be Propositioned By A High-Tier Twink','Your fortune: Repent, You Have Displeased Allah And His Vengeance Is Nigh','Your fortune: Reply Hazy, Try Again','Your fortune: lmao you just lost 100 coins','Your fortune: Yikes 😬','Your fortune: You Will Be Blessed With Many Black Bulls','Your fortune: NEETmax, The Day Is Lost If You Venture Outside','Your fortune: A Taste Of Jannah Awaits You Today','Your fortune: Watch Your Back','Your fortune: Outlook good','Your fortune: Godly Luck','Your fortune: Good Luck','Your fortune: Bad Luck','Your fortune: Good news will come to you by mail','Your fortune: Very Bad Luck','Your fortune: キタ━━━━━━(゚∀゚)━━━━━━ !!!!','Your fortune: Better not tell you now','Your fortune: You will meet a dark handsome stranger','Your fortune: ( ´_ゝ`)フーン','Your fortune: Excellent Luck','Your fortune: Average Luck') - FACTCHECK_REPLIES = ('Factcheck: This claim has been confirmed as correct by experts. ','Factcheck: This claim has been classified as misogynistic.','Factcheck: This claim is currently being debunked.','Factcheck: This claim is 100% true.','Factcheck: This claim hurts trans lives.','Factcheck: [REDACTED].','Factcheck: This claim is both true and false.','Factcheck: You really believe that shit? Lmao dumbass nigga 🤣','Factcheck: None of this is real.','Factcheck: Yes.','Factcheck: This claim has not been approved by experts.','Factcheck: This claim is a gross exageration of reality.','Factcheck: WARNING! THIS CLAIM HAS BEEN CLASSIFIED AS DANGEROUS. PLEASE REMAIN STILL, AN AGENT WILL COME TO MEET YOU SHORTLY.') - EIGHTBALL_REPLIES = ('The 8-Ball Says: It is certain.', 'The 8-Ball Says: It is decidedly so.', 'The 8-Ball Says: Without a doubt.', 'The 8-Ball Says: Yes definitely.', 'The 8-Ball Says: You may rely on it.', 'The 8-Ball Says: As I see it, yes.', 'The 8-Ball Says: Most likely.', 'The 8-Ball Says: Outlook good.', 'The 8-Ball Says: Yes.', 'The 8-Ball Says: Signs point to yes.', 'The 8-Ball Says: Reply hazy, try again.', 'The 8-Ball Says: Ask again later.', 'The 8-Ball Says: Better not tell you now.', 'The 8-Ball Says: Cannot predict now.', 'The 8-Ball Says: Concentrate and ask again.', 'The 8-Ball Says: Don\'t count on it.', 'The 8-Ball Says: My reply is no.', 'The 8-Ball Says: My sources say no.', 'The 8-Ball Says: Outlook not so good.', 'The 8-Ball Says: Very doubtful.') REDDIT_NOTIFS_SITE = set() @@ -1674,26 +1700,6 @@ if SITE_NAME == 'rDrama': 'seal.cafe', } - BOOSTED_HOLES = { - 'furry', - 'femboy', - 'anime', - 'gaybros', - 'againsthateholes', - 'masterbaiters', - 'changelog', - } - - BOOSTED_USERS = { - IMPASSIONATA_ID, - PIZZASHILL_ID, - SNAKES_ID, - JUSTCOOL_ID, - 2008, #TransGirlTradWife - 29, #QuadNarca - JOAN_ID, - } - IMAGE_FORMATS = ['png','gif','jpg','jpeg','webp'] VIDEO_FORMATS = ['mp4','webm','mov','avi','mkv','flv','m4v','3gp'] AUDIO_FORMATS = ['mp3','wav','ogg','aac','m4a','flac'] diff --git a/files/routes/votes.py b/files/routes/votes.py index b82ba0ded..5d6d21e4e 100644 --- a/files/routes/votes.py +++ b/files/routes/votes.py @@ -150,7 +150,7 @@ def vote_post_comment(target_id, new, v, cls, vote_cls): elif cls == Submission: if target.domain.endswith('.win') or (target.domain in BOOSTED_SITES and not target.url.startswith('/')) or target.sub in BOOSTED_HOLES: mul = 2 - elif not target.sub and target.body_html and target.author.id not in {8768, 5214, 12719, 3402}: + elif not target.sub and target.body_html and target.author.id not in BOOSTED_USERS_EXCLUDED: x = target.body_html.count('" target="_blank" rel="nofollow noopener">') x += target.body_html.count(' Date: Fri, 25 Nov 2022 20:22:55 -0600 Subject: [PATCH 045/130] don't want to crash on our precious logging code --- files/routes/wrappers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/files/routes/wrappers.py b/files/routes/wrappers.py index ea2ec57b6..a4cf350df 100644 --- a/files/routes/wrappers.py +++ b/files/routes/wrappers.py @@ -23,11 +23,11 @@ def calc_users(v): print("calc_users called with missing context data") if request: print(f"while serving {request.method} {request.full_path}") - print(f"user agent: {g.agent}") + print(f"user agent: {getattr(g, 'agent', '-attribute not present-')}") else: print("no request context") print(f"v: {v}") - print(f"db?: {bool(g.db)}") + print(f"db?: {bool(getattr(g, 'db', None))}") # end temp logging code loggedin = cache.get(f'{SITE}_loggedin') or {} loggedout = cache.get(f'{SITE}_loggedout') or {} -- 2.34.1 From 79d26e130bbc09b0cf4bbb439a8836c625d36de1 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 04:29:40 +0200 Subject: [PATCH 046/130] make offline.html use tabs instead of spaces --- files/assets/offline.html | 104 +++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/files/assets/offline.html b/files/assets/offline.html index d586c1cd0..1d01c3aea 100644 --- a/files/assets/offline.html +++ b/files/assets/offline.html @@ -1,66 +1,66 @@ No Internet Connection -- 2.34.1 From eec4089a0ae98cf44ffb3c98f7055839c8a54c2f Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 04:29:46 +0200 Subject: [PATCH 047/130] do this https://rdrama.life/post/18459/marseycapywalking-megathread-for-bugs-and-suggestions/3137192?context=8#context --- files/templates/errors/nsfw.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/files/templates/errors/nsfw.html b/files/templates/errors/nsfw.html index b14275e7d..9329fda68 100644 --- a/files/templates/errors/nsfw.html +++ b/files/templates/errors/nsfw.html @@ -4,10 +4,10 @@ {% block content %}
-
+
:#marseytwerking:
Are you over 18?
-

This post is rated +18 (Adult-Only). You must be 18 or older to continue. Are you sure you want to proceed?

+

This post is rated +18 (Adult-Only). You must be 18 or older to continue. Are you sure you want to proceed?

-- 2.34.1 From 9cbeee1aeded6ccffc50a65f93b3773985a41b69 Mon Sep 17 00:00:00 2001 From: SneedBot Date: Sat, 26 Nov 2022 02:00:03 +0000 Subject: [PATCH 048/130] sneed --- files/assets/images/rDrama/sidebar/866.webp | Bin 0 -> 14372 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 files/assets/images/rDrama/sidebar/866.webp diff --git a/files/assets/images/rDrama/sidebar/866.webp b/files/assets/images/rDrama/sidebar/866.webp new file mode 100644 index 0000000000000000000000000000000000000000..3fc64c898a45b16b5a6112b4193902a2e719245b GIT binary patch literal 14372 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 literal 0 HcmV?d00001 -- 2.34.1 From 2b25d10d1c3d9b4986eee409fcfd34d7688636cb Mon Sep 17 00:00:00 2001 From: SneedBot Date: Sat, 26 Nov 2022 02:29:56 +0000 Subject: [PATCH 049/130] sneed --- files/assets/css/.chat_done.css.swp | Bin 0 -> 1024 bytes snappy_rDrama.txt | 3 +++ 2 files changed, 3 insertions(+) create mode 100644 files/assets/css/.chat_done.css.swp diff --git a/files/assets/css/.chat_done.css.swp b/files/assets/css/.chat_done.css.swp new file mode 100644 index 0000000000000000000000000000000000000000..c09524778a136c1c15f37995d0039ed3ce755b8a GIT binary patch literal 1024 zcmYc?$V<%2S1{8vVn6|DO~MRC`S~R%f;c#(Nu_xurMk(wCb|~snMt~NmC1&>28I}_ v^;7iIGILUk^%IMWQ%j2VlZ$~kBe5htB|k4!56HvNF)A<`0;3^7%MbtnDRCKZ literal 0 HcmV?d00001 diff --git a/snappy_rDrama.txt b/snappy_rDrama.txt index 37e6d66ab..059d95e3e 100644 --- a/snappy_rDrama.txt +++ b/snappy_rDrama.txt @@ -3174,3 +3174,6 @@ Normies can't understand the thrill of pinning the Weasel. Night spent chasing a I am the “office manager” of AHS. I’ve spent the past three years keeping spreadsheets and have inboxes full of ticket closures, and have written reports characterizing the response accuracy of Reddit AEO. Would you like to escalate and mansplain my field of expertise to me more? + +{[para]} +Normies can't understand the thrill of pinning the capybara. Night spent chasing an over amphetamined Aevann around the bean bag forts. His squealing and gibbering, pouring sweat and on the verge of seizing. Dramatards build up an intoxicating, delerious state with "dude bussy lmbo" chantings at the sidelines, hitting the Aevann-toy with brooms if he tries to escape. Carp would be giggling and laughing as the waves of methamphetamine pleasure seem to harmonize with the droning r-slur verses. He runs through the bean bag maze skinny and malnourished, with his viagra powered peepee a divining rod for the capybara. Sweat gushing down his, face around his unfocused eyes he laughs and chortles until he gasps "Found you!”. The Codescapybara screeches defensively but Whorist Florist is upon him in seconds. His peepee thrusting blindly into his flank, leg, stomach and ribs unconcemed about anything but the motion. Eventually serendepity finds his mouth and the Cocktube Rodent is placated, suckling contently on the Carp's dehydrated peepee. \ No newline at end of file -- 2.34.1 From 908e6d693eea117da83b432791f0f64fd82abc6b Mon Sep 17 00:00:00 2001 From: justcool393 Date: Fri, 25 Nov 2022 20:57:10 -0600 Subject: [PATCH 050/130] the request is prolly boned anyway, let's help friends help me :) --- files/routes/wrappers.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/files/routes/wrappers.py b/files/routes/wrappers.py index a4cf350df..c8d1a6329 100644 --- a/files/routes/wrappers.py +++ b/files/routes/wrappers.py @@ -24,10 +24,12 @@ def calc_users(v): if request: print(f"while serving {request.method} {request.full_path}") print(f"user agent: {getattr(g, 'agent', '-attribute not present-')}") + print(f"xhr? {request.headers.get('xhr')} / API client? {bool(request.headers.get('Authorization'))}") else: print("no request context") print(f"v: {v}") - print(f"db?: {bool(getattr(g, 'db', None))}") + print(f"db?: {hasattr(g, 'db')}") + abort(500, "hi!! it's @justcool393! If you get this could you PM me and tell me how you got this? i'm trying to figure something out and if you can help I'll really appreciate it <3") # end temp logging code loggedin = cache.get(f'{SITE}_loggedin') or {} loggedout = cache.get(f'{SITE}_loggedout') or {} -- 2.34.1 From 6a98b8dcc2ad490b53cf7ffa53ef385bca61779f Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 04:58:18 +0200 Subject: [PATCH 051/130] rDrama.net -> rdrama.net --- seed-db.sql | 2 +- snappy_rDrama.txt | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/seed-db.sql b/seed-db.sql index 636ff63f1..9e8006203 100644 --- a/seed-db.sql +++ b/seed-db.sql @@ -480,7 +480,7 @@ INSERT INTO public.hat_defs VALUES (38, 'Northern Aggressor Soldier Cap', 'Slyth INSERT INTO public.hat_defs VALUES (39, 'Rhodesian Light Infantry Beret', 'Rhodesians never die. Immortality guaranteed!', 2, 500, NULL, 1662167687); INSERT INTO public.hat_defs VALUES (40, 'Magyar Headdress', 'Channel your inner QuadNarca and join Orban''s elite cavalry', 2, 500, NULL, 1662167687); INSERT INTO public.hat_defs VALUES (41, 'The Senator Warren', 'heya heya heya heya heya heya heya heya heya heya heya', 2, 500, NULL, 1662167687); -INSERT INTO public.hat_defs VALUES (42, 'Please Be Patient I Have Autism', 'The OFFICIAL hat of rDrama.net', 2, 500, NULL, 1662167687); +INSERT INTO public.hat_defs VALUES (42, 'Please Be Patient I Have Autism', 'The OFFICIAL hat of rdrama.net', 2, 500, NULL, 1662167687); INSERT INTO public.hat_defs VALUES (44, 'Watermelmet', 'Hydration and head protection all rolled into one stylish headpiece', 2, 500, NULL, 1662167687); INSERT INTO public.hat_defs VALUES (45, 'Frankenstein', 'Akshually, Frankenstein was the scientist. The monster didn''t have a name.', 2, 500, NULL, 1662167687); INSERT INTO public.hat_defs VALUES (46, 'The Drumpf', 'Orange hair bad', 2, 500, NULL, 1662167687); diff --git a/snappy_rDrama.txt b/snappy_rDrama.txt index 059d95e3e..7a8f94639 100644 --- a/snappy_rDrama.txt +++ b/snappy_rDrama.txt @@ -1093,7 +1093,7 @@ Yawn, another brigade from Drama? They must be tired of disrespecting the trans {[para]} I'm not a homosexual because I have straight sex with a man and I like men. But I'm straight because I prefer women's dicks and love having sex with them. I'm a homophobe because I can't have it. {[para]} -Hello refugee, welcome to rDrama.net. +Hello refugee, welcome to rdrama.net. In order to continue posting, please submit a timestamped photograph of your anus (known colloquially as 'bussy') to one of our immigration officers for detailed inspection. Failure to do so would mean immediate deportation {[para]} Since when is promotion of gangbang considered as "sexual threat"? @@ -1705,7 +1705,7 @@ Watch what you want, but when I can't see something like First Reformed or Portr {[para]} This is outrageous. My criticism of Israel has very little to do with my rabid anti-semitism. {[para]} -This is rDrama.net sweaty. +This is rdrama.net sweaty. You're ALL awful. I'm awful too. You think that the mentally unstable we make fun of would be as miserable and unstable as they are without us? They wouldn't. @@ -1719,7 +1719,7 @@ This IS horrible. ALL of this is HORRIBLE. And you're part of it. Fuck you, you stupid bitch. -And fuck you all, rDrama.net. I'm out. +And fuck you all, rdrama.net. I'm out. {[para]} Being white and playing video games is a short pipeline that leads to learning Japanese and raping your sister {[para]} @@ -2938,7 +2938,7 @@ I'm here to show your audience that you don't have the secret of anything, not e Respond however you want, and I'll be back later to laugh about how once again, the angry impotent hate-ragers you all enjoy are not only sad, but ruining your life, when all you really need to do is take a shower and clean your room. Just think about how many of you actually killed yourself and just stopped posting, while everyone else failed to notice or were simply glad you disappeared. I hope it's you next. You're all a worthless drain on society. {[para]} -To be fair, you have to be very neurodivergent to understand rDrama.net. The bait is extremely obvious, and without a solid grasp of satire most of the jokes will go over a typical viewer's head. There's also Carp's racist outlook, which is deftly woven into his characterisation - his personal philosophy draws heavily from MDE literature, for instance. The fans understand this stuff; they have the intellectual capacity to truly appreciate the depths of these jokes, to realize that they're not just funny- they say something deep about THE INTERNET. As a consequence people who dislike rDrama truly ARE zoomers- of course they wouldn't appreciate, for instance, the humour in Janny's existential catchphrase "Y'all can't behave," which itself is a cryptic reference to Aldous Huxley's dystopian epic Brave New World. I'm smirking right now just imagining one of those seriousposting wingtards scratching their heads in confusion as Aevann's genius unfolds itself on their mobile phone screens. What fools... how I pity them. :marseylaugh: And yes by the way, I DO have a Marsey tattoo. And no, you cannot see it. It's for the ladies' eyes only- And even they have to demonstrate that they're within 5 IQ points of my own (preferably lower) beforehand. +To be fair, you have to be very neurodivergent to understand rdrama.net. The bait is extremely obvious, and without a solid grasp of satire most of the jokes will go over a typical viewer's head. There's also Carp's racist outlook, which is deftly woven into his characterisation - his personal philosophy draws heavily from MDE literature, for instance. The fans understand this stuff; they have the intellectual capacity to truly appreciate the depths of these jokes, to realize that they're not just funny- they say something deep about THE INTERNET. As a consequence people who dislike rDrama truly ARE zoomers- of course they wouldn't appreciate, for instance, the humour in Janny's existential catchphrase "Y'all can't behave," which itself is a cryptic reference to Aldous Huxley's dystopian epic Brave New World. I'm smirking right now just imagining one of those seriousposting wingtards scratching their heads in confusion as Aevann's genius unfolds itself on their mobile phone screens. What fools... how I pity them. :marseylaugh: And yes by the way, I DO have a Marsey tattoo. And no, you cannot see it. It's for the ladies' eyes only- And even they have to demonstrate that they're within 5 IQ points of my own (preferably lower) beforehand. {[para]} I don't know, but I'll make sure not to get on your bad side lest I begin molesting children. Like a Pascal's wager kind of thing. {[para]} -- 2.34.1 From b3fe568fec453b8975a27e156cc23e040ca66ae4 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 04:59:14 +0200 Subject: [PATCH 052/130] restore classic /r/drama sidebar --- files/templates/sidebar_rDrama.html | 62 +++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/files/templates/sidebar_rDrama.html b/files/templates/sidebar_rDrama.html index 92da421f5..892ccb796 100644 --- a/files/templates/sidebar_rDrama.html +++ b/files/templates/sidebar_rDrama.html @@ -54,11 +54,30 @@ {%- endif %} -- 2.34.1 From b94b3864a5f3926231e9849fa35dfd13de53c73d Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 05:14:00 +0200 Subject: [PATCH 053/130] include AHS and restore miners rule --- files/templates/sidebar_rDrama.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/files/templates/sidebar_rDrama.html b/files/templates/sidebar_rDrama.html index 892ccb796..eb4612340 100644 --- a/files/templates/sidebar_rDrama.html +++ b/files/templates/sidebar_rDrama.html @@ -78,6 +78,7 @@
  • NO RIGHTWING AGENDAPOSTING.
  • Don't post anything illegal.
  • +
  • No sexualizing minors.
  • No doxing.
  • Using alts to game dramacoin will get you banned.
  • Supporting free speech is an immediate ban.
  • @@ -93,6 +94,7 @@

    Related subreddits:

      +
    • /r/AgainstHateSubreddits
    • /r/SubredditDrama
    • /r/HobbyDrama
    • /r/internetdrama
    • -- 2.34.1 From 5e33fcab32ae58c7c7a57e51fb3c0c44d8222a3a Mon Sep 17 00:00:00 2001 From: SneedBot Date: Sat, 26 Nov 2022 03:14:11 +0000 Subject: [PATCH 054/130] sneed --- files/assets/css/.chat_done.css.swp | Bin 1024 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 files/assets/css/.chat_done.css.swp diff --git a/files/assets/css/.chat_done.css.swp b/files/assets/css/.chat_done.css.swp deleted file mode 100644 index c09524778a136c1c15f37995d0039ed3ce755b8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmYc?$V<%2S1{8vVn6|DO~MRC`S~R%f;c#(Nu_xurMk(wCb|~snMt~NmC1&>28I}_ v^;7iIGILUk^%IMWQ%j2VlZ$~kBe5htB|k4!56HvNF)A<`0;3^7%MbtnDRCKZ -- 2.34.1 From cd7d48f78d4a007e3deff8c828313ab878553ffb Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 05:29:07 +0200 Subject: [PATCH 055/130] remove kf --- files/templates/sidebar_rDrama.html | 1 - 1 file changed, 1 deletion(-) diff --git a/files/templates/sidebar_rDrama.html b/files/templates/sidebar_rDrama.html index eb4612340..2628d61a9 100644 --- a/files/templates/sidebar_rDrama.html +++ b/files/templates/sidebar_rDrama.html @@ -119,7 +119,6 @@
    • 4Chan
    • Twitter
    • 8Chan
    • -
    • Kiwifarms
    • Lolcow.farm
    • Your local shitty news website
    -- 2.34.1 From 645470f12a3fa0f7fb90f0dc4a039df53deb8595 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Nov 2022 06:01:20 +0200 Subject: [PATCH 056/130] make sure stickied child comments are always at the top place they can be --- files/classes/comment.py | 3 ++- files/routes/admin.py | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/files/classes/comment.py b/files/classes/comment.py index 5972622d3..205ede4e1 100644 --- a/files/classes/comment.py +++ b/files/classes/comment.py @@ -49,6 +49,7 @@ class Comment(Base): is_bot = Column(Boolean, default=False) stickied = Column(String) stickied_utc = Column(Integer) + stickied_child_id = Column(Integer) sentto = Column(Integer, ForeignKey("users.id")) app_id = Column(Integer, ForeignKey("oauth_apps.id")) upvotes = Column(Integer, default=1) @@ -139,7 +140,7 @@ class Comment(Base): if self.replies2 != None: return self.replies2 - replies = db.query(Comment).filter_by(parent_comment_id=self.id).order_by(Comment.stickied) + replies = db.query(Comment).filter_by(parent_comment_id=self.id).order_by(Comment.stickied, Comment.stickied_child_id) if not self.parent_submission: sort='old' return sort_objects(sort, replies, Comment, include_shadowbanned=(v and v.can_see_shadowbanned)).all() diff --git a/files/routes/admin.py b/files/routes/admin.py index 7d5c45b1b..5f61361fb 100644 --- a/files/routes/admin.py +++ b/files/routes/admin.py @@ -1334,6 +1334,12 @@ def sticky_comment(cid, v): message = f"@{v.username} (Admin) has pinned your [comment]({comment.shortlink})" send_repeatable_notification(comment.author_id, message) + c = comment + while c.level > 2: + c = c.parent_comment + c.stickied_child_id = comment.id + g.db.add(c) + return {"message": "Comment pinned!"} @@ -1359,6 +1365,11 @@ def unsticky_comment(cid, v): message = f"@{v.username} (Admin) has unpinned your [comment]({comment.shortlink})" send_repeatable_notification(comment.author_id, message) + cleanup = g.db.query(Comment).filter_by(stickied_child_id=comment.id).all() + for c in cleanup: + c.stickied_child_id = None + g.db.add(c) + return {"message": "Comment unpinned!"} -- 2.34.1 From 39b578bba2bff723303510583353d7bc8e576265 Mon Sep 17 00:00:00 2001 From: geese_suck Date: Sat, 26 Nov 2022 04:10:59 +0000 Subject: [PATCH 057/130] fix offline page scaling (#16) Co-authored-by: geese_suck <16601315+geese-suck@users.noreply.github.com> Reviewed-on: https://fsdfsd.net/rDrama/rDrama/pulls/16 Co-authored-by: geese_suck Co-committed-by: geese_suck --- files/assets/offline.html | 1 + 1 file changed, 1 insertion(+) diff --git a/files/assets/offline.html b/files/assets/offline.html index 1d01c3aea..ad26b4fc6 100644 --- a/files/assets/offline.html +++ b/files/assets/offline.html @@ -1,5 +1,6 @@ No Internet Connection + -- 2.34.1 From e8993e33403e9f144ea67bddcab174bb1ec1ef07 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 00:13:24 +0200 Subject: [PATCH 099/130] make hole pinning button use primary color on mobile --- files/templates/post_actions_mobile.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/files/templates/post_actions_mobile.html b/files/templates/post_actions_mobile.html index 2810f0238..59b910ec3 100644 --- a/files/templates/post_actions_mobile.html +++ b/files/templates/post_actions_mobile.html @@ -28,8 +28,8 @@ {% if p.sub and v.mods(p.sub) %} - - + + {% endif %} {% if v.id==p.author_id %} -- 2.34.1 From 0fd4225ec20acadfe935a7d2c16d250d37fa11cd Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 00:23:51 +0200 Subject: [PATCH 100/130] remove stray dot in brookscringe.webp --- files/assets/images/emojis/brookscringe.webp | Bin 7174 -> 8622 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/files/assets/images/emojis/brookscringe.webp b/files/assets/images/emojis/brookscringe.webp index 47b5b481b0cfcf1d9361934d0c122daf6fa29aed..220acd55e1b1a3119bd17daced8ec87259c91296 100644 GIT binary patch literal 8622 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 AZ~y=R literal 7174 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%0AD z%nW@Smv;9fbl_jA^o=7%vnwj~L>>4fPuPJXxue<+v+Wwf_S;qk>i7Mvk|ihTbte3zK6(Od zqdBkdg?$W){`F&Ez#@;Aqu0(ZUHlXHvoa|Q`E(c7HU2o`f3WzXv)O&?qP-tR#3X@Z zEx4$nS==9t89H<$GC;e7~LC0E|V_d%g+a@#@=F zj-R*qVo{(T2q?`o6O0%w;nQBic>Ai>wlIsk4 z)LnL5ylJKqZE@Q9B_y&OZNa0Gf;!fAfJ5kJofZqAun;1BJtu<`U6F87XaCj2c`@Yw ziqKt}_yxOWnKQUOIcq}2pOssmE!&%olZo!8m5ub6LGXSXX`ioy=#+ts&6mh0Ak?e4 zAaK?|IFkd9JurODl>!t-hXEspl}nxADOA~p7l9z7q><3)seN+ze@y1YW}?I2MoOCj z%YP}keK8dd>wikndfObi=q9*``kxQPYLh@Xe&mN0!p97uQ7y&WA>!Mi(I&t&*nR19Mdq(qfH{O;oIM4ua zqdma?Rv<~lI5mu0Up6HPi&L#k-}cz*+~lx?fd`f43+#H(d0Ry@pxn-%v*E0P;3Xi# z6Hrae%qxl^u{yD%TdC3*qOKDNRTvd&`oz%T4v1xPFRk{;Ybd(TxSbROzx`*`_Uxv2 zIlM6d%IqJb6eYTKd{zo(csWASpUaFXczsY=dFCi*-jSz@UFD)6b36u23GAT~{f!_2 ziX>3(nrTc@WQ7bu)(w6D04eh2aw-zVrx;6GG(x~u=vx&J6)eqJ?F#4DD88(AC7_kn znK7{)L?1{8y5(-~w-7fx*E2*#Y;UtB814YO_!w4B2crGhc-!X%jkSzOG$&>u$MfC2 zO3e?1#iXp#?bQN@LdTOykH>-Y_@pcI*(}=Qs)oXj`np*hfA=~2o$Rsz{F)^-q1B_L z@hV6hvSfjIKjHr~%_|_YyD=b6v4)#b!0`Vuw26tF_XW2=6&Kh4q9puGqstCU^YW@V zxg4=MRvYdb%^yPm9-@e-jATL6rx|EFL4y9$7PtGw&LA3k!re|{xR?xjXXx`{5_YI# zXwp!xWLPJ Date: Sun, 27 Nov 2022 00:59:50 +0200 Subject: [PATCH 101/130] add margin to sidebar disclaimer --- files/templates/sidebar_rDrama.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/templates/sidebar_rDrama.html b/files/templates/sidebar_rDrama.html index 2628d61a9..5f1468a42 100644 --- a/files/templates/sidebar_rDrama.html +++ b/files/templates/sidebar_rDrama.html @@ -123,7 +123,7 @@
  • Your local shitty news website
-

This is an entertainment comedy website. Any and all posts and comments are parody with no basis in reality.

+

This is an entertainment comedy website. Any and all posts and comments are parody with no basis in reality.

𝐜𝐚𝐫𝐩 𝐰𝐨𝐳 𝐞𝐫𝐞

{% endif %} -- 2.34.1 From 706bebb126708ce3182554189370471ba25ee6bb Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 01:00:13 +0200 Subject: [PATCH 102/130] add r/theElon --- files/templates/sidebar_rDrama.html | 1 + 1 file changed, 1 insertion(+) diff --git a/files/templates/sidebar_rDrama.html b/files/templates/sidebar_rDrama.html index 5f1468a42..b39f8606e 100644 --- a/files/templates/sidebar_rDrama.html +++ b/files/templates/sidebar_rDrama.html @@ -100,6 +100,7 @@
  • /r/internetdrama
  • /r/youtubedrama
  • /r/facebookdrama
  • +
  • /r/theElon
  • /r/BanVideoGames
  • /r/LoveForLandlords
  • /r/LoveForAnimesexuals
  • -- 2.34.1 From 0f37667b4caa956d5c7c9ba35d6bff89361424d5 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 01:04:39 +0200 Subject: [PATCH 103/130] limit log size on docker to 100KB --- docker-compose.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 75d3160f4..7d8da39ca 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,12 +15,21 @@ services: depends_on: - redis - postgres + logging: + options: + max-size: "100k" + max-file: "1" + redis: container_name: "redis" image: redis ports: - "6379:6379" + logging: + options: + max-size: "100k" + max-file: "1" postgres: container_name: "postgres" @@ -33,9 +42,17 @@ services: - POSTGRES_HOST_AUTH_METHOD=trust ports: - "5432:5432" + logging: + options: + max-size: "100k" + max-file: "1" opera-proxy: container_name: "opera-proxy" image: yarmak/opera-proxy ports: - "18080:18080" + logging: + options: + max-size: "100k" + max-file: "1" -- 2.34.1 From 804472e6b255eaa5ed6cb2587f1bf28922e109be Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 01:08:27 +0200 Subject: [PATCH 104/130] Revert "the request is prolly boned anyway, let's help friends help me :)" This reverts commit cfffbc61a07b189d19c23f5d5a5962bc6256bc69. --- files/routes/wrappers.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/files/routes/wrappers.py b/files/routes/wrappers.py index c8d1a6329..a4cf350df 100644 --- a/files/routes/wrappers.py +++ b/files/routes/wrappers.py @@ -24,12 +24,10 @@ def calc_users(v): if request: print(f"while serving {request.method} {request.full_path}") print(f"user agent: {getattr(g, 'agent', '-attribute not present-')}") - print(f"xhr? {request.headers.get('xhr')} / API client? {bool(request.headers.get('Authorization'))}") else: print("no request context") print(f"v: {v}") - print(f"db?: {hasattr(g, 'db')}") - abort(500, "hi!! it's @justcool393! If you get this could you PM me and tell me how you got this? i'm trying to figure something out and if you can help I'll really appreciate it <3") + print(f"db?: {bool(getattr(g, 'db', None))}") # end temp logging code loggedin = cache.get(f'{SITE}_loggedin') or {} loggedout = cache.get(f'{SITE}_loggedout') or {} -- 2.34.1 From c63a3c116f171e61319cffb63eda0ecfda116814 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 01:08:44 +0200 Subject: [PATCH 105/130] Revert "don't want to crash on our precious logging code" This reverts commit 992e4a0d1c192777427936057dd0e5685d4986ac. --- files/routes/wrappers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/files/routes/wrappers.py b/files/routes/wrappers.py index a4cf350df..ea2ec57b6 100644 --- a/files/routes/wrappers.py +++ b/files/routes/wrappers.py @@ -23,11 +23,11 @@ def calc_users(v): print("calc_users called with missing context data") if request: print(f"while serving {request.method} {request.full_path}") - print(f"user agent: {getattr(g, 'agent', '-attribute not present-')}") + print(f"user agent: {g.agent}") else: print("no request context") print(f"v: {v}") - print(f"db?: {bool(getattr(g, 'db', None))}") + print(f"db?: {bool(g.db)}") # end temp logging code loggedin = cache.get(f'{SITE}_loggedin') or {} loggedout = cache.get(f'{SITE}_loggedout') or {} -- 2.34.1 From c0ebeb05fc4788c17e0f897b601d3f34d4a2cfd4 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 01:10:38 +0200 Subject: [PATCH 106/130] Revert "calc users: log so we can find the root of this problem" This reverts commit ba6e4721d3aaab837f804d4e94a59dd11c05a6ae. --- files/routes/wrappers.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/files/routes/wrappers.py b/files/routes/wrappers.py index ea2ec57b6..7a979058e 100644 --- a/files/routes/wrappers.py +++ b/files/routes/wrappers.py @@ -18,17 +18,6 @@ def session_init(): session["session_id"] = secrets.token_hex(49) def calc_users(v): - # temp logging code - if not hasattr(g, 'is_api_or_xhr'): - print("calc_users called with missing context data") - if request: - print(f"while serving {request.method} {request.full_path}") - print(f"user agent: {g.agent}") - else: - print("no request context") - print(f"v: {v}") - print(f"db?: {bool(g.db)}") - # end temp logging code loggedin = cache.get(f'{SITE}_loggedin') or {} loggedout = cache.get(f'{SITE}_loggedout') or {} timestamp = int(time.time()) -- 2.34.1 From 03c9572d1999f2806b7d2d05210cac5226c7cf48 Mon Sep 17 00:00:00 2001 From: SneedBot Date: Sat, 26 Nov 2022 23:26:08 +0000 Subject: [PATCH 107/130] sneed --- schema.sql | 11 ++++++++++- seed-db.sql | 15 +++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/schema.sql b/schema.sql index 9ba711ce2..9132c762e 100644 --- a/schema.sql +++ b/schema.sql @@ -395,7 +395,8 @@ CREATE TABLE public.comments ( wordle_result character varying(115), body_ts tsvector GENERATED ALWAYS AS (to_tsvector('english'::regconfig, (body)::text)) STORED, casino_game_id integer, - chuddedfor character varying(40) + chuddedfor character varying(40), + stickied_child_id integer ); @@ -2466,6 +2467,14 @@ ALTER TABLE ONLY public.save_relationship ADD CONSTRAINT save_relationship_user_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) MATCH FULL; +-- +-- Name: comments stickied_child_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.comments + ADD CONSTRAINT stickied_child_fkey FOREIGN KEY (stickied_child_id) REFERENCES public.comments(id); + + -- -- Name: sub_blocks sub_blocks_sub_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - -- diff --git a/seed-db.sql b/seed-db.sql index 9e8006203..0daccc4e5 100644 --- a/seed-db.sql +++ b/seed-db.sql @@ -226,6 +226,7 @@ SET row_security = off; -- INSERT INTO public.hat_defs VALUES (716, 'Baked Beans Bucket Hat', 'This neighbor is wearing beans!', 2, 500, NULL, 1663647585); + INSERT INTO public.hat_defs VALUES (1002, 'Hearty Hands', 'I dont think hands should do that...', 2, 500, NULL, 1667084251); INSERT INTO public.hat_defs VALUES (1003, 'Dragged', 'HELLLLLLLLLLPPPPPPPPPPPPPPPPP', 2, 500, NULL, 1667084272); INSERT INTO public.hat_defs VALUES (718, 'Literally Me', 'Sving music, jazz? PTOOEY!', 2, 500, NULL, 1663801724); @@ -480,7 +481,7 @@ INSERT INTO public.hat_defs VALUES (38, 'Northern Aggressor Soldier Cap', 'Slyth INSERT INTO public.hat_defs VALUES (39, 'Rhodesian Light Infantry Beret', 'Rhodesians never die. Immortality guaranteed!', 2, 500, NULL, 1662167687); INSERT INTO public.hat_defs VALUES (40, 'Magyar Headdress', 'Channel your inner QuadNarca and join Orban''s elite cavalry', 2, 500, NULL, 1662167687); INSERT INTO public.hat_defs VALUES (41, 'The Senator Warren', 'heya heya heya heya heya heya heya heya heya heya heya', 2, 500, NULL, 1662167687); -INSERT INTO public.hat_defs VALUES (42, 'Please Be Patient I Have Autism', 'The OFFICIAL hat of rdrama.net', 2, 500, NULL, 1662167687); +INSERT INTO public.hat_defs VALUES (42, 'Please Be Patient I Have Autism', 'The OFFICIAL hat of rDrama.net', 2, 500, NULL, 1662167687); INSERT INTO public.hat_defs VALUES (44, 'Watermelmet', 'Hydration and head protection all rolled into one stylish headpiece', 2, 500, NULL, 1662167687); INSERT INTO public.hat_defs VALUES (45, 'Frankenstein', 'Akshually, Frankenstein was the scientist. The monster didn''t have a name.', 2, 500, NULL, 1662167687); INSERT INTO public.hat_defs VALUES (46, 'The Drumpf', 'Orange hair bad', 2, 500, NULL, 1662167687); @@ -623,6 +624,7 @@ INSERT INTO public.hat_defs VALUES (1074, 'Scottish Sticky Note', 'idk why its s INSERT INTO public.hat_defs VALUES (1076, 'Snow Globe', 'Snow globe full of partially transparent webp flakes', 2, 1000, NULL, 1668755503); INSERT INTO public.hat_defs VALUES (1075, 'Jerma Approval', 'Who? What? I haven''t understood a hat submission in so fucking long', 2, 1000, NULL, 1668727612); INSERT INTO public.hat_defs VALUES (1079, 'Spinning Christmas Elf Hat', 'It''s time to go green.', 2, 1000, NULL, 1668755556); +INSERT INTO public.hat_defs VALUES (1100, 'World Cup Mascot', 'This user supports the 2022 World Cup and watched it for Jungkook!', 2, 500, NULL, 1669007389); INSERT INTO public.hat_defs VALUES (874, 'Carp', 'My 100th hat and a Thank you to carp. Now 150 more!', 2, 500, NULL, 1665272718); INSERT INTO public.hat_defs VALUES (1077, 'Premium Snow Globe', 'Snow globe with a more premium base.', 2, 1000, NULL, 1668755505); INSERT INTO public.hat_defs VALUES (93, 'Wizard I', 'Three decades a KHHV', 2, 500, NULL, 1662167687); @@ -1168,7 +1170,7 @@ INSERT INTO public.hat_defs VALUES (911, 'Racecar Hat', 'I sleep in a hat with m -- Name: hat_defs_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - -- -SELECT pg_catalog.setval('public.hat_defs_id_seq', 1099, true); +SELECT pg_catalog.setval('public.hat_defs_id_seq', 1103, true); -- @@ -1202,6 +1204,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marsey1984',2,'orwell book ingsoc big brother fascist',NULL), ('marsey300',2,'leonidas shield armor thermopylae spear greek spartan',NULL), ('marsey3d',2,'poly 3d print alive spin animated',NULL), +('marsey403',2,'error http unauthorized forbidden access',1669055713), ('marsey404',2,'missing 404 error html page notfound',1668930304), ('marsey40k',2,'warhammer 40k 40000 space space marine marine ultramarine smurf',NULL), ('marsey420',2,'marijuana weed dude weed lmao ganja drugs pot reggae joint jamaican',NULL), @@ -1372,6 +1375,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseybiting',2,'reaction datass lip bite dat ass',NULL), ('marseyblack',2,'basketball black african american bipoc coon fade jersey sports kang gang jogger',NULL), ('marseyblack2',2,'nigger african coon ape monkey bipoc excited happy',NULL), +('marseyblackandwhite',2,'black mixed white shredded manlet cat cute',1669229303), ('marseyblackcat',2,'cat black halloween homoween',1666656250), ('marseyblackcock',2,'cock chicken poultry bbc black ride mount cowgirl',NULL), ('marseyblackcop',2,'police officer acab thin blue line pig bipoc',NULL), @@ -1585,6 +1589,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseychonkerbutch',2,'fat obese brap bitch dyke dangerhair lesbian',NULL), ('marseychonkerfoid',2,'female woman fds fat obese hambeast landwhale porker pig bleeder birthing person bangs',NULL), ('marseychonkerfoidpuke',2,'fat huge sick yuck eat barf',1664574968), +('marseychonkernoticeme',2,'attention fat foid annoying',1669407871), ('marseychristmas',2,'candy cane santa christmas holiday',NULL), ('marseychristmasbulb',2,'ornament christmas happy holiday china',NULL), ('marseychristmasbulb2',2,'ornament holiday christmas',NULL), @@ -2025,6 +2030,8 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseyhitler2',2,'adolf adolph nazi germany kraut axis mustache genocide dictator authright chud conservative trump',NULL), ('marseyhmm',2,'confused reaction thinking thunk thonk judgment',NULL), ('marseyhmmm',2,'confused reaction thinking thunk thonk judgment',NULL), +('marseyhobbes',2,'calvin hobbes waterson tiger comic',1669097969), +('marseyholocaust',2,'jew nazi adl merchant genocide chud rightoid hitler train auschwitz 109',1669064577), ('marseyhomestar',2,'homestar runner fast everybody 2000s',NULL), ('marseyhomochingchong',2,'asian chinese jap gook chink rice gay strawhat glasses squint rainbow tiedie tyedye tyedie tiedye',1663248780), ('marseyhomofascist',2,'lgbt faggot ss fash nazi homocracy gay queer sodomy wholesome kiss',NULL), @@ -2531,6 +2538,8 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseypusheen',2,'grey gray',NULL), ('marseypussyhat',2,'feminist feminism activism activist protester protesting foid gussy woman birthing person roasty roastie thot slut whore',NULL), ('marseyputin',2,'vladimir russian kgb moscow ukraine dictator leader',NULL), +('marseyqatarworldcup',2,'soccer football sports muslim islam allah sand bipoc robe ghost',1669146805), +('marseyqatarworldcup2',2,'soccer football sports muslim islam allah sand bipoc robe ghost',1669146826), ('marseyqoomer',2,'shaman viking qanon jan6 capitol january6',NULL), ('marseyqr',2,'qr code',1663646718), ('marseyqr2',2,'cryptographic qrcode',1663944616), @@ -2668,6 +2677,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseyschizochadseethecapylove',2,'animated schizo schizocel rare love chad seethe capy aevann',NULL), ('marseyschizochadthankscapylove',2,'animated schizo schizocel rare love chad thanks queen capy aevann',NULL), ('marseyschizochadyescapylove',2,'animated schizo schizocel rare love chad yes capy aevann',NULL), +('marseyschizochiobulove',2,'chink asian tangerine feline singapore',1669161511), ('marseyschizodoggilove',2,'animated schizo schizocel rare love dussy doggi',NULL), ('marseyschizodongerlove',2,'animated schizo schizocel rare love kaiser uraniumdonger donger',NULL), ('marseyschizoducklove',2,'animated schizo schizocel rare love duck',NULL), @@ -2934,6 +2944,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseytranspearlclutch',2,'transgender upset snowflake clutching',1666994064), ('marseytransrentfree',2,'transgender lgbt rent free wojak chud',NULL), ('marseytree',2,'tree nature outdoors cosplay',NULL), +('marseytribute',2,'cum cumshot semen ropes load facial nsfw',1669095975), ('marseytrickortreat',2,'candy trick or treat halloween holiday',NULL), ('marseytrickrtreat',2,'halloween horror mask sam',1667697001), ('marseytrogdor',2,'burninator strongbad internet meme dragon marsdor',NULL), -- 2.34.1 From 303890fdc3a243a1c6cb4a73b273445ad99914e7 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 01:13:33 +0200 Subject: [PATCH 108/130] increase margni --- files/templates/sidebar_rDrama.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/templates/sidebar_rDrama.html b/files/templates/sidebar_rDrama.html index b39f8606e..ad54dd943 100644 --- a/files/templates/sidebar_rDrama.html +++ b/files/templates/sidebar_rDrama.html @@ -124,7 +124,7 @@
  • Your local shitty news website
  • -

    This is an entertainment comedy website. Any and all posts and comments are parody with no basis in reality.

    +

    This is an entertainment comedy website. Any and all posts and comments are parody with no basis in reality.

    𝐜𝐚𝐫𝐩 𝐰𝐨𝐳 𝐞𝐫𝐞

    {% endif %} -- 2.34.1 From d827050974441c7ca6b72955592be12a7ee9293d Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 01:54:51 +0200 Subject: [PATCH 109/130] remove accidentially-committed shit --- files/assets/css/main.css | 7 ------- 1 file changed, 7 deletions(-) diff --git a/files/assets/css/main.css b/files/assets/css/main.css index 2e4f78687..d1b8ed168 100644 --- a/files/assets/css/main.css +++ b/files/assets/css/main.css @@ -6402,13 +6402,6 @@ div.markdown { max-height: min(42vh,30vw) !important; } -@media (max-width: 768px) { - #twitter-widget-0 { - max-height: 50vh; - overflow: scroll; - } -} - .modlog-action { display: flex; flex-wrap: wrap; -- 2.34.1 From 39709cc3252605abaf59fb3d795330da9519d86a Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 02:16:08 +0200 Subject: [PATCH 110/130] restore diff messages to debug an issue --- files/routes/login.py | 1 + 1 file changed, 1 insertion(+) diff --git a/files/routes/login.py b/files/routes/login.py index 02d39bf50..47175ff44 100644 --- a/files/routes/login.py +++ b/files/routes/login.py @@ -235,6 +235,7 @@ def sign_up_post(v:Optional[User]): return signup_error("There was a problem. Please try again.") if not hmac.compare_digest(correct_formkey, form_formkey): + if SITE == 'localhost': return signup_error("There was a problem. Please try again!") return signup_error("There was a problem. Please try again.") if not request.values.get( -- 2.34.1 From 0b7152387410ec5e024513d59809643554b114ab Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 02:19:50 +0200 Subject: [PATCH 111/130] fix missing "+ 1" --- files/routes/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/routes/admin.py b/files/routes/admin.py index 5f61361fb..6bd254d10 100644 --- a/files/routes/admin.py +++ b/files/routes/admin.py @@ -831,7 +831,7 @@ def admin_removed_comments(v): try: page = int(request.values.get("page", 1)) except: page = 1 - ids = g.db.query(Comment.id).join(Comment.author).filter(or_(Comment.is_banned==True, User.shadowbanned != None)).order_by(Comment.id.desc()).offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE).all() + ids = g.db.query(Comment.id).join(Comment.author).filter(or_(Comment.is_banned==True, User.shadowbanned != None)).order_by(Comment.id.desc()).offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE + 1).all() ids=[x[0] for x in ids] next_exists = len(ids) > PAGE_SIZE ids = ids[:PAGE_SIZE] -- 2.34.1 From 9b0736ec20df1dc30800b231fb7a6fc112be9246 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 02:20:54 +0200 Subject: [PATCH 112/130] unpaywall profile views --- files/classes/user.py | 12 ------- files/helpers/const.py | 1 - files/routes/users.py | 21 ++++++++----- files/templates/errors/patron.html | 21 ------------- files/templates/userpage.html | 12 ++++--- files/templates/userpage/viewers.html | 24 -------------- files/templates/userpage/views.html | 45 +++++++++++++++++++++++++++ 7 files changed, 66 insertions(+), 70 deletions(-) delete mode 100644 files/templates/errors/patron.html delete mode 100644 files/templates/userpage/viewers.html create mode 100644 files/templates/userpage/views.html diff --git a/files/classes/user.py b/files/classes/user.py index 4d2289e68..468de4f69 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -141,7 +141,6 @@ class User(Base): subscriptions = relationship("Subscription", back_populates="user") following = relationship("Follow", primaryjoin="Follow.user_id==User.id", back_populates="user") followers = relationship("Follow", primaryjoin="Follow.target_id==User.id", back_populates="target") - viewers = relationship("ViewerRelationship", primaryjoin="User.id == ViewerRelationship.user_id") blocking = relationship("UserBlock", lazy="dynamic", primaryjoin="User.id==UserBlock.user_id", back_populates="user") blocked = relationship("UserBlock", lazy="dynamic", primaryjoin="User.id==UserBlock.target_id", back_populates="target") authorizations = relationship("ClientAuth", back_populates="user") @@ -945,17 +944,6 @@ class User(Base): def can_create_hole(self): return self.admin_level >= PERMS['HOLE_CREATE'] - @property - @lazy - def viewers_recorded(self): - if SITE_NAME == 'WPD': # WPD gets profile views - return True - elif self.admin_level >= PERMS['VIEW_PROFILE_VIEWS']: # Admins get profile views - return True - elif self.patron: # Patrons get profile views as a perk - return True - return False - @property @lazy def patron_tooltip(self): diff --git a/files/helpers/const.py b/files/helpers/const.py index 05262a206..a3cb980d7 100644 --- a/files/helpers/const.py +++ b/files/helpers/const.py @@ -254,7 +254,6 @@ PERMS = { # Minimum admin_level to perform action. 'VIEW_CHUDRAMA': 1, 'VIEW_PRIVATE_PROFILES': 2, 'VIEW_ALTS': 2, - 'VIEW_PROFILE_VIEWS': 2, 'VIEW_ACTIVE_USERS': 2, 'VIEW_ALL_USERS': 2, 'VIEW_ALT_VOTES': 2, diff --git a/files/routes/users.py b/files/routes/users.py index c5eb28ec0..095d3f294 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -654,13 +654,20 @@ def following(username, v): .order_by(Follow.created_utc).all() return render_template("userpage/following.html", v=v, u=u, users=users) -@app.get("/views") +@app.get("/@/views") @auth_required -def visitors(v:User): - if not v.viewers_recorded: - return render_template("errors/patron.html", v=v) - viewers=sorted(v.viewers, key = lambda x: x.last_view_utc, reverse=True) - return render_template("userpage/viewers.html", v=v, viewers=viewers) +def visitors(username, v:User): + u = get_user(username, v=v, include_shadowbanned=False) + + try: page = int(request.values.get("page", 1)) + except: page = 1 + + views = g.db.query(ViewerRelationship).filter_by(user_id=u.id).order_by(ViewerRelationship.last_view_utc.desc()).offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE + 1).limit(PAGE_SIZE + 1).all() + + next_exists = (len(views) > PAGE_SIZE) + views = views[:PAGE_SIZE] + + return render_template("userpage/views.html", v=v, u=u, views=views, next_exists=next_exists, page=page) @cache.memoize(timeout=86400) def userpagelisting(user:User, site=None, v=None, page:int=1, sort="new", t="all"): @@ -682,7 +689,7 @@ def u_username(username, v=None): return redirect(SITE_FULL + request.full_path.replace(username, u.username)) is_following = v and u.has_follower(v) - if v and v.id not in (u.id, DAD_ID) and u.viewers_recorded: + if v and v.id != u.id: g.db.flush() view = g.db.query(ViewerRelationship).filter_by(viewer_id=v.id, user_id=u.id).one_or_none() diff --git a/files/templates/errors/patron.html b/files/templates/errors/patron.html deleted file mode 100644 index c6655a3f8..000000000 --- a/files/templates/errors/patron.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "default.html" %} -{% block pagetitle %}401 Not Authorized{% endblock %} -{% block pagetype %}error-401{% endblock %} -{% block content %} -
    -
    -
    - :#marseymerchant: -
    401 Not Authorized
    -

    This page is only available to {% if SITE_NAME == 'rDrama' %}paypigs{% else %}patrons{% endif %}:

    - {% if FEATURES['MARSEYBUX'] and v.truescore -%} - {% if KOFI_LINK %} - {{KOFI_LINK}} - {% else %} - {{GUMROAD_LINK}} - {% endif %} - {%- endif %} -
    -
    -
    -{% endblock %} diff --git a/files/templates/userpage.html b/files/templates/userpage.html index 42ef0f00f..5c7299ddf 100644 --- a/files/templates/userpage.html +++ b/files/templates/userpage.html @@ -70,7 +70,9 @@ {% endif %} {% if v and (v.id == u.id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']) -%} - + {%- endif %}
    @@ -188,7 +190,6 @@
    {% if v and v.id == u.id %} Edit profile - Profile views {% endif %} {% if FEATURES['USERS_PROFILE_SONG'] and u.song and v and (v.id == u.id or v.mute and not u.unmutable) %} @@ -196,7 +197,7 @@ {% endif %}
    -
    +

    User ID: {{u.id}}

    Coins spent: {{u.coins_spent}}

    True score: {{u.truescore}}

    @@ -302,7 +303,9 @@ {% endif %} {% if v and (v.id == u.id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']) -%} - + {%- endif %}
    @@ -385,7 +388,6 @@
    {% if v and v.id == u.id %} Edit profile - Profile views {% endif %} {% if FEATURES['USERS_PROFILE_SONG'] and u.song and v and (v.id == u.id or v.mute and not u.unmutable) %} diff --git a/files/templates/userpage/viewers.html b/files/templates/userpage/viewers.html deleted file mode 100644 index 51d2cd242..000000000 --- a/files/templates/userpage/viewers.html +++ /dev/null @@ -1,24 +0,0 @@ -{% extends "default.html" %} -{% block pagetitle %}Profile Viewers{% endblock %} -{% block content %} -
    Users who viewed your profile
    -
    - - - - - - -{% for view in viewers %} - - - - -{% endfor %} -
    NameLast visit
    - {% with user=view.viewer %} - {% include "user_in_table.html" %} - {% endwith %} - {{view.last_view_string}}
    - -{% endblock %} diff --git a/files/templates/userpage/views.html b/files/templates/userpage/views.html new file mode 100644 index 000000000..5b4aeeed5 --- /dev/null +++ b/files/templates/userpage/views.html @@ -0,0 +1,45 @@ +{% extends "default.html" %} +{% block pagetitle %}Profile Views{% endblock %} +{% block content %} +
    Users who viewed @{{u.username}}'s profile
    +
    + + + + + + +{% for view in views %} + + + + +{% endfor %} +
    NameLast visit
    + {% with user=view.viewer %} + {% include "user_in_table.html" %} + {% endwith %} + {{view.last_view_string}}
    + +{% endblock %} + +{% block pagenav %} + +{% endblock %} -- 2.34.1 From 68335d562ceb9987486fba8b66658b19c69b873f Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 02:27:33 +0200 Subject: [PATCH 113/130] limited designed hats loserboard to rdrama.net --- files/routes/users.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/files/routes/users.py b/files/routes/users.py index 095d3f294..cbfdbc343 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -340,14 +340,16 @@ def leaderboard(v:User): truescore = Leaderboard("Truescore", "truescore", "truescore", "Truescore", None, Leaderboard.get_simple_lb, User.truescore, v, lambda u:u.truescore, g.db, users) badges = Leaderboard("Badges", "badges", "badges", "Badges", None, Leaderboard.get_badge_marsey_lb, Badge.user_id, v, None, g.db, None) - marseys = Leaderboard("Marseys", "Marseys made", "marseys", "Marseys", None, Leaderboard.get_badge_marsey_lb, Marsey.author_id, v, None, g.db, None) if SITE_NAME == 'rDrama' else None blocks = Leaderboard("Blocked", "most blocked", "blocked", "Blocked By", "blockers", Leaderboard.get_blockers_lb, UserBlock.target_id, v, None, g.db, None) owned_hats = Leaderboard("Owned hats", "owned hats", "owned-hats", "Owned Hats", None, Leaderboard.get_hat_lb, User.owned_hats, v, None, g.db, None) - designed_hats = Leaderboard("Designed hats", "designed hats", "designed-hats", "Designed Hats", None, Leaderboard.get_hat_lb, User.designed_hats, v, None, g.db, None) - leaderboards = [coins, coins_spent, truescore, subscribers, posts, comments, received_awards, badges, marseys, blocks, owned_hats, designed_hats] + leaderboards = [coins, coins_spent, truescore, subscribers, posts, comments, received_awards, badges, blocks, owned_hats] + + if SITE == 'rdrama.net': + leaderboards.append(Leaderboard("Designed hats", "designed hats", "designed-hats", "Designed Hats", None, Leaderboard.get_hat_lb, User.designed_hats, v, None, g.db, None)) + leaderboards.append(Leaderboard("Designed hats", "designed hats", "designed-hats", "Designed Hats", None, Leaderboard.get_hat_lb, User.designed_hats, v, None, g.db, None)) return render_template("leaderboard.html", v=v, leaderboards=leaderboards) -- 2.34.1 From 6f698f3f9c394c6f686fe563c1cc56861f7dc900 Mon Sep 17 00:00:00 2001 From: justcool393 Date: Sat, 26 Nov 2022 18:32:52 -0600 Subject: [PATCH 114/130] fix session bug --- files/routes/allroutes.py | 4 +++- files/routes/wrappers.py | 26 +++++++++++--------------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/files/routes/allroutes.py b/files/routes/allroutes.py index 6f19c5e9b..e6b4e3a1e 100644 --- a/files/routes/allroutes.py +++ b/files/routes/allroutes.py @@ -43,7 +43,9 @@ def before_request(): request.full_path = request.full_path.rstrip('?').rstrip('/') if not request.full_path: request.full_path = '/' - session_init() + if not session.get("session_id"): + session.permanent = True + session["session_id"] = secrets.token_hex(49) @app.after_request diff --git a/files/routes/wrappers.py b/files/routes/wrappers.py index 7a979058e..8255703ef 100644 --- a/files/routes/wrappers.py +++ b/files/routes/wrappers.py @@ -12,17 +12,13 @@ from files.helpers.settings import get_setting from files.routes.routehelpers import validate_formkey from files.__main__ import app, cache, db_session, limiter -def session_init(): - if not session.get("session_id"): - session.permanent = True - session["session_id"] = secrets.token_hex(49) def calc_users(v): + if not g.is_api_or_xhr: return loggedin = cache.get(f'{SITE}_loggedin') or {} loggedout = cache.get(f'{SITE}_loggedout') or {} timestamp = int(time.time()) - session_init() if v: if session["session_id"] in loggedout: del loggedout[session["session_id"]] loggedin[v.id] = timestamp @@ -48,7 +44,7 @@ def get_logged_in_user(): token = request.headers.get("Authorization","").strip() if token: client = g.db.query(ClientAuth).filter(ClientAuth.access_token == token).one_or_none() - if client: + if client: v = client.user v.client = client else: @@ -57,19 +53,19 @@ def get_logged_in_user(): id = int(lo_user) v = get_account(id, graceful=True) if not v: - session.clear() - return None + session.pop("lo_user") + v = None else: nonce = session.get("login_nonce", 0) if nonce < v.login_nonce or v.id != id: - session.clear() - return None + session.pop("lo_user") + v = None - if request.method != "GET": - submitted_key = request.values.get("formkey") - if not validate_formkey(v, submitted_key): abort(401) - - v.client = None + if v: + if request.method != "GET": + submitted_key = request.values.get("formkey") + if not validate_formkey(v, submitted_key): abort(401) + v.client = None g.is_api_or_xhr = bool((v and v.client) or request.headers.get("xhr")) if request.method.lower() != "get" and get_setting('Read-only mode') and not (v and v.admin_level >= PERMS['SITE_BYPASS_READ_ONLY_MODE']): -- 2.34.1 From 69ede62184a76695373f31f59460562b7b9a7d79 Mon Sep 17 00:00:00 2001 From: justcool393 Date: Sat, 26 Nov 2022 18:33:55 -0600 Subject: [PATCH 115/130] literally one line lmao --- files/routes/users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/routes/users.py b/files/routes/users.py index cbfdbc343..6dcdb3a9e 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -332,7 +332,7 @@ def leaderboard(v:User): users = users.filter(User.shadowbanned == None) coins = Leaderboard("Coins", "coins", "coins", "Coins", None, Leaderboard.get_simple_lb, User.coins, v, lambda u:u.coins, g.db, users) - subscribers = Leaderboard("Followers", "followers", "followers", "Followers", None, Leaderboard.get_simple_lb, User.stored_subscriber_count, v, lambda u:u.stored_subscriber_count, g.db, users) + subscribers = Leaderboard("Followers", "followers", "followers", "Followers", "followers", Leaderboard.get_simple_lb, User.stored_subscriber_count, v, lambda u:u.stored_subscriber_count, g.db, users) posts = Leaderboard("Posts", "post count", "posts", "Posts", "", Leaderboard.get_simple_lb, User.post_count, v, lambda u:u.post_count, g.db, users) comments = Leaderboard("Comments", "comment count", "comments", "Comments", "comments", Leaderboard.get_simple_lb, User.comment_count, v, lambda u:u.comment_count, g.db, users) received_awards = Leaderboard("Awards", "received awards", "awards", "Awards", None, Leaderboard.get_simple_lb, User.received_award_count, v, lambda u:u.received_award_count, g.db, users) -- 2.34.1 From e8c1cb954d698c6348ec346350f642c68c63fe07 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 02:34:58 +0200 Subject: [PATCH 116/130] order user blocks by most recent first --- files/routes/users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/routes/users.py b/files/routes/users.py index 6dcdb3a9e..32ad569ba 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -641,7 +641,7 @@ def blockers(username, v): users = g.db.query(UserBlock, User).join(UserBlock, UserBlock.target_id == u.id) \ .filter(UserBlock.user_id == User.id) \ - .order_by(UserBlock.created_utc).all() + .order_by(UserBlock.created_utc.desc()).all() return render_template("userpage/blockers.html", v=v, u=u, users=users) @app.get("/@/following") -- 2.34.1 From ed1bb78ba93ce416ddbfb8e8ff6d8504139aa01c Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 02:43:10 +0200 Subject: [PATCH 117/130] Revert "fix session bug" - pls for the love of god visit localhost after making a commit This reverts commit fcdad601fb671ba64b1f086a9d10c3107eeb7fec. --- files/routes/allroutes.py | 4 +--- files/routes/wrappers.py | 26 +++++++++++++++----------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/files/routes/allroutes.py b/files/routes/allroutes.py index e6b4e3a1e..6f19c5e9b 100644 --- a/files/routes/allroutes.py +++ b/files/routes/allroutes.py @@ -43,9 +43,7 @@ def before_request(): request.full_path = request.full_path.rstrip('?').rstrip('/') if not request.full_path: request.full_path = '/' - if not session.get("session_id"): - session.permanent = True - session["session_id"] = secrets.token_hex(49) + session_init() @app.after_request diff --git a/files/routes/wrappers.py b/files/routes/wrappers.py index 8255703ef..7a979058e 100644 --- a/files/routes/wrappers.py +++ b/files/routes/wrappers.py @@ -12,13 +12,17 @@ from files.helpers.settings import get_setting from files.routes.routehelpers import validate_formkey from files.__main__ import app, cache, db_session, limiter +def session_init(): + if not session.get("session_id"): + session.permanent = True + session["session_id"] = secrets.token_hex(49) def calc_users(v): - if not g.is_api_or_xhr: return loggedin = cache.get(f'{SITE}_loggedin') or {} loggedout = cache.get(f'{SITE}_loggedout') or {} timestamp = int(time.time()) + session_init() if v: if session["session_id"] in loggedout: del loggedout[session["session_id"]] loggedin[v.id] = timestamp @@ -44,7 +48,7 @@ def get_logged_in_user(): token = request.headers.get("Authorization","").strip() if token: client = g.db.query(ClientAuth).filter(ClientAuth.access_token == token).one_or_none() - if client: + if client: v = client.user v.client = client else: @@ -53,19 +57,19 @@ def get_logged_in_user(): id = int(lo_user) v = get_account(id, graceful=True) if not v: - session.pop("lo_user") - v = None + session.clear() + return None else: nonce = session.get("login_nonce", 0) if nonce < v.login_nonce or v.id != id: - session.pop("lo_user") - v = None + session.clear() + return None - if v: - if request.method != "GET": - submitted_key = request.values.get("formkey") - if not validate_formkey(v, submitted_key): abort(401) - v.client = None + if request.method != "GET": + submitted_key = request.values.get("formkey") + if not validate_formkey(v, submitted_key): abort(401) + + v.client = None g.is_api_or_xhr = bool((v and v.client) or request.headers.get("xhr")) if request.method.lower() != "get" and get_setting('Read-only mode') and not (v and v.admin_level >= PERMS['SITE_BYPASS_READ_ONLY_MODE']): -- 2.34.1 From b0e0be86a1927d649132edd98f4fe06314d7fc27 Mon Sep 17 00:00:00 2001 From: justcool393 Date: Sat, 26 Nov 2022 18:45:12 -0600 Subject: [PATCH 118/130] Revert "Revert "fix session bug" - pls for the love of god visit localhost after making a commit" This reverts commit b7efa6ddd366869d71d89d289677d279798827be. --- files/routes/allroutes.py | 4 +++- files/routes/wrappers.py | 26 +++++++++++--------------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/files/routes/allroutes.py b/files/routes/allroutes.py index 6f19c5e9b..e6b4e3a1e 100644 --- a/files/routes/allroutes.py +++ b/files/routes/allroutes.py @@ -43,7 +43,9 @@ def before_request(): request.full_path = request.full_path.rstrip('?').rstrip('/') if not request.full_path: request.full_path = '/' - session_init() + if not session.get("session_id"): + session.permanent = True + session["session_id"] = secrets.token_hex(49) @app.after_request diff --git a/files/routes/wrappers.py b/files/routes/wrappers.py index 7a979058e..8255703ef 100644 --- a/files/routes/wrappers.py +++ b/files/routes/wrappers.py @@ -12,17 +12,13 @@ from files.helpers.settings import get_setting from files.routes.routehelpers import validate_formkey from files.__main__ import app, cache, db_session, limiter -def session_init(): - if not session.get("session_id"): - session.permanent = True - session["session_id"] = secrets.token_hex(49) def calc_users(v): + if not g.is_api_or_xhr: return loggedin = cache.get(f'{SITE}_loggedin') or {} loggedout = cache.get(f'{SITE}_loggedout') or {} timestamp = int(time.time()) - session_init() if v: if session["session_id"] in loggedout: del loggedout[session["session_id"]] loggedin[v.id] = timestamp @@ -48,7 +44,7 @@ def get_logged_in_user(): token = request.headers.get("Authorization","").strip() if token: client = g.db.query(ClientAuth).filter(ClientAuth.access_token == token).one_or_none() - if client: + if client: v = client.user v.client = client else: @@ -57,19 +53,19 @@ def get_logged_in_user(): id = int(lo_user) v = get_account(id, graceful=True) if not v: - session.clear() - return None + session.pop("lo_user") + v = None else: nonce = session.get("login_nonce", 0) if nonce < v.login_nonce or v.id != id: - session.clear() - return None + session.pop("lo_user") + v = None - if request.method != "GET": - submitted_key = request.values.get("formkey") - if not validate_formkey(v, submitted_key): abort(401) - - v.client = None + if v: + if request.method != "GET": + submitted_key = request.values.get("formkey") + if not validate_formkey(v, submitted_key): abort(401) + v.client = None g.is_api_or_xhr = bool((v and v.client) or request.headers.get("xhr")) if request.method.lower() != "get" and get_setting('Read-only mode') and not (v and v.admin_level >= PERMS['SITE_BYPASS_READ_ONLY_MODE']): -- 2.34.1 From 45c232d3b2d5f807cd1595435be8d7b2d4eed3a8 Mon Sep 17 00:00:00 2001 From: justcool393 Date: Sat, 26 Nov 2022 18:55:26 -0600 Subject: [PATCH 119/130] fix missing loggedin_counter and loggedout_counter --- files/routes/wrappers.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/files/routes/wrappers.py b/files/routes/wrappers.py index 8255703ef..13be4ed23 100644 --- a/files/routes/wrappers.py +++ b/files/routes/wrappers.py @@ -14,7 +14,10 @@ from files.__main__ import app, cache, db_session, limiter def calc_users(v): - if not g.is_api_or_xhr: return + if g.is_api_or_xhr: + g.loggedin_counter = 0 + g.loggedout_counter = 0 + return '' loggedin = cache.get(f'{SITE}_loggedin') or {} loggedout = cache.get(f'{SITE}_loggedout') or {} timestamp = int(time.time()) -- 2.34.1 From 0a364939bbc45b4bac376e272bcbb8073a6888cd Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 02:59:16 +0200 Subject: [PATCH 120/130] add pages to /followers /following /blockers and order them all by most recent first --- files/routes/users.py | 38 ++++++++++++++++---- files/templates/userpage/blockers.html | 23 +++++++++++- files/templates/userpage/followers.html | 23 +++++++++++- files/templates/userpage/following.html | 23 +++++++++++- files/templates/userpage/voted_comments.html | 2 +- files/templates/userpage/voters.html | 2 +- 6 files changed, 99 insertions(+), 12 deletions(-) diff --git a/files/routes/users.py b/files/routes/users.py index 32ad569ba..228802788 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -629,20 +629,36 @@ def followers(username, v): if not (v.id == u.id or v.admin_level >= PERMS['USER_FOLLOWS_VISIBLE']): abort(403) + try: page = int(request.values.get("page", 1)) + except: page = 1 + users = g.db.query(Follow, User).join(Follow, Follow.target_id == u.id) \ .filter(Follow.user_id == User.id) \ - .order_by(Follow.created_utc).all() - return render_template("userpage/followers.html", v=v, u=u, users=users) + .order_by(Follow.created_utc.desc()) \ + .offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE + 1).all() + + next_exists = (len(users) > PAGE_SIZE) + users = users[:PAGE_SIZE] + + return render_template("userpage/followers.html", v=v, u=u, users=users, page=page, next_exists=next_exists) @app.get("/@/blockers") @auth_required def blockers(username, v): u = get_user(username, v=v, include_shadowbanned=False) + try: page = int(request.values.get("page", 1)) + except: page = 1 + users = g.db.query(UserBlock, User).join(UserBlock, UserBlock.target_id == u.id) \ .filter(UserBlock.user_id == User.id) \ - .order_by(UserBlock.created_utc.desc()).all() - return render_template("userpage/blockers.html", v=v, u=u, users=users) + .order_by(UserBlock.created_utc.desc()) \ + .offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE + 1).all() + + next_exists = (len(users) > PAGE_SIZE) + users = users[:PAGE_SIZE] + + return render_template("userpage/blockers.html", v=v, u=u, users=users, page=page, next_exists=next_exists) @app.get("/@/following") @auth_required @@ -651,10 +667,18 @@ def following(username, v): if not (v.id == u.id or v.admin_level >= PERMS['USER_FOLLOWS_VISIBLE']): abort(403) + try: page = int(request.values.get("page", 1)) + except: page = 1 + users = g.db.query(User).join(Follow, Follow.user_id == u.id) \ .filter(Follow.target_id == User.id) \ - .order_by(Follow.created_utc).all() - return render_template("userpage/following.html", v=v, u=u, users=users) + .order_by(Follow.created_utc.desc()) \ + .offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE + 1).all() + + next_exists = (len(users) > PAGE_SIZE) + users = users[:PAGE_SIZE] + + return render_template("userpage/following.html", v=v, u=u, users=users, page=page, next_exists=next_exists) @app.get("/@/views") @auth_required @@ -664,7 +688,7 @@ def visitors(username, v:User): try: page = int(request.values.get("page", 1)) except: page = 1 - views = g.db.query(ViewerRelationship).filter_by(user_id=u.id).order_by(ViewerRelationship.last_view_utc.desc()).offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE + 1).limit(PAGE_SIZE + 1).all() + views = g.db.query(ViewerRelationship).filter_by(user_id=u.id).order_by(ViewerRelationship.last_view_utc.desc()).offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE + 1).all() next_exists = (len(views) > PAGE_SIZE) views = views[:PAGE_SIZE] diff --git a/files/templates/userpage/blockers.html b/files/templates/userpage/blockers.html index f5d593c11..a9024ba94 100644 --- a/files/templates/userpage/blockers.html +++ b/files/templates/userpage/blockers.html @@ -1,7 +1,7 @@ {% extends "default.html" %} {% block pagetitle %}@{{u.username}}'s blockers{% endblock %} {% block content %} -
    @{{u.username}}'s blockers
    +
    @{{u.username}}'s blockers
    @@ -24,3 +24,24 @@ {% endblock %} + +{% block pagenav %} + +{% endblock %} diff --git a/files/templates/userpage/followers.html b/files/templates/userpage/followers.html index 75ef2d80c..6cbb94050 100644 --- a/files/templates/userpage/followers.html +++ b/files/templates/userpage/followers.html @@ -1,7 +1,7 @@ {% extends "default.html" %} {% block pagetitle %}@{{u.username}}'s followers{% endblock %} {% block content %} -
    @{{u.username}}'s followers
    +
    @{{u.username}}'s followers
    @@ -30,3 +30,24 @@ {% endblock %} + +{% block pagenav %} + +{% endblock %} diff --git a/files/templates/userpage/following.html b/files/templates/userpage/following.html index fcbcd18a3..b66b42cd6 100644 --- a/files/templates/userpage/following.html +++ b/files/templates/userpage/following.html @@ -1,7 +1,7 @@ {% extends "default.html" %} {% block pagetitle %}Users followed by @{{u.username}}{% endblock %} {% block content %} -
    Users followed by @{{u.username}}
    +
    Users followed by @{{u.username}}
    @@ -28,3 +28,24 @@ {% endblock %} + +{% block pagenav %} + +{% endblock %} diff --git a/files/templates/userpage/voted_comments.html b/files/templates/userpage/voted_comments.html index fa36d355b..c36a162d9 100644 --- a/files/templates/userpage/voted_comments.html +++ b/files/templates/userpage/voted_comments.html @@ -13,6 +13,6 @@ - {% endif %} + {% endif %} {% endblock %} diff --git a/files/templates/userpage/voters.html b/files/templates/userpage/voters.html index e9b6ea990..7ca404fe6 100644 --- a/files/templates/userpage/voters.html +++ b/files/templates/userpage/voters.html @@ -1,7 +1,7 @@ {% extends "default.html" %} {% block pagetitle %}{{name2}}{% endblock %} {% block content %} -

    {{name2}}

    +

    {{name2}}

    Total: {{total}}
    -- 2.34.1 From 5f15560150bc398bc92e69d444c79a23ee68d329 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 03:00:32 +0200 Subject: [PATCH 121/130] Revert "fix missing loggedin_counter and loggedout_counter" This reverts commit 14828bd9f4c88ce90769c071a1b5405111c11c4c. --- files/routes/wrappers.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/files/routes/wrappers.py b/files/routes/wrappers.py index 13be4ed23..8255703ef 100644 --- a/files/routes/wrappers.py +++ b/files/routes/wrappers.py @@ -14,10 +14,7 @@ from files.__main__ import app, cache, db_session, limiter def calc_users(v): - if g.is_api_or_xhr: - g.loggedin_counter = 0 - g.loggedout_counter = 0 - return '' + if not g.is_api_or_xhr: return loggedin = cache.get(f'{SITE}_loggedin') or {} loggedout = cache.get(f'{SITE}_loggedout') or {} timestamp = int(time.time()) -- 2.34.1 From 5621c4b38d19f1ec354a049375bdf096f043d8c3 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 03:01:02 +0200 Subject: [PATCH 122/130] Revert "Revert "Revert "fix session bug" - pls for the love of god visit localhost after making a commit"" This reverts commit e6a328fc3a18565d3984f4458fa8aebb975d7420. --- files/routes/allroutes.py | 4 +--- files/routes/wrappers.py | 26 +++++++++++++++----------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/files/routes/allroutes.py b/files/routes/allroutes.py index e6b4e3a1e..6f19c5e9b 100644 --- a/files/routes/allroutes.py +++ b/files/routes/allroutes.py @@ -43,9 +43,7 @@ def before_request(): request.full_path = request.full_path.rstrip('?').rstrip('/') if not request.full_path: request.full_path = '/' - if not session.get("session_id"): - session.permanent = True - session["session_id"] = secrets.token_hex(49) + session_init() @app.after_request diff --git a/files/routes/wrappers.py b/files/routes/wrappers.py index 8255703ef..7a979058e 100644 --- a/files/routes/wrappers.py +++ b/files/routes/wrappers.py @@ -12,13 +12,17 @@ from files.helpers.settings import get_setting from files.routes.routehelpers import validate_formkey from files.__main__ import app, cache, db_session, limiter +def session_init(): + if not session.get("session_id"): + session.permanent = True + session["session_id"] = secrets.token_hex(49) def calc_users(v): - if not g.is_api_or_xhr: return loggedin = cache.get(f'{SITE}_loggedin') or {} loggedout = cache.get(f'{SITE}_loggedout') or {} timestamp = int(time.time()) + session_init() if v: if session["session_id"] in loggedout: del loggedout[session["session_id"]] loggedin[v.id] = timestamp @@ -44,7 +48,7 @@ def get_logged_in_user(): token = request.headers.get("Authorization","").strip() if token: client = g.db.query(ClientAuth).filter(ClientAuth.access_token == token).one_or_none() - if client: + if client: v = client.user v.client = client else: @@ -53,19 +57,19 @@ def get_logged_in_user(): id = int(lo_user) v = get_account(id, graceful=True) if not v: - session.pop("lo_user") - v = None + session.clear() + return None else: nonce = session.get("login_nonce", 0) if nonce < v.login_nonce or v.id != id: - session.pop("lo_user") - v = None + session.clear() + return None - if v: - if request.method != "GET": - submitted_key = request.values.get("formkey") - if not validate_formkey(v, submitted_key): abort(401) - v.client = None + if request.method != "GET": + submitted_key = request.values.get("formkey") + if not validate_formkey(v, submitted_key): abort(401) + + v.client = None g.is_api_or_xhr = bool((v and v.client) or request.headers.get("xhr")) if request.method.lower() != "get" and get_setting('Read-only mode') and not (v and v.admin_level >= PERMS['SITE_BYPASS_READ_ONLY_MODE']): -- 2.34.1 From 44e2044ac6ad1f2f3fdecafea69c0489891a8e38 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 03:27:06 +0200 Subject: [PATCH 123/130] remove carp exception in /followers since we have pages now --- files/routes/users.py | 1 - 1 file changed, 1 deletion(-) diff --git a/files/routes/users.py b/files/routes/users.py index 228802788..c11e50250 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -624,7 +624,6 @@ def redditor_moment_redirect(username, v): @auth_required def followers(username, v): u = get_user(username, v=v, include_shadowbanned=False) - if u.id == CARP_ID and SITE == 'watchpeopledie.tv': abort(403) if not (v.id == u.id or v.admin_level >= PERMS['USER_FOLLOWS_VISIBLE']): abort(403) -- 2.34.1 From f4fcc4bd09e910e2cbb7c6f78d3d5fb8b6c5f277 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 03:28:20 +0200 Subject: [PATCH 124/130] make "unmark +18" green --- files/templates/comments.html | 6 +++--- files/templates/post_admin_actions_mobile.html | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/files/templates/comments.html b/files/templates/comments.html index 291aaa34a..2f10f816b 100644 --- a/files/templates/comments.html +++ b/files/templates/comments.html @@ -486,7 +486,7 @@ {% endif %} {% if c.parent_submission and (c.author_id==v.id or v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or (c.post.sub and v.mods(c.post.sub))) %} - + {% endif %} @@ -652,7 +652,7 @@ {% if c.author_id == v.id or (c.post.sub and v.mods(c.post.sub)) %} - + {% endif %} {% if v.admin_level < PERMS['POST_COMMENT_MODERATION'] %} @@ -710,7 +710,7 @@ - + {% endif %} {% if v.id != c.author_id and v.admin_level >= PERMS['USER_BAN'] %} diff --git a/files/templates/post_admin_actions_mobile.html b/files/templates/post_admin_actions_mobile.html index b92ada182..d0598e4a2 100644 --- a/files/templates/post_admin_actions_mobile.html +++ b/files/templates/post_admin_actions_mobile.html @@ -34,7 +34,7 @@ {% endif %} {% if v.admin_level >= PERMS['POST_COMMENT_MODERATION'] %} - + {% endif %} {% if v.id != p.author_id and v.admin_level >= PERMS['USER_BAN'] %} -- 2.34.1 From 1c12cbe21df111e4334df0d75d28660981e67fff Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sun, 27 Nov 2022 03:31:46 +0200 Subject: [PATCH 125/130] add !YOU! to post bodies and to comments --- files/classes/comment.py | 6 ++++++ files/classes/submission.py | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/files/classes/comment.py b/files/classes/comment.py index f92b328cd..b1cfa23bd 100644 --- a/files/classes/comment.py +++ b/files/classes/comment.py @@ -294,6 +294,9 @@ class Comment(Base): if not self.ghost and self.author.show_sig(v): body += f"
    {self.author.sig_html}" + if v: + body = body.replace("!YOU!", v.username) + return body @lazy @@ -309,6 +312,9 @@ class Comment(Base): body = censor_slurs(body, v).replace(':marseytrain:', ':marseytrain:') + if v: + body = body.replace("!YOU!", v.username) + return body @lazy diff --git a/files/classes/submission.py b/files/classes/submission.py index 4383629d7..526f8112f 100644 --- a/files/classes/submission.py +++ b/files/classes/submission.py @@ -324,6 +324,9 @@ class Submission(Base): if not listing and not self.ghost and self.author.show_sig(v): body += f"
    {self.author.sig_html}" + if v: + body = body.replace("!YOU!", v.username) + return body @lazy @@ -337,6 +340,10 @@ class Submission(Base): body = censor_slurs(body, v).replace(':marseytrain:', ':marseytrain:') body = normalize_urls_runtime(body, v) + + if v: + body = body.replace("!YOU!", v.username) + return body @lazy -- 2.34.1 From 652e3ff96b0194c1db270c0cb7510eb4c0bf704d Mon Sep 17 00:00:00 2001 From: Aevann Date: Sun, 27 Nov 2022 03:42:28 +0200 Subject: [PATCH 126/130] remove loop.index on stuff thats ordered by most recent (cuz confusing) --- files/templates/userpage/blockers.html | 2 -- files/templates/userpage/followers.html | 2 -- files/templates/userpage/following.html | 2 -- 3 files changed, 6 deletions(-) diff --git a/files/templates/userpage/blockers.html b/files/templates/userpage/blockers.html index a9024ba94..61a3bf517 100644 --- a/files/templates/userpage/blockers.html +++ b/files/templates/userpage/blockers.html @@ -5,7 +5,6 @@
    - @@ -13,7 +12,6 @@ {% for block, user in users %} - diff --git a/files/templates/userpage/followers.html b/files/templates/userpage/followers.html index 6cbb94050..548a96ce5 100644 --- a/files/templates/userpage/followers.html +++ b/files/templates/userpage/followers.html @@ -5,7 +5,6 @@
    # Name Blocking since
    {{loop.index}} {% include "user_in_table.html" %} 1599343262 %}data-time="{{block.created_utc}}"{% endif %}>
    - {% if v.id == u.id %} @@ -16,7 +15,6 @@ {% for follow, user in users %} - {% if v.id == u.id %} diff --git a/files/templates/userpage/following.html b/files/templates/userpage/following.html index b66b42cd6..beba6eff6 100644 --- a/files/templates/userpage/following.html +++ b/files/templates/userpage/following.html @@ -5,7 +5,6 @@
    # Name Following since
    {{loop.index}} {% include "user_in_table.html" %} 1599343262 %}data-time="{{follow.created_utc}}"{% endif %}>
    - {% if v.id == u.id %} @@ -15,7 +14,6 @@ {% for user in users %} - {% if v.id == u.id %} -- 2.34.1 From 9f75c19abd542e2e31941c1875d0bb63a6bb394a Mon Sep 17 00:00:00 2001 From: Aevann Date: Sun, 27 Nov 2022 03:45:28 +0200 Subject: [PATCH 127/130] fix designed hats being duplicated --- files/routes/users.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/routes/users.py b/files/routes/users.py index c11e50250..e8d2a2a41 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -349,7 +349,7 @@ def leaderboard(v:User): if SITE == 'rdrama.net': leaderboards.append(Leaderboard("Designed hats", "designed hats", "designed-hats", "Designed Hats", None, Leaderboard.get_hat_lb, User.designed_hats, v, None, g.db, None)) - leaderboards.append(Leaderboard("Designed hats", "designed hats", "designed-hats", "Designed Hats", None, Leaderboard.get_hat_lb, User.designed_hats, v, None, g.db, None)) + leaderboards.append(Leaderboard("Marseys", "Marseys made", "marseys", "Marseys", None, Leaderboard.get_badge_marsey_lb, Marsey.author_id, v, None, g.db, None)) return render_template("leaderboard.html", v=v, leaderboards=leaderboards) -- 2.34.1 From 3c1c4c7cdc5d86554e159e491e8ba7334075d5a0 Mon Sep 17 00:00:00 2001 From: Aevann Date: Sun, 27 Nov 2022 04:01:43 +0200 Subject: [PATCH 128/130] clean up .gitignore --- .gitignore | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index ef6e05bf0..ce4ac958b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,22 +1,9 @@ -image.* -video.mp4 -unsanitized.mp4 -cache/ +.* __pycache__/ -.idea/ -venv/ -.vscode/ -.sass-cache/ -flask_session/ -.DS_Store -site_settings.json -/files/test.py -tags # Chat environment chat/node_modules chat/build -chat/.env # Chat artefacts files/assets/css/chat_done.css -- 2.34.1 From 1bdafa6c16a55bd10ad01bc8d301a6880a760795 Mon Sep 17 00:00:00 2001 From: Aevann Date: Sun, 27 Nov 2022 04:07:45 +0200 Subject: [PATCH 129/130] Revert "make awards significantly less retarded (#12)" This reverts commit 04dbda7f0325e2703c6b77445ca5538a353d9283. --- files/assets/css/awards.css | 322 +++++++++++++++++++++--------------- files/assets/css/main.css | 17 -- files/assets/js/ricardo.js | 26 +++ files/templates/awards.html | 112 +++++++------ 4 files changed, 283 insertions(+), 194 deletions(-) create mode 100644 files/assets/js/ricardo.js diff --git a/files/assets/css/awards.css b/files/assets/css/awards.css index 93f540411..56e7b4a45 100644 --- a/files/assets/css/awards.css +++ b/files/assets/css/awards.css @@ -1,159 +1,219 @@ -#awards-container { - position:fixed; - pointer-events: none; - z-index:9999; -} - -#awards-container > div { - position: absolute; -} - -/*seal*/ -.wholesome img { - width: 100px !important; - height: 89.5px !important; -} -@media (max-width: 992px) { - .wholesome img { - width: 40px !important; - height: 27px !important; - } -} - -.wholesome {animation: sealX 9s linear infinite} -.wholesome img {animation: sealY 10s linear infinite} - -.wholesome1 {animation-direction: alternate} -.wholesome1 img {animation-direction: alternate} -.wholesome2 {animation-direction: alternate-reverse} -.wholesome2 img {animation-direction: alternate-reverse} -.wholesome3 {animation-direction: alternate} -.wholesome3 img {animation-direction: alternate-reverse} -.wholesome4 {animation-direction: alternate-reverse} -.wholesome4 img {animation-direction: alternate} - -@keyframes sealX { - from {} to {transform: translateX(98vw)} -} -@keyframes sealY { - from {} to {transform: translateY(85vh)} -} - -/*train common*/ -.train1, .scooter1 {top:2%} -.train2, .scooter2 {top:27%} -.train3, .scooter3 {top:52%} -.train4, .scooter4 {top:77%} - -@keyframes train { - from {transform: translateX(-3vw)} - to {transform: translateX(99vw)} -} - -/*train*/ -.train img { - width: 100px !important; - height: 51px !important; -} -@media (max-width: 992px) { - .train img { - width: 40px !important; - height: 20px !important; - } -} - -.train{animation: train 11s linear infinite;} -.train:nth-of-type(odd) {animation-direction: reverse;} -.train:nth-of-type(odd) img {transform: scaleX(-1);} - -/*scooter*/ -.scooter img { - width: 100px !important; - height: 135px !important; -} -@media (max-width: 992px) { - .scooter img { - width: 40px !important; - height: 54px !important; - } -} - -.scooter {animation: train 11s linear infinite;} -.scooter:nth-of-type(even) {animation-direction: reverse;} -.scooter:nth-of-type(even) img {transform: scaleX(-1);} - /*confetti*/ -.confetti { +#post-award-confetti { + position: fixed; + z-index: 9998; + width: 100%; + height: 100%; + pointer-events: none !important; background-image: url(/assets/images/confetti2.webp); background-repeat: repeat; } /*fireworks*/ +.firework { + position:fixed; + z-index:9999; + pointer-events: none; + width: 100% !important; + height: 100% !important; + pointer-events: none !important; +} + .firework img { max-width: 15rem; } /*ricardo*/ .ricardo { - position: fixed !important; - bottom: 0; + position: fixed; + z-index: 9997; + pointer-events: none !important; } + .ricardo img { - max-height: min(30vw,15rem); + max-height: 15rem !important; + max-height: min(30vw,15rem) !important; } -.ricardo1 {animation: ricardo1Xa 5.8s linear infinite, ricardo1Xb 11.6s linear infinite, ricardo1Y 23.2s linear infinite;} -.ricardo2 {animation: ricardo2 8.5s linear infinite;} -.ricardo3 {animation: ricardo3 10s linear infinite;} - -@keyframes ricardo1Xa { - 0% {right: -200px} - 50% {right: 200px} - 100% {right: -200px} +.ricardoleft { + animation: ricardoleft 2.9s 2 alternate !important; } -@keyframes ricardo1Xb { - 0%{left:unset} - 49% {left: unset} - 50% {left: -200px} - 75% {left:200px} - 100% {left: -200px} +.ricardoright { + animation: ricardoright 2.9s 2 alternate !important; } -@keyframes ricardo1Y { - 0% {bottom:20vh} - 24% {bottom: 20vh} - 25% {bottom: 60vh} - 49% {bottom: 60vh} - 50% {bottom: 10vh} - 74% {bottom: 10vh} - 75% {bottom: 50vh} - 99% {bottom: 50vh} - 100% {bottom: 20vh} +@keyframes ricardoleft { + from {} + to {transform: translateX(200px);} } +@keyframes ricardoright { + from {transform: translateX(110vw);} + to {transform: translateX(95vw);} +} + +#ricardo1 { + top:70%; + left:-10%; +} + +#ricardo2 { + top:80%; + left:50%; + animation: ricardo2 1.7s linear infinite !important; + max-height:200px; +} + +#ricardo3 { + top:85%; + animation: ricardo3 10s linear infinite !important; + max-height:150px; +} @keyframes ricardo2 { - 0% { opacity: 1; left: 0; right: unset;} - 18% {opacity: 0; left: 0; right: unset;} - 19% {opacity: 0; left: unset; right: 20vw;} - 20% {opacity: 1; left: unset; right: 20vw;} - 38% {opacity: 0; left: unset; right: 20vw;} - 39% {opacity: 0; left: 20vw; right: unset;} - 40% {opacity: 1; left: 20vw; right: unset;} - 58% {opacity: 0; left: 20vw; right: unset;} - 59% {opacity: 0; left: unset;right: 60vw;} - 60% {opacity: 1; left: unset; right: 60vw;} - 78% {opacity: 0; left: unset; right: 60vw;} - 79% {opacity: 0; left: 80vw; right: unset;} - 80% {opacity: 1; left: 80vw; right: unset;} - 98% {opacity: 0; left: 80vw; right: unset;} - 99% {opacity: 0; left: 0; right: unset;} - 100% {opacity: 1; left: 0; right: unset;} + 0% {opacity:20%} + 50% {opacity:100%} + 100% {opacity:0%} } @keyframes ricardo3 { - 50% {transform: translateX(100vw); top: unset; bottom: 0;} - 51% {transform: translateX(100vw) rotate(180deg); top: 0; bottom: unset;} - 100% {transform: translateX(-15vw) rotate(180deg); top: 0; bottom: unset;} + 50% {transform: translateX(105vw);} + 51% {transform: translate(105vw,-86vh) rotate(180deg);} + 100% {transform: translate(-15vw,-86vh) rotate(180deg);} +} + +@media (max-width: 768px) { + @keyframes ricardo3 { + 50% {transform: translateX(105vw);} + 51% {transform: translate(105vw,-86vh) rotate(180deg);} + 100% {transform: translate(-70vw,-86vh) rotate(180deg);} + } +} + +/*glow*/ +.glow .post-title, .glow a, .glow .post-meta *, .glow .user-info *, .glow .comment-text, .glow .comment-actions *, .glow { + color:lightgreen !important; + text-shadow:1px 1px 1px darkgreen, 0 0 5px green; +} + +.glow .score-up, .glow .active.arrow-up::before, .glow .arrow-up::after, .glow .arrow-up:hover::before { + color: lime !important; +} + +.glow .score-down, .glow .active.arrow-down::before, .glow .arrow-down::after, .glow .arrow-down:hover::before { + color: lime !important; +} + +.glow .arrow-up::before, .glow .arrow-down::before, .glow .score { + color: lightgreen; +} + +.glow .post-body a, .glow .comment-text a { + text-decoration: underline; +} + +/*train*/ +.train { + position:fixed; + z-index:9999; + pointer-events: none; +} + +.trainimg { + width: 100px !important; + height: 51px !important; +} + +@media (max-width: 992px) { + .trainimg { + width: 40px !important; + height: 20px !important; + } +} + +.train1 { + top: 10% +} + +.train2 { + top: 35% +} + +.train3 { + top: 60% +} + +.train4 { + top: 85% +} + +/*scooter*/ +.scooterimg { + width: 100px !important; + height: 135px !important; +} +@media (max-width: 992px) { + .scooterimg { + width: 40px !important; + height: 54px !important; + } +} + +/*seal*/ +.seal { + position:fixed; + z-index:9999; + pointer-events: none; + width: 100% !important; + height: 100% !important; +} + +.sealimg { + width: 100px !important; + height: 89.5px !important; +} +@media (max-width: 992px) { + .sealimg { + width: 30px !important; + height: 27px !important; + } +} + +@keyframes moveX { + from {} to {transform: translateX(98vw)} +} + +@keyframes moveY { + from {} to {transform: translateY(90vh)} +} + +.seal1 { + animation: moveX 4s linear 0s infinite alternate !important; +} + +.seal1 > img { + animation: moveY 6.8s linear 0s infinite alternate !important; +} + +.seal2 { + animation: moveX 5s linear 0s infinite alternate-reverse !important; +} + +.seal2 > img { + animation: moveY 8s linear 0s infinite alternate-reverse !important; +} + +.seal3 { + animation: moveX 4s linear 0s infinite alternate !important; +} +.seal3 > img { + animation: moveY 5s linear 0s infinite alternate-reverse !important; +} + +.seal4 { + animation: moveX 5s linear 0s infinite alternate-reverse !important; +} +.seal4 > img { + animation: moveY 6.8s linear 0s infinite alternate !important; } diff --git a/files/assets/css/main.css b/files/assets/css/main.css index d1b8ed168..954746a51 100644 --- a/files/assets/css/main.css +++ b/files/assets/css/main.css @@ -5027,23 +5027,6 @@ img[src="/i/hand.webp"]+img[glow]:not([data-src]) { pat-pfp-anim .3s infinite; } -.glow .post-title, .glow a, .glow .post-meta *, .glow .user-info *, .glow .comment-text, .glow .comment-actions *, .glow { - color:lightgreen !important; - text-shadow:1px 1px 1px darkgreen, 0 0 5px green; -} -.glow .score-up, .glow .active.arrow-up::before, .glow .arrow-up::after, .glow .arrow-up:hover::before { - color: lime !important; -} -.glow .score-down, .glow .active.arrow-down::before, .glow .arrow-down::after, .glow .arrow-down:hover::before { - color: lime !important; -} -.glow .arrow-up::before, .glow .arrow-down::before, .glow .score { - color: lightgreen; -} -.glow .post-body a, .glow .comment-text a { - text-decoration: underline; -} - @keyframes rb { 10% { color: red; } 20% { color: orange; } diff --git a/files/assets/js/ricardo.js b/files/assets/js/ricardo.js new file mode 100644 index 000000000..a7b178d6d --- /dev/null +++ b/files/assets/js/ricardo.js @@ -0,0 +1,26 @@ +var isleft = true +setInterval(() => { + let ricardo1 = document.getElementById("ricardo1") + var height = Math.floor(Math.random()*60)+10 + if (ricardo1) { + ricardo1.firstElementChild.src = "" + + if (isleft == true) { + ricardo1.className = "ricardo ricardoright" + isleft = false + } else { + ricardo1.className = "ricardo ricardoleft" + isleft = true + } + + ricardo1.firstElementChild.src = "/i/ricardo1.webp" + ricardo1.style.top=height+"%" + } +}, 5800) + +setInterval(() => { + let ricardo2 = document.getElementById("ricardo2") + var xpos = Math.floor(Math.random()*9)*10 + + if (ricardo2) ricardo2.style.left=xpos+"%" +}, 1700) \ No newline at end of file diff --git a/files/templates/awards.html b/files/templates/awards.html index 425735cd3..738cb320f 100644 --- a/files/templates/awards.html +++ b/files/templates/awards.html @@ -1,51 +1,40 @@ -
    -{% macro stackable_award(award, src, alt) %} - {% for i in range(min(p.award_count(award, v), 4)) %} -
    - {{alt}} +{% if SITE_NAME == 'PCM' %} + {% set wholesome = '/i/wholesome.webp' %} +{% else %} + {% set wholesome = '/e/marseywholesome.webp' %} +{% endif %} + +{% for i in range(min(p.award_count("wholesome", v), 4)) %} + {% if g.inferior_browser %} +
    + :#marseywholesome:
    - {% endfor %} -{% endmacro %} + {% else %} + {% set seal_vertical = 'up' if (i % 2) == 0 else 'down' %} + {% set seal_horizontal = 'right' if i < 2 else 'left' %} + + + :#marseywholesome: + + + {% endif %} +{% endfor %} -{% if p.award_count("wholesome", v) %} - {% set wholesome = '/i/wholesome.webp' if SITE_NAME == PCM else '/e/marseywholesome.webp' %} - {{ stackable_award('wholesome', wholesome, ':#marseywholesome:') }} -{% endif %} +{% for i in range(min(p.award_count("train", v), 4)) %} + {% set train_dir = 'left' if (i % 2) == 0 else 'right' %} + {% set train_mirror = ' mirrored' if (i % 2) == 0 else '' %} + + :#marseytrain: + +{% endfor %} -{% if p.award_count("train", v) %} - {{ stackable_award('train', '/e/marseytrain.webp', ':#marseytrain:') }} -{% endif %} - -{% if p.award_count("scooter", v) %} - {{ stackable_award('scooter', '/e/marseyscooter.webp', ':#marseyscooter:') }} -{% endif %} - -{% if p.award_count("firework", v) %} - - {{ stackable_award('firework', i) }} -{% endif %} - -{% if p.award_count("confetti", v) %} -
    -{% endif %} - -{% if p.award_count("ricardo", v) %} - {% for i in range(min(p.award_count("ricardo", v), 3)) %} -
    - -
    - {% endfor %} -{% endif %} - -{% if p.award_count("shit", v) %} - - -{% endif %} - -{% if p.award_count("fireflies", v) %} - - -{% endif %} +{% for i in range(min(p.award_count("scooter", v), 4)) %} + {% set scooter_dir = 'right' if (i % 2) == 0 else 'left' %} + {% set scooter_mirror = '' if (i % 2) == 0 else ' mirrored' %} + + :#marseyscooter: + +{% endfor %} {% if p.award_count("tilt", v) %} {% endif %} -
    +{% if p.award_count("confetti", v) %} +
    +{% endif %} + +{% if p.award_count("firework", v) %} + + {% for i in range(min(p.award_count("firework", v), 4)) %} +
    + +
    + {% endfor %} +{% endif %} + +{% if p.award_count("ricardo", v) %} + + {% for i in range(min(p.award_count("ricardo", v), 3)) %} +
    + +
    + {% endfor %} +{% endif %} + +{% if p.award_count("shit", v) %} + + +{% endif %} + +{% if p.award_count("fireflies", v) %} + + +{% endif %} + -- 2.34.1 From b48203a9271ad9a2add6d09ea067b3714590dcac Mon Sep 17 00:00:00 2001 From: geese_suck Date: Sat, 26 Nov 2022 20:49:36 -0800 Subject: [PATCH 130/130] restore changes --- files/assets/css/awards.css | 322 +++++++++++++++--------------------- files/assets/css/main.css | 17 ++ files/templates/awards.html | 108 +++++------- 3 files changed, 192 insertions(+), 255 deletions(-) diff --git a/files/assets/css/awards.css b/files/assets/css/awards.css index 56e7b4a45..a7ac4e538 100644 --- a/files/assets/css/awards.css +++ b/files/assets/css/awards.css @@ -1,219 +1,159 @@ +#awards-container { +position:fixed; +pointer-events: none; +z-index:9999; +} + +#awards-container > div { +position: absolute; +} + +/*seal*/ +.wholesome img { + width: 100px !important; + height: 89.5px !important; +} +@media (max-width: 992px) { + .wholesome img { + width: 40px !important; + height: 27px !important; + } +} + +.wholesome {animation: sealX 9s linear infinite} +.wholesome img {animation: sealY 10s linear infinite} + +.wholesome1 {animation-direction: alternate} +.wholesome1 img {animation-direction: alternate} +.wholesome2 {animation-direction: alternate-reverse} +.wholesome2 img {animation-direction: alternate-reverse} +.wholesome3 {animation-direction: alternate} +.wholesome3 img {animation-direction: alternate-reverse} +.wholesome4 {animation-direction: alternate-reverse} +.wholesome4 img {animation-direction: alternate} + +@keyframes sealX { + from {} to {transform: translateX(98vw)} +} +@keyframes sealY { + from {} to {transform: translateY(85vh)} +} + +/*train common*/ +.train1, .scooter1 {top:2%} +.train2, .scooter2 {top:27%} +.train3, .scooter3 {top:52%} +.train4, .scooter4 {top:77%} + +@keyframes train { + from {transform: translateX(-3vw)} + to {transform: translateX(99vw)} +} + +/*train*/ +.train img { + width: 100px !important; + height: 51px !important; +} +@media (max-width: 992px) { + .train img { + width: 40px !important; + height: 20px !important; + } +} + +.train{animation: train 11s linear infinite;} +.train:nth-of-type(odd) {animation-direction: reverse;} +.train:nth-of-type(odd) img {transform: scaleX(-1);} + +/*scooter*/ +.scooter img { + width: 100px !important; + height: 135px !important; +} +@media (max-width: 992px) { + .scooter img { + width: 40px !important; + height: 54px !important; + } +} + +.scooter {animation: train 11s linear infinite;} +.scooter:nth-of-type(even) {animation-direction: reverse;} +.scooter:nth-of-type(even) img {transform: scaleX(-1);} + /*confetti*/ -#post-award-confetti { - position: fixed; - z-index: 9998; - width: 100%; - height: 100%; - pointer-events: none !important; +.confetti { background-image: url(/assets/images/confetti2.webp); background-repeat: repeat; } /*fireworks*/ -.firework { - position:fixed; - z-index:9999; - pointer-events: none; - width: 100% !important; - height: 100% !important; - pointer-events: none !important; -} - .firework img { max-width: 15rem; } /*ricardo*/ .ricardo { - position: fixed; - z-index: 9997; - pointer-events: none !important; + position: fixed !important; + bottom: 0; } - .ricardo img { - max-height: 15rem !important; - max-height: min(30vw,15rem) !important; + max-height: min(30vw,15rem); } -.ricardoleft { - animation: ricardoleft 2.9s 2 alternate !important; +.ricardo1 {animation: ricardo1Xa 5.8s linear infinite, ricardo1Xb 11.6s linear infinite, ricardo1Y 23.2s linear infinite;} +.ricardo2 {animation: ricardo2 8.5s linear infinite;} +.ricardo3 {animation: ricardo3 10s linear infinite;} + +@keyframes ricardo1Xa { + 0% {right: -200px} + 50% {right: 200px} + 100% {right: -200px} } -.ricardoright { - animation: ricardoright 2.9s 2 alternate !important; +@keyframes ricardo1Xb { + 0%{left:unset} + 49% {left: unset} + 50% {left: -200px} + 75% {left:200px} + 100% {left: -200px} } -@keyframes ricardoleft { - from {} - to {transform: translateX(200px);} +@keyframes ricardo1Y { + 0% {bottom:20vh} + 24% {bottom: 20vh} + 25% {bottom: 60vh} + 49% {bottom: 60vh} + 50% {bottom: 10vh} + 74% {bottom: 10vh} + 75% {bottom: 50vh} + 99% {bottom: 50vh} + 100% {bottom: 20vh} } -@keyframes ricardoright { - from {transform: translateX(110vw);} - to {transform: translateX(95vw);} -} - -#ricardo1 { - top:70%; - left:-10%; -} - -#ricardo2 { - top:80%; - left:50%; - animation: ricardo2 1.7s linear infinite !important; - max-height:200px; -} - -#ricardo3 { - top:85%; - animation: ricardo3 10s linear infinite !important; - max-height:150px; -} @keyframes ricardo2 { - 0% {opacity:20%} - 50% {opacity:100%} - 100% {opacity:0%} + 0% { opacity: 1; left: 0; right: unset;} + 18% {opacity: 0; left: 0; right: unset;} + 19% {opacity: 0; left: unset; right: 20vw;} + 20% {opacity: 1; left: unset; right: 20vw;} + 38% {opacity: 0; left: unset; right: 20vw;} + 39% {opacity: 0; left: 20vw; right: unset;} + 40% {opacity: 1; left: 20vw; right: unset;} + 58% {opacity: 0; left: 20vw; right: unset;} + 59% {opacity: 0; left: unset;right: 60vw;} + 60% {opacity: 1; left: unset; right: 60vw;} + 78% {opacity: 0; left: unset; right: 60vw;} + 79% {opacity: 0; left: 80vw; right: unset;} + 80% {opacity: 1; left: 80vw; right: unset;} + 98% {opacity: 0; left: 80vw; right: unset;} + 99% {opacity: 0; left: 0; right: unset;} + 100% {opacity: 1; left: 0; right: unset;} } @keyframes ricardo3 { - 50% {transform: translateX(105vw);} - 51% {transform: translate(105vw,-86vh) rotate(180deg);} - 100% {transform: translate(-15vw,-86vh) rotate(180deg);} -} - -@media (max-width: 768px) { - @keyframes ricardo3 { - 50% {transform: translateX(105vw);} - 51% {transform: translate(105vw,-86vh) rotate(180deg);} - 100% {transform: translate(-70vw,-86vh) rotate(180deg);} - } -} - -/*glow*/ -.glow .post-title, .glow a, .glow .post-meta *, .glow .user-info *, .glow .comment-text, .glow .comment-actions *, .glow { - color:lightgreen !important; - text-shadow:1px 1px 1px darkgreen, 0 0 5px green; -} - -.glow .score-up, .glow .active.arrow-up::before, .glow .arrow-up::after, .glow .arrow-up:hover::before { - color: lime !important; -} - -.glow .score-down, .glow .active.arrow-down::before, .glow .arrow-down::after, .glow .arrow-down:hover::before { - color: lime !important; -} - -.glow .arrow-up::before, .glow .arrow-down::before, .glow .score { - color: lightgreen; -} - -.glow .post-body a, .glow .comment-text a { - text-decoration: underline; -} - -/*train*/ -.train { - position:fixed; - z-index:9999; - pointer-events: none; -} - -.trainimg { - width: 100px !important; - height: 51px !important; -} - -@media (max-width: 992px) { - .trainimg { - width: 40px !important; - height: 20px !important; - } -} - -.train1 { - top: 10% -} - -.train2 { - top: 35% -} - -.train3 { - top: 60% -} - -.train4 { - top: 85% -} - -/*scooter*/ -.scooterimg { - width: 100px !important; - height: 135px !important; -} -@media (max-width: 992px) { - .scooterimg { - width: 40px !important; - height: 54px !important; - } -} - -/*seal*/ -.seal { - position:fixed; - z-index:9999; - pointer-events: none; - width: 100% !important; - height: 100% !important; -} - -.sealimg { - width: 100px !important; - height: 89.5px !important; -} -@media (max-width: 992px) { - .sealimg { - width: 30px !important; - height: 27px !important; - } -} - -@keyframes moveX { - from {} to {transform: translateX(98vw)} -} - -@keyframes moveY { - from {} to {transform: translateY(90vh)} -} - -.seal1 { - animation: moveX 4s linear 0s infinite alternate !important; -} - -.seal1 > img { - animation: moveY 6.8s linear 0s infinite alternate !important; -} - -.seal2 { - animation: moveX 5s linear 0s infinite alternate-reverse !important; -} - -.seal2 > img { - animation: moveY 8s linear 0s infinite alternate-reverse !important; -} - -.seal3 { - animation: moveX 4s linear 0s infinite alternate !important; -} -.seal3 > img { - animation: moveY 5s linear 0s infinite alternate-reverse !important; -} - -.seal4 { - animation: moveX 5s linear 0s infinite alternate-reverse !important; -} -.seal4 > img { - animation: moveY 6.8s linear 0s infinite alternate !important; + 50% {transform: translateX(100vw); top: unset; bottom: 0;} + 51% {transform: translateX(100vw) rotate(180deg); top: 0; bottom: unset;} + 100% {transform: translateX(-15vw) rotate(180deg); top: 0; bottom: unset;} } diff --git a/files/assets/css/main.css b/files/assets/css/main.css index 954746a51..d1b8ed168 100644 --- a/files/assets/css/main.css +++ b/files/assets/css/main.css @@ -5027,6 +5027,23 @@ img[src="/i/hand.webp"]+img[glow]:not([data-src]) { pat-pfp-anim .3s infinite; } +.glow .post-title, .glow a, .glow .post-meta *, .glow .user-info *, .glow .comment-text, .glow .comment-actions *, .glow { + color:lightgreen !important; + text-shadow:1px 1px 1px darkgreen, 0 0 5px green; +} +.glow .score-up, .glow .active.arrow-up::before, .glow .arrow-up::after, .glow .arrow-up:hover::before { + color: lime !important; +} +.glow .score-down, .glow .active.arrow-down::before, .glow .arrow-down::after, .glow .arrow-down:hover::before { + color: lime !important; +} +.glow .arrow-up::before, .glow .arrow-down::before, .glow .score { + color: lightgreen; +} +.glow .post-body a, .glow .comment-text a { + text-decoration: underline; +} + @keyframes rb { 10% { color: red; } 20% { color: orange; } diff --git a/files/templates/awards.html b/files/templates/awards.html index 738cb320f..425735cd3 100644 --- a/files/templates/awards.html +++ b/files/templates/awards.html @@ -1,40 +1,51 @@ -{% if SITE_NAME == 'PCM' %} - {% set wholesome = '/i/wholesome.webp' %} -{% else %} - {% set wholesome = '/e/marseywholesome.webp' %} +
    +{% macro stackable_award(award, src, alt) %} + {% for i in range(min(p.award_count(award, v), 4)) %} +
    + {{alt}} +
    + {% endfor %} +{% endmacro %} + +{% if p.award_count("wholesome", v) %} + {% set wholesome = '/i/wholesome.webp' if SITE_NAME == PCM else '/e/marseywholesome.webp' %} + {{ stackable_award('wholesome', wholesome, ':#marseywholesome:') }} {% endif %} -{% for i in range(min(p.award_count("wholesome", v), 4)) %} - {% if g.inferior_browser %} -
    - :#marseywholesome: +{% if p.award_count("train", v) %} + {{ stackable_award('train', '/e/marseytrain.webp', ':#marseytrain:') }} +{% endif %} + +{% if p.award_count("scooter", v) %} + {{ stackable_award('scooter', '/e/marseyscooter.webp', ':#marseyscooter:') }} +{% endif %} + +{% if p.award_count("firework", v) %} + + {{ stackable_award('firework', i) }} +{% endif %} + +{% if p.award_count("confetti", v) %} +
    +{% endif %} + +{% if p.award_count("ricardo", v) %} + {% for i in range(min(p.award_count("ricardo", v), 3)) %} +
    +
    - {% else %} - {% set seal_vertical = 'up' if (i % 2) == 0 else 'down' %} - {% set seal_horizontal = 'right' if i < 2 else 'left' %} - - - :#marseywholesome: - - - {% endif %} -{% endfor %} + {% endfor %} +{% endif %} -{% for i in range(min(p.award_count("train", v), 4)) %} - {% set train_dir = 'left' if (i % 2) == 0 else 'right' %} - {% set train_mirror = ' mirrored' if (i % 2) == 0 else '' %} - - :#marseytrain: - -{% endfor %} +{% if p.award_count("shit", v) %} + + +{% endif %} -{% for i in range(min(p.award_count("scooter", v), 4)) %} - {% set scooter_dir = 'right' if (i % 2) == 0 else 'left' %} - {% set scooter_mirror = '' if (i % 2) == 0 else ' mirrored' %} - - :#marseyscooter: - -{% endfor %} +{% if p.award_count("fireflies", v) %} + + +{% endif %} {% if p.award_count("tilt", v) %} {% endif %} -{% if p.award_count("confetti", v) %} -
    -{% endif %} - -{% if p.award_count("firework", v) %} - - {% for i in range(min(p.award_count("firework", v), 4)) %} -
    - -
    - {% endfor %} -{% endif %} - -{% if p.award_count("ricardo", v) %} - - {% for i in range(min(p.award_count("ricardo", v), 3)) %} -
    - -
    - {% endfor %} -{% endif %} - -{% if p.award_count("shit", v) %} - - -{% endif %} - -{% if p.award_count("fireflies", v) %} - - -{% endif %} - +
    -- 2.34.1
    # Name
    {{loop.index}} {% include "user_in_table.html" %}
    Unfollow