rename "agendaposter" to "chud"

pull/157/head
Aevann 2023-06-23 14:07:47 +03:00
parent 7f44f290f6
commit a15d5eabef
28 changed files with 102 additions and 98 deletions

View File

@ -7295,7 +7295,7 @@ button, .btn {
animation: rb 8s linear infinite;
}
.agendaposter-img:after {
.chud-img:after {
content: "";
display: inline-block;
margin-top: 10px;
@ -7306,40 +7306,40 @@ button, .btn {
background-repeat: no-repeat !important;
}
.agendaposter-0:after {
.chud-0:after {
background: url("/i/chud/0.webp?x=2");
}
.agendaposter-1:after {
.chud-1:after {
background: url("/i/chud/1.webp?x=2");
}
.agendaposter-2:after {
.chud-2:after {
background: url("/i/chud/2.webp?x=2");
}
.agendaposter-3:after {
.chud-3:after {
background: url("/i/chud/3.webp?x=2");
}
.agendaposter-4:after {
.chud-4:after {
background: url("/i/chud/4.webp?x=2");
}
.agendaposter-5:after {
.chud-5:after {
background: url("/i/chud/5.webp?x=2");
height: 100px;
}
.agendaposter-6:after {
.chud-6:after {
background: url("/i/chud/6.webp?x=2");
}
.agendaposter-7:after, .agendaposter-8:after, .agendaposter-9:after {
.chud-7:after, .chud-8:after, .chud-9:after {
background: url("/i/chud/7.webp?x=2");
}
@media (max-width: 410px) {
.agendaposter-img:after {
.chud-img:after {
margin-bottom: 0;
width: 50vw;
height: 100px;
}
.agendaposter-5:after {
.chud-5:after {
height: 65px;
}
}

View File

@ -119,7 +119,7 @@ function pick(kind, price, coins, marseybux) {
}
document.getElementById(kind).classList.toggle('picked')
if (kind == "agendaposter") {
if (kind == "chud") {
document.getElementById('phrase_section').classList.remove("d-none")
document.getElementById('note_section').classList.add("d-none")
}
@ -176,7 +176,7 @@ function buy() {
function giveaward(t) {
const kind = document.getElementById('kind').value;
const note_id = (kind == "agendaposter" ? "agendaposter_phrase" : "note")
const note_id = (kind == "chud" ? "chud_phrase" : "note")
postToast(t, t.dataset.action,
{

View File

@ -55,7 +55,7 @@ class Badge(Base):
@property
@lazy
def until(self):
if self.badge_id == 58 and self.user.agendaposter != 1: return self.user.agendaposter
if self.badge_id == 58 and self.user.chud != 1: return self.user.chud
if self.badge_id == 170 and self.user.marsify != 1: return self.user.marsify
if self.badge_id == 94: return self.user.progressivestack

View File

@ -95,9 +95,9 @@ class User(Base):
coins_spent = Column(Integer, default=0)
coins_spent_on_hats = Column(Integer, default=0)
lootboxes_bought = Column(Integer, default=0)
agendaposter = Column(Integer, default=0)
chud = Column(Integer, default=0)
queen = Column(Integer, default=0)
agendaposter_phrase = Column(String)
chud_phrase = Column(String)
is_activated = Column(Boolean, default=False)
shadowbanned = Column(Integer, ForeignKey("users.id"))
chudded_by = Column(Integer, ForeignKey("users.id"))
@ -305,7 +305,7 @@ class User(Base):
user_forced_hats = []
for k, val in forced_hats.items():
if getattr(self, k) and getattr(self, k) > 1:
if k == 'agendaposter':
if k == 'chud':
user_forced_hats.append(random.choice(val))
else:
user_forced_hats.append(val)
@ -348,7 +348,7 @@ class User(Base):
def is_votes_real(self):
if self.patron: return True
if self.is_suspended_permanently or self.shadowbanned: return False
if self.agendaposter: return False
if self.chud: return False
if self.profile_url.startswith('/e/') and not self.customtitle and self.namecolor == DEFAULT_COLOR: return False
return True
@ -373,7 +373,7 @@ class User(Base):
def all_blocks(self):
stealth = set([x[0] for x in g.db.query(Sub.name).filter_by(stealth=True).all()])
stealth = stealth - set([x[0] for x in g.db.query(SubJoin.sub).filter_by(user_id=self.id).all()])
if self.agendaposter == 1: stealth = stealth - {'chudrama'}
if self.chud == 1: stealth = stealth - {'chudrama'}
return list(stealth) + [x[0] for x in g.db.query(SubBlock.sub).filter_by(user_id=self.id).all()]
@ -813,7 +813,7 @@ class User(Base):
@property
@lazy
def profile_url(self):
if self.agendaposter:
if self.chud:
return f"{SITE_FULL}/e/chudsey.webp"
if self.rainbow:
return f"{SITE_FULL}/e/marseysalutepride.webp"
@ -889,7 +889,7 @@ class User(Base):
'coins': self.coins,
'post_count': self.real_post_count(g.v),
'comment_count': self.real_comment_count(g.v),
'agendaposter_phrase': self.agendaposter_phrase,
'chud_phrase': self.chud_phrase,
}
@ -1080,14 +1080,14 @@ class User(Base):
if self.can_see_restricted_holes != None:
return self.can_see_restricted_holes
if self.agendaposter: return True
if self.chud: return True
if self.patron: return True
return False
@property
@lazy
def can_see_countryclub(self):
if self.agendaposter == 1: return False
if self.chud == 1: return False
if self.can_see_restricted_holes != None:
return self.can_see_restricted_holes

View File

@ -531,8 +531,8 @@ AWARDS = {
"ghost": False,
"enabled": True,
},
"agendaposter": {
"kind": "agendaposter",
"chud": {
"kind": "chud",
"title": "Chud",
"description": "Chuds the recipient for 24 hours.",
"icon": "fas fa-snooze",

View File

@ -420,7 +420,7 @@ profanity_single_words = "|".join([profanity.lower() for profanity in PROFANITIE
LONGPOST_REPLIES = ('Wow, you must be a JP fan.', 'This is one of the worst posts I have EVER seen. Delete it.', "No, don't reply like this, please do another wall of unhinged rant please.", '# 😴😴😴', "Ma'am we've been over this before. You need to stop.", "I've known more coherent downies.", "Your pulitzer's in the mail", "That's great and all, but I asked for my burger without cheese.", 'That degree finally paying off', "That's nice sweaty. Why don't you have a seat in the time out corner with Pizzashill until you calm down, then you can have your Capri Sun.", "All them words won't bring your pa back.", "You had a chance to not be completely worthless, but it looks like you threw it away. At least you're consistent.", 'Some people are able to display their intelligence by going on at length on a subject and never actually saying anything. This ability is most common in trades such as politics, public relations, and law. You have impressed me by being able to best them all, while still coming off as an absolute idiot.', "You can type 10,000 characters and you decided that these were the one's that you wanted.", 'Have you owned the libs yet?', "I don't know what you said, because I've seen another human naked.", 'Impressive. Normally people with such severe developmental disabilities struggle to write much more than a sentence or two. He really has exceded our expectations for the writing portion. Sadly the coherency of his writing, along with his abilities in the social skills and reading portions, are far behind his peers with similar disabilities.', "This is a really long way of saying you don't fuck.", "Sorry ma'am, looks like his delusions have gotten worse. We'll have to admit him.", 'If only you could put that energy into your relationships', 'Posts like this is why I do Heroine.', 'still unemployed then?', 'K', 'look im gunna have 2 ask u 2 keep ur giant dumps in the toilet not in my replys 😷😷😷', "Mommy is soooo proud of you, sweaty. Let's put this sperg out up on the fridge with all your other failures.", "Good job bobby, here's a star", "That was a mistake. You're about to find out the hard way why.", 'You sat down and wrote all this shit. You could have done so many other things with your life. What happened to your life that made you decide writing novels of bullshit here was the best option?', "I don't have enough spoons to read this shit", "All those words won't bring daddy back.", 'OUT!', "Damn, you're really mad over this, but thanks for the effort you put into typing that all out! Sadly I won't read it all.", "Jesse what the fuck are you talking about??", "▼you're fucking bananas if you think I'm reading all that, take my downvote and shut up idiot", "Are you feeling okay bud?", ':#marseywoah:', 'At no point in your rambling, incoherent post were you even close to anything that could be considered a rational thought. Everyone on this site is now dumber for having read it. May God have mercy on your soul.', 'https://rdrama.net/videos/1671169024815045.mp4', 'https://i.rdrama.net/images/16766675896248007.webp', 'https://i.rdrama.net/images/1683531328305875.webp')
AGENDAPOSTER_MSG = """:marseypirate: : Avast, ye scurvy cur! Yer {type} be walkin' the plank for forgettin' to include `{AGENDAPOSTER_PHRASE}`! We be helpin' ye, right enough - we'll ne'er let ye post or comment anythin' that doesn't be expressin' yer love an' acceptance o' minorities! Heave to an' resubmit yer {type} with `{AGENDAPOSTER_PHRASE}` included, or it'll be the deep six for ye, savvy? This be an automated message; if ye need help, ye can message us ['ere](/contact). Arrr!"""
CHUD_MSG = """:marseypirate: : Avast, ye scurvy cur! Yer {type} be walkin' the plank for forgettin' to include `{CHUD_PHRASE}`! We be helpin' ye, right enough - we'll ne'er let ye post or comment anythin' that doesn't be expressin' yer love an' acceptance o' minorities! Heave to an' resubmit yer {type} with `{CHUD_PHRASE}` included, or it'll be the deep six for ye, savvy? This be an automated message; if ye need help, ye can message us ['ere](/contact). Arrr!"""
PIN_AWARD_TEXT = " (pin award)"
@ -470,7 +470,7 @@ PERMS = { # Minimum admin_level to perform action.
'POST_COMMENT_MODERATION': 1,
'USER_BAN': 1,
'USER_SHADOWBAN': 1,
'USER_AGENDAPOSTER': 1,
'USER_CHUD': 1,
'USER_MODERATION_TOOLS_VISIBLE': 1,
'VIEW_MODMAIL': 1,
'NOTIFICATIONS_MODMAIL': 1,
@ -1107,7 +1107,7 @@ forced_hats = {
"marsify": ("Marsified", "I can't pick my own Marseys, help!"),
"is_suspended": ("Behind Bars", "This user is banned and needs to do better!"),
"queen": ("Emoji Crown (hearts and shooting stars)", "This user is getting in touch with her feminine side 🥰"),
"agendaposter": (("Egg_irl", "This user is getting in touch with xir identity!"),
"chud": (("Egg_irl", "This user is getting in touch with xir identity!"),
("Trans Flag", "Just in case you forgot, trans lives matter."),
("Trans Flag II", "Your egg is cracked; wear it with pride!"),
("Pride Flag", "Never forget that this is a primarily gay community. Dude bussy lmao."),

View File

@ -227,8 +227,8 @@ def _award_timers_task():
_process_timer(User.patron_utc, [22,23,24,25,26,27,28], f"Your {patron} status has expired!", {
User.patron: 0,
})
_process_timer(User.agendaposter, [58], "Your temporary chud status has expired!", {
User.agendaposter_phrase: None,
_process_timer(User.chud, [58], "Your temporary chud status has expired!", {
User.chud_phrase: None,
User.chudded_by: None,
})
_process_timer(User.flairchanged, [96], "Your temporary flair-lock has expired. You can now change your flair!")

View File

@ -486,7 +486,7 @@ def sanitize(sanitized, golden=True, limit_pings=0, showmore=False, count_emojis
sanitized = sanitized.replace('<p></p>', '')
if g.v and g.v.agendaposter:
if g.v and g.v.chud:
allowed_css_properties = allowed_styles
else:
allowed_css_properties = allowed_styles + ["filter"]
@ -723,13 +723,13 @@ def torture_object(obj, torture_method):
tag.string.replace_with(torture_method(tag.string, key))
obj.body_html = str(soup).replace('<html><body>','').replace('</body></html>','')
#torture title_html and check for agendaposter_phrase in plain title and leave if it's there
#torture title_html and check for chud_phrase in plain title and leave if it's there
if isinstance(obj, Post):
obj.title_html = obj.title_html
def complies_with_chud(obj):
#check for cases where u should leave
if not (obj.author.agendaposter or obj.author.queen): return True
if not (obj.author.chud or obj.author.queen): return True
if obj.author.marseyawarded: return True
if isinstance(obj, Post):
if obj.id in ADMIGGER_THREADS: return True
@ -738,7 +738,7 @@ def complies_with_chud(obj):
if obj.parent_submission in ADMIGGER_THREADS: return True
if obj.post.sub == "chudrama": return True
if obj.author.agendaposter:
if obj.author.chud:
#perserve old body_html to be used in checking for chud phrase
old_body_html = obj.body_html
@ -751,20 +751,20 @@ def complies_with_chud(obj):
tag.string.replace_with(torture_ap(tag.string, obj.author.username))
obj.body_html = str(soup).replace('<html><body>','').replace('</body></html>','')
#torture title_html and check for agendaposter_phrase in plain title and leave if it's there
#torture title_html and check for chud_phrase in plain title and leave if it's there
if isinstance(obj, Post):
obj.title_html = torture_ap(obj.title_html, obj.author.username)
if obj.author.agendaposter_phrase in obj.title.lower():
if obj.author.chud_phrase in obj.title.lower():
return True
#check for agendaposter_phrase in body_html
#check for chud_phrase in body_html
if old_body_html:
excluded_tags = {'del','sub','sup','marquee','spoiler','lite-youtube','video','audio'}
soup = BeautifulSoup(old_body_html, 'lxml')
tags = soup.html.body.find_all(lambda tag: tag.name not in excluded_tags and not tag.attrs, recursive=False)
for tag in tags:
for text in tag.find_all(text=True, recursive=False):
if obj.author.agendaposter_phrase in text.lower():
if obj.author.chud_phrase in text.lower():
return True
return False

View File

@ -781,8 +781,8 @@ def admin_removed_comments(v):
@limiter.limit('1/second', scope=rpath, key_func=get_ID)
@limiter.limit(DEFAULT_RATELIMIT)
@limiter.limit(DEFAULT_RATELIMIT, key_func=get_ID)
@admin_level_required(PERMS['USER_AGENDAPOSTER'])
def unagendaposter(id, v):
@admin_level_required(PERMS['USER_CHUD'])
def unchud(id, v):
if id.startswith('p_'):
post_id = id.split('p_')[1]
@ -798,8 +798,8 @@ def unagendaposter(id, v):
if not user.chudded_by:
abort(403, "Jannies can't undo chud awards anymore!")
user.agendaposter = 0
user.agendaposter_phrase = None
user.chud = 0
user.chud_phrase = None
user.chudded_by = None
g.db.add(user)
@ -1032,8 +1032,8 @@ def ban_user(id, v):
@limiter.limit('1/second', scope=rpath, key_func=get_ID)
@limiter.limit(DEFAULT_RATELIMIT)
@limiter.limit(DEFAULT_RATELIMIT, key_func=get_ID)
@admin_level_required(PERMS['USER_AGENDAPOSTER'])
def agendaposter(id, v):
@admin_level_required(PERMS['USER_CHUD'])
def chud(id, v):
if id.startswith('p_'):
post_id = id.split('p_')[1]
@ -1049,7 +1049,7 @@ def agendaposter(id, v):
if user.admin_level > v.admin_level:
abort(403)
if user.agendaposter == 1:
if user.chud == 1:
abort(403, f"@{user.username} is already chudded permanently!")
if user.marsify:
@ -1072,24 +1072,24 @@ def agendaposter(id, v):
reason = reason_regex_comment.sub(r'<a href="\1#context">\1</a>', reason)
if days:
if user.agendaposter:
user.agendaposter += days * 86400
if user.chud:
user.chud += days * 86400
else:
user.agendaposter = int(time.time()) + (days * 86400)
user.chud = int(time.time()) + (days * 86400)
days_txt = str(days)
if days_txt.endswith('.0'): days_txt = days_txt[:-2]
duration = f"for {days_txt} day"
if days != 1: duration += "s"
else:
user.agendaposter = 1
user.chud = 1
duration = "permanently"
user.agendaposter_phrase = "trans lives matter"
user.chud_phrase = "trans lives matter"
text = f"@{v.username} (a site admin) has 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.agendaposter_phrase}"
text += f"\n\n**You now have to say this phrase in all posts and comments you make {duration}:**\n\n> {user.chud_phrase}"
user.chudded_by = v.id
g.db.add(user)

View File

@ -236,7 +236,7 @@ def award_thing(v, thing_type, id):
msg += "!"
if note:
note = '\n\n> '.join(note.splitlines())
if kind == "agendaposter":
if kind == "chud":
msg += f"\n\n**You now have to say this phrase in all posts and comments you make for 24 hours:**"
msg += f"\n\n> {note}"
send_repeatable_notification(author.id, msg)
@ -314,7 +314,7 @@ def award_thing(v, thing_type, id):
else: thing.stickied_utc = t
g.db.add(thing)
elif kind == "queen":
if author.agendaposter:
if author.chud:
abort(409, f"{safe_username} is under the effect of a conflicting award: Chud award!")
if author.namechanged:
@ -351,7 +351,7 @@ def award_thing(v, thing_type, id):
badge_grant(user=author, badge_id=285)
elif kind == "agendaposter":
elif kind == "chud":
if thing_type == 'post' and thing.sub == 'chudrama' \
or thing_type == 'comment' and thing.post and thing.post.sub == 'chudrama':
abort(403, "You can't give the chud award in /h/chudrama")
@ -368,18 +368,18 @@ def award_thing(v, thing_type, id):
if author.owoify:
abort(409, f"{safe_username} is under the effect of a conflicting award: OwOify award!")
if author.agendaposter == 1:
if author.chud == 1:
abort(409, f"{safe_username} is already chudded permanently!")
if author.agendaposter and time.time() < author.agendaposter: author.agendaposter += 86400
else: author.agendaposter = int(time.time()) + 86400
if author.chud and time.time() < author.chud: author.chud += 86400
else: author.chud = int(time.time()) + 86400
if not note: abort(400, "Missing phrase!")
if note not in CHUD_PHRASES:
abort(400, "Invalid phrase!")
author.agendaposter_phrase = note.lower()
author.chud_phrase = note.lower()
badge_grant(user=author, badge_id=58)
elif kind == "flairlock":
@ -421,7 +421,7 @@ def award_thing(v, thing_type, id):
elif kind == "unpausable":
badge_grant(badge_id=67, user=author)
elif kind == "marsey":
if author.agendaposter:
if author.chud:
abort(409, f"{safe_username} is under the effect of a conflicting award: Chud award!")
if author.queen:
abort(409, f"{safe_username} is under the effect of a conflicting award: Queen award!")
@ -479,7 +479,7 @@ def award_thing(v, thing_type, id):
author.verified = "Verified"
badge_grant(user=author, badge_id=150)
elif kind == 'marsify':
if author.agendaposter:
if author.chud:
abort(409, f"{safe_username} is under the effect of a conflicting award: Chud award!")
if author.queen:
abort(409, f"{safe_username} is under the effect of a conflicting award: Queen award!")
@ -511,7 +511,7 @@ def award_thing(v, thing_type, id):
else: author.earlylife = int(time.time()) + 86400
badge_grant(user=author, badge_id=169)
elif ("Furry" in kind and kind == v.house) or kind == 'owoify':
if author.agendaposter:
if author.chud:
abort(409, f"{safe_username} is under the effect of a conflicting award: Chud award!")
if author.queen:
abort(409, f"{safe_username} is under the effect of a conflicting award: Queen award!")

View File

@ -242,7 +242,7 @@ def comment(v:User):
body_html = sanitize(body_for_sanitize, limit_pings=5, showmore=True, count_emojis=not v.marsify)
if post_target.id not in ADMIGGER_THREADS and not (v.agendaposter and v.agendaposter_phrase in body.lower()):
if post_target.id not in ADMIGGER_THREADS and not (v.chud and v.chud_phrase in body.lower()):
existing = g.db.query(Comment.id).filter(
Comment.author_id == v.id,
Comment.deleted_utc == 0,
@ -294,7 +294,7 @@ def comment(v:User):
c.ban_reason = "AutoJanny"
g.db.add(c)
body = AGENDAPOSTER_MSG.format(username=v.username, type='comment', AGENDAPOSTER_PHRASE=v.agendaposter_phrase)
body = CHUD_MSG.format(username=v.username, type='comment', CHUD_PHRASE=v.chud_phrase)
body_jannied_html = sanitize(body)
c_jannied = Comment(author_id=AUTOJANNY_ID,
@ -658,7 +658,7 @@ def edit_comment(cid, v):
execute_blackjack(v, c, c.body, "comment")
if not complies_with_chud(c):
abort(403, f'You have to include "{v.agendaposter_phrase}" in your comment!')
abort(403, f'You have to include "{v.chud_phrase}" in your comment!')
if int(time.time()) - c.created_utc > 60 * 3: c.edited_utc = int(time.time())

View File

@ -676,7 +676,7 @@ def submit_post(v:User, sub=None):
p.is_banned = True
p.ban_reason = "AutoJanny"
body = AGENDAPOSTER_MSG.format(username=v.username, type='post', AGENDAPOSTER_PHRASE=v.agendaposter_phrase)
body = CHUD_MSG.format(username=v.username, type='post', CHUD_PHRASE=v.chud_phrase)
body_jannied_html = sanitize(body)
@ -1062,7 +1062,7 @@ def edit_post(pid, v):
if not complies_with_chud(p):
abort(403, f'You have to include "{v.agendaposter_phrase}" in your post!')
abort(403, f'You have to include "{v.chud_phrase}" in your post!')
if v.id == p.author_id:

View File

@ -615,7 +615,7 @@ def settings_css_get(v:User):
@limiter.limit(DEFAULT_RATELIMIT, key_func=get_ID)
@auth_required
def settings_css(v):
if v.agendaposter: abort(400, "Agendapostered users can't edit CSS!")
if v.chud: abort(400, "Chuded users can't edit CSS!")
css = request.values.get("css", v.css).strip().replace('\\', '').strip()[:CSS_LENGTH_LIMIT]
v.css = css
g.db.add(v)

View File

@ -403,5 +403,5 @@ def transfers(v:User):
@limiter.limit(DEFAULT_RATELIMIT)
@is_not_permabanned
def donate(v):
if v.shadowbanned or v.agendaposter == 1: abort(404)
if v.shadowbanned or v.chud == 1: abort(404)
return render_template(f'donate.html', v=v)

View File

@ -234,7 +234,7 @@ def grassed(v:User):
@auth_required
def chuds(v:User):
users = g.db.query(User).filter(
or_(User.agendaposter == 1, User.agendaposter > time.time()),
or_(User.chud == 1, User.chud > time.time()),
)
if v.admin_level >= PERMS['VIEW_LAST_ACTIVE']:
users = users.order_by(User.truescore.desc())

View File

@ -23,7 +23,7 @@
<td {% if user.last_active %}data-time="{{user.last_active}}"{% endif %}></td>
{%- endif %}
<td>{{user.truescore}}</td>
<td {% if user.agendaposter != 1 %}data-time="{{user.agendaposter}}"{% endif %}></td>
<td {% if user.chud != 1 %}data-time="{{user.chud}}"{% endif %}></td>
</tr>
{% endfor %}
</table>

View File

@ -242,7 +242,7 @@
{% endif %}
{% set realbody = c.realbody(v) %}
<div id="comment-text-{{c.id}}" class="comment-text mb-0 {% if c.author.agendaposter and not (c.parent_submission and c.post.sub == 'chudrama') %}text-uppercase agendaposter-img agendaposter-{{c.id_last_num}}{% endif %} {% if c.author.rainbow %}rainbow-text{% endif %} {%if c.author.queen%}queen{%endif%}">
<div id="comment-text-{{c.id}}" class="comment-text mb-0 {% if c.author.chud and not (c.parent_submission and c.post.sub == 'chudrama') %}text-uppercase chud-img chud-{{c.id_last_num}}{% endif %} {% if c.author.rainbow %}rainbow-text{% endif %} {%if c.author.queen%}queen{%endif%}">
{{realbody | safe}}
</div>
{% if c.parent_submission or c.wall_user_id %}
@ -473,10 +473,10 @@
<button type="button" class="{% if c.author.is_suspended_permanently %}d-none{% endif %} dropdown-item list-inline-item d-mob-none text-danger" data-bs-toggle="modal" data-bs-target="#banModal" data-nonce="{{g.nonce}}" data-onclick="punishModal(this, 'ban', '/comment/{{c.id}}', '{{c.author_name}}', '{{c.fullname}}')"><i class="fas fa-user-slash text-danger fa-fw"></i>Ban user</button>
{% endif %}
{% if v.admin_level >= PERMS['USER_AGENDAPOSTER'] and v.id != c.author_id %}
<button type="button" id="unchud-{{c.fullname}}" class="dropdown-item list-inline-item d-mob-none {% if not c.author.agendaposter %}d-none{% endif %} text-success" data-nonce="{{g.nonce}}" data-onclick="unchud_or_unban(this,'/unchud_user/{{c.fullname}}')"><i class="fas fa-face-sleeping text-success fa-fw"></i>Unchud user</button>
{% if v.admin_level >= PERMS['USER_CHUD'] and v.id != c.author_id %}
<button type="button" id="unchud-{{c.fullname}}" class="dropdown-item list-inline-item d-mob-none {% if not c.author.chud %}d-none{% endif %} text-success" data-nonce="{{g.nonce}}" data-onclick="unchud_or_unban(this,'/unchud_user/{{c.fullname}}')"><i class="fas fa-face-sleeping text-success fa-fw"></i>Unchud user</button>
<button type="button" class="{% if c.author.agendaposter == 1 %}d-none{% endif %} dropdown-item list-inline-item d-mob-none text-danger" data-bs-toggle="modal" data-bs-target="#chudModal" data-nonce="{{g.nonce}}" data-onclick="punishModal(this, 'chud', '/comment/{{c.id}}', '{{c.author_name}}', '{{c.fullname}}')"><i class="fas fa-face-sleeping text-danger fa-fw"></i>Chud user</button>
<button type="button" class="{% if c.author.chud == 1 %}d-none{% endif %} dropdown-item list-inline-item d-mob-none text-danger" data-bs-toggle="modal" data-bs-target="#chudModal" data-nonce="{{g.nonce}}" data-onclick="punishModal(this, 'chud', '/comment/{{c.id}}', '{{c.author_name}}', '{{c.fullname}}')"><i class="fas fa-face-sleeping text-danger fa-fw"></i>Chud user</button>
{% endif %}
</ul>
@ -686,10 +686,10 @@
<button type="button" class="list-group-item text-danger {% if c.author.is_suspended_permanently %}d-none{% endif %}" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#banModal" data-nonce="{{g.nonce}}" data-onclick="punishModal(this, 'ban', '/comment/{{c.id}}', '{{c.author_name}}', '{{c.fullname}}')"><i class="fas fa-user-slash text-danger fa-fw mr-2"></i>Ban user</button>
{% endif %}
{% if v.id != c.author_id and v.admin_level >= PERMS['USER_AGENDAPOSTER'] %}
<button type="button" id="unchud2-{{c.fullname}}" class="{% if not c.author.agendaposter %}d-none{% endif %} list-group-item text-success" data-nonce="{{g.nonce}}" data-onclick="unchud_or_unban(this,'/unchud_user/{{c.fullname}}')" data-bs-dismiss="modal"><i class="fas fa-face-sleeping fa-fw text-success mr-2"></i>Unchud user</button>
{% if v.id != c.author_id and v.admin_level >= PERMS['USER_CHUD'] %}
<button type="button" id="unchud2-{{c.fullname}}" class="{% if not c.author.chud %}d-none{% endif %} list-group-item text-success" data-nonce="{{g.nonce}}" data-onclick="unchud_or_unban(this,'/unchud_user/{{c.fullname}}')" data-bs-dismiss="modal"><i class="fas fa-face-sleeping fa-fw text-success mr-2"></i>Unchud user</button>
<button type="button" class="list-group-item text-danger {% if c.author.agendaposter == 1 %}d-none{% endif %}" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#chudModal" data-nonce="{{g.nonce}}" data-onclick="punishModal(this, 'chud', '/comment/{{c.id}}', '{{c.author_name}}', '{{c.fullname}}')"><i class="fas fa-face-sleeping text-danger fa-fw mr-2"></i>Chud user</button>
<button type="button" class="list-group-item text-danger {% if c.author.chud == 1 %}d-none{% endif %}" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#chudModal" data-nonce="{{g.nonce}}" data-onclick="punishModal(this, 'chud', '/comment/{{c.id}}', '{{c.author_name}}', '{{c.fullname}}')"><i class="fas fa-face-sleeping text-danger fa-fw mr-2"></i>Chud user</button>
{% endif %}
{% if v.admin_level >= PERMS['POST_COMMENT_MODERATION'] %}

View File

@ -7,8 +7,8 @@
<link rel="stylesheet" href="{{('css/classic.css') | asset}}">
{% endif %}
<link rel="stylesheet" href="{{('css/'~v.theme~'.css') | asset}}">
{% if v.agendaposter %}
<link rel="stylesheet" href="{{('css/agendaposter.css') | asset}}">
{% if v.chud %}
<link rel="stylesheet" href="{{('css/chud.css') | asset}}">
{% elif v.css or v.background %}
<link rel="stylesheet" href="/{{v.id}}/css">
{% endif %}

View File

@ -43,7 +43,7 @@
<label for="note" class="pt-4">The phrase the recipient will have to say:</label>
<div class="input-group">
<select autocomplete="off" id='agendaposter_phrase' class="form-control">
<select autocomplete="off" id='chud_phrase' class="form-control">
{% for entry in CHUD_PHRASES %}
<option value="{{entry}}">
{{entry}}

View File

@ -80,14 +80,14 @@
{{macros.flags(p, 'post')}}
{% if p.realurl(v) and not v_forbid_deleted %}
<h1 id="post-title" class="card-title post-title text-left mb-md-3 {% if p.author.agendaposter and p.sub != 'chudrama' %}text-uppercase{% endif %}">
<h1 id="post-title" class="card-title post-title text-left mb-md-3 {% if p.author.chud and p.sub != 'chudrama' %}text-uppercase{% endif %}">
<a {% if p.author.rainbow %}class="rainbow-text"{% endif %} {%if p.author.queen%}queen{%endif%} {% if not v or v.newtabexternal %}target="_blank"{% endif %} rel="nofollow noopener" href="{{p.realurl(v)}}">
{% if p.flair %}<span class="patron font-weight-bolder mr-1" style="background-color:var(--primary); font-size:12px; line-height:2;">{{p.flair | safe}}</span>{% endif %}
{{p.realtitle(v) | safe}}
</a>
</h1>
{% else %}
<h1 id="post-title" class="card-title post-title text-left mb-md-3 {% if p.author.agendaposter and p.sub != 'chudrama' %}text-uppercase{% endif %} {% if p.author.rainbow %}rainbow-text{% endif %} {%if p.author.queen%}queen{%endif%}">
<h1 id="post-title" class="card-title post-title text-left mb-md-3 {% if p.author.chud and p.sub != 'chudrama' %}text-uppercase{% endif %} {% if p.author.rainbow %}rainbow-text{% endif %} {%if p.author.queen%}queen{%endif%}">
{% if p.flair %}<span class="patron font-weight-bolder mr-1" style="background-color:var(--primary); font-size:12px; line-height:2;">{{p.flair | safe}}</span>{% endif %}
{{p.realtitle(v) | safe}}
</h1>
@ -117,7 +117,7 @@
{% endif %}
<div id="post-text" class="{% if p.author.agendaposter and p.sub != 'chudrama' %}text-uppercase agendaposter-img agendaposter-{{p.id_last_num}}{% endif %} {% if p.author.rainbow %}rainbow-text{% endif %} {%if p.author.queen%}queen{%endif%}">
<div id="post-text" class="{% if p.author.chud and p.sub != 'chudrama' %}text-uppercase chud-img chud-{{p.id_last_num}}{% endif %} {% if p.author.rainbow %}rainbow-text{% endif %} {%if p.author.queen%}queen{%endif%}">
{% if p.is_image %}
<div class="row no-gutters mb-4">
<div class="col">

View File

@ -91,10 +91,10 @@
<button type="button" class="dropdown-item list-inline-item text-danger" data-bs-toggle="modal" data-bs-target="#banModal" data-nonce="{{g.nonce}}" data-onclick="punishModal(this, 'ban', '/post/{{p.id}}', '{{p.author_name}}', '{{p.fullname}}')"><i class="fas fa-user-slash text-danger fa-fw"></i>Ban user</button>
{% endif %}
{% if v.admin_level >= PERMS['USER_AGENDAPOSTER'] and v.id != p.author_id %}
<button type="button" id="unchud-{{p.fullname}}" class="dropdown-item {% if not p.author.agendaposter %}d-none{% endif %} list-inline-item text-success" id="unexile2-user-{{p.id}}" data-nonce="{{g.nonce}}" data-onclick="unchud_or_unban(this,'/unchud_user/{{p.fullname}}')"><i class="fas fa-face-sleeping"></i>Unchud user</button>
{% if v.admin_level >= PERMS['USER_CHUD'] and v.id != p.author_id %}
<button type="button" id="unchud-{{p.fullname}}" class="dropdown-item {% if not p.author.chud %}d-none{% endif %} list-inline-item text-success" id="unexile2-user-{{p.id}}" data-nonce="{{g.nonce}}" data-onclick="unchud_or_unban(this,'/unchud_user/{{p.fullname}}')"><i class="fas fa-face-sleeping"></i>Unchud user</button>
<button type="button" class="dropdown-item list-inline-item text-danger {% if p.author.agendaposter == 1 %}d-none{% endif %}" data-bs-toggle="modal" data-bs-target="#chudModal" data-nonce="{{g.nonce}}" data-onclick="punishModal(this, 'chud', '/post/{{p.id}}', '{{p.author_name}}', '{{p.fullname}}')"><i class="fas fa-face-sleeping text-danger fa-fw"></i>Chud user</button>
<button type="button" class="dropdown-item list-inline-item text-danger {% if p.author.chud == 1 %}d-none{% endif %}" data-bs-toggle="modal" data-bs-target="#chudModal" data-nonce="{{g.nonce}}" data-onclick="punishModal(this, 'chud', '/post/{{p.id}}', '{{p.author_name}}', '{{p.fullname}}')"><i class="fas fa-face-sleeping text-danger fa-fw"></i>Chud user</button>
{% endif %}
</ul>
{% endif %}

View File

@ -45,10 +45,10 @@
<button type="button" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#banModal" data-nonce="{{g.nonce}}" data-onclick="punishModal(this, 'ban', '/post/{{p.id}}', '{{p.author_name}}', '{{p.fullname}}')" class="nobackground btn btn-link btn-block btn-lg text-danger text-left {% if p.author.is_suspended_permanently %}d-none{% endif %}"><i class="fas fa-user-minus mr-2"></i>Ban user</button>
{% endif %}
{% if v.id != p.author_id and v.admin_level >= PERMS['USER_AGENDAPOSTER'] %}
<button type="button" id="unchud2-{{p.fullname}}" class="{% if not p.author.agendaposter %}d-none{% endif %} nobackground btn btn-link btn-block btn-lg text-success text-left" data-nonce="{{g.nonce}}" data-onclick="unchud_or_unban(this,'/unchud_user/{{p.fullname}}')" data-bs-dismiss="modal"><i class="fas fa-face-sleeping mr-2"></i>Unchud user</button>
{% if v.id != p.author_id and v.admin_level >= PERMS['USER_CHUD'] %}
<button type="button" id="unchud2-{{p.fullname}}" class="{% if not p.author.chud %}d-none{% endif %} nobackground btn btn-link btn-block btn-lg text-success text-left" data-nonce="{{g.nonce}}" data-onclick="unchud_or_unban(this,'/unchud_user/{{p.fullname}}')" data-bs-dismiss="modal"><i class="fas fa-face-sleeping mr-2"></i>Unchud user</button>
<button type="button" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#chudModal" data-nonce="{{g.nonce}}" data-onclick="punishModal(this, 'chud', '/post/{{p.id}}', '{{p.author_name}}', '{{p.fullname}}')" class="nobackground btn btn-link btn-block btn-lg text-danger text-left {% if p.author.agendaposter == 1 %}d-none{% endif %}"><i class="fas fa-face-sleeping mr-2"></i>Chud user</button>
<button type="button" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#chudModal" data-nonce="{{g.nonce}}" data-onclick="punishModal(this, 'chud', '/post/{{p.id}}', '{{p.author_name}}', '{{p.fullname}}')" class="nobackground btn btn-link btn-block btn-lg text-danger text-left {% if p.author.chud == 1 %}d-none{% endif %}"><i class="fas fa-face-sleeping mr-2"></i>Chud user</button>
{% endif %}
</ul>
</div>

View File

@ -96,7 +96,7 @@
{{ macros.post_meta(p) }}
</div>
<h5 class="card-title post-title text-left w-lg-95 pb-0 pb-md-1">
<a id="{{p.id}}-title" {% if v and v.newtab %}data-target="t" target="_blank"{% endif %} href="{{p.permalink}}" class="{% if p.sub %}sub{% endif %} stretched-link {% if p.author.agendaposter and p.sub != 'chudrama' %}text-uppercase{% endif %}">
<a id="{{p.id}}-title" {% if v and v.newtab %}data-target="t" target="_blank"{% endif %} href="{{p.permalink}}" class="{% if p.sub %}sub{% endif %} stretched-link {% if p.author.chud and p.sub != 'chudrama' %}text-uppercase{% endif %}">
{% if p.flair %}<span class="patron font-weight-bolder mr-1" style="background-color:var(--primary); font-size:12px; line-height:2;">{{p.flair | safe}}</span>{% endif %}
{{p.realtitle(v) | safe}}
</a></h5>
@ -208,7 +208,7 @@
{% if not v_forbid_deleted %}
{% if p.realbody(v, listing=True) %}
<div class="d-none card rounded border {% if p.author.agendaposter and p.sub != 'chudrama' %}text-uppercase agendaposter-img agendaposter-{{p.id_last_num}}{% endif %} {% if p.author.rainbow %}rainbow-text{% endif %} {%if p.author.queen%}queen{%endif%} post-preview" id="post-text-{{p.id}}">
<div class="d-none card rounded border {% if p.author.chud and p.sub != 'chudrama' %}text-uppercase chud-img chud-{{p.id_last_num}}{% endif %} {% if p.author.rainbow %}rainbow-text{% endif %} {%if p.author.queen%}queen{%endif%} post-preview" id="post-text-{{p.id}}">
{{p.realbody(v, listing=True) | safe}}
</div>
{% endif %}

View File

@ -15,7 +15,7 @@
{% endif %}
{% if request.path != '/sidebar' %}
{% if v and (v.is_banned or v.agendaposter) %}
{% if v and (v.is_banned or v.chud) %}
<a href="{{SITE_FULL_IMAGES}}/i/{{SITE_NAME}}/sidebar2.webp">
<img class="mb-4 sidebar-img" alt="sidebar image" data-nonce="{{g.nonce}}" data-onclick="expandImage()" loading="lazy" src="{{SITE_FULL_IMAGES}}/i/{{SITE_NAME}}/sidebar2.webp">
</a>

View File

@ -64,10 +64,10 @@
<input autocomplete="off" id="user-shadowban-submit-{{deviceType}}" type="submit" class="btn btn-danger" value="Shadowban user" disabled>
</form>
{% endif %}
{% if v.admin_level >= PERMS['USER_AGENDAPOSTER'] %}
<button type="button" id="unagendaposter-{{deviceType}}" class="mt-1 {% if not u.agendaposter %}d-none{% endif %} btn btn-success" data-nonce="{{g.nonce}}" data-onclick="unchud_or_unban(this,'/unchud_user/{{u.id}}')">Unchud</button>
{% if v.admin_level >= PERMS['USER_CHUD'] %}
<button type="button" id="unchud-{{deviceType}}" class="mt-1 {% if not u.chud %}d-none{% endif %} btn btn-success" data-nonce="{{g.nonce}}" data-onclick="unchud_or_unban(this,'/unchud_user/{{u.id}}')">Unchud</button>
<form class="my-3 {% if u.agendaposter == 1 %}d-none{% endif %}" action="/chud_user/{{u.id}}" method="post" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHRSwitch(this)">
<form class="my-3 {% if u.chud == 1 %}d-none{% endif %}" action="/chud_user/{{u.id}}" method="post" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHRSwitch(this)">
<input hidden name="formkey" value="{{v|formkey}}">
<input autocomplete="off" type="number" step="any" name="days" max="{{max_days()}}" class="form-control" placeholder="Days (0 or blank = permanent)">
<input type="submit" class="btn btn-danger" value="Chud">

View File

@ -100,8 +100,8 @@
{% macro stylesheets(include_user_css) %}
<link rel="stylesheet" href="{{'css/main.css' | asset}}">
{% if v %}
{% if v.agendaposter %}
<link rel="stylesheet" href="{{('css/agendaposter.css') | asset}}">
{% if v.chud %}
<link rel="stylesheet" href="{{('css/chud.css') | asset}}">
{% endif %}
{% if include_user_css and not IS_FISTMAS() %}
{% if v.theme == 'classic_dark' %}
@ -144,7 +144,7 @@
{% macro stylesheets_lower() %}
{% if not (request.path.startswith('/@') and u) %}
{% if SITE_NAME == 'rDrama' and v and v.agendaposter %}
{% if SITE_NAME == 'rDrama' and v and v.chud %}
{% set background = '/i/backgrounds/anime/1.webp?x=2' %}
{% elif v and v.background %}
{% set background = v.background %}

View File

@ -0,0 +1,4 @@
alter table users rename column agendaposter to chud;
alter table users rename column agendaposter_phrase to chud_phrase;
alter index users_agendaposter_idx rename to users_chud_idx;
update award_relationships set kind='chud' where kind='agendaposter';