diff --git a/files/helpers/config/const.py b/files/helpers/config/const.py index a67b8f544..5c016e230 100644 --- a/files/helpers/config/const.py +++ b/files/helpers/config/const.py @@ -252,6 +252,7 @@ FEATURES = { 'BOTS': True, 'IP_LOGGING': False, 'BLOCK_MUTE_EXILE_EXPIRY': False, + 'ADMIN_TRANSPARENCY': True, } if SITE_NAME == 'rDrama': @@ -768,6 +769,8 @@ elif SITE == 'watchpeopledie.tv': FEATURES['BOTS'] = False FEATURES['HAT_SUBMISSIONS'] = False FEATURES['IP_LOGGING'] = True + FEATURES['ADMIN_TRANSPARENCY'] = False + HOUSES = ["Furry","Femboy","Vampire","Edgy"] PERMS['POST_COMMENT_EDITING'] = 3 @@ -1175,3 +1178,8 @@ if not IS_LOCALHOST: with open("includes/content-security-policy", "w") as f: f.write(f'add_header Content-Security-Policy "{csp}";') + +def admin_str(v): + if FEATURES['ADMIN_TRANSPARENCY']: + return f'@{v.username} (a site admin)' + return 'Site admins' diff --git a/files/routes/admin.py b/files/routes/admin.py index 9393b1e7a..7ed871b41 100644 --- a/files/routes/admin.py +++ b/files/routes/admin.py @@ -117,7 +117,7 @@ def make_admin(v, username): ) g.db.add(ma) - send_repeatable_notification(user.id, f"@{v.username} (a site admin) added you as an admin!") + send_repeatable_notification(user.id, f"{admin_str(v)} added you as an admin!") return {"message": f"@{user.username} has been made admin!"} @@ -148,7 +148,7 @@ def remove_admin(v, username): ) g.db.add(ma) - send_repeatable_notification(user.id, f"@{v.username} (a site admin) removed you as an admin!") + send_repeatable_notification(user.id, f"{admin_str(v)} removed you as an admin!") return {"message": f"@{user.username} has been removed as admin!"} @@ -260,7 +260,7 @@ def revert_actions(v, username): user.shadowban_reason = None if user.is_banned: user.is_banned = None - send_repeatable_notification(user.id, f"@{v.username} (a site admin) has unbanned you!") + send_repeatable_notification(user.id, f"{admin_str(v)} unbanned you!") g.db.add(user) for u in get_alt_graph(user.id): @@ -270,7 +270,7 @@ def revert_actions(v, username): u.shadowban_reason = None if u.is_banned: u.is_banned = None - send_repeatable_notification(u.id, f"@{v.username} (a site admin) has unbanned you!") + send_repeatable_notification(u.id, f"{admin_str(v)} unbanned you!") g.db.add(u) return {"message": f"@{revertee.username}'s admin actions have been reverted!"} @@ -523,7 +523,7 @@ def badge_grant_post(v): g.db.flush() if v.id != user.id: - text = f"@{v.username} (a site admin) has given you the following profile badge:\n\n{new_badge.path}\n\n**{new_badge.name}**\n\n{new_badge.badge.description}" + text = f"{admin_str(v)} given you the following profile badge:\n\n{new_badge.path}\n\n**{new_badge.name}**\n\n{new_badge.badge.description}" if new_badge.description: text += f'\n\n> {new_badge.description}' if new_badge.url: @@ -573,7 +573,7 @@ def badge_remove_post(v): if not badge: continue if v.id != user.id: - text = f"@{v.username} (a site admin) has removed the following profile badge from you:\n\n{badge.path}\n\n**{badge.name}**\n\n{badge.badge.description}" + text = f"{admin_str(v)} removed the following profile badge from you:\n\n{badge.path}\n\n**{badge.name}**\n\n{badge.badge.description}" send_repeatable_notification(user.id, text) ma = ModAction( @@ -856,7 +856,7 @@ def unchud(fullname, v): badge = user.has_badge(58) if badge: g.db.delete(badge) - send_repeatable_notification(user.id, f"@{v.username} (a site admin) has unchudded you.") + send_repeatable_notification(user.id, f"{admin_str(v)} unchudded you.") return {"message": f"@{user.username} has been unchudded!"} @@ -973,9 +973,9 @@ def admin_change_flair(user_id, v): g.db.add(ma) if user.flairchanged: - message = f"@{v.username} (a site admin) has locked your flair to `{user.flair}`." + message = f"{admin_str(v)} locked your flair to `{user.flair}`." else: - message = f"@{v.username} (a site admin) has changed your flair to `{user.flair}`. You can change it back in the settings." + message = f"{admin_str(v)} changed your flair to `{user.flair}`. You can change it back in the settings." send_repeatable_notification(user.id, message) @@ -1037,11 +1037,11 @@ def ban_user(fullname, v): if days_txt.endswith('.0'): days_txt = days_txt[:-2] duration = f"for {days_txt} day" if days != 1: duration += "s" - if reason: text = f"@{v.username} (a site admin) has banned you for **{days_txt}** days for the following reason:\n\n> {reason}" - else: text = f"@{v.username} (a site admin) has banned you for **{days_txt}** days." + if reason: text = f"{admin_str(v)} banned you for **{days_txt}** days for the following reason:\n\n> {reason}" + else: text = f"{admin_str(v)} banned you for **{days_txt}** days." else: - if reason: text = f"@{v.username} (a site admin) has banned you permanently for the following reason:\n\n> {reason}" - else: text = f"@{v.username} (a site admin) has banned you permanently." + if reason: text = f"{admin_str(v)} banned you permanently for the following reason:\n\n> {reason}" + else: text = f"{admin_str(v)} banned you permanently." user.ban(admin=v, reason=reason, days=days) @@ -1147,7 +1147,7 @@ def chud(fullname, v): user.chud_phrase = request.values.get("chud_phrase").strip().lower() - text = f"@{v.username} (a site admin) has chudded you **{duration}**" + text = f"{admin_str(v)} chudded you **{duration}**" if reason: text += f" for the following reason:\n\n> {reason}" text += f"\n\n**You now have to say this phrase in all posts and comments you make {duration}:**\n\n> {user.chud_phrase}" @@ -1219,11 +1219,11 @@ def unban_user(fullname, v): user.is_banned = None user.unban_utc = None user.ban_reason = None - send_repeatable_notification(user.id, f"@{v.username} (a site admin) has unbanned you!") + send_repeatable_notification(user.id, f"{admin_str(v)} unbanned you!") g.db.add(user) for x in get_alt_graph(user.id): - if x.is_banned: send_repeatable_notification(x.id, f"@{v.username} (a site admin) has unbanned you!") + if x.is_banned: send_repeatable_notification(x.id, f"{admin_str(v)} unbanned you!") x.is_banned = None x.unban_utc = None x.ban_reason = None @@ -1258,7 +1258,7 @@ def mute_user(v, user_id): g.db.add(ma) check_for_alts(user) - send_repeatable_notification(user.id, f"@{v.username} (a site admin) has muted you!") + send_repeatable_notification(user.id, f"{admin_str(v)} muted you!") return {"message": f"@{user.username} has been muted!"} @@ -1287,7 +1287,7 @@ def unmute_user(v, user_id): x.is_muted = False g.db.add(x) - send_repeatable_notification(user.id, f"@{v.username} (a site admin) has unmuted you!") + send_repeatable_notification(user.id, f"{admin_str(v)} unmuted you!") return {"message": f"@{user.username} has been unmuted!"} @@ -1466,7 +1466,7 @@ def sticky_post(post_id, v): pin_time = 'for 1 hour' code = 200 if v.id != post.author_id: - send_repeatable_notification(post.author_id, f"@{v.username} (a site admin) has pinned [{post.title}]({post.shortlink})") + send_repeatable_notification(post.author_id, f"{admin_str(v)} pinned [{post.title}]({post.shortlink})") else: if pins >= PIN_LIMIT + 1: abort(403, f"Can't exceed {PIN_LIMIT} pinned posts limit!") @@ -1515,7 +1515,7 @@ def unsticky_post(post_id, v): g.db.add(ma) if v.id != post.author_id: - send_repeatable_notification(post.author_id, f"@{v.username} (a site admin) has unpinned [{post.title}]({post.shortlink})") + send_repeatable_notification(post.author_id, f"{admin_str(v)} unpinned [{post.title}]({post.shortlink})") cache.delete_memoized(frontlist) return {"message": "Post unpinned!"} @@ -1547,7 +1547,7 @@ def sticky_comment(cid, v): g.db.add(ma) if v.id != comment.author_id: - message = f"@{v.username} (a site admin) has pinned your [comment]({comment.shortlink})" + message = f"{admin_str(v)} pinned your [comment]({comment.shortlink})" send_repeatable_notification(comment.author_id, message) comment.pin_parents() @@ -1580,7 +1580,7 @@ def unsticky_comment(cid, v): g.db.add(ma) if v.id != comment.author_id: - message = f"@{v.username} (a site admin) has unpinned your [comment]({comment.shortlink})" + message = f"{admin_str(v)} unpinned your [comment]({comment.shortlink})" send_repeatable_notification(comment.author_id, message) comment.unpin_parents() @@ -1900,7 +1900,7 @@ def admin_reset_password(user_id, v): ) g.db.add(ma) - text = f"At your request, @{v.username} (a site admin) has reset your password to `{new_password}`, please change this to something else for personal security reasons. And be sure to save it this time, retard." + text = f"At your request, {admin_str(v)} reset your password to `{new_password}`, please change this to something else for personal security reasons. And be sure to save it this time, retard." send_repeatable_notification(user.id, text) text = f"@{user.username}'s new password is `{new_password}`" @@ -2144,7 +2144,7 @@ def mark_effortpost(pid, v): p.author.pay_account('coins', coins) if v.id != p.author_id: - send_repeatable_notification(p.author_id, f":marseyclapping: @{v.username} (a site admin) has marked [{p.title}](/post/{p.id}) as an effortpost, it now gets x{mul} coins from votes. You have received {coins} coins retroactively, thanks! :!marseyclapping:") + send_repeatable_notification(p.author_id, f":marseyclapping: {admin_str(v)} marked [{p.title}](/post/{p.id}) as an effortpost, it now gets x{mul} coins from votes. You have received {coins} coins retroactively, thanks! :!marseyclapping:") return {"message": "Post has been marked as an effortpost!"} @@ -2181,6 +2181,6 @@ def unmark_effortpost(pid, v): p.author.charge_account('coins', coins) if v.id != p.author_id: - send_repeatable_notification(p.author_id, f":marseyitsover: @{v.username} (a site admin) has unmarked [{p.title}](/post/{p.id}) as an effortpost. {coins} coins have been deducted from you. :!marseyitsover:") + send_repeatable_notification(p.author_id, f":marseyitsover: {admin_str(v)} unmarked [{p.title}](/post/{p.id}) as an effortpost. {coins} coins have been deducted from you. :!marseyitsover:") return {"message": "Post has been unmarked as an effortpost!"} diff --git a/files/routes/asset_submissions.py b/files/routes/asset_submissions.py index 7d038d49c..bd7d9cfbc 100644 --- a/files/routes/asset_submissions.py +++ b/files/routes/asset_submissions.py @@ -229,7 +229,7 @@ def approve_emoji(v, name): g.db.add(author) if v.id != author.id: - msg = f"@{v.username} (a site admin) has approved an emoji you made: :{emoji.name}:\n\nYou have received {amount} coins as a reward!" + msg = f"{admin_str(v)} approved an emoji you made: :{emoji.name}:\n\nYou have received {amount} coins as a reward!" comment = request.values.get("comment") if comment: @@ -238,7 +238,7 @@ def approve_emoji(v, name): send_repeatable_notification(author.id, msg) if v.id != emoji.submitter_id and author.id != emoji.submitter_id: - msg = f"@{v.username} (a site admin) has approved an emoji you submitted: :{emoji.name}:" + msg = f"{admin_str(v)} approved an emoji you submitted: :{emoji.name}:" comment = request.values.get("comment") if comment: @@ -438,7 +438,7 @@ def approve_hat(v, name): if v.id != author.id: - msg = f"@{v.username} (a site admin) has approved a hat you made: `'{hat.name}'`" + msg = f"{admin_str(v)} approved a hat you made: `'{hat.name}'`" comment = request.values.get("comment") if comment: @@ -447,7 +447,7 @@ def approve_hat(v, name): send_repeatable_notification(author.id, msg) if v.id != hat.submitter_id and author.id != hat.submitter_id: - msg = f"@{v.username} (a site admin) has approved a hat you submitted: `'{hat.name}'`" + msg = f"{admin_str(v)} approved a hat you submitted: `'{hat.name}'`" comment = request.values.get("comment") if comment: diff --git a/files/routes/holes.py b/files/routes/holes.py index 5a7e322fb..7eaf72bb7 100644 --- a/files/routes/holes.py +++ b/files/routes/holes.py @@ -1122,7 +1122,7 @@ def change_hole(pid, v): _note=f'{hole_from_str} → {hole_to_str}', ) g.db.add(ma) - position = 'a site admin' + actor_str = admin_str(v) else: ma = HoleAction( hole=hole_from, @@ -1132,14 +1132,14 @@ def change_hole(pid, v): _note=f'{hole_from_str} → {hole_to_str}', ) g.db.add(ma) - position = f'a /h/{hole_from} mod' + actor_str = f'@{v.username} (a /h/{hole_from} mod)' if hole_from == None: hole_from_in_notif = 'the main feed' else: hole_from_in_notif = f'/h/{hole_from}' - message = f"@{v.username} ({position}) has moved [{post.title}]({post.shortlink}) from {hole_from_in_notif} to {hole_to_in_notif}" + message = f"{actor_str} moved [{post.title}]({post.shortlink}) from {hole_from_in_notif} to {hole_to_in_notif}" send_repeatable_notification(post.author_id, message) cache.delete_memoized(frontlist) diff --git a/files/routes/login.py b/files/routes/login.py index 3a2afc002..d7efc6e3d 100644 --- a/files/routes/login.py +++ b/files/routes/login.py @@ -105,9 +105,12 @@ def login_post(v): return redirect('/') def log_failed_admin_login_attempt(account, type): - if not account or account.admin_level < PERMS['WARN_ON_FAILED_LOGIN']: return + if not account or account.admin_level < PERMS['WARN_ON_FAILED_LOGIN']: + return + ip = get_IP() - print(f"A site admin from {ip} failed to login to account @{account.user_name} (invalid {type})") + print(f"{ip} failed to login to account @{account.user_name} (invalid {type})") + t = time.strftime("%d/%B/%Y %H:%M:%S UTC", time.gmtime(time.time())) log_file(f"{t}, {ip}, {account.username}, {type}", "admin_failed_logins.log") diff --git a/files/routes/oauth.py b/files/routes/oauth.py index 2ef87687c..19df2ad25 100644 --- a/files/routes/oauth.py +++ b/files/routes/oauth.py @@ -157,7 +157,7 @@ def admin_app_approve(v, aid): g.db.add(new_auth) - send_repeatable_notification(user.id, f"@{v.username} (a site admin) has approved your application `{app.app_name}`. Here's your access token: ||{access_token}||\n\nPlease check the guide [here](/api) if you don't know what to do next!") + send_repeatable_notification(user.id, f"{admin_str(v)} approved your application `{app.app_name}`. Here's your access token: ||{access_token}||\n\nPlease check the guide [here](/api) if you don't know what to do next!") ma = ModAction( kind="approve_app", @@ -183,7 +183,7 @@ def admin_app_revoke(v, aid): for auth in g.db.query(ClientAuth).filter_by(oauth_client=app.id): g.db.delete(auth) if v.id != app.author.id: - send_repeatable_notification(app.author.id, f"@{v.username} (a site admin) has revoked your application `{app.app_name}`.") + send_repeatable_notification(app.author.id, f"{admin_str(v)} revoked your application `{app.app_name}`.") g.db.delete(app) @@ -212,7 +212,7 @@ def admin_app_reject(v, aid): for auth in g.db.query(ClientAuth).filter_by(oauth_client=app.id): g.db.delete(auth) if v.id != app.author.id: - send_repeatable_notification(app.author.id, f"@{v.username} (a site admin) has rejected your application `{app.app_name}`.") + send_repeatable_notification(app.author.id, f"{admin_str(v)} rejected your application `{app.app_name}`.") g.db.delete(app) diff --git a/files/routes/posts.py b/files/routes/posts.py index d5ae8e074..6dc497b9a 100644 --- a/files/routes/posts.py +++ b/files/routes/posts.py @@ -823,7 +823,7 @@ def mark_post_nsfw(pid, v): target_post_id = p.id, ) g.db.add(ma) - position = 'a site admin' + actor_str = admin_str(v) else: ma = HoleAction( hole = p.hole, @@ -832,9 +832,9 @@ def mark_post_nsfw(pid, v): target_post_id = p.id, ) g.db.add(ma) - position = f'a /h/{p.hole} mod' + actor_str = f'@{v.username} (a /h/{hole_from} mod)' - send_repeatable_notification(p.author_id, f"@{v.username} ({position}) has marked [{p.title}](/post/{p.id}) as NSFW") + send_repeatable_notification(p.author_id, f"{actor_str} marked [{p.title}](/post/{p.id}) as NSFW") return {"message": "Post has been marked as NSFW!"} @@ -865,7 +865,7 @@ def unmark_post_nsfw(pid, v): target_post_id = p.id, ) g.db.add(ma) - position = 'a site admin' + actor_str = admin_str(v) else: ma = HoleAction( hole = p.hole, @@ -874,9 +874,9 @@ def unmark_post_nsfw(pid, v): target_post_id = p.id, ) g.db.add(ma) - position = f'a /h/{p.hole} mod' + actor_str = f'@{v.username} (a /h/{hole_from} mod)' - send_repeatable_notification(p.author_id, f"@{v.username} ({position}) has unmarked [{p.title}](/post/{p.id}) as NSFW") + send_repeatable_notification(p.author_id, f"{actor_str} unmarked [{p.title}](/post/{p.id}) as NSFW") return {"message": "Post has been unmarked as NSFW!"} @@ -951,7 +951,7 @@ def set_new_sort(post_id, v): target_post_id = p.id, ) g.db.add(ma) - send_repeatable_notification(p.author_id, f"@{v.username} (a site admin) has changed the the default sorting of comments on [{p.title}](/post/{p.id}) to `new`") + send_repeatable_notification(p.author_id, f"{admin_str(v)} changed the the default sorting of comments on [{p.title}](/post/{p.id}) to `new`") return {"message": "Changed the the default sorting of comments on this post to 'new'"} @@ -973,7 +973,7 @@ def unset_new_sort(post_id, v): target_post_id = p.id, ) g.db.add(ma) - send_repeatable_notification(p.author_id, f"@{v.username} (a site admin) has changed the the default sorting of comments on [{p.title}](/post/{p.id}) to `hot`") + send_repeatable_notification(p.author_id, f"{admin_str(v)} changed the the default sorting of comments on [{p.title}](/post/{p.id}) to `hot`") return {"message": "Changed the the default sorting of comments on this post to 'hot'"} @@ -1133,7 +1133,7 @@ if SITE_NAME == 'WPD': target_post_id = p.id, ) g.db.add(ma) - send_repeatable_notification(p.author_id, f"@{v.username} (a site admin) has add a child warning to [{p.title}](/post/{p.id})") + send_repeatable_notification(p.author_id, f"{admin_str(v)} added a child warning to [{p.title}](/post/{p.id})") return {"message": "A child warning has been added to the post!"} @@ -1159,7 +1159,7 @@ if SITE_NAME == 'WPD': target_post_id = p.id, ) g.db.add(ma) - send_repeatable_notification(p.author_id, f"@{v.username} (a site admin) has removed the child warning from [{p.title}](/post/{p.id})") + send_repeatable_notification(p.author_id, f"{admin_str(v)} removed the child warning from [{p.title}](/post/{p.id})") return {"message": "The child warning has been removed from the post!"} diff --git a/files/routes/reporting.py b/files/routes/reporting.py index 15fcd02a7..d5e429639 100644 --- a/files/routes/reporting.py +++ b/files/routes/reporting.py @@ -42,7 +42,7 @@ def report_post(pid, v): _note=f'"{post.flair}"' ) g.db.add(ma) - position = 'a site admin' + actor_str = admin_str(v) else: ma = HoleAction( hole=post.hole, @@ -52,10 +52,10 @@ def report_post(pid, v): _note=f'"{post.flair}"' ) g.db.add(ma) - position = f'a /h/{post.hole} mod' + actor_str = f'@{v.username} (a /h/{hole_from} mod)' if v.id != post.author_id: - message = f'@{v.username} ({position}) has flaired [{post.title}]({post.shortlink}) with the flair: `"{og_flair}"`' + message = f'{actor_str} flaired [{post.title}]({post.shortlink}) with the flair: `"{og_flair}"`' send_repeatable_notification(post.author_id, message) return {"message": "Post flaired successfully!"} diff --git a/files/routes/static.py b/files/routes/static.py index 487f994b3..b753df0b0 100644 --- a/files/routes/static.py +++ b/files/routes/static.py @@ -176,6 +176,7 @@ def patrons(v): return render_template("admin/patrons.html", v=v, users=users, benefactor_def=AWARDS['benefactor']) @app.get("/admins") +@feature_required('ADMIN_TRANSPARENCY') @limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400) @limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID) @auth_required @@ -185,6 +186,7 @@ def admins(v): @app.get("/log") @app.get("/modlog") +@feature_required('ADMIN_TRANSPARENCY') @limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400) @limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID) @auth_required diff --git a/files/routes/users.py b/files/routes/users.py index a413baceb..10f3fa31b 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -326,6 +326,7 @@ def user_voted_comments(v, username): return user_voted(v, username, Comment, CommentVote, "userpage/voted_comments.html", True) @app.get("/banned") +@feature_required('ADMIN_TRANSPARENCY') @limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400) @limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID) @auth_required diff --git a/files/templates/comments.html b/files/templates/comments.html index 482687384..db5056b74 100644 --- a/files/templates/comments.html +++ b/files/templates/comments.html @@ -30,8 +30,32 @@
- {% if standalone and c.nsfw %}NSFW {% endif %} - {% if c.is_banned %}Removed by @{{c.ban_reason}} (site admin){% elif c.deleted_utc %}Deleted by author{% endif %} + {% if standalone and c.nsfw %} + NSFW + {% endif %} + + {% if c.deleted_utc %} + + Deleted by author + + {% endif %} + + {% if c.deleted_utc and c.is_banned %} + + - + + {% endif %} + + {% if c.is_banned %} + + Removed by + {% if FEATURES['ADMIN_TRANSPARENCY'] %} + @{{c.ban_reason}} (site admin) + {% else %} + site admins + {% endif %} + + {% endif %}
{% if render_replies %} @@ -273,7 +297,13 @@ {{macros.reports(c, 'comment')}} {% if c.is_banned %} -
Removed by @{{c.ban_reason}} (site admin)
+
Removed by + {% if FEATURES['ADMIN_TRANSPARENCY'] %} + @{{c.ban_reason}} (site admin) + {% else %} + site admins + {% endif %} +
{% endif %} {% set realbody = c.realbody(v) %} diff --git a/files/templates/formatting.html b/files/templates/formatting.html index 317ea8338..3323e450d 100644 --- a/files/templates/formatting.html +++ b/files/templates/formatting.html @@ -321,6 +321,7 @@ !commenters !commenters + Admins Mention
@@ -330,6 +331,7 @@ !jannies !jannies + {% if SITE_NAME != 'WPD' %} Hole Mods Mention
diff --git a/files/templates/meta_navbar.html b/files/templates/meta_navbar.html index 4ad4a8340..bf8eddf22 100644 --- a/files/templates/meta_navbar.html +++ b/files/templates/meta_navbar.html @@ -17,15 +17,19 @@ - - - + + {% if FEATURES['ADMIN_TRANSPARENCY'] %} + + + + {% endif %} + @@ -48,15 +52,17 @@ - - - + {% if FEATURES['ADMIN_TRANSPARENCY'] %} + + + + {% endif %} diff --git a/files/templates/post.html b/files/templates/post.html index 835e997a1..c3da4571c 100644 --- a/files/templates/post.html +++ b/files/templates/post.html @@ -175,7 +175,14 @@ {{p.realbody(v) | safe}} {% if p.is_banned %} -
Removed by @{{p.ban_reason}} (site admin)
+
+ Removed by + {% if FEATURES['ADMIN_TRANSPARENCY'] %} + @{{p.ban_reason}} (site admin) + {% else %} + site admins + {% endif %} +
{% endif %} {% if not p.ghost %} diff --git a/files/templates/post_banned.html b/files/templates/post_banned.html index 60a9da4c1..a30c3bd9f 100644 --- a/files/templates/post_banned.html +++ b/files/templates/post_banned.html @@ -19,10 +19,29 @@
- -
{{p.plaintitle(v)}}
- +
+ {% if p.nsfw %} + NSFW + {% endif %} + {{p.plaintitle(v)}} +
+ + {% if p.deleted_utc %} +
+ Deleted by author +
+ {% endif %} + +
+ Removed by + {% if FEATURES['ADMIN_TRANSPARENCY'] %} + @{{p.ban_reason}} (site admin) + {% else %} + site admins + {% endif %} +
+
diff --git a/files/templates/sidebar_WPD.html b/files/templates/sidebar_WPD.html index 89947dda0..29ca43c3d 100644 --- a/files/templates/sidebar_WPD.html +++ b/files/templates/sidebar_WPD.html @@ -42,8 +42,10 @@ - - + {% if FEATURES['ADMIN_TRANSPARENCY'] %} + + + {% endif %}

diff --git a/files/templates/sidebar_rDrama.html b/files/templates/sidebar_rDrama.html index 1bc6187d1..008a5be90 100644 --- a/files/templates/sidebar_rDrama.html +++ b/files/templates/sidebar_rDrama.html @@ -47,8 +47,10 @@ - - + {% if FEATURES['ADMIN_TRANSPARENCY'] %} + + + {% endif %}

diff --git a/snappy_WPD.txt b/snappy_WPD.txt index 9092b85dd..7df779a41 100644 --- a/snappy_WPD.txt +++ b/snappy_WPD.txt @@ -3284,7 +3284,7 @@ There’s no such thing as “pitbulls,” as breeds are social constructs. But even *if* hate facts about “pitbulls” committing more attacks in frequency and severity than other breeds are true, it’s not the breed; it has nothing to do with genetics. Despite what breedists would claim, it’s only due to socioeconomic factors, systematic breedism, selective reporting, and overpolicing of pitbull communities. [para] -This site was supposed to be about watching people die ,not about your pets.!! This site is soon to be WatchPeoplesPets.TV im glad TheYNC doesnt tolerate this non sense of brining animals to a site dedicated to gore and death. This site admin is caught up with cats and TikTok clout..smh, im glad TheYNC filters out you all from destroying TheYNC like this site is a animal loving site HA!!! You all cane here to see death (supposedly) but you come post stuff about pets here... WPD is the new Online Pets Mart now because the admin let it happen.. he smoking to much TikTok dope and lost his websites credibility of being dedicated to death <<<---- @CLiTPEELER +This site was supposed to be about watching people die ,not about your pets.!! This site is soon to be WatchPeoplesPets.TV im glad TheYNC doesnt tolerate this non sense of brining animals to a site dedicated to gore and death. This admin is caught up with cats and TikTok clout..smh, im glad TheYNC filters out you all from destroying TheYNC like this site is a animal loving site HA!!! You all cane here to see death (supposedly) but you come post stuff about pets here... WPD is the new Online Pets Mart now because the admin let it happen.. he smoking to much TikTok dope and lost his websites credibility of being dedicated to death <<<---- @CLiTPEELER [para] Excessive harassment. Both in chat and on my wall post. No provocation [para] @@ -3294,10 +3294,6 @@ The last time I saw you was a romantic weekend at that Airbnb. You had really te [para] You are one of the dumbest people I have ever seen, ever. Your reading comprehension is so limited, I'm surprised you were even able to make an account here. [para] -Can we get a new leaderbaord state for deleted posts/comments. because 999% of what i post gets deleted for some reason. but im a really good person and ive never done anything wrong And this is like that book i red called 1984 last week (My techer told me to read it but i onlt red like 10 pages 😂) but if you Idiots are going to delete my post atleast please give me something to Brag about. thanks - -> Removed by @G-tix (site admin) -[para] I'm a proud conservative American from Murica' but I have fallen in love with Colombia 🇨🇴 over the past couple of years. I had my wedding down there last summer and look forward to moving there next year for a few years on their new nomad visa. Anyway this is why I made the post. The real reason why I made the post is because like so many of you cool cats have a pet cat. Fuck yah pun was definitely intentional. Anyway I have known my cat over half my life and as much as he's like a son to me I can't imagine plastering his pictures on a gore website. I ❤️ WPD and love the freedom we have here, I finally created an account last December and super happy I did. However it goes without saying there are some miserable garbage humans who lurk here and the only thing that brings them happiness is being a miserable cold used cum-sock to others. Sorry for the image you now have in your head, but you get my point.