diff --git a/.cookies b/.cookies deleted file mode 100644 index 33e1b63ed..000000000 --- a/.cookies +++ /dev/null @@ -1,9 +0,0 @@ -# Netscape HTTP Cookie File -# This file is generated by youtube-dl. Do not edit. - -.youtube.com TRUE / TRUE 1670617632 GPS 1 -.youtube.com TRUE / TRUE 1686122687 VISITOR_INFO1_LIVE Z0qo6y1x43g -.youtube.com TRUE / TRUE 0 YSC X7P6d8R9T4I -.youtube.com TRUE / TRUE 1686122708 __Secure-3PAPISID V15R47kUEcecf2e6/Anq8BG6Hc8s3_B4aU -.youtube.com TRUE / TRUE 1686122708 __Secure-3PSID Rgi3mkz3GttQzOzz5BydFq1VJYJxYYsNX7tSsaWVvdV5OjMrGX4VQesgyjqm7MEb_U9QbA. -.youtube.com TRUE / TRUE 1702106955 __Secure-3PSIDCC AIKkIs2XJmFoUqmOzZTlvJO6WXpOpP8OwPdrLG7E2hC2DR6IFy_vz0PraZdTy36zFrYJBGuY diff --git a/files/assets/css/main.css b/files/assets/css/main.css index f7b474c98..eeac3cf8d 100644 --- a/files/assets/css/main.css +++ b/files/assets/css/main.css @@ -1,4 +1,206 @@ @charset "UTF-8"; + +.fa-align-left:before{content:"\f036"} +.fa-long-arrow-left:before{content:"\f177"} +.fa-arrow-right:before{content:"\f061"} +.fa-sign-out:before{content:"\f08b"} +.fa-long-arrow-right:before{content:"\f178"} +.fa-arrows-v:before{content:"\f07d"} +.fa-award:before{content:"\f559"} +.fa-badge:before{content:"\f335"} +.fa-badge-check:before{content:"\f336"} +.fa-ban:before{content:"\f05e"} +.fa-bars:before{content:"\f0c9"} +.fa-bell:before{content:"\f0f3"} +.fa-bold:before{content:"\f032"} +.fa-book:before{content:"\f02d"} +.fa-book-open:before{content:"\f518"} +.fa-book-dead:before{content:"\f6b7"} +.fa-broom:before{content:"\f51a"} +.fa-bug:before{content:"\f188"} +.fa-bullhorn:before{content:"\f0a1"} +.fa-calendar:before{content:"\f133"} +.fa-calendar-day:before{content:"\f783"} +.fa-calendar-alt:before{content:"\f073"} +.fa-calendar-week:before{content:"\f784"} +.fa-campfire:before{content:"\f6ba"} +.fa-candy-cane:before{content:"\f786"} +.fa-car-tilt:before{content:"\f5e5"} +.fa-cat:before{content:"\f6be"} +.fa-check:before{content:"\f00c"} +.fa-circle:before{content:"\f111"} +.fa-check-circle:before{content:"\f058"} +.fa-arrow-alt-circle-down:before{content:"\f358"} +.fa-exclamation-circle:before{content:"\f06a"} +.fa-info-circle:before{content:"\f05a"} +.fa-radiation-alt:before{content:"\f7ba"} +.fa-arrow-alt-circle-up:before{content:"\f35b"} +.fa-user-circle:before{content:"\f2bd"} +.fa-times-circle:before{content:"\f057"} +.fa-clipboard:before{content:"\f328"} +.fa-clipboard-check:before{content:"\f46c"} +.fa-clock:before{content:"\f017"} +.fa-history:before{content:"\f1da"} +.fa-code:before{content:"\f121"} +.fa-comment:before{content:"\f075"} +.fa-comment-dots:before{content:"\f4ad"} +.fa-comments:before{content:"\f086"} +.fa-copy:before{content:"\f0c5"} +.fa-crown:before{content:"\f521"} +.fa-dice-six:before{content:"\f526"} +.fa-dollar-sign:before{content:"\24"} +.fa-arrow-alt-down:before{content:"\f354"} +.fa-compress-alt:before{content:"\f422"} +.fa-ellipsis-h:before{content:"\f141"} +.fa-envelope:before{content:"\f0e0"} +.fa-envelope-open-text:before{content:"\f658"} +.fa-eye:before{content:"\f06e"} +.fa-eye-evil:before{content:"\f6db"} +.fa-eye-slash:before{content:"\f070"} +.fa-angry:before{content:"\f556"} +.fa-frown:before{content:"\f119"} +.fa-grin-beam-sweat:before{content:"\f583"} +.fa-laugh-squint:before{content:"\f59b"} +.fa-smile-beam:before{content:"\f5b8"} +.fa-feather-alt:before{content:"\f56b"} +.fa-file-signature:before{content:"\f573"} +.fa-filter:before{content:"\f0b0"} +.fa-fire:before{content:"\f06d"} +.fa-fireplace:before{content:"\f79a"} +.fa-fish:before{content:"\f578"} +.fa-flag:before{content:"\f024"} +.fa-flag-usa:before{content:"\f74d"} +.fa-save:before{content:"\f0c7"} +.fa-gavel:before{content:"\f0e3"} +.fa-cog:before{content:"\f013"} +.fa-ghost:before{content:"\f6e2"} +.fa-gift:before{content:"\f06b"} +.fa-gingerbread-man:before{content:"\f79d"} +.fa-globe:before{content:"\f0ac"} +.fa-home-alt:before{content:"\f015"} +.fa-id-badge:before{content:"\f2c1"} +.fa-id-card:before{content:"\f2c2"} +.fa-image:before{content:"\f03e"} +.fa-infinity:before{content:"\f534"} +.fa-italic:before{content:"\f033"} +.fa-knife-kitchen:before{content:"\f6f5"} +.fa-lights-holiday:before{content:"\f7b2"} +.fa-link:before{content:"\f0c1"} +.fa-link-slash:before{content:"\f127"} +.fa-lock:before{content:"\f023"} +.fa-lock-alt:before{content:"\f30d"} +.fa-search:before{content:"\f002"} +.fa-cloudflare:before{content:"\e07d"} +.fa-comment-alt-smile:before{content:"\f4aa"} +.fa-microphone-stand:before{content:"\f8cb"} +.fa-palette:before{content:"\f53f"} +.fa-edit:before{content:"\f044"} +.fa-pizza-slice:before{content:"\f818"} +.fa-poop:before{content:"\f619"} +.fa-quote-right:before{content:"\f10e"} +.fa-reply:before{content:"\f3e5"} +.fa-robot:before{content:"\f544"} +.fa-sack-dollar:before{content:"\f81d"} +.fa-scroll-old:before{content:"\f70f"} +.fa-seedling:before{content:"\f4d8"} +.fa-shield:before{content:"\f132"} +.fa-random:before{content:"\f074"} +.fa-smoke:before{content:"\f760"} +.fa-snooze:before{content:"\f880"} +.fa-snowflake:before{content:"\f2dc"} +.fa-sparkles:before{content:"\f890"} +.fa-ticket:before{content:"\f145"} +.fa-cards:before{content:"\e3ed"} +.fa-spider:before{content:"\f717"} +.fa-square:before{content:"\f0c8"} +.fa-stocking:before{content:"\f7d5"} +.fa-store:before{content:"\f54e"} +.fa-columns:before{content:"\f0db"} +.fa-thumbtack:before{content:"\f08d"} +.fa-train:before{content:"\f238"} +.fa-trash-alt:before{content:"\f2ed"} +.fa-exclamation-triangle:before{content:"\f071"} +.fa-trophy:before{content:"\f091"} +.fa-arrow-alt-up:before{content:"\f357"} +.fa-expand-alt:before{content:"\f424"} +.fa-external-link-alt:before{content:"\f35d"} +.fa-user:before{content:"\f007"} +.fa-user-crown:before{content:"\f6a4"} +.fa-user-cog:before{content:"\f4fe"} +.fa-user-friends:before{content:"\f500"} +.fa-user-lock:before{content:"\f502"} +.fa-user-minus:before{content:"\f503"} +.fa-user-plus:before{content:"\f234"} +.fa-user-slash:before{content:"\f506"} +.fa-user-tag:before{content:"\f507"} +.fa-user-times:before{content:"\f235"} +.fa-users:before{content:"\f0c0"} +.fa-volume:before{content:"\f6a8"} +.fa-volume-mute:before{content:"\f6a9"} +.fa-times:before{content:"\f00d"} +.fa-mobile:before{content:"\f3ce"} +.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"} +.fa-arrow-up:before{content:"\f062"} +.fa-tag:before{content:"\f02b"} +.fa-messages:before{content:"\f4b6"} +.fa-user-secret:before{content:"\f21b"} +.fa-gas-pump-slash:before{content:"\f5f4"} +.fa-gas-pump:before{content:"\f52f"} +.fa-hammer-crash:before{content:"\e414"} +.fa-music:before{content:"\f001"} +.fa-arrow-rotate-right:before{content:"\f01e"} +.fa-columns-3:before{content:"\e361"} +.fa-bahai:before{content:"\f666"} +.fa-party-horn:before{content:"\e31b"} +.fa-pinata:before{content:"\e3c3"} +.fa-file:before{content:"\f15b"} +.fa-box-open:before{content:"\f49e"} +.fa-eyes:before{content:"\e367"} +.fa-hexagon:before{content:"\f312"} +.fa-arrow-right-arrow-left:before{content:"\f0ec"} +.fa-coins:before{content:"\f51e"} +.fa-bell-slash:before{content:"\f1f6"} +.fa-chart-network:before{content:"\f78a"} +.fa-square-share-nodes:before{content:"\f1e1"} +.fa-sidebar:before{content:"\e24e"} +.fa-panorama:before{content:"\e209"} +.fa-external-link:before{content:"\f08e"} +.fa-circle-info:before{content:"\f05a"} +.fa-comment-question:before{content:"\e14b"} +.fa-sitemap:before{content:"\f0e8"} +.fa-grid:before{content:"\e195"} +.fa-x:before{content:"\58"} +.fa-paw-simple:before{content:"\f701"} +.fa-bat:before{content:"\f6b5"} +.fa-star-of-david:before{content:"\f69a"} +.fa-hat-cowboy:before{content:"\f8c0"} +.fa-cloud-rainbow:before{content:"\f73e"} +.fa-telegram:before{content:"\f2c6"} +.fa-css3-alt:before{content:"\f38b"} +.fa-landscape:before{content:"\e1b5"} +.fa-user-ninja:before{content:"\f504"} +.fa-trees:before{content:"\f724"} +.fa-flashlight:before{content:"\f8b8"} +.fa-candy-corn:before{content:"\f6bd"} +.fa-shirt:before{content:"\f553"} +.fa-bone:before{content:"\f5d7"} +.fa-jack-o-lantern:before{content:"\f30e"} +.fa-cloud-bolt:before{content:"\f76c"} +.fa-biohazard:before{content:"\f780"} +.fa-syringe:before{content:"\f48e"} +.fa-spider-web:before{content:"\f719"} +.fa-coffin-cross:before{content:"\e051"} +.fa-face-sleeping:before{content:"\e38d"} +.fa-block-question:before{content:"\e3dd"} +.fa-image-slash:before{content:"\e1b7"} +.fa-play:before{content:"\f04b"} + button { background: none; border: none; @@ -4290,8 +4492,8 @@ pre .com, code .com { background-color: var(--gray-600); } .custom-gutters, .user-gutters { - padding-left: 2px; - padding-right: 2px; + padding-left: 0; + padding-right: 0; } .navbar.bg-primary { background-color: var(--dark) !important; @@ -4894,7 +5096,7 @@ code { .noshadow { box-shadow: none !important; } -[role="button"], :not(textarea)[onclick] { +[role="button"], :not(textarea)[onclick], th { cursor: pointer !important; } @@ -5696,6 +5898,25 @@ g { border-radius:.35rem; } +.video-play { + position:absolute; + bottom:33%; + right:38%; + font-size:14px; + color:white; + background-color:var(--primary); + padding: 5px 6px 4px 7px; + border-radius:.35rem; + pointer-events: none; +} + +@media (max-width: 768px) { + .video-play { + bottom:31%; + right:36%; + } +} + /* ------- Font Awesome ------- */ @font-face{ font-family:"Font Awesome 6 Pro"; @@ -5876,206 +6097,6 @@ g { .fa-stack-1x{line-height:inherit} .fa-stack-2x{font-size:2em} -.fa-align-left:before{content:"\f036"} -.fa-long-arrow-left:before{content:"\f177"} -.fa-arrow-right:before{content:"\f061"} -.fa-sign-out:before{content:"\f08b"} -.fa-long-arrow-right:before{content:"\f178"} -.fa-arrows-v:before{content:"\f07d"} -.fa-award:before{content:"\f559"} -.fa-badge:before{content:"\f335"} -.fa-badge-check:before{content:"\f336"} -.fa-ban:before{content:"\f05e"} -.fa-bars:before{content:"\f0c9"} -.fa-bell:before{content:"\f0f3"} -.fa-bold:before{content:"\f032"} -.fa-book:before{content:"\f02d"} -.fa-book-open:before{content:"\f518"} -.fa-book-dead:before{content:"\f6b7"} -.fa-broom:before{content:"\f51a"} -.fa-bug:before{content:"\f188"} -.fa-bullhorn:before{content:"\f0a1"} -.fa-calendar:before{content:"\f133"} -.fa-calendar-day:before{content:"\f783"} -.fa-calendar-alt:before{content:"\f073"} -.fa-calendar-week:before{content:"\f784"} -.fa-campfire:before{content:"\f6ba"} -.fa-candy-cane:before{content:"\f786"} -.fa-car-tilt:before{content:"\f5e5"} -.fa-cat:before{content:"\f6be"} -.fa-check:before{content:"\f00c"} -.fa-circle:before{content:"\f111"} -.fa-check-circle:before{content:"\f058"} -.fa-arrow-alt-circle-down:before{content:"\f358"} -.fa-exclamation-circle:before{content:"\f06a"} -.fa-info-circle:before{content:"\f05a"} -.fa-radiation-alt:before{content:"\f7ba"} -.fa-arrow-alt-circle-up:before{content:"\f35b"} -.fa-user-circle:before{content:"\f2bd"} -.fa-times-circle:before{content:"\f057"} -.fa-clipboard:before{content:"\f328"} -.fa-clipboard-check:before{content:"\f46c"} -.fa-clock:before{content:"\f017"} -.fa-history:before{content:"\f1da"} -.fa-code:before{content:"\f121"} -.fa-comment:before{content:"\f075"} -.fa-comment-dots:before{content:"\f4ad"} -.fa-comments:before{content:"\f086"} -.fa-copy:before{content:"\f0c5"} -.fa-crown:before{content:"\f521"} -.fa-dice-six:before{content:"\f526"} -.fa-dollar-sign:before{content:"\24"} -.fa-arrow-alt-down:before{content:"\f354"} -.fa-compress-alt:before{content:"\f422"} -.fa-ellipsis-h:before{content:"\f141"} -.fa-envelope:before{content:"\f0e0"} -.fa-envelope-open-text:before{content:"\f658"} -.fa-eye:before{content:"\f06e"} -.fa-eye-evil:before{content:"\f6db"} -.fa-eye-slash:before{content:"\f070"} -.fa-angry:before{content:"\f556"} -.fa-frown:before{content:"\f119"} -.fa-grin-beam-sweat:before{content:"\f583"} -.fa-laugh-squint:before{content:"\f59b"} -.fa-smile-beam:before{content:"\f5b8"} -.fa-feather-alt:before{content:"\f56b"} -.fa-file-signature:before{content:"\f573"} -.fa-filter:before{content:"\f0b0"} -.fa-fire:before{content:"\f06d"} -.fa-fireplace:before{content:"\f79a"} -.fa-fish:before{content:"\f578"} -.fa-flag:before{content:"\f024"} -.fa-flag-usa:before{content:"\f74d"} -.fa-save:before{content:"\f0c7"} -.fa-gavel:before{content:"\f0e3"} -.fa-cog:before{content:"\f013"} -.fa-ghost:before{content:"\f6e2"} -.fa-gift:before{content:"\f06b"} -.fa-gingerbread-man:before{content:"\f79d"} -.fa-globe:before{content:"\f0ac"} -.fa-home-alt:before{content:"\f015"} -.fa-id-badge:before{content:"\f2c1"} -.fa-id-card:before{content:"\f2c2"} -.fa-image:before{content:"\f03e"} -.fa-infinity:before{content:"\f534"} -.fa-italic:before{content:"\f033"} -.fa-knife-kitchen:before{content:"\f6f5"} -.fa-lights-holiday:before{content:"\f7b2"} -.fa-link:before{content:"\f0c1"} -.fa-link-slash:before{content:"\f127"} -.fa-lock:before{content:"\f023"} -.fa-lock-alt:before{content:"\f30d"} -.fa-search:before{content:"\f002"} -.fa-cloudflare:before{content:"\e07d"} -.fa-comment-alt-smile:before{content:"\f4aa"} -.fa-microphone-stand:before{content:"\f8cb"} -.fa-palette:before{content:"\f53f"} -.fa-edit:before{content:"\f044"} -.fa-pizza-slice:before{content:"\f818"} -.fa-poop:before{content:"\f619"} -.fa-quote-right:before{content:"\f10e"} -.fa-reply:before{content:"\f3e5"} -.fa-robot:before{content:"\f544"} -.fa-sack-dollar:before{content:"\f81d"} -.fa-scroll-old:before{content:"\f70f"} -.fa-seedling:before{content:"\f4d8"} -.fa-shield:before{content:"\f132"} -.fa-random:before{content:"\f074"} -.fa-smoke:before{content:"\f760"} -.fa-snooze:before{content:"\f880"} -.fa-snowflake:before{content:"\f2dc"} -.fa-sparkles:before{content:"\f890"} -.fa-ticket:before{content:"\f145"} -.fa-cards:before{content:"\e3ed"} -.fa-spider:before{content:"\f717"} -.fa-square:before{content:"\f0c8"} -.fa-stocking:before{content:"\f7d5"} -.fa-store:before{content:"\f54e"} -.fa-columns:before{content:"\f0db"} -.fa-thumbtack:before{content:"\f08d"} -.fa-train:before{content:"\f238"} -.fa-trash-alt:before{content:"\f2ed"} -.fa-exclamation-triangle:before{content:"\f071"} -.fa-trophy:before{content:"\f091"} -.fa-arrow-alt-up:before{content:"\f357"} -.fa-expand-alt:before{content:"\f424"} -.fa-external-link-alt:before{content:"\f35d"} -.fa-user:before{content:"\f007"} -.fa-user-crown:before{content:"\f6a4"} -.fa-user-cog:before{content:"\f4fe"} -.fa-user-friends:before{content:"\f500"} -.fa-user-lock:before{content:"\f502"} -.fa-user-minus:before{content:"\f503"} -.fa-user-plus:before{content:"\f234"} -.fa-user-slash:before{content:"\f506"} -.fa-user-tag:before{content:"\f507"} -.fa-user-times:before{content:"\f235"} -.fa-users:before{content:"\f0c0"} -.fa-volume:before{content:"\f6a8"} -.fa-volume-mute:before{content:"\f6a9"} -.fa-times:before{content:"\f00d"} -.fa-mobile:before{content:"\f3ce"} -.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"} -.fa-arrow-up:before{content:"\f062"} -.fa-tag:before{content:"\f02b"} -.fa-messages:before{content:"\f4b6"} -.fa-user-secret:before{content:"\f21b"} -.fa-gas-pump-slash:before{content:"\f5f4"} -.fa-gas-pump:before{content:"\f52f"} -.fa-hammer-crash:before{content:"\e414"} -.fa-music:before{content:"\f001"} -.fa-arrow-rotate-right:before{content:"\f01e"} -.fa-columns-3:before{content:"\e361"} -.fa-bahai:before{content:"\f666"} -.fa-party-horn:before{content:"\e31b"} -.fa-pinata:before{content:"\e3c3"} -.fa-file:before{content:"\f15b"} -.fa-box-open:before{content:"\f49e"} -.fa-eyes:before{content:"\e367"} -.fa-hexagon:before{content:"\f312"} -.fa-arrow-right-arrow-left:before{content:"\f0ec"} -.fa-coins:before{content:"\f51e"} -.fa-bell-slash:before{content:"\f1f6"} -.fa-chart-network:before{content:"\f78a"} -.fa-square-share-nodes:before{content:"\f1e1"} -.fa-sidebar:before{content:"\e24e"} -.fa-panorama:before{content:"\e209"} -.fa-external-link:before{content:"\f08e"} -.fa-circle-info:before{content:"\f05a"} -.fa-comment-question:before{content:"\e14b"} -.fa-sitemap:before{content:"\f0e8"} -.fa-grid:before{content:"\e195"} -.fa-x:before{content:"\58"} -.fa-paw-simple:before{content:"\f701"} -.fa-bat:before{content:"\f6b5"} -.fa-star-of-david:before{content:"\f69a"} -.fa-hat-cowboy:before{content:"\f8c0"} -.fa-cloud-rainbow:before{content:"\f73e"} -.fa-telegram:before{content:"\f2c6"} -.fa-css3-alt:before{content:"\f38b"} -.fa-landscape:before{content:"\e1b5"} -.fa-user-ninja:before{content:"\f504"} -.fa-trees:before{content:"\f724"} -.fa-flashlight:before{content:"\f8b8"} -.fa-candy-corn:before{content:"\f6bd"} -.fa-shirt:before{content:"\f553"} -.fa-bone:before{content:"\f5d7"} -.fa-jack-o-lantern:before{content:"\f30e"} -.fa-cloud-bolt:before{content:"\f76c"} -.fa-biohazard:before{content:"\f780"} -.fa-syringe:before{content:"\f48e"} -.fa-spider-web:before{content:"\f719"} -.fa-coffin-cross:before{content:"\e051"} -.fa-face-sleeping:before{content:"\e38d"} -.fa-block-question:before{content:"\e3dd"} -.fa-image-slash:before{content:"\e1b7"} - .pronouns { font-size: 9px; margin-left: 0.25rem; @@ -6407,7 +6428,7 @@ div.markdown { } :root { - --signature-max-height: 250px; + --signature-max-height: 300px; } .user-signature { @@ -6415,10 +6436,6 @@ div.markdown { overflow: clip; } -.user-signature video { - height: var(--signature-max-height); -} - .award-name { font-weight: bold; font-size: 14px; @@ -6444,3 +6461,31 @@ div.markdown { .sub-banner-update-section .sub-settings-subsection { margin-bottom: 1em; } + +.resizable { + resize:both; + display:inline-block; + overflow: auto; + scrollbar-width: none; + -ms-overflow-style: none; +} +.resizable::-webkit-scrollbar { + background: transparent; +} +.resizable > video { + height:100%!important; + max-height:100%!important; + margin:0!important; +} +.bigger { + height:50vh; +} + +.user-signature video { + max-height: min(var(--signature-max-height),50vh) !important; +} + +.comment-text lite-youtube, #post-text lite-youtube { + max-width: 500px; + margin-top: 5px; +} diff --git a/files/assets/images/WPD/icons-event/2022-christmas-logo.webp b/files/assets/images/WPD/icons-event/2022-christmas-logo.webp new file mode 100644 index 000000000..001551986 Binary files /dev/null and b/files/assets/images/WPD/icons-event/2022-christmas-logo.webp differ diff --git a/files/assets/images/WPD/icons-event/2022-christmas.webp b/files/assets/images/WPD/icons-event/2022-christmas.webp new file mode 100644 index 000000000..0af105b45 Binary files /dev/null and b/files/assets/images/WPD/icons-event/2022-christmas.webp differ diff --git a/files/assets/images/badges/194.webp b/files/assets/images/badges/194.webp new file mode 100644 index 000000000..1c4cdcfe5 Binary files /dev/null and b/files/assets/images/badges/194.webp differ diff --git a/files/assets/images/badges/197.webp b/files/assets/images/badges/197.webp new file mode 100644 index 000000000..62df8f87e Binary files /dev/null and b/files/assets/images/badges/197.webp differ diff --git a/files/assets/images/badges/198.webp b/files/assets/images/badges/198.webp new file mode 100644 index 000000000..73e0eabd6 Binary files /dev/null and b/files/assets/images/badges/198.webp differ diff --git a/files/assets/images/badges/199.webp b/files/assets/images/badges/199.webp new file mode 100644 index 000000000..2d79d2231 Binary files /dev/null and b/files/assets/images/badges/199.webp differ diff --git a/files/assets/images/badges/203.webp b/files/assets/images/badges/203.webp new file mode 100644 index 000000000..4fb8a41dd Binary files /dev/null and b/files/assets/images/badges/203.webp differ diff --git a/files/assets/images/badges/208.webp b/files/assets/images/badges/208.webp new file mode 100644 index 000000000..62b4f0a3b Binary files /dev/null and b/files/assets/images/badges/208.webp differ diff --git a/files/assets/images/badges/212.webp b/files/assets/images/badges/212.webp new file mode 100644 index 000000000..221ddd2ff Binary files /dev/null and b/files/assets/images/badges/212.webp differ diff --git a/files/assets/images/badges/213.webp b/files/assets/images/badges/213.webp new file mode 100644 index 000000000..134e43bcb Binary files /dev/null and b/files/assets/images/badges/213.webp differ diff --git a/files/assets/images/badges/214.webp b/files/assets/images/badges/214.webp new file mode 100644 index 000000000..80bca69b6 Binary files /dev/null and b/files/assets/images/badges/214.webp differ diff --git a/files/assets/images/default_thumb_video.webp b/files/assets/images/default_thumb_video.webp index b20adfef5..48c4cb157 100644 Binary files a/files/assets/images/default_thumb_video.webp and b/files/assets/images/default_thumb_video.webp differ diff --git a/files/assets/images/emojis/marppyenraged.webp b/files/assets/images/emojis/marppyenraged.webp index 15086508a..51d122d3d 100644 Binary files a/files/assets/images/emojis/marppyenraged.webp and b/files/assets/images/emojis/marppyenraged.webp differ diff --git a/files/assets/images/emojis/marseyalucard.webp b/files/assets/images/emojis/marseyalucard.webp new file mode 100644 index 000000000..adc934089 Binary files /dev/null and b/files/assets/images/emojis/marseyalucard.webp differ diff --git a/files/assets/images/emojis/marseybug3.webp b/files/assets/images/emojis/marseybug3.webp new file mode 100644 index 000000000..672ff41de Binary files /dev/null and b/files/assets/images/emojis/marseybug3.webp differ diff --git a/files/assets/images/emojis/marseycantsneed.webp b/files/assets/images/emojis/marseycantsneed.webp index f8a886319..49c25c54d 100644 Binary files a/files/assets/images/emojis/marseycantsneed.webp and b/files/assets/images/emojis/marseycantsneed.webp differ diff --git a/files/assets/images/emojis/marseycapygigabrain.webp b/files/assets/images/emojis/marseycapygigabrain.webp index b63339ed3..ec8ce7085 100644 Binary files a/files/assets/images/emojis/marseycapygigabrain.webp and b/files/assets/images/emojis/marseycapygigabrain.webp differ diff --git a/files/assets/images/emojis/marseycapynut.webp b/files/assets/images/emojis/marseycapynut.webp index 1821df794..153b83192 100644 Binary files a/files/assets/images/emojis/marseycapynut.webp and b/files/assets/images/emojis/marseycapynut.webp differ diff --git a/files/assets/images/emojis/marseycapyshy.webp b/files/assets/images/emojis/marseycapyshy.webp index 044e8a1f4..5cb07ed70 100644 Binary files a/files/assets/images/emojis/marseycapyshy.webp and b/files/assets/images/emojis/marseycapyshy.webp differ diff --git a/files/assets/images/emojis/marseycarpasian.webp b/files/assets/images/emojis/marseycarpasian.webp index e3d6b37f6..cc956180c 100644 Binary files a/files/assets/images/emojis/marseycarpasian.webp and b/files/assets/images/emojis/marseycarpasian.webp differ diff --git a/files/assets/images/emojis/marseychadfoid.webp b/files/assets/images/emojis/marseychadfoid.webp new file mode 100644 index 000000000..7b35d8c36 Binary files /dev/null and b/files/assets/images/emojis/marseychadfoid.webp differ diff --git a/files/assets/images/emojis/marseychristchan.webp b/files/assets/images/emojis/marseychristchan.webp new file mode 100644 index 000000000..f82bd2e08 Binary files /dev/null and b/files/assets/images/emojis/marseychristchan.webp differ diff --git a/files/assets/images/emojis/marseychristchanreading.webp b/files/assets/images/emojis/marseychristchanreading.webp new file mode 100644 index 000000000..da4d53fb2 Binary files /dev/null and b/files/assets/images/emojis/marseychristchanreading.webp differ diff --git a/files/assets/images/emojis/marseycyanide.webp b/files/assets/images/emojis/marseycyanide.webp index df8122138..7331f69a9 100644 Binary files a/files/assets/images/emojis/marseycyanide.webp and b/files/assets/images/emojis/marseycyanide.webp differ diff --git a/files/assets/images/emojis/marseydoit.webp b/files/assets/images/emojis/marseydoit.webp index 4047e7bb7..101d2aa18 100644 Binary files a/files/assets/images/emojis/marseydoit.webp and b/files/assets/images/emojis/marseydoit.webp differ diff --git a/files/assets/images/emojis/marseydownvotemad.webp b/files/assets/images/emojis/marseydownvotemad.webp new file mode 100644 index 000000000..83effd70b Binary files /dev/null and b/files/assets/images/emojis/marseydownvotemad.webp differ diff --git a/files/assets/images/emojis/marseyelephantcumjar1.webp b/files/assets/images/emojis/marseyelephantcumjar1.webp index 0a1e09774..6e35ffdb7 100644 Binary files a/files/assets/images/emojis/marseyelephantcumjar1.webp and b/files/assets/images/emojis/marseyelephantcumjar1.webp differ diff --git a/files/assets/images/emojis/marseyelephantcumjar2.webp b/files/assets/images/emojis/marseyelephantcumjar2.webp index 0f4f1cd48..c03b30677 100644 Binary files a/files/assets/images/emojis/marseyelephantcumjar2.webp and b/files/assets/images/emojis/marseyelephantcumjar2.webp differ diff --git a/files/assets/images/emojis/marseyelephantcumjar3.webp b/files/assets/images/emojis/marseyelephantcumjar3.webp index 28ff13deb..1801111d1 100644 Binary files a/files/assets/images/emojis/marseyelephantcumjar3.webp and b/files/assets/images/emojis/marseyelephantcumjar3.webp differ diff --git a/files/assets/images/emojis/marseyeyemixer3.webp b/files/assets/images/emojis/marseyeyemixer3.webp index 6b2891dbb..a86d7eab2 100644 Binary files a/files/assets/images/emojis/marseyeyemixer3.webp and b/files/assets/images/emojis/marseyeyemixer3.webp differ diff --git a/files/assets/images/emojis/marseyglobohomo.webp b/files/assets/images/emojis/marseyglobohomo.webp index d49db09de..4dc46b755 100644 Binary files a/files/assets/images/emojis/marseyglobohomo.webp and b/files/assets/images/emojis/marseyglobohomo.webp differ diff --git a/files/assets/images/emojis/marseygunnut.webp b/files/assets/images/emojis/marseygunnut.webp index 7a973ebf5..6c7b12201 100644 Binary files a/files/assets/images/emojis/marseygunnut.webp and b/files/assets/images/emojis/marseygunnut.webp differ diff --git a/files/assets/images/emojis/marseyhappy2.webp b/files/assets/images/emojis/marseyhappy2.webp new file mode 100644 index 000000000..025a39c93 Binary files /dev/null and b/files/assets/images/emojis/marseyhappy2.webp differ diff --git a/files/assets/images/emojis/marseyhelp.webp b/files/assets/images/emojis/marseyhelp.webp index ea3a1fe87..b70109c43 100644 Binary files a/files/assets/images/emojis/marseyhelp.webp and b/files/assets/images/emojis/marseyhelp.webp differ diff --git a/files/assets/images/emojis/marseyitsaover.webp b/files/assets/images/emojis/marseyitsaover.webp new file mode 100644 index 000000000..53a7cd590 Binary files /dev/null and b/files/assets/images/emojis/marseyitsaover.webp differ diff --git a/files/assets/images/emojis/marseyjumpscare.webp b/files/assets/images/emojis/marseyjumpscare.webp index 05e37ab24..1b4d59673 100644 Binary files a/files/assets/images/emojis/marseyjumpscare.webp and b/files/assets/images/emojis/marseyjumpscare.webp differ diff --git a/files/assets/images/emojis/marseyjunkie2.webp b/files/assets/images/emojis/marseyjunkie2.webp index 006d886ea..2d1979450 100644 Binary files a/files/assets/images/emojis/marseyjunkie2.webp and b/files/assets/images/emojis/marseyjunkie2.webp differ diff --git a/files/assets/images/emojis/marseykiwilove.webp b/files/assets/images/emojis/marseykiwilove.webp new file mode 100644 index 000000000..b4446e50d Binary files /dev/null and b/files/assets/images/emojis/marseykiwilove.webp differ diff --git a/files/assets/images/emojis/marseylolly.webp b/files/assets/images/emojis/marseylolly.webp new file mode 100644 index 000000000..1ae408825 Binary files /dev/null and b/files/assets/images/emojis/marseylolly.webp differ diff --git a/files/assets/images/emojis/marseymaidshy.webp b/files/assets/images/emojis/marseymaidshy.webp new file mode 100644 index 000000000..9c237cb63 Binary files /dev/null and b/files/assets/images/emojis/marseymaidshy.webp differ diff --git a/files/assets/images/emojis/marseymayoparty.webp b/files/assets/images/emojis/marseymayoparty.webp index 791b0b6a3..26b24b66d 100644 Binary files a/files/assets/images/emojis/marseymayoparty.webp and b/files/assets/images/emojis/marseymayoparty.webp differ diff --git a/files/assets/images/emojis/marseymoney.webp b/files/assets/images/emojis/marseymoney.webp index 79cbc5f0f..e44b294d3 100644 Binary files a/files/assets/images/emojis/marseymoney.webp and b/files/assets/images/emojis/marseymoney.webp differ diff --git a/files/assets/images/emojis/marseynecromancer.webp b/files/assets/images/emojis/marseynecromancer.webp new file mode 100644 index 000000000..a4bd8e5ea Binary files /dev/null and b/files/assets/images/emojis/marseynecromancer.webp differ diff --git a/files/assets/images/emojis/marseypenny.webp b/files/assets/images/emojis/marseypenny.webp index 1c49e9469..41c4e244a 100644 Binary files a/files/assets/images/emojis/marseypenny.webp and b/files/assets/images/emojis/marseypenny.webp differ diff --git a/files/assets/images/emojis/marseypoint.webp b/files/assets/images/emojis/marseypoint.webp new file mode 100644 index 000000000..aec6039ed Binary files /dev/null and b/files/assets/images/emojis/marseypoint.webp differ diff --git a/files/assets/images/emojis/marseypoint2.webp b/files/assets/images/emojis/marseypoint2.webp new file mode 100644 index 000000000..474c4f401 Binary files /dev/null and b/files/assets/images/emojis/marseypoint2.webp differ diff --git a/files/assets/images/emojis/marseyprotestno.webp b/files/assets/images/emojis/marseyprotestno.webp index ee612b916..a5c5bc670 100644 Binary files a/files/assets/images/emojis/marseyprotestno.webp and b/files/assets/images/emojis/marseyprotestno.webp differ diff --git a/files/assets/images/emojis/marseyprotestyes.webp b/files/assets/images/emojis/marseyprotestyes.webp index 244b62a52..81f7320ec 100644 Binary files a/files/assets/images/emojis/marseyprotestyes.webp and b/files/assets/images/emojis/marseyprotestyes.webp differ diff --git a/files/assets/images/emojis/marseyretard4.webp b/files/assets/images/emojis/marseyretard4.webp new file mode 100644 index 000000000..31b51f341 Binary files /dev/null and b/files/assets/images/emojis/marseyretard4.webp differ diff --git a/files/assets/images/emojis/marseyretardchad.webp b/files/assets/images/emojis/marseyretardchad.webp index d03dd6b68..d58399b06 100644 Binary files a/files/assets/images/emojis/marseyretardchad.webp and b/files/assets/images/emojis/marseyretardchad.webp differ diff --git a/files/assets/images/emojis/marseyrudolph.webp b/files/assets/images/emojis/marseyrudolph.webp new file mode 100644 index 000000000..5618cf431 Binary files /dev/null and b/files/assets/images/emojis/marseyrudolph.webp differ diff --git a/files/assets/images/emojis/marseyrudolph2.webp b/files/assets/images/emojis/marseyrudolph2.webp new file mode 100644 index 000000000..23bede027 Binary files /dev/null and b/files/assets/images/emojis/marseyrudolph2.webp differ diff --git a/files/assets/images/emojis/marseysadako.webp b/files/assets/images/emojis/marseysadako.webp new file mode 100644 index 000000000..c893948ac Binary files /dev/null and b/files/assets/images/emojis/marseysadako.webp differ diff --git a/files/assets/images/emojis/marseyschopenhauer.webp b/files/assets/images/emojis/marseyschopenhauer.webp index 41bf0aec9..02235f75f 100644 Binary files a/files/assets/images/emojis/marseyschopenhauer.webp and b/files/assets/images/emojis/marseyschopenhauer.webp differ diff --git a/files/assets/images/emojis/marseyskinny.webp b/files/assets/images/emojis/marseyskinny.webp new file mode 100644 index 000000000..5a66efa82 Binary files /dev/null and b/files/assets/images/emojis/marseyskinny.webp differ diff --git a/files/assets/images/emojis/marseysmug5.webp b/files/assets/images/emojis/marseysmug5.webp new file mode 100644 index 000000000..366f6ae57 Binary files /dev/null and b/files/assets/images/emojis/marseysmug5.webp differ diff --git a/files/assets/images/emojis/marseysmug6.webp b/files/assets/images/emojis/marseysmug6.webp new file mode 100644 index 000000000..7b50f334b Binary files /dev/null and b/files/assets/images/emojis/marseysmug6.webp differ diff --git a/files/assets/images/emojis/marseysteaming.webp b/files/assets/images/emojis/marseysteaming.webp index 6a4f705fd..00757b5dc 100644 Binary files a/files/assets/images/emojis/marseysteaming.webp and b/files/assets/images/emojis/marseysteaming.webp differ diff --git a/files/assets/images/emojis/marseywindmill.webp b/files/assets/images/emojis/marseywindmill.webp new file mode 100644 index 000000000..a5efeebe4 Binary files /dev/null and b/files/assets/images/emojis/marseywindmill.webp differ diff --git a/files/assets/images/emojis/marseywords2.webp b/files/assets/images/emojis/marseywords2.webp index d75c80375..481984faa 100644 Binary files a/files/assets/images/emojis/marseywords2.webp and b/files/assets/images/emojis/marseywords2.webp differ diff --git a/files/assets/images/emojis/marseyzombie2.webp b/files/assets/images/emojis/marseyzombie2.webp index 38b496f01..670fa22ea 100644 Binary files a/files/assets/images/emojis/marseyzombie2.webp and b/files/assets/images/emojis/marseyzombie2.webp differ diff --git a/files/assets/images/rDrama/sidebar/877.webp b/files/assets/images/rDrama/sidebar/877.webp new file mode 100644 index 000000000..e948c887b Binary files /dev/null and b/files/assets/images/rDrama/sidebar/877.webp differ diff --git a/files/assets/js/core.js b/files/assets/js/core.js index cbef8ecda..dd4c6a865 100644 --- a/files/assets/js/core.js +++ b/files/assets/js/core.js @@ -233,12 +233,6 @@ function expandDesktopImage(url) { bootstrap.Modal.getOrCreateInstance(document.getElementById('expandImageModal')).show(); }; -document.addEventListener("click", function(e){ - const element = e.target - if (element instanceof HTMLImageElement && element.alt.startsWith('![](')) - expandDesktopImage() -}); - function bs_trigger(e) { let tooltipTriggerList = [].slice.call(e.querySelectorAll('[data-bs-toggle="tooltip"]')); tooltipTriggerList.map(function(element){ @@ -342,7 +336,7 @@ function areyousure(t) { else t.innerHTML = t.innerHTML.replace(t.textContent, 'Are you sure?') - t.setAttribute("onclick", t.dataset.click2); + t.setAttribute("onclick", t.dataset.click); if (t.dataset.dismiss) t.setAttribute("data-bs-dismiss", t.dataset.dismiss); @@ -404,3 +398,51 @@ function sendFormXHRSwitch(e) { } ) } + +let sortAscending = {}; + +function sort_table(t) { + const n = Array.prototype.indexOf.call(t.parentElement.children, t); + const table = this.event.target.parentElement.parentElement.parentElement + const rows = table.rows; + let items = []; + for (let i = 1; i < rows.length; i++) { + const ele = rows[i]; + let x = rows[i].getElementsByTagName("TD")[n]; + if (!('sortKey' in x.dataset)) { + x = x.getElementsByTagName('a')[0] || x; + } + let attr; + if ('sortKey' in x.dataset) { + attr = x.dataset.sortKey; + } else if ('time' in x.dataset) { + attr = parseInt(x.dataset.time); + } else { + attr = x.innerText + if (/^[\d-,]+$/.test(x.innerHTML)) { + attr = parseInt(attr.replace(/,/g, '')) + } + } + items.push({ele, attr}); + } + if (sortAscending[n]) { + items.sort((a, b) => a.attr > b.attr ? 1 : -1); + sortAscending[n] = false; + } else { + items.sort((a, b) => a.attr < b.attr ? 1 : -1); + sortAscending[n] = true; + } + + for (let i = items.length - 1; i--;) { + items[i].ele.parentNode.insertBefore(items[i].ele, items[i + 1].ele); + } +} + + +document.addEventListener("click", function(e){ + const element = e.target + if (element instanceof HTMLImageElement && element.alt.startsWith('![](')) + expandDesktopImage() + else if (element.tagName == "TH") + sort_table(element) +}); diff --git a/files/assets/js/sort_table.js b/files/assets/js/sort_table.js deleted file mode 100644 index 98c01ceed..000000000 --- a/files/assets/js/sort_table.js +++ /dev/null @@ -1,34 +0,0 @@ -let sortAscending = {}; - -function sort_table(n) { - const table = this.event.target.parentElement.parentElement.parentElement - const rows = table.rows; - let items = []; - for (let i = 1; i < rows.length; i++) { - const ele = rows[i]; - let x = rows[i].getElementsByTagName("TD")[n]; - if (!('sortKey' in x.dataset)) { - x = x.getElementsByTagName('a')[0] || x; - } - let attr; - if ('sortKey' in x.dataset) { - attr = x.dataset.sortKey; - } else if ('time' in x.dataset) { - attr = parseInt(x.dataset.time); - } else { - attr = parseInt(x.innerHTML.replace(/,/g, '')); - } - items.push({ ele, attr }); - } - if (sortAscending[n]) { - items.sort((a, b) => a.attr > b.attr ? 1 : -1); - sortAscending[n] = false; - } else { - items.sort((a, b) => a.attr < b.attr ? 1 : -1); - sortAscending[n] = true; - } - - for (let i = items.length - 1; i--;) { - items[i].ele.parentNode.insertBefore(items[i].ele, items[i + 1].ele); - } -} diff --git a/files/classes/comment.py b/files/classes/comment.py index a7ce87fbc..7b82037fe 100644 --- a/files/classes/comment.py +++ b/files/classes/comment.py @@ -307,7 +307,8 @@ class Comment(Base): if not body: return "" - body = censor_slurs(body, v).replace(':marseytrain:', ':marseytrain:') + body = censor_slurs(body, v).replace(':marseytrain:', ':marseytrain:') \ + .replace(':marseysleep:', ':marseysleep:') return body diff --git a/files/classes/submission.py b/files/classes/submission.py index 071de737d..8f6ae788a 100644 --- a/files/classes/submission.py +++ b/files/classes/submission.py @@ -153,7 +153,7 @@ class Submission(Base): elif self.thumburl: if self.thumburl.startswith('/'): return SITE_FULL + self.thumburl return self.thumburl - elif self.is_youtube or self.is_video: return f"{SITE_FULL}/i/default_thumb_video.webp?v=1" + elif self.is_youtube or self.is_video: return f"{SITE_FULL}/i/default_thumb_video.webp?v=2" elif self.is_audio: return f"{SITE_FULL}/i/default_thumb_audio.webp?v=1" elif self.domain.split('.')[0] == SITE.split('.')[0]: return f"{SITE_FULL}/i/{SITE_NAME}/site_preview.webp?v=3009" @@ -297,7 +297,7 @@ class Submission(Base): body += " - WINNER!" if not winner and v and v.admin_level >= PERMS['POST_BETS_DISTRIBUTE']: - body += f'''''' + body += f'''''' body += "" else: input_type = 'radio' if o.exclusive else 'checkbox' @@ -329,7 +329,9 @@ class Submission(Base): body = self.body if not body: return "" - body = censor_slurs(body, v).replace(':marseytrain:', ':marseytrain:') + body = censor_slurs(body, v).replace(':marseytrain:', ':marseytrain:') \ + .replace(':marseysleep:', ':marseysleep:') + body = normalize_urls_runtime(body, v) return body @@ -346,7 +348,8 @@ class Submission(Base): def plaintitle(self, v): title = self.title - title = censor_slurs(title, v).replace(':marseytrain:', ':marseytrain:') + title = censor_slurs(title, v).replace(':marseytrain:', ':marseytrain:') \ + .replace(':marseysleep:', ':marseysleep:') return title diff --git a/files/classes/user.py b/files/classes/user.py index 0b75499cd..78074d1a6 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -520,9 +520,9 @@ class User(Base): @property @lazy - def unban_in(self): + def unban_string(self): if self.unban_utc == 0: - return "never" + return "permanently banned" wait = self.unban_utc - int(time.time()) @@ -539,43 +539,9 @@ class User(Base): text = f"{days}d {hours:02d}h {mins:02d}m" - return text - - - @property - @lazy - def unban_string(self): - text = self.unban_in - - if text == "never": return "permanently banned" - return f"Unban in {text}" - @property - @lazy - def unchud_in(self): - if self.agendaposter == 1: - return "never" - - wait = self.agendaposter - int(time.time()) - - if wait < 60: - text = f"{wait}s" - else: - days = wait//(24*60*60) - wait -= days*24*60*60 - - hours = wait//(60*60) - wait -= hours*60*60 - - mins = wait//60 - - text = f"{days}d {hours:02d}h {mins:02d}m" - - return text - - @property @lazy def received_awards(self): diff --git a/files/helpers/actions.py b/files/helpers/actions.py index e9888f882..864c66da5 100644 --- a/files/helpers/actions.py +++ b/files/helpers/actions.py @@ -98,7 +98,7 @@ def execute_snappy(post:Submission, v:User): body += "\n\n" - if post.url and not post.url.startswith(SITE_FULL) and not post.url.startswith('/') and not post.url.startswith(f'https://{BAN_EVASION_DOMAIN}'): + if post.url and not post.url.startswith('/') and not post.url.startswith(SITE_FULL) and not post.url.startswith(BAN_EVASION_FULL): if post.url.startswith('https://old.reddit.com/r/'): rev = post.url.replace('https://old.reddit.com/', '') rev = f"* [unddit.com](https://unddit.com/{rev})\n" @@ -127,7 +127,7 @@ def execute_snappy(post:Submission, v:User): for href, title in captured: - if href.startswith(SITE_FULL) or href.startswith(f'https://{BAN_EVASION_DOMAIN}'): continue + if href.startswith(SITE_FULL) or href.startswith(BAN_EVASION_FULL): continue if "Snapshots:\n\n" not in body: body += "Snapshots:\n\n" if f'**[{title}]({href})**:\n\n' not in body: addition = f'**[{title}]({href})**:\n\n' diff --git a/files/helpers/config/const.py b/files/helpers/config/const.py index e3cd78225..ccc8044b0 100644 --- a/files/helpers/config/const.py +++ b/files/helpers/config/const.py @@ -148,6 +148,7 @@ if SITE_NAME == 'rDrama': "it's almost as if": "I'm a retard but", "my brother in christ": "my brother in Allah", "kyle": "Kylie", + "twitter files": 'twitter files :marseysleep:', } SLURS.update(RDRAMA_SLURS) @@ -233,7 +234,6 @@ PERMS = { # Minimum admin_level to perform action. 'HOLE_CREATE': 0, 'EDIT_RULES': 3, 'FLAGS_REMOVE': 2, - 'VOTES_VISIBLE': 0, 'USER_BLOCKS_VISIBLE': 0, 'USER_FOLLOWS_VISIBLE': 0, 'USER_VOTERS_VISIBLE': 0, @@ -399,6 +399,7 @@ POST_BODY_LENGTH_LIMIT = 20000 # do not make larger than 20000 without altering POST_BODY_HTML_LENGTH_LIMIT = 40000 # do not make larger than 40000 without altering the table COMMENT_BODY_LENGTH_LIMIT = 10000 # do not make larger than 10000 characters without altering the table COMMENT_BODY_HTML_LENGTH_LIMIT = 20000 # do not make larger than 20000 characters without altering the table +CSS_LENGTH_LIMIT = 10000 # do not make larger than 20000 characters without altering the table COMMENT_MAX_DEPTH = 200 TRANSFER_MESSAGE_LENGTH_LIMIT = 200 # do not make larger than 10000 characters (comment limit) without altering the table MIN_REPOST_CHECK_URL_LENGTH = 9 # also change the constant in checkRepost() of submit.js @@ -427,38 +428,27 @@ HOLE_REQUIRED = False HOLE_COST = 0 HOLE_INACTIVITY_DELETION = False +PRIVILEGED_USER_BOTS = () +GUMROAD_MESSY = () + AUTOJANNY_ID = 1 SNAPPY_ID = 2 LONGPOSTBOT_ID = 3 ZOZBOT_ID = 4 BASEDBOT_ID = 0 -PRIVILEGED_USER_BOTS = () - -SCHIZO_ID = 0 KIPPY_ID = 0 -MCCOX_ID = 0 -CHIOBU_ID = 0 PIZZASHILL_ID = 0 IMPASSIONATA_ID = 0 -HEYMOON_ID = 0 -MIMW_ID = 0 -SNUS_ID = 0 -GUMROAD_MESSY = () -IDIO_ID = 0 CARP_ID = 0 -JOAN_ID = 0 AEVANN_ID = 0 SNAKES_ID = 0 JUSTCOOL_ID = 0 -HOMO_ID = 0 -SOREN_ID = 0 LAWLZ_ID = 0 -DAD_ID = 0 -MOM_ID = 0 -DONGER_ID = 0 -GEESE_ID = 0 -BLACKJACKBTZ_ID = 0 +TGTW_ID = 0 + MODMAIL_ID = 2 +GIFT_NOTIF_ID = 5 +SIGNUP_FOLLOW_ID = 0 POLL_THREAD = 0 POLL_BET_COINS = 200 @@ -473,8 +463,6 @@ SIDEBAR_THREAD = 0 BANNER_THREAD = 0 BADGE_THREAD = 0 SNAPPY_THREAD = 0 -GIFT_NOTIF_ID = 5 -SIGNUP_FOLLOW_ID = 0 NOTIFICATION_THREAD = 1 MAX_IMAGE_SIZE_BANNER_RESIZED_MB = 1 @@ -510,6 +498,8 @@ BADGE_BLACKLIST = { # only grantable by AEVANN_ID and SNAKES_ID except on PCM 137, # Lottery Winner } +NOTIFIED_USERS = {} + if SITE == 'rdrama.net': FEATURES['PRONOUNS'] = True FEATURES['HOUSES'] = True @@ -532,36 +522,58 @@ if SITE == 'rdrama.net': HOLE_COST = 50000 HOLE_INACTIVITY_DELETION = True + PRIVILEGED_USER_BOTS = (12125,16049) + GUMROAD_MESSY = (1230,1379) + AUTOJANNY_ID = 1046 SNAPPY_ID = 261 LONGPOSTBOT_ID = 1832 ZOZBOT_ID = 1833 - PRIVILEGED_USER_BOTS = (12125, 16049) - - SCHIZO_ID = 8494 KIPPY_ID = 7150 - MCCOX_ID = 8239 - CHIOBU_ID = 5214 PIZZASHILL_ID = 2424 IMPASSIONATA_ID = 5800 - HEYMOON_ID = 3635 - MIMW_ID = 3377 - SNUS_ID = 8407 - GUMROAD_MESSY = (1230,1379) - IDIO_ID = 30 CARP_ID = 995 - JOAN_ID = 28 AEVANN_ID = 1 SNAKES_ID = 10288 JUSTCOOL_ID = 4999 - HOMO_ID = 147 - SOREN_ID = 2546 LAWLZ_ID = 3833 - DAD_ID = 2513 - MOM_ID = 4588 - DONGER_ID = 541 - GEESE_ID = 1710 - BLACKJACKBTZ_ID = 12732 + TGTW_ID = 2008 + + NOTIFIED_USERS = { + 'aevan': AEVANN_ID, + 'avean': AEVANN_ID, + 'carp': CARP_ID, + 'clit': CARP_ID, + 'snakes': SNAKES_ID, + 'sneks': SNAKES_ID, + 'snekky': SNAKES_ID, + 'snekchad': SNAKES_ID, + 'jc': JUSTCOOL_ID, + 'justcool': JUSTCOOL_ID, + 'kippy': KIPPY_ID, + 'lawlz': LAWLZ_ID, + 'transgirltradwife': TGTW_ID, + 'impassionata': IMPASSIONATA_ID, + 'pizzashill': PIZZASHILL_ID, + + 'joan': 28, + 'pewkie': 28, + 'idio3': 30, + 'idio ': 30, + 'telegram ': 30, + 'the_homocracy': 147, + 'donger': 541, + 'geese': 1710, + 'soren': 2546, + 'marseyismywaifu': 3377, + 'mimw': 3377, + 'heymoon': 3635, + 'jollymoon': 3635, + 'chiobu': 5214, + 'mccox': 8239, + 'snus': 8407, + 'schizo': 8494, + } ANTISPAM_BYPASS_IDS = {1703, 13427} @@ -714,46 +726,12 @@ bots = {AUTOJANNY_ID, SNAPPY_ID, LONGPOSTBOT_ID, ZOZBOT_ID, BASEDBOT_ID} COLORS = {'ff66ac','805ad5','62ca56','38a169','80ffff','2a96f3','eb4963','ff0000','f39731','30409f','3e98a7','e4432d','7b9ae4','ec72de','7f8fa6', 'f8db58','8cdbe6', DEFAULT_COLOR} BAN_EVASION_DOMAIN = 'stupidpol.site' +BAN_EVASION_FULL = f'https://{BAN_EVASION_DOMAIN}' DOUBLE_XP_ENABLED = -1 # set to unixtime for when DXP begins, -1 to disable ### COMMENT NOTIFICATIONS ### -NOTIFIED_USERS = { - 'aevan': AEVANN_ID, - 'avean': AEVANN_ID, - 'joan': JOAN_ID, - 'pewkie': JOAN_ID, - 'carp': CARP_ID, - 'idio3': IDIO_ID, - 'idio ': IDIO_ID, - 'telegram ': IDIO_ID, - 'the_homocracy': HOMO_ID, - 'schizo': SCHIZO_ID, - 'snakes': SNAKES_ID, - 'sneks': SNAKES_ID, - 'snekky': SNAKES_ID, - 'snekchad': SNAKES_ID, - 'jc': JUSTCOOL_ID, - 'justcool': JUSTCOOL_ID, - 'geese': GEESE_ID, - 'clit': CARP_ID, - 'kippy': KIPPY_ID, - 'mccox': MCCOX_ID, - - 'lawlz': LAWLZ_ID, - 'chiobu': CHIOBU_ID, - 'donger': DONGER_ID, - 'soren': SOREN_ID, - 'pizzashill': PIZZASHILL_ID, - 'impassionata': IMPASSIONATA_ID, - 'heymoon': HEYMOON_ID, - 'jollymoon': HEYMOON_ID, - 'marseyismywaifu': MIMW_ID, - 'mimw': MIMW_ID, - 'snus': SNUS_ID, -} - 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.') @@ -773,12 +751,12 @@ if SITE == 'rdrama.net': REDDIT_NOTIFS_SITE.add('justice4darrell') REDDIT_NOTIFS_SITE.add('cringetopia.org') REDDIT_NOTIFS_USERS = { - 'idio3': IDIO_ID, + 'idio3': 30, 'aevann': AEVANN_ID, 'carpflo': CARP_ID, 'carpathianflorist': CARP_ID, 'carpathian florist': CARP_ID, - 'the_homocracy': HOMO_ID, + 'the_homocracy': 147, 'justcool393': JUSTCOOL_ID } elif SITE_NAME == 'WPD': @@ -1000,6 +978,9 @@ if SITE_NAME == 'rDrama': 'bungie.net', 'soyjak.party', 'teamblind.com', + 'mainchan.com', + 'encyclopediadramatica.online', + 'thecoli.com', #fediverse 'rdrama.cc', diff --git a/files/helpers/config/modaction_types.py b/files/helpers/config/modaction_types.py index 8ac140bed..3c686e274 100644 --- a/files/helpers/config/modaction_types.py +++ b/files/helpers/config/modaction_types.py @@ -236,13 +236,23 @@ MODACTION_TYPES = { "icon": 'fa-award', "color": 'bg-primary' }, + 'set_new': { + "str": 'changed the default sorting of comments on {self.target_link} to `new`', + "icon": 'fa-sparkles', + "color": 'bg-primary' + }, + 'set_hot': { + "str": 'changed the default sorting of comments on {self.target_link} to `hot`', + "icon": 'fa-fire', + "color": 'bg-primary' + }, 'set_nsfw': { - "str": 'set nsfw on post {self.target_link}', + "str": 'set {self.target_link} as +18', "icon": 'fa-eye-evil', "color": 'bg-danger' }, 'set_nsfw_comment': { - "str": 'set nsfw on a {self.target_link}', + "str": 'set {self.target_link} as +18', "icon": 'fa-eye-evil', "color": 'bg-danger' }, @@ -302,12 +312,12 @@ MODACTION_TYPES = { "color": 'bg-muted' }, 'unset_nsfw': { - "str": 'un-set nsfw on post {self.target_link}', + "str": 'unset {self.target_link} as +18', "icon": 'fa-eye-evil', "color": 'bg-success' }, 'unset_nsfw_comment': { - "str": 'un-set nsfw on a {self.target_link}', + "str": 'unset {self.target_link} as +18', "icon": 'fa-eye-evil', "color": 'bg-success' }, diff --git a/files/helpers/cron.py b/files/helpers/cron.py index 32c871042..e2889caf4 100644 --- a/files/helpers/cron.py +++ b/files/helpers/cron.py @@ -90,7 +90,11 @@ def _sub_inactive_purge_task(): posts = g.db.query(Submission).filter(Submission.sub.in_(names)).all() for post in posts: - post.sub = None + if post.sub == 'programming': + post.sub = 'slackernews' + else: + post.sub = None + post.hole_pinned = None g.db.add(post) diff --git a/files/helpers/media.py b/files/helpers/media.py index 93932cd14..ff7f87152 100644 --- a/files/helpers/media.py +++ b/files/helpers/media.py @@ -176,7 +176,7 @@ def process_image(filename:str, v, resize=0, trim=False, uploader_id:Optional[in path = filename.rsplit('/', 1)[0] kind = path.split('/')[-1] - if kind in ('banners','sidebar','badges'): + if kind in ('banners','sidebar'): hashes = {} for img in os.listdir(path): diff --git a/files/helpers/regex.py b/files/helpers/regex.py index e36dc79a1..c13bfbf14 100644 --- a/files/helpers/regex.py +++ b/files/helpers/regex.py @@ -40,7 +40,7 @@ controversial_regex = re.compile('["> ](https:\/\/old\.reddit\.com/r/[a-zA-Z0-9_ fishylinks_regex = re.compile("https?://\S+", flags=re.A) -spoiler_regex = re.compile('\|\|(.+)\|\|(?![^<]*<\/(code|pre|a)>)', flags=re.A) +spoiler_regex = re.compile('\|\|(.+?)\|\|(?![^<]*<\/(code|pre|a)>)', flags=re.A) reddit_regex = re.compile('(^|\s|

)\/?((r|u)\/(\w|-){3,25})(?![^<]*<\/(code|pre|a)>)', flags=re.A) sub_regex = re.compile('(^|\s|

)\/?(h\/(\w|-){3,25})(?![^<]*<\/(code|pre|a)>)', flags=re.A) diff --git a/files/helpers/sanitize.py b/files/helpers/sanitize.py index 742f8d273..f7562a03b 100644 --- a/files/helpers/sanitize.py +++ b/files/helpers/sanitize.py @@ -58,14 +58,12 @@ def allowed_attributes(tag, name, value): try: value = int(value.replace('px', '')) except: return False if 0 < value <= 250: return True - return False if tag == 'a': if name == 'href' and '\\' not in value and 'xn--' not in value: return True if name == 'rel' and value == 'nofollow noopener': return True if name == 'target' and value == '_blank': return True - return False if tag == 'img': if name in {'src','data-src'}: return is_safe_url(value) @@ -73,38 +71,33 @@ def allowed_attributes(tag, name, value): if name == 'data-bs-toggle' and value == 'tooltip': return True if name in {'g','b','glow'} and not value: return True if name in {'alt','title'}: return True - return False if tag == 'lite-youtube': if name == 'params' and value.startswith('autoplay=1&modestbranding=1'): return True if name == 'videoid': return True - return False if tag == 'video': if name == 'controls' and value == '': return True if name == 'preload' and value == 'none': return True if name == 'src': return is_safe_url(value) - return False if tag == 'audio': if name == 'src': return is_safe_url(value) if name == 'controls' and value == '': return True if name == 'preload' and value == 'none': return True - return False if tag == 'p': - if name == 'class' and value == 'mb-0': return True - return False + if name == 'class' and value in ('mb-0','resizable'): return True if tag == 'span': if name == 'data-bs-toggle' and value == 'tooltip': return True if name == 'title': return True if name == 'alt': return True - return False if tag == 'table': if name == 'class' and value == 'table': return True - return False + + return False def build_url_re(tlds, protocols): """Builds the url regex used by linkifier @@ -370,7 +363,7 @@ def sanitize(sanitized, golden=True, limit_pings=0, showmore=True, count_marseys sanitized = sanitized.replace(i.group(0), htmlsource) - sanitized = video_sub_regex.sub(r'\1', sanitized) + sanitized = video_sub_regex.sub(r'\1

', sanitized) sanitized = audio_sub_regex.sub(r'\1', sanitized) if count_marseys: @@ -429,7 +422,6 @@ def allowed_attributes_emojis(tag, name, value): if name == 'data-bs-toggle' and value == 'tooltip': return True if name == 'title': return True if name == 'alt': return True - return False return False diff --git a/files/routes/__init__.py b/files/routes/__init__.py index 8c60b809a..e29775253 100644 --- a/files/routes/__init__.py +++ b/files/routes/__init__.py @@ -2,7 +2,7 @@ from files.helpers.config.const import FEATURES # import flask then... -from flask import g, request, render_template, make_response, redirect, jsonify, send_from_directory, send_file +from flask import g, request, render_template, make_response, redirect, jsonify, send_file # import our app then... from files.__main__ import app diff --git a/files/routes/admin.py b/files/routes/admin.py index 7becbc01f..09336cc4f 100644 --- a/files/routes/admin.py +++ b/files/routes/admin.py @@ -1,6 +1,8 @@ import time from urllib.parse import quote, urlencode +from sqlalchemy import nullslast + from files.__main__ import app, cache, limiter from files.classes import * from files.helpers.actions import * @@ -335,7 +337,19 @@ def revert_actions(v:User, username): @app.get("/admin/shadowbanned") @admin_level_required(PERMS['USER_SHADOWBAN']) def shadowbanned(v): - users = g.db.query(User).filter(User.shadowbanned != None).order_by(User.shadowbanned).all() + users = g.db.query(User) \ + .filter( + User.shadowbanned != None, + User.truescore > 0, + not_(and_( + User.profileurl.startswith('/e/'), + User.customtitle==None, + User.namecolor == DEFAULT_COLOR, + User.patron == 0, + )) + ) \ + .order_by(nullslast(User.last_active.desc())).all() + return render_template("admin/shadowbanned.html", v=v, users=users) @@ -545,6 +559,8 @@ def badge_grant_post(v): if '\\' in url: abort(400) if url.startswith(SITE_FULL): url = url.split(SITE_FULL, 1)[1] + elif url.startswith(BAN_EVASION_FULL): + url = url.split(BAN_EVASION_FULL, 1)[1] new_badge.url = url g.db.add(new_badge) @@ -1075,12 +1091,16 @@ def agendaposter(user_id, v): try: post = int(request.values["reason"].split("/post/")[1].split(None, 1)[0]) except: abort(400) post = get_post(post) + if post.sub == 'chudrama': + abort(403, "You can't chud people in /h/chudrama") post.chuddedfor = f'{duration} by @{v.username}' g.db.add(post) elif request.values["reason"].startswith("/comment/"): try: comment = int(request.values["reason"].split("/comment/")[1].split(None, 1)[0]) except: abort(400) comment = get_comment(comment) + if comment.post.sub == 'chudrama': + abort(403, "You can't chud people in /h/chudrama") comment.chuddedfor = f'{duration} by @{v.username}' g.db.add(comment) diff --git a/files/routes/asset_submissions.py b/files/routes/asset_submissions.py index 12687893e..967e30c63 100644 --- a/files/routes/asset_submissions.py +++ b/files/routes/asset_submissions.py @@ -14,17 +14,7 @@ from files.__main__ import app, cache, limiter ASSET_TYPES = (Marsey, HatDef) CAN_APPROVE_ASSETS = (AEVANN_ID, CARP_ID, SNAKES_ID) -CAN_UPDATE_ASSETS = (AEVANN_ID, CARP_ID, SNAKES_ID, GEESE_ID, JUSTCOOL_ID) - -@app.get('/asset_submissions/') -@limiter.exempt -def asset_submissions(path): - resp = make_response(send_from_directory('/asset_submissions', path)) - resp.headers.remove("Cache-Control") - resp.headers.add("Cache-Control", "public, max-age=3153600") - resp.headers.remove("Content-Type") - resp.headers.add("Content-Type", "image/webp") - return resp +CAN_UPDATE_ASSETS = (AEVANN_ID, CARP_ID, SNAKES_ID) @app.get("/submit/marseys") @auth_required diff --git a/files/routes/awards.py b/files/routes/awards.py index d89a37e4f..108e72129 100644 --- a/files/routes/awards.py +++ b/files/routes/awards.py @@ -267,6 +267,10 @@ def award_thing(v, thing_type, id): else: thing.stickied_utc = t g.db.add(thing) elif kind == "agendaposter": + if thing_type == 'post' and thing.sub == 'chudrama' \ + or thing_type == 'comment' and thing.post.sub == 'chudrama': + abort(403, "You can't give the chud award in /h/chudrama") + if author.marseyawarded: abort(409, f"@{author.username} is under the effect of a conflicting award: Marsey award.") diff --git a/files/routes/comments.py b/files/routes/comments.py index 6ead6fc71..257e8ee70 100644 --- a/files/routes/comments.py +++ b/files/routes/comments.py @@ -60,7 +60,8 @@ def post_pid_comment_cid(cid, pid=None, anything=None, v=None, sub=None): context -= 1 top_comment = c - if v: defaultsortingcomments = v.defaultsortingcomments + if post.new: defaultsortingcomments = 'new' + elif v: defaultsortingcomments = v.defaultsortingcomments else: defaultsortingcomments = "hot" sort=request.values.get("sort", defaultsortingcomments) @@ -199,7 +200,7 @@ def comment(v:User): if v.owoify: body_for_sanitize = owoify(body_for_sanitize) if v.marsify: body_for_sanitize = marsify(body_for_sanitize) - torture = (v.agendaposter and not v.marseyawarded and post_target.sub != 'chudrama' and post_target.id not in ADMIGGER_THREADS) + torture = (v.agendaposter and not v.marseyawarded and not (posting_to_submission and post_target.sub == 'chudrama') and post_target.id not in ADMIGGER_THREADS) body_html = sanitize(body_for_sanitize, limit_pings=5, count_marseys=not v.marsify, torture=torture) if post_target.id not in ADMIGGER_THREADS and '!wordle' not in body.lower() and AGENDAPOSTER_PHRASE not in body.lower(): diff --git a/files/routes/hats.py b/files/routes/hats.py index c2cbb4b30..4c1b30593 100644 --- a/files/routes/hats.py +++ b/files/routes/hats.py @@ -12,20 +12,15 @@ from files.__main__ import app, limiter def hats(v:User): owned_hat_ids = [x.hat_id for x in v.owned_hats] - if request.values.get("sort") == 'author_asc': - hats = g.db.query(HatDef, User).join(HatDef.author).filter(HatDef.submitter_id == None).order_by(User.username).all() - elif request.values.get("sort") == 'author_desc': - hats = g.db.query(HatDef, User).join(HatDef.author).filter(HatDef.submitter_id == None).order_by(User.username.desc()).all() + if v.equipped_hat_ids: + equipped = g.db.query(HatDef, User).join(HatDef.author).filter(HatDef.submitter_id == None, HatDef.id.in_(owned_hat_ids), HatDef.id.in_(v.equipped_hat_ids)).order_by(HatDef.price, HatDef.name).all() + not_equipped = g.db.query(HatDef, User).join(HatDef.author).filter(HatDef.submitter_id == None, HatDef.id.in_(owned_hat_ids), HatDef.id.notin_(v.equipped_hat_ids)).order_by(HatDef.price, HatDef.name).all() + owned = equipped + not_equipped else: - if v.equipped_hat_ids: - equipped = g.db.query(HatDef, User).join(HatDef.author).filter(HatDef.submitter_id == None, HatDef.id.in_(owned_hat_ids), HatDef.id.in_(v.equipped_hat_ids)).order_by(HatDef.price, HatDef.name).all() - not_equipped = g.db.query(HatDef, User).join(HatDef.author).filter(HatDef.submitter_id == None, HatDef.id.in_(owned_hat_ids), HatDef.id.notin_(v.equipped_hat_ids)).order_by(HatDef.price, HatDef.name).all() - owned = equipped + not_equipped - else: - owned = g.db.query(HatDef, User).join(HatDef.author).filter(HatDef.submitter_id == None, HatDef.id.in_(owned_hat_ids)).order_by(HatDef.price, HatDef.name).all() + owned = g.db.query(HatDef, User).join(HatDef.author).filter(HatDef.submitter_id == None, HatDef.id.in_(owned_hat_ids)).order_by(HatDef.price, HatDef.name).all() - not_owned = g.db.query(HatDef, User).join(HatDef.author).filter(HatDef.submitter_id == None, HatDef.id.notin_(owned_hat_ids)).order_by(HatDef.price, HatDef.name).all() - hats = owned + not_owned + not_owned = g.db.query(HatDef, User).join(HatDef.author).filter(HatDef.submitter_id == None, HatDef.id.notin_(owned_hat_ids)).order_by(HatDef.price, HatDef.name).all() + hats = owned + not_owned sales = g.db.query(func.sum(User.coins_spent_on_hats)).scalar() num_of_hats = g.db.query(HatDef).filter(HatDef.submitter_id == None).count() diff --git a/files/routes/posts.py b/files/routes/posts.py index 5ac6f98ed..baa08b93b 100644 --- a/files/routes/posts.py +++ b/files/routes/posts.py @@ -697,6 +697,8 @@ def submit_post(v:User, sub=None): if url and url.startswith(SITE_FULL): url = url.split(SITE_FULL)[1] + elif url.startswith(BAN_EVASION_FULL): + url = url.split(BAN_EVASION_FULL, 1)[1] post = Submission( private=flag_private, @@ -745,6 +747,11 @@ def submit_post(v:User, sub=None): post.thumburl = process_image(name2, v, resize=100) elif file.content_type.startswith('video/'): post.url = process_video(file, v) + name = f'/images/{time.time()}'.replace('.','') + '.webp' + subprocess.run(['ffmpeg', '-y', '-loglevel', 'warning', + '-i', post.url, '-vf', "scale='min(300,iw)':-2", + '-q:v', '3', '-frames:v', '1', name], check=True) + post.thumburl = name elif file.content_type.startswith('audio/'): post.url = process_audio(file, v) else: @@ -800,8 +807,8 @@ def submit_post(v:User, sub=None): execute_lawlz_actions(v, post) if (SITE == 'rdrama.net' - and v.id in (IMPASSIONATA_ID, PIZZASHILL_ID, 2008) - and not (post.sub and post.sub.stealth)): + and v.id in (IMPASSIONATA_ID, PIZZASHILL_ID, TGTW_ID) + and not (post.sub and post.subr.stealth)): post.stickied_utc = int(time.time()) + 3600 post.stickied = "AutoJanny" @@ -871,9 +878,9 @@ def undelete_post_pid(pid, v): return {"message": "Post undeleted!"} -@app.post("/toggle_post_nsfw/") +@app.post("/mark_post_nsfw/") @auth_required -def toggle_post_nsfw(pid, v): +def mark_post_nsfw(pid, v): post = get_post(pid) if post.author_id != v.id and not v.admin_level >= PERMS['POST_COMMENT_MODERATION'] and not (post.sub and v.mods(post.sub)): @@ -882,13 +889,13 @@ def toggle_post_nsfw(pid, v): if post.over_18 and v.is_suspended_permanently: abort(403) - post.over_18 = not post.over_18 + post.over_18 = True g.db.add(post) if post.author_id != v.id: if v.admin_level >= PERMS['POST_COMMENT_MODERATION']: ma = ModAction( - kind = "set_nsfw" if post.over_18 else "unset_nsfw", + kind = "set_nsfw", user_id = v.id, target_submission_id = post.id, ) @@ -896,14 +903,48 @@ def toggle_post_nsfw(pid, v): else: ma = SubAction( sub = post.sub, - kind = "set_nsfw" if post.over_18 else "unset_nsfw", + kind = "set_nsfw", user_id = v.id, target_submission_id = post.id, ) g.db.add(ma) + send_repeatable_notification(post.author_id, f"@{v.username} (Admin) has marked [{post.title}](/post/{post.id}) as +18") - if post.over_18: return {"message": "Post has been marked as +18!"} - else: return {"message": "Post has been unmarked as +18!"} + return {"message": "Post has been marked as +18!"} + +@app.post("/unmark_post_nsfw/") +@auth_required +def unmark_post_nsfw(pid, v): + post = get_post(pid) + + if post.author_id != v.id and not v.admin_level >= PERMS['POST_COMMENT_MODERATION'] and not (post.sub and v.mods(post.sub)): + abort(403) + + if post.over_18 and v.is_suspended_permanently: + abort(403) + + post.over_18 = False + g.db.add(post) + + if post.author_id != v.id: + if v.admin_level >= PERMS['POST_COMMENT_MODERATION']: + ma = ModAction( + kind = "unset_nsfw", + user_id = v.id, + target_submission_id = post.id, + ) + g.db.add(ma) + else: + ma = SubAction( + sub = post.sub, + kind = "unset_nsfw", + user_id = v.id, + target_submission_id = post.id, + ) + g.db.add(ma) + send_repeatable_notification(post.author_id, f"@{v.username} (Admin) has unmarked [{post.title}](/post/{post.id}) as +18") + + return {"message": "Post has been unmarked as +18!"} @app.post("/save_post/") @limiter.limit(DEFAULT_RATELIMIT_SLOWER) @@ -949,15 +990,46 @@ def pin_post(post_id, v): else: return {"message": "Post unpinned!"} return abort(404, "Post not found!") -@app.route("/post//new", methods=["PUT", "DELETE"]) +@app.put("/post//new") @limiter.limit(DEFAULT_RATELIMIT_SLOWER) @auth_required -def toggle_new_sort(post_id:int, v:User): +def set_new_sort(post_id:int, v:User): post = get_post(post_id) if not v.can_edit(post): abort(403, "Only the post author can do that!") - post.new = request.method == "PUT" + post.new = True g.db.add(post) - return {"message": f"Turned {'on' if post.new else 'off'} sort by new"} + + if v.id != post.author_id: + ma = ModAction( + kind = "set_new", + user_id = v.id, + target_submission_id = post.id, + ) + g.db.add(ma) + send_repeatable_notification(post.author_id, f"@{v.username} (Admin) has changed the the default sorting of comments on [{post.title}](/post/{post.id}) to `new`") + + return {"message": f"Changed the the default sorting of comments on this post to 'new'"} + + +@app.delete("/post//new") +@limiter.limit(DEFAULT_RATELIMIT_SLOWER) +@auth_required +def unset_new_sort(post_id:int, v:User): + post = get_post(post_id) + if not v.can_edit(post): abort(403, "Only the post author can do that!") + post.new = None + g.db.add(post) + + if v.id != post.author_id: + ma = ModAction( + kind = "set_hot", + user_id = v.id, + target_submission_id = post.id, + ) + g.db.add(ma) + send_repeatable_notification(post.author_id, f"@{v.username} (Admin) has changed the the default sorting of comments on [{post.title}](/post/{post.id}) to `hot`") + + return {"message": f"Changed the the default sorting of comments on this post to 'hot'"} extensions = IMAGE_FORMATS + VIDEO_FORMATS + AUDIO_FORMATS diff --git a/files/routes/routehelpers.py b/files/routes/routehelpers.py index 00b9e0d61..71fa1ad08 100644 --- a/files/routes/routehelpers.py +++ b/files/routes/routehelpers.py @@ -46,7 +46,6 @@ def check_for_alts(current:User, include_current_session=True): past_accs.remove(past_id) continue - if past_id == MOM_ID or current_id == MOM_ID: break if past_id == current_id: continue li = [past_id, current_id] diff --git a/files/routes/search.py b/files/routes/search.py index f1cca4c52..a21c19863 100644 --- a/files/routes/search.py +++ b/files/routes/search.py @@ -225,7 +225,14 @@ def searchcomments(v:User): if v.admin_level < PERMS['POST_COMMENT_MODERATION']: private = [x[0] for x in g.db.query(Submission.id).filter(Submission.private == True).all()] - comments = comments.filter(Comment.is_banned==False, Comment.deleted_utc == 0, Comment.parent_submission.notin_(private)) + comments = comments.filter( + Comment.is_banned==False, + Comment.deleted_utc == 0, + or_( + Comment.parent_submission.notin_(private), + Comment.wall_user_id != None + ) + ) if 'after' in criteria: diff --git a/files/routes/settings.py b/files/routes/settings.py index 8502eb072..9203d7096 100644 --- a/files/routes/settings.py +++ b/files/routes/settings.py @@ -342,9 +342,6 @@ def settings_personal_post(v): if house == "None": house = '' v.house = house - if v.house == "Vampire": - send_repeatable_notification(DAD_ID, f"@{v.username} has joined House Vampire!") - updated = True if updated: @@ -602,7 +599,7 @@ def settings_css_get(v:User): @ratelimit_user() def settings_css(v): if v.agendaposter: abort(400, "Agendapostered users can't edit CSS!") - css = request.values.get("css", v.css).strip().replace('\\', '').strip()[:4000] + css = request.values.get("css", v.css).strip().replace('\\', '').strip()[:CSS_LENGTH_LIMIT] if '') -def archives(path): - resp = make_response(send_from_directory('/archives', path)) - if request.path.endswith('.css'): resp.headers.add("Content-Type", "text/css") - return resp - -def static_file(dir:str, path:str, should_cache:bool, is_webp:bool) -> Response: - resp = make_response(send_from_directory(dir, path)) - if should_cache: - resp.headers.remove("Cache-Control") - resp.headers.add("Cache-Control", "public, max-age=3153600") - if is_webp: - resp.headers.remove("Content-Type") - resp.headers.add("Content-Type", "image/webp") - return resp - -@app.get('/e/') -@limiter.exempt -def emoji(emoji): - if not emoji.endswith('.webp'): abort(404) - return static_file('assets/images/emojis', emoji, True, True) - -@app.get('/icon.webp') -@limiter.exempt -def icon(): - return static_file('assets/images', f'{SITE_NAME}/icon.webp', True, True) - -@app.get('/i/') -@limiter.exempt -def image(path): - is_webp = path.endswith('.webp') - return static_file('assets/images', path, is_webp or path.endswith('.gif') or path.endswith('.ttf') or path.endswith('.woff2'), is_webp) - -@app.get('/assets/') -@app.get('/static/assets/') -@limiter.exempt -def static_service(path): - if path.startswith(f'app_{SITE_NAME}_v'): - return redirect('/app') - is_webp = path.endswith('.webp') - return static_file('assets', path, is_webp or path.endswith('.gif') or path.endswith('.ttf') or path.endswith('.woff2'), is_webp) - -### BEGIN FALLBACK ASSET SERVING -# In production, we have nginx serve these locations now. -# These routes stay for local testing. Requests don't reach them on prod. - -@app.get('/images/') -@app.get('/hostedimages/') -@app.get("/static/images/") -@limiter.exempt -def images(path): - return static_file('/images', path, True, True) - -@app.get('/videos/') -@limiter.exempt -def videos(path): - return static_file('/videos', path, True, False) - -@app.get('/audio/') -@limiter.exempt -def audio(path): - return static_file('/audio', path, True, False) - -### END FALLBACK ASSET SERVING - -@app.get("/robots.txt") -def robots_txt(): - return send_file("assets/robots.txt") - no = (21,22,23,24,25,26,27) @cache.memoize(timeout=3600) @@ -350,16 +281,6 @@ def blocks(v): return render_template("blocks.html", v=v, users=users, targets=targets) -@app.get("/banned") -@auth_required -def banned(v:User): - after_30_days = int(time.time()) + 86400 * 30 - users = g.db.query(User).filter(User.is_banned > 0, or_(User.unban_utc == 0, User.unban_utc > after_30_days)) - if not v.can_see_shadowbanned: - users = users.filter(User.shadowbanned == None) - users = users.all() - return render_template("banned.html", v=v, users=users) - @app.get("/formatting") @auth_required def formatting(v:User): diff --git a/files/routes/users.py b/files/routes/users.py index 7fe6d019d..e9163250a 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -7,6 +7,7 @@ from typing import Literal import gevent import qrcode +from sqlalchemy import nullslast from sqlalchemy.orm import aliased from files.classes import * @@ -167,11 +168,34 @@ def user_voted_posts(v:User, username): def user_voted_comments(v:User, username): return user_voted(v, username, Comment, CommentVote, "userpage/voted_comments.html", True) +@app.get("/banned") +@auth_required +def banned(v:User): + users = g.db.query(User).filter( + User.is_banned > 0, + User.truescore > 0, + or_(User.unban_utc == 0, User.unban_utc > time.time()), + not_(and_( + User.profileurl.startswith('/e/'), + User.customtitle==None, + User.namecolor == DEFAULT_COLOR, + User.patron == 0, + )) + ) + if v.admin_level >= PERMS['VIEW_LAST_ACTIVE']: + users = users.order_by(nullslast(User.last_active.desc())) + if not v.can_see_shadowbanned: + users = users.filter(User.shadowbanned == None) + users = users.all() + return render_template("banned.html", v=v, users=users) @app.get("/grassed") @auth_required def grassed(v:User): - users = g.db.query(User).filter(User.ban_reason.like('grass award used by @%')) + users = g.db.query(User).filter( + User.ban_reason.like('grass award used by @%'), + User.unban_utc > time.time(), + ) if not v.can_see_shadowbanned: users = users.filter(User.shadowbanned == None) users = users.all() @@ -180,8 +204,18 @@ def grassed(v:User): @app.get("/chuds") @auth_required def chuds(v:User): - after_30_days = int(time.time()) + 86400 * 30 - users = g.db.query(User).filter(or_(User.agendaposter == 1, User.agendaposter > after_30_days)) + users = g.db.query(User).filter( + User.truescore > 0, + or_(User.agendaposter == 1, User.agendaposter > time.time()), + not_(and_( + User.profileurl.startswith('/e/'), + User.customtitle==None, + User.namecolor == DEFAULT_COLOR, + User.patron == 0, + )) + ) + if v.admin_level >= PERMS['VIEW_LAST_ACTIVE']: + users = users.order_by(nullslast(User.last_active.desc())) if not v.can_see_shadowbanned: users = users.filter(User.shadowbanned == None) users = users.order_by(User.username).all() @@ -389,17 +423,9 @@ def get_profilecss(id): @app.get("/@/song") def usersong(username:str): user = get_user(username) - if user.song: return redirect(f"/song/{user.song}.mp3") + if user.song: return redirect(f"/songs/{user.song}.mp3") else: abort(404) -@app.get("/song/") -@app.get("/static/song/") -def song(song): - resp = make_response(send_from_directory('/songs', song)) - resp.headers.remove("Cache-Control") - resp.headers.add("Cache-Control", "public, max-age=3153600") - return resp - @app.post("/subscribe/") @limiter.limit(DEFAULT_RATELIMIT_SLOWER) @auth_required @@ -445,13 +471,13 @@ def message2(v:User, username:str): body_html = sanitize(message) - if not (SITE == 'rdrama.net' and user.id == BLACKJACKBTZ_ID): - existing = g.db.query(Comment.id).filter(Comment.author_id == v.id, - Comment.sentto == user.id, - Comment.body_html == body_html, - ).first() + existing = g.db.query(Comment.id).filter( + Comment.author_id == v.id, + Comment.sentto == user.id, + Comment.body_html == body_html + ).first() - if existing: abort(403, "Message already exists.") + if existing: abort(403, "Message already exists.") c = Comment(author_id=v.id, parent_submission=None, @@ -727,11 +753,6 @@ def u_username_wall(v:Optional[User], username:str): is_following = v and u.has_follower(v) - if not u.is_visible_to(v): - if g.is_api_or_xhr or request.path.endswith(".json"): - abort(403, f"@{u.username}'s userpage is private") - return render_template("userpage/private.html", u=u, v=v, is_following=is_following), 403 - 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/routes/votes.py b/files/routes/votes.py index 476ca13f9..37f3bd924 100644 --- a/files/routes/votes.py +++ b/files/routes/votes.py @@ -6,7 +6,7 @@ from files.__main__ import app, limiter @app.get("/votes/") -@admin_level_required(PERMS['VOTES_VISIBLE']) +@auth_required def vote_info_get(v, link): try: if "p_" in link: thing = get_post(int(link.split("p_")[1]), v=v) diff --git a/files/templates/admin/alt_votes.html b/files/templates/admin/alt_votes.html index e73287ab2..8c81e1b35 100644 --- a/files/templates/admin/alt_votes.html +++ b/files/templates/admin/alt_votes.html @@ -56,7 +56,7 @@

Two accounts controlled by different people should have most uniqueness percentages at or above 70-80%

A sockpuppet account will have its uniqueness percentages significantly lower.

- + {% endif %} {% endif %} {% endif %} diff --git a/files/templates/admin/alts.html b/files/templates/admin/alts.html index bd12fa58c..b01f443e3 100644 --- a/files/templates/admin/alts.html +++ b/files/templates/admin/alts.html @@ -61,8 +61,8 @@
- - + +
{% endif %} diff --git a/files/templates/admin/badge_admin.html b/files/templates/admin/badge_admin.html index ff1bda4d6..62cd26d4d 100644 --- a/files/templates/admin/badge_admin.html +++ b/files/templates/admin/badge_admin.html @@ -18,10 +18,10 @@
- - - - + + + + diff --git a/files/templates/admin/shadowbanned.html b/files/templates/admin/shadowbanned.html index dd0f2cf02..3a7652c7c 100644 --- a/files/templates/admin/shadowbanned.html +++ b/files/templates/admin/shadowbanned.html @@ -8,6 +8,8 @@ + + @@ -15,11 +17,15 @@ {% for user in users %} - + + + - + {% endfor %}
SelectImageNameDefault DescriptionSelectImageNameDefault Description
# NameLast ActiveTruescore Shadowbanned by Shadowban reason
{{loop.index}}{% include "user_in_table.html" %}{%- include 'user_in_table.html' -%}{{user.truescore}} {{user.shadowbanned}}{{user.ban_reason}}{% if user.ban_reason %}{{user.ban_reason}}{% endif %}
+ + {% endblock %} diff --git a/files/templates/admins.html b/files/templates/admins.html index 012383192..be12a30b5 100644 --- a/files/templates/admins.html +++ b/files/templates/admins.html @@ -12,8 +12,8 @@ # Name - Truescore - Mod actions + Truescore + Mod actions @@ -28,6 +28,6 @@
- + {% endblock %} diff --git a/files/templates/badges.html b/files/templates/badges.html index ef97aef0f..b5bd3fa3f 100644 --- a/files/templates/badges.html +++ b/files/templates/badges.html @@ -7,12 +7,12 @@ - + - - + + @@ -32,6 +32,6 @@
## Name Image Description#Rarity#Rarity
- + {% endblock %} diff --git a/files/templates/banned.html b/files/templates/banned.html index 555e2c1ed..10b1f1fe6 100644 --- a/files/templates/banned.html +++ b/files/templates/banned.html @@ -2,12 +2,16 @@ {% block pagetitle %}Banned Users{% endblock %} {% block content %} -
Users who are permabanned or have more than 30 days to be unbanned
+
Banned Users
+ {% if v and v.admin_level >= PERMS['VIEW_LAST_ACTIVE'] -%} + + {%- endif %} + @@ -17,17 +21,21 @@ + {% if v and v.admin_level >= PERMS['VIEW_LAST_ACTIVE'] -%} + + {%- endif %} + - - + {% endwith %} + {% endfor %}
# NameLast ActiveTruescore Ban reason Banned by Unban in
{{loop.index}} {% include "user_in_table.html" %}{{user.truescore}} {% if user.ban_reason %}{{user.ban_reason}}{% endif %} - {% with user=user.banned_by %} - {% include "user_in_table.html" %} - {% endwith %} - - {{user.unban_in}} + {% with user=user.banned_by %} + + {% include "user_in_table.html" %}
+ + {% endblock %} diff --git a/files/templates/chuds.html b/files/templates/chuds.html index 523d96183..98d442023 100644 --- a/files/templates/chuds.html +++ b/files/templates/chuds.html @@ -2,12 +2,16 @@ {% block pagetitle %}Chuds{% endblock %} {% block content %} -
Users who are permachudded or have more than 30 days to be unchudded
+
Chudded Users
+ {% if v and v.admin_level >= PERMS['VIEW_LAST_ACTIVE'] -%} + + {%- endif %} + @@ -15,8 +19,15 @@ - + {% if v and v.admin_level >= PERMS['VIEW_LAST_ACTIVE'] -%} + + {%- endif %} + + {% endfor %}
# NameLast ActiveTruescore Unchud in
{{loop.index}} {% include "user_in_table.html" %}{{user.unchud_in}}{{user.truescore}}
+ + + {% endblock %} diff --git a/files/templates/comments.html b/files/templates/comments.html index f8b4d5a69..50a87e323 100644 --- a/files/templates/comments.html +++ b/files/templates/comments.html @@ -297,7 +297,7 @@
- +
@@ -397,7 +397,9 @@ {% endif %} - {% if v and ((not c.ghost and v.admin_level >= PERMS['VOTES_VISIBLE']) or v.id == AEVANN_ID) %}Votes{% endif %} + {% if not c.ghost or (v and v.id == AEVANN_ID) %} + Votes + {% endif %} Context @@ -556,7 +558,7 @@ {% endif %}
- +
@@ -581,7 +583,9 @@ - + {% endif %} {% endblock %} diff --git a/files/templates/post_actions.html b/files/templates/post_actions.html index 80647b9d3..698b01d37 100644 --- a/files/templates/post_actions.html +++ b/files/templates/post_actions.html @@ -6,7 +6,9 @@ {% endif %} -{% if v and ((not p.ghost and v.admin_level >= PERMS['VOTES_VISIBLE']) or v.id == AEVANN_ID) %}Votes{% endif %} +{% if not p.ghost or (v and v.id == AEVANN_ID) %} + Votes +{% endif %} {% if v and FEATURES['AWARDS'] %} @@ -15,7 +17,7 @@ {% if v %} - + @@ -43,7 +45,7 @@ {% endif %} {% if v.can_edit(p) %} - + {% endif %} {% if v.admin_level >= PERMS['POST_COMMENT_DISTINGUISH'] %} @@ -73,8 +75,8 @@ {% endif %} {% endif %} {% if v.id==p.author_id or v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or (p.sub and v.mods(p.sub)) %} - - + + {% endif %} {% if v.admin_level >= PERMS['USER_BAN'] and v.id != p.author_id %} diff --git a/files/templates/post_actions_mobile.html b/files/templates/post_actions_mobile.html index 8fa7f8edd..aeb8eba67 100644 --- a/files/templates/post_actions_mobile.html +++ b/files/templates/post_actions_mobile.html @@ -6,7 +6,7 @@ {% endif %} -{% if v and ((not p.ghost and v.admin_level >= PERMS['VOTES_VISIBLE']) or v.id == AEVANN_ID) %} +{% if not p.ghost or (v and v.id == AEVANN_ID) %} Votes @@ -20,7 +20,7 @@ {%- endif %} - + @@ -45,13 +45,13 @@ {% else %} {% if not p.ghost %} - + {% endif %} {% endif %} {% if v.id==p.author_id or (p.sub and v.mods(p.sub)) %} - - + + {% endif %} {% if p.sub and v.mods(p.sub) %} diff --git a/files/templates/post_admin_actions_mobile.html b/files/templates/post_admin_actions_mobile.html index b78eca81e..35f7f4924 100644 --- a/files/templates/post_admin_actions_mobile.html +++ b/files/templates/post_admin_actions_mobile.html @@ -19,7 +19,7 @@ {% if v.can_edit(p) %} - + {% endif %} {% if v.admin_level >= PERMS['POST_COMMENT_DISTINGUISH'] and (v.id == p.author.id or v.admin_level >= PERMS['POST_COMMENT_MODERATION']) %} @@ -33,8 +33,8 @@ {% endif %} {% if v.admin_level >= PERMS['POST_COMMENT_MODERATION'] %} - - + + {% endif %} {% if v.id != p.author_id and v.admin_level >= PERMS['USER_BAN'] %} diff --git a/files/templates/settings/css.html b/files/templates/settings/css.html index 2e660cacf..c64fce2aa 100644 --- a/files/templates/settings/css.html +++ b/files/templates/settings/css.html @@ -11,8 +11,8 @@
- - Limit of 4000 characters + + Limit of {{CSS_LENGTH_LIMIT}} characters
@@ -29,8 +29,8 @@
- - Limit of 4000 characters + + Limit of {{CSS_LENGTH_LIMIT}} characters
diff --git a/files/templates/settings/security.html b/files/templates/settings/security.html index 4d81df083..e6efe0c3b 100644 --- a/files/templates/settings/security.html +++ b/files/templates/settings/security.html @@ -155,8 +155,8 @@
- - + + diff --git a/files/templates/settings2.html b/files/templates/settings2.html index acc25cadf..6c526444a 100644 --- a/files/templates/settings2.html +++ b/files/templates/settings2.html @@ -72,7 +72,7 @@ {% endif %} {% endblock %} -
+
{% block content %}{% endblock %} diff --git a/files/templates/shop.html b/files/templates/shop.html index 4b0daf8b6..2249b580f 100644 --- a/files/templates/shop.html +++ b/files/templates/shop.html @@ -70,12 +70,12 @@
UserUnblockUserUnblock
- - - - - - + + + + + + @@ -94,11 +94,11 @@ {% set kind = a['kind'] %} @@ -107,5 +107,5 @@ {% endfor %}
IconTitlePriceOwnedBuyDescriptionIconTitlePriceOwnedBuyDescription
{% if kind != "benefactor" %} - + {% endif %} {% if FEATURES['MARSEYBUX'] %} {% if kind != "grass" %} - + {% endif %} {% endif %}
- + {% endblock %} diff --git a/files/templates/sidebar_rDrama.html b/files/templates/sidebar_rDrama.html index ae34c6681..488f4fc13 100644 --- a/files/templates/sidebar_rDrama.html +++ b/files/templates/sidebar_rDrama.html @@ -3,7 +3,7 @@ {% if sub %} {% set image=sub.sidebar_url %} {% else %} - {% set image = "/i/rDrama/sidebar/873.webp" %} + {% set image = macros.random_image("sidebar") %} {% endif %} {% if request.path != '/sidebar' %} diff --git a/files/templates/special/worldcup22_leaderboard.html b/files/templates/special/worldcup22_leaderboard.html index 81b5a5059..828f866c8 100644 --- a/files/templates/special/worldcup22_leaderboard.html +++ b/files/templates/special/worldcup22_leaderboard.html @@ -6,12 +6,12 @@ - - - - - - + + + + + + @@ -31,5 +31,5 @@
#NameWinsBetsWin rateWinnings#NameWinsBetsWin rateWinnings
- + {% endblock %} diff --git a/files/templates/sub/subs.html b/files/templates/sub/subs.html index a0717ea9c..5c5fb833c 100644 --- a/files/templates/sub/subs.html +++ b/files/templates/sub/subs.html @@ -8,10 +8,10 @@ # Name - Posts - Followers - Blockers - Created on + Posts + Followers + Blockers + Created on @@ -32,6 +32,6 @@
- + {% endblock %} diff --git a/files/templates/submission.html b/files/templates/submission.html index 80200098f..b4467678a 100644 --- a/files/templates/submission.html +++ b/files/templates/submission.html @@ -142,7 +142,9 @@ {% elif p.is_video %}
- +

+ +

{% elif p.is_audio %} @@ -188,7 +190,7 @@ - +
diff --git a/files/templates/submission_listing.html b/files/templates/submission_listing.html index 7e28ae978..cef4fc8e9 100644 --- a/files/templates/submission_listing.html +++ b/files/templates/submission_listing.html @@ -84,10 +84,14 @@ {% elif p.is_video or p.is_audio %} post thumbnail + {% if p.is_video %} + + {% endif %} {% elif p.is_youtube %} post thumbnail + {% else %} @@ -239,7 +243,9 @@ {% elif p.is_video %}
- +

+ +

{% elif p.is_audio %}
@@ -398,11 +400,11 @@
{% if v and v.id == u.id %} - Edit Profile + Edit Profile {% endif %} {% if FEATURES['USERS_PROFILE_SONG'] and u.song and v and (v.id == u.id or v.mute and not u.unmutable) %} - + {% endif %} {% if v and v.id == u.id and (v.profile_background or v.theme == 'transparent') %} diff --git a/files/templates/userpage/followers.html b/files/templates/userpage/followers.html index 1d8239586..548a96ce5 100644 --- a/files/templates/userpage/followers.html +++ b/files/templates/userpage/followers.html @@ -18,7 +18,7 @@ {% include "user_in_table.html" %} 1599343262 %}data-time="{{follow.created_utc}}"{% endif %}> {% if v.id == u.id %} -
Remove follow
+
Remove follow
{% endif %} {% endfor %} diff --git a/files/templates/userpage/wall.html b/files/templates/userpage/wall.html index 3295a2a1c..bdc97c0b7 100644 --- a/files/templates/userpage/wall.html +++ b/files/templates/userpage/wall.html @@ -1,7 +1,7 @@ {% extends "userpage/userpage.html" %} {% block userpage_content %}
- {{macros.comment_reply_box(u.fullname, 'replying-to-' + u.fullname, '', 'mb-3', '', true, '/comments/')}} + {{macros.comment_reply_box(u.fullname, 'replying-to-' + u.fullname, '', 'mb-3 mt-4', '', true, '/comments/')}}
diff --git a/files/templates/util/macros.html b/files/templates/util/macros.html index f509d298a..6adf8d536 100644 --- a/files/templates/util/macros.html +++ b/files/templates/util/macros.html @@ -136,12 +136,13 @@ {% endif %}
+
{% else %} -
+
diff --git a/files/templates/votes.html b/files/templates/votes.html index 229e79079..b4fdd1a59 100644 --- a/files/templates/votes.html +++ b/files/templates/votes.html @@ -17,8 +17,8 @@ # User - User Truescore - Vote Time + User Truescore + Vote Time @@ -44,8 +44,8 @@ # User - User Truescore - Vote Time + User Truescore + Vote Time @@ -64,7 +64,7 @@
- + {% endif %} diff --git a/migrations/20221210-increase-css-limit.sql b/migrations/20221210-increase-css-limit.sql new file mode 100644 index 000000000..7aae843b0 --- /dev/null +++ b/migrations/20221210-increase-css-limit.sql @@ -0,0 +1,2 @@ +alter table users alter column css type varchar(10000); +alter table users alter column profilecss type varchar(10000); diff --git a/nginx.conf b/nginx.conf index 52c6bbe79..72fede1ad 100644 --- a/nginx.conf +++ b/nginx.conf @@ -34,12 +34,41 @@ server { location /audio/ { include includes/serve-static; } + location /songs/ { + include includes/serve-static; + } location /asset_submissions/ { include includes/serve-static; } + location /archives/ { + include includes/serve-static; + } - error_page 502 = /error_page/502.html; - location /error_page/ { - alias /rDrama/files/templates/errors/rDrama/; + location /assets/ { + alias /rDrama/files/assets/; + add_header 'Cache-Control' "public, max-age=3153600"; + } + location /i/ { + alias /rDrama/files/assets/images/; + add_header 'Cache-Control' "public, max-age=3153600"; + } + location /e/ { + alias /rDrama/files/assets/images/emojis/; + add_header 'Cache-Control' "public, max-age=3153600"; + } + + location =/robots.txt { + alias /rDrama/files/assets/robots.txt; + add_header 'Cache-Control' "public, max-age=3153600"; + } + location =/icon.webp { + alias /rDrama/files/assets/images/rDrama/icon.webp; + add_header 'Cache-Control' "public, max-age=3153600"; + } + + error_page 502 = /502.html; + location =/502.html { + alias /rDrama/files/templates/errors/rDrama/502.html; + add_header Cache-Control "no-store"; } } diff --git a/schema.sql b/schema.sql index c9e6bfc07..15f10ba2d 100644 --- a/schema.sql +++ b/schema.sql @@ -973,8 +973,8 @@ CREATE TABLE public.users ( newtabexternal boolean DEFAULT true NOT NULL, customtitleplain character varying(100), themecolor character varying(6) NOT NULL, - css character varying(4000), - profilecss character varying(4000), + css character varying(10000), + profilecss character varying(10000), coins integer DEFAULT 0 NOT NULL, agendaposter integer DEFAULT 0 NOT NULL, post_count integer DEFAULT 0 NOT NULL, diff --git a/seed-db.sql b/seed-db.sql index 3b0072f0e..2213804ce 100644 --- a/seed-db.sql +++ b/seed-db.sql @@ -51,6 +51,7 @@ INSERT INTO public.badge_defs VALUES (193, 'Web Design Is My Passion', 'This use INSERT INTO public.badge_defs VALUES (136, 'TRAIN 2022', 'Beware: Found to be one of the most transmisic commenters on the site!', NULL); INSERT INTO public.badge_defs VALUES (137, 'Lottershe Winner', 'This user won the Lottershe grand prize.', NULL); INSERT INTO public.badge_defs VALUES (192, 'Social Justice Berserker', 'This user has taken a solemn vow to Speak No Evil βš”', 1667695138); +INSERT INTO public.badge_defs VALUES (194, 'Master Baiter 2021', 'The cunning mastermind behind the ruse which was voted best rdrama bait of 2021.', 1670627103); INSERT INTO public.badge_defs VALUES (140, 'Y''all Seein'' Eye', 'Gets notified when other sites talk about us', NULL); INSERT INTO public.badge_defs VALUES (141, 'Marsey Typographer', 'For substantial and exceptional contributions to Marsey Alphabet.', NULL); INSERT INTO public.badge_defs VALUES (142, 'Punching Down', 'This user mogs incels.', NULL); @@ -65,6 +66,9 @@ INSERT INTO public.badge_defs VALUES (151, 'Responsible Citizen', 'This user uph INSERT INTO public.badge_defs VALUES (152, 'Amateur Hathead', 'Collected 25 unique hats', NULL); INSERT INTO public.badge_defs VALUES (155, 'Ride Or Die Dramalo/Dramalette', 'When I die show no pity / Send my soul to the juggalo city / Dig my grave six feet deep / And put two matches by my feet / Put two hatchets on my chest / And tell my homies I did my best / WHOOP WHOOP', NULL); INSERT INTO public.badge_defs VALUES (156, 'Hole Neglecter', 'Brought a Hole into this world, only to let it die', NULL); +INSERT INTO public.badge_defs VALUES (197, 'Best Marsey 2021', 'The creator of the best Marsey emote of 2021, as voted by rdrama users.', 1670627291); +INSERT INTO public.badge_defs VALUES (198, 'Best Drama Post 2021', 'The author of the best drama post of 2021, as voted by rdrama users.', 1670627332); +INSERT INTO public.badge_defs VALUES (199, 'Dramatard of the Year 2021', 'Voted as the best rdrama user of 2021. Congratulations!', 1670627437); INSERT INTO public.badge_defs VALUES (21, 'Paypig', 'Contributed at least $5', NULL); INSERT INTO public.badge_defs VALUES (22, 'Renthog', 'Contributed at least $10', NULL); INSERT INTO public.badge_defs VALUES (23, 'Landchad', 'Contributed at least $20', NULL); @@ -77,6 +81,7 @@ INSERT INTO public.badge_defs VALUES (163, 'Marsey Jacobs', 'Designed 10 hats!', INSERT INTO public.badge_defs VALUES (166, 'Giorgio Armarsey', 'Designed 250 hats 😲', NULL); INSERT INTO public.badge_defs VALUES (164, 'Marsey de Givenchy', 'Designed 50 hats, holy cap.', NULL); INSERT INTO public.badge_defs VALUES (180, 'Marsey Consoomer', 'Conned rDrama out of sick merch in exchange for a donation to Redbubble.', 1664417205); +INSERT INTO public.badge_defs VALUES (203, 'Best rdrama OC 2022', 'The creator or commissioner of the best rdrama original content of 2022, as voted by rdrama users.', 1670627675); INSERT INTO public.badge_defs VALUES (183, '2022 Spooooooky Marsey Artist', 'Contributed a VERY SCARY Marsey for Halloween 2022!', 1666225718); INSERT INTO public.badge_defs VALUES (168, 'BITTEN!', 'This user has been forcibly recruited to House Vampire', NULL); INSERT INTO public.badge_defs VALUES (170, 'Marsified', 'This user''s comments get Marsified automatically', NULL); @@ -194,13 +199,17 @@ INSERT INTO public.badge_defs VALUES (131, '21st Century Hitlerite (TEMPORAL FLU INSERT INTO public.badge_defs VALUES (132, 'Duterte''s Most Wanted (TEMPORAL FLUX EDITION)', 'dude weed lmao what year is it', NULL); INSERT INTO public.badge_defs VALUES (133, 'Rockstar', 'This user submitted an original piece to the song contest', NULL); INSERT INTO public.badge_defs VALUES (134, '1 Year Old πŸ₯°', 'This user has wasted an ENTIRE YEAR of their life here! Happy birthday!', NULL); +INSERT INTO public.badge_defs VALUES (208, 'Best Drama Post 2022', 'The author of the best drama post of 2022, as voted by rdrama users.', 1670628577); +INSERT INTO public.badge_defs VALUES (212, 'Dramatard of the Year 2022', 'Voted as the best rdrama user of 2022. Congratulations!', 1670719153); +INSERT INTO public.badge_defs VALUES (213, 'Best Marsey 2022', 'The creator of the best Marsey emote of 2022, as voted by rdrama users.', 1670719193); +INSERT INTO public.badge_defs VALUES (214, 'Master Baiter 2022', 'The cunning mastermind behind the ruse which was voted best rdrama bait of 2022.', 1670719221); -- -- Name: badge_defs_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - -- -SELECT pg_catalog.setval('public.badge_defs_id_seq', 193, true); +SELECT pg_catalog.setval('public.badge_defs_id_seq', 214, true); -- @@ -1177,7 +1186,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', 1108, true); +SELECT pg_catalog.setval('public.hat_defs_id_seq', 1109, true); -- @@ -1236,6 +1245,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseyalbino',2,'mayo white transracial cracker bingus crackkka',1668299939), ('marseyaleistercrowley',2,'aleister crowley occult wizard robe esoteric bisexual',NULL), ('marseyalien',2,'green man martian scepter',NULL), +('marseyalucard',2,'castlevania dracula vidya',1670511535), ('marseyamazon',2,'warehouse piss bottle driver wagecuck piss jug pissbottle pissjug wagie',NULL), ('marseyamber',2,'dalle2 generated',NULL), ('marseyamogus',2,'sussy baka impostor imposter stonetoss among us shh vent',NULL), @@ -1449,6 +1459,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseybuff',2,'ripped muscular 6pack swole 6 pack sixpack abs six pack muscles',NULL), ('marseybug',2,'beetle glitch error insect roach',NULL), ('marseybug2',2,'glitch code error',NULL), +('marseybug3',2,'error glitch 404 503',1670510335), ('marseybukkake',2,'bukkake cum semen gangbang facial slut whore',NULL), ('marseybunny',2,'furonsa bunny usagi skin animal costume furry fursuit',NULL), ('marseybunny2',2,'rabbit rodent happy',1668307402), @@ -1558,6 +1569,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseycenter',2,'reaction grilling boomer centrist',NULL), ('marseycertified',2,'certified certi 100 quality excellent excellence animated',NULL), ('marseychad',2,'canthal tilt jaw hunter eyes',NULL), +('marseychadfoid',2,'based woman man trans lipstick makeup blonde',1670447046), ('marseychadthundercock',2,'vvc virgin foid pimp hot player big dick huge cock ouch gigachad meme',NULL), ('marseychadyes',2,'based gigachad',NULL), ('marseycharlesiii',2,'king england britain royalty royal monarch',1664652665), @@ -1597,6 +1609,8 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('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), +('marseychristchan',2,'missionary jesus christianity cross',1670508133), +('marseychristchanreading',2,'christian cross jesus book missionary bible study',1670508195), ('marseychristmas',2,'candy cane santa christmas holiday',NULL), ('marseychristmasbulb',2,'ornament christmas happy holiday china',NULL), ('marseychristmasbulb2',2,'ornament holiday christmas',NULL), @@ -1774,6 +1788,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseydose',2,'doctor daily dose dailydose animated jump bounce',NULL), ('marseydoubtit',2,'dumpster defender redneck boomer shooting doubt it cocksucker gun',NULL), ('marseydownvote',2,'downvote negative karma arrow dislike reddit',1664011042), +('marseydownvotemad',2,'downdoot mad angry karma reddit',1670741152), ('marseydracula',2,'halloween fangs cape holiday vampire',NULL), ('marseydragon',2,'smaug rich hoard gold treasure',NULL), ('marseydrama',2,'agendapost where drama seriouspost drama where',NULL), @@ -2015,6 +2030,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseyhannibal',2,'flesh psycho horror halloween cannibal eat holiday',NULL), ('marseyhappening',2,'ronpaul happening it ron paul itshappening animated',NULL), ('marseyhappy',2,'pleased contented reaction contentment satisfied',NULL), +('marseyhappy2',2,'smile smiling nice',1670511565), ('marseyhappytears',2,'tears of joy crying',NULL), ('marseyhatecrime',2,'jussie smollett racist homophobic hoax rope bleach chlorine maga hat suicide lynch juicy',1663695493), ('marseyhatium',2,'mad fury furious pissed hatred rage angry maddened infuriated hateful hatefuel',NULL), @@ -2088,6 +2104,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseyisraellove',2,'love ally israel holocaust zionism',NULL), ('marseyit',2,'balloon halloween pennywise clown holiday evil',NULL), ('marseyitsallsotiresome',2,'empire of dust tooka all so tiresome chinese racist congolese drc kinshasa lubumbashi enough bullshit tired resigned despair black',1665543793), +('marseyitsaover',2,'vidya mario over italian',1670561567), ('marseyitsover',2,'its over never began incels give up giveup sad sigh defeated',NULL), ('marseyitsoverwereback',2,'itsover neverbegan incels give up giveup sad sigh defeated yay happy excited undefeated bipolar histronic null kiwifarms animated',1668780621), ('marseyitsrigged',2,'its rigged rig goomble gamble lottershe election dating test blackjack roulette',1670094672), @@ -2155,6 +2172,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseykitty',2,'hellokitty animated hello kitty',NULL), ('marseykiwi',2,'kf bird new zealand kiwifarms newzealand',NULL), ('marseykiwi2',2,'kf bird new zealand kiwifarms newzealand',NULL), +('marseykiwilove',2,'hugging bird happy',1670511827), ('marseykiwimom',2,'kf farms newzealand new zealand dramarama birds babies chicks single mother brood flock',NULL), ('marseykiwivampire',2,'kiwi new zealand dramarama house scary spooky bird cloak sanguine fangs halloween bloodsucker',NULL), ('marseykkk',2,'klan kukluxklan ku klux klan racist costume klux ku sheet',NULL), @@ -2223,6 +2241,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseylobotomy',2,'surgery retard braindead sad',1667212108), ('marseylois',2,'familyguy familyman family guy family man peter griffin',NULL), ('marseylolcow',2,'reaction trolled lulz judgment',NULL), +('marseylolly',2,'animalcrossing vidya videogame',1670512415), ('marseylong1',2,'top meme',NULL), ('marseylong2',2,'middle meme',NULL), ('marseylong3',2,'bottom meme',NULL), @@ -2253,6 +2272,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseymaid2',2,'canadian leaf suicide euthanasia needle syringe vax',1670432554), ('marseymaid3',2,'canadian leaf suicide euthanasia needle syringe vax',1670432568), ('marseymaid4',2,'canadian leaf suicide euthanasia needle syringe vax',1670432579), +('marseymaidshy',2,'canada suicide kys cute blush nervous leaf canadian',1670556516), ('marseymajorgeneral',2,'jeffthespammer pirates of penzance safari muttonchops mutton chops army military soldier officer',NULL), ('marseymalding',2,'dilate seethe scrote mad moid cope',NULL), ('marseymancer',2,'dead undead horror lich halloween necromancer zombies zombie holiday evil',NULL), @@ -2348,6 +2368,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseynapoleon2',2,'french france horse',NULL), ('marseyneat',2,'photo cringe compilation camera cringe collection pic',NULL), ('marseyneckbeard',2,'mlady bodypillow dakimakura anime otaku fedora weebshit body pillow mra weeb',NULL), +('marseynecromancer',2,'halloween horror scary undead necromancy ghost zombie skeletons magician warlock',1670513898), ('marseyneet',2,'cozy comfy wagie',NULL), ('marseynefariousbrian',2,'familyguy familyman brian nefarious',1668387040), ('marseyneko',2,'autism autistic cute neko nekobit fedi fediverse hat programmer codecel',NULL), @@ -2507,6 +2528,8 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseyplush',2,'bow ribbon doll plushie button eyes',NULL), ('marseyplushie',2,'yunann plush statue',NULL), ('marseypoggers',2,'poggies twitch meme quagmire jawdropping shock surprise',NULL), +('marseypoint',2,'mad angry look show',1670510778), +('marseypoint2',2,'backwards look showing',1670510807), ('marseypokerface',2,'small eyes reaction stare unreadable beady eyes',NULL), ('marseypolarbear',2,'bear polar cold white arctic ice',NULL), ('marseypolyamory',2,'threesome 3some degenerate polycule slut whore std sex soy animated',NULL), @@ -2611,6 +2634,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseyretard',2,'special ed retarded reaction slow sped drooling exceptional',NULL), ('marseyretard2',2,'drooling stupid idiot sped moron imbecile dolt happy tongue',NULL), ('marseyretard3',2,'drooling stupid idiot sped moron imbecile dolt',NULL), +('marseyretard4',2,'moron dummy idiot buffoon drooling sped retarded',1670514701), ('marseyretardchad',2,'stupid moron idiot retard chad based monobrow chin stubble drool',NULL), ('marseyretro',2,'cardboard retro gameboy green nerd gamer',NULL), ('marseyrevolution',2,'marxist ussr marxism ccp hammer communist sickle communism proletariat juche kgb',NULL), @@ -2634,6 +2658,8 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseyroxy',2,'fnaf roxanne wolf freddy keytar rockstar vidya furry',1663987934), ('marseyroxytrickortreat',2,'halloween candy bloody roxanne wolf spooky',1666982308), ('marseyrs',2,'runescape party hat phat crown lowpoly low poly',NULL), +('marseyrudolph',2,'reindeer santa christmas xmas',1670514525), +('marseyrudolph2',2,'reindeer christmas santa sleigh xmas',1670514539), ('marseyrulebritannia',2,'britain british bongistan chips london england lasereyes',1663211275), ('marseyruqqie',2,'ruqqus porpl freespeech nazi captainmeta4 kek arkitekt syzitus syzzie',1668462855), ('marseyrussel',2,'old pipe history',NULL), @@ -2644,6 +2670,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseysachiko',2,'idolmaster anime animegirl niggy',1667212045), ('marseysad',2,'concerned worried waiting prepared reaction',NULL), ('marseysad2',2,'reaction disappointed disappointment upset',NULL), +('marseysadako',2,'anime weeb horror monster scary spooky hair',1670514733), ('marseysadcat',2,'upset disappointing disappointment reaction disappointed sad crying',NULL), ('marseysadge',2,'frog pepe',NULL), ('marseysadgun',2,'pepe mellokind crying tears suicidal suicide kms frog',NULL), @@ -2784,6 +2811,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseyskellington',2,'marsey skeleton skellington tim christmas halloween before burton jack nightmare musical movie film',1666840958), ('marseyski',2,'skier skiing sking winter snow',NULL), ('marseyskinnedwalk',2,'watchpeopledie zllctnxaspywgb3 animated skinned walking trotting skeleton bones organs',NULL), +('marseyskinny',2,'tall anorexia bulimia anorexic bulimic',1670515138), ('marseyskull',2,'skull dead skeleton punisher kill bone',NULL), ('marseyslaanesh',2,'warhammer 40k chaos god degeneracy sex drugs pain',NULL), ('marseyslab',2,'dexter lab smart genius ginger cartoon network glasses',NULL), @@ -2797,6 +2825,8 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseysmug2',2,'snicker scoff mock reaction guffaw ridicule judgment',NULL), ('marseysmug3',2,'reaction yikes judgment oof cringe',NULL), ('marseysmug4',2,'confident emoticon plain simple smile',1664490741), +('marseysmug5',2,'scoff lol srdine mock gossip',1670515240), +('marseysmug6',2,'scoff gossip lol srdine',1670515250), ('marseysmugautist',2,'autism retard brainlet drool hat',NULL), ('marseysmugretard',2,'srdine drooling brainlet idiot fool buffoon idiot',NULL), ('marseysmugsideeyes',2,'marsey smug',1665254121), @@ -3066,6 +3096,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseywhiteflag',2,'surrender battle french',NULL), ('marseywhitemage',2,'magic wizard final fantasy spell video game vidya',NULL), ('marseywholesome',2,'seal award reddit tene',NULL), +('marseywindmill',2,'headbang metal hair spinny brootal animated brutal kvlt',1670598383), ('marseywinemom',2,'drunk wine aunt flirt cigarette drunk lush elfbinn fartbinn cougar',NULL), ('marseywink',2,'wink reaction cheeky flirt smirk imply hint',NULL), ('marseywink2',2,'winking',1665254177), @@ -3083,6 +3114,7 @@ INSERT INTO public.marseys (name, author_id, tags, created_utc) VALUES ('marseywoodchipper',2,'libertarian woodchipper libertarian kill',NULL), ('marseywoodchipper2',2,'libertarian pedo woodchipper animated kill map',NULL), ('marseywords',2,'longpost too long tldr reaction wordswordswords yawn',NULL), +('marseywords2',2,'longpost tldr essaypost wordswordswords pizzashill',1670515776), ('marseyworldcup',2,'world cup soccer football winner sports champion',1663033833), ('marseyworried',2,'monkaw anxiety sweat panic scared sweaty sweating anxious nervous stressed',NULL), ('marseywraith',2,'evil scary ghost halloween undead horror',1666281502), diff --git a/snappy_rDrama.txt b/snappy_rDrama.txt index 6072c90ab..47ccb3ee9 100644 --- a/snappy_rDrama.txt +++ b/snappy_rDrama.txt @@ -725,7 +725,7 @@ Q PREDICTED THIS #WWG1WGA What the fuck did I just read? :#marseyjohnson: {[para]} -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA {[para]} πŸ€£πŸ‘ {[para]}