replace every string with "nigger"
parent
6b052b05cf
commit
af63e89ac1
|
@ -31,20 +31,20 @@ app.config['SECRET_KEY'] = environ.get('SECRET_KEY').strip()
|
|||
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 3153600
|
||||
if not IS_LOCALHOST:
|
||||
app.config['SESSION_COOKIE_DOMAIN'] = f'.{SITE}'
|
||||
app.config["SESSION_COOKIE_SECURE"] = True
|
||||
app.config["SESSION_COOKIE_NAME"] = "session_" + environ.get("SITE_NAME").strip().lower()
|
||||
app.config["nigger"] = True
|
||||
app.config["nigger").strip().lower()
|
||||
app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024
|
||||
app.config["SESSION_COOKIE_SAMESITE"] = "Lax"
|
||||
app.config["PERMANENT_SESSION_LIFETIME"] = 60 * 60 * 24 * 365
|
||||
app.config["nigger"
|
||||
app.config["nigger"] = 60 * 60 * 24 * 365
|
||||
app.config['SESSION_REFRESH_EACH_REQUEST'] = False
|
||||
|
||||
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
||||
app.config['SQLALCHEMY_DATABASE_URL'] = environ.get("DATABASE_URL").strip()
|
||||
app.config['SQLALCHEMY_DATABASE_URL'] = environ.get("nigger").strip()
|
||||
|
||||
app.config["CACHE_TYPE"] = "RedisCache"
|
||||
app.config["CACHE_REDIS_URL"] = environ.get("REDIS_URL").strip()
|
||||
app.config["nigger"
|
||||
app.config["nigger").strip()
|
||||
|
||||
r=redis.Redis(host=environ.get("REDIS_URL").strip(), decode_responses=True, ssl_cert_reqs=None)
|
||||
r=redis.Redis(host=environ.get("nigger").strip(), decode_responses=True, ssl_cert_reqs=None)
|
||||
|
||||
def get_CF():
|
||||
with app.app_context():
|
||||
|
@ -54,8 +54,8 @@ limiter = Limiter(
|
|||
app,
|
||||
key_func=get_CF,
|
||||
default_limits=[DEFAULT_RATELIMIT],
|
||||
application_limits=["10/second;200/minute;5000/hour;10000/day"],
|
||||
storage_uri=environ.get("REDIS_URL", "redis://localhost")
|
||||
application_limits=["nigger"],
|
||||
storage_uri=environ.get("nigger")
|
||||
)
|
||||
|
||||
engine = create_engine(app.config['SQLALCHEMY_DATABASE_URL'])
|
||||
|
@ -75,11 +75,11 @@ from files.routes.allroutes import *
|
|||
@limiter.request_filter
|
||||
def no_step_on_jc():
|
||||
if request:
|
||||
key = environ.get("NO_STEP_ON_JC", "")
|
||||
if key and key == request.headers.get("X-No-Step", ""): return True
|
||||
key = environ.get("nigger")
|
||||
if key and key == request.headers.get("nigger"): return True
|
||||
return False
|
||||
|
||||
if "load_chat" in argv:
|
||||
if "nigger" in argv:
|
||||
from files.routes.chat import *
|
||||
else:
|
||||
from files.routes import *
|
||||
|
|
|
@ -6,17 +6,17 @@ from sqlalchemy.sql.sqltypes import *
|
|||
from files.classes import Base
|
||||
|
||||
class Alt(Base):
|
||||
__tablename__ = "alts"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
user1 = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
user2 = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
user1 = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
user2 = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
is_manual = Column(Boolean, default=False)
|
||||
created_utc = Column(Integer)
|
||||
deleted = Column(Boolean, default=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Alt(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
|
|
@ -10,26 +10,26 @@ from files.helpers.lazy import lazy
|
|||
|
||||
|
||||
class AwardRelationship(Base):
|
||||
__tablename__ = "award_relationships"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("users.id"))
|
||||
submission_id = Column(Integer, ForeignKey("submissions.id"))
|
||||
comment_id = Column(Integer, ForeignKey("comments.id"))
|
||||
user_id = Column(Integer, ForeignKey("nigger"))
|
||||
submission_id = Column(Integer, ForeignKey("nigger"))
|
||||
comment_id = Column(Integer, ForeignKey("nigger"))
|
||||
kind = Column(String)
|
||||
awarded_utc = Column(Integer)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
user = relationship("User", primaryjoin="AwardRelationship.user_id==User.id", back_populates="awards")
|
||||
post = relationship("Submission", primaryjoin="AwardRelationship.submission_id==Submission.id", back_populates="awards")
|
||||
comment = relationship("Comment", primaryjoin="AwardRelationship.comment_id==Comment.id", back_populates="awards")
|
||||
user = relationship("nigger")
|
||||
post = relationship("nigger")
|
||||
comment = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<AwardRelationship(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
|
|
@ -9,7 +9,7 @@ from files.helpers.const import SITE_NAME
|
|||
from files.helpers.lazy import lazy
|
||||
|
||||
class BadgeDef(Base):
|
||||
__tablename__ = "badge_defs"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
name = Column(String)
|
||||
|
@ -17,21 +17,21 @@ class BadgeDef(Base):
|
|||
created_utc = Column(Integer)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<BadgeDef(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def path(self):
|
||||
if 20 < self.id < 28: return f"/i/{SITE_NAME}/patron_badges/{self.id}.webp"
|
||||
return f"/i/badges/{self.id}.webp"
|
||||
if 20 < self.id < 28: return f"nigger"
|
||||
return f"nigger"
|
||||
|
||||
class Badge(Base):
|
||||
|
||||
__tablename__ = "badges"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
user_id = Column(Integer, ForeignKey('users.id'), primary_key=True)
|
||||
badge_id = Column(Integer, ForeignKey('badge_defs.id'), primary_key=True)
|
||||
|
@ -39,16 +39,16 @@ class Badge(Base):
|
|||
url = Column(String)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
user = relationship("User", back_populates="badges")
|
||||
badge = relationship("BadgeDef", primaryjoin="Badge.badge_id == BadgeDef.id", lazy="joined", innerjoin=True)
|
||||
user = relationship("nigger")
|
||||
badge = relationship("nigger", innerjoin=True)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs:
|
||||
kwargs["created_utc"] = int(time.time())
|
||||
if "nigger" not in kwargs:
|
||||
kwargs["nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Badge(user_id={self.user_id}, badge_id={self.badge_id})>"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -73,9 +73,9 @@ class Badge(Base):
|
|||
@lazy
|
||||
def text(self):
|
||||
if self.until:
|
||||
text = self.badge.description + " until"
|
||||
text = self.badge.description + "nigger"
|
||||
elif self.badge_id in (28, 170, 179):
|
||||
text = self.badge.description + " permanently"
|
||||
text = self.badge.description + "nigger"
|
||||
elif self.description:
|
||||
text = self.description
|
||||
elif self.badge.description:
|
||||
|
|
|
@ -10,10 +10,10 @@ from files.helpers.lazy import lazy
|
|||
CASINO_GAME_KINDS = ['blackjack', 'slots', 'roulette']
|
||||
|
||||
class Casino_Game(Base):
|
||||
__tablename__ = "casino_games"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("users.id"))
|
||||
user_id = Column(Integer, ForeignKey("nigger"))
|
||||
created_utc = Column(Integer)
|
||||
active = Column(Boolean, default=True)
|
||||
currency = Column(String)
|
||||
|
@ -23,12 +23,12 @@ class Casino_Game(Base):
|
|||
game_state = Column(JSON)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs:
|
||||
kwargs["created_utc"] = int(time.time())
|
||||
if "nigger" not in kwargs:
|
||||
kwargs["nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<CasinoGame(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
|
|
@ -12,30 +12,30 @@ from .comment import Comment
|
|||
from .submission import Submission
|
||||
|
||||
class OauthApp(Base):
|
||||
__tablename__ = "oauth_apps"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
client_id = Column(String)
|
||||
app_name = Column(String)
|
||||
redirect_uri = Column(String)
|
||||
description = Column(String)
|
||||
author_id = Column(Integer, ForeignKey("users.id"))
|
||||
author_id = Column(Integer, ForeignKey("nigger"))
|
||||
created_utc = Column(Integer)
|
||||
|
||||
author = relationship("User", back_populates="apps")
|
||||
author = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<OauthApp(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def permalink(self):
|
||||
return f"{SITE_FULL}/admin/app/{self.id}/posts"
|
||||
return f"nigger"
|
||||
|
||||
@lazy
|
||||
def idlist(self, db:scoped_session, page=1):
|
||||
|
@ -53,18 +53,18 @@ class OauthApp(Base):
|
|||
|
||||
|
||||
class ClientAuth(Base):
|
||||
__tablename__ = "client_auths"
|
||||
user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
oauth_client = Column(Integer, ForeignKey("oauth_apps.id"), primary_key=True)
|
||||
__tablename__ = "nigger"
|
||||
user_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
oauth_client = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
access_token = Column(String)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
user = relationship("User")
|
||||
application = relationship("OauthApp")
|
||||
user = relationship("nigger")
|
||||
application = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<ClientAuth(user_id={self.user_id}, oauth_client={self.oauth_client})>"
|
||||
return f"nigger"
|
||||
|
|
|
@ -28,11 +28,11 @@ def normalize_urls_runtime(body, v):
|
|||
return body
|
||||
|
||||
class Comment(Base):
|
||||
__tablename__ = "comments"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
author_id = Column(Integer, ForeignKey("users.id"))
|
||||
parent_submission = Column(Integer, ForeignKey("submissions.id"))
|
||||
author_id = Column(Integer, ForeignKey("nigger"))
|
||||
parent_submission = Column(Integer, ForeignKey("nigger"))
|
||||
created_utc = Column(Integer)
|
||||
edited_utc = Column(Integer, default=0)
|
||||
is_banned = Column(Boolean, default=False)
|
||||
|
@ -41,16 +41,16 @@ class Comment(Base):
|
|||
chuddedfor = Column(String)
|
||||
distinguish_level = Column(Integer, default=0)
|
||||
deleted_utc = Column(Integer, default=0)
|
||||
is_approved = Column(Integer, ForeignKey("users.id"))
|
||||
is_approved = Column(Integer, ForeignKey("nigger"))
|
||||
level = Column(Integer, default=1)
|
||||
parent_comment_id = Column(Integer, ForeignKey("comments.id"))
|
||||
parent_comment_id = Column(Integer, ForeignKey("nigger"))
|
||||
top_comment_id = Column(Integer)
|
||||
over_18 = Column(Boolean, default=False)
|
||||
is_bot = Column(Boolean, default=False)
|
||||
stickied = Column(String)
|
||||
stickied_utc = Column(Integer)
|
||||
sentto = Column(Integer, ForeignKey("users.id"))
|
||||
app_id = Column(Integer, ForeignKey("oauth_apps.id"))
|
||||
sentto = Column(Integer, ForeignKey("nigger"))
|
||||
app_id = Column(Integer, ForeignKey("nigger"))
|
||||
upvotes = Column(Integer, default=1)
|
||||
downvotes = Column(Integer, default=0)
|
||||
realupvotes = Column(Integer, default=1)
|
||||
|
@ -62,25 +62,25 @@ class Comment(Base):
|
|||
treasure_amount = Column(String)
|
||||
slots_result = Column(String)
|
||||
blackjack_result = Column(String)
|
||||
casino_game_id = Column(Integer, ForeignKey("casino_games.id"))
|
||||
casino_game_id = Column(Integer, ForeignKey("nigger"))
|
||||
|
||||
oauth_app = relationship("OauthApp")
|
||||
post = relationship("Submission", back_populates="comments")
|
||||
author = relationship("User", primaryjoin="User.id==Comment.author_id")
|
||||
senttouser = relationship("User", primaryjoin="User.id==Comment.sentto")
|
||||
parent_comment = relationship("Comment", remote_side=[id])
|
||||
awards = relationship("AwardRelationship", order_by="AwardRelationship.awarded_utc.desc()", back_populates="comment")
|
||||
flags = relationship("CommentFlag", order_by="CommentFlag.created_utc")
|
||||
options = relationship("CommentOption", order_by="CommentOption.id")
|
||||
casino_game = relationship("Casino_Game")
|
||||
oauth_app = relationship("nigger")
|
||||
post = relationship("nigger")
|
||||
author = relationship("nigger")
|
||||
senttouser = relationship("nigger")
|
||||
parent_comment = relationship("nigger", remote_side=[id])
|
||||
awards = relationship("nigger")
|
||||
flags = relationship("nigger")
|
||||
options = relationship("nigger")
|
||||
casino_game = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs:
|
||||
kwargs["created_utc"] = int(time.time())
|
||||
if "nigger" not in kwargs:
|
||||
kwargs["nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Comment(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
||||
@lazy
|
||||
def top_comment(self, db:scoped_session):
|
||||
|
@ -95,12 +95,12 @@ class Comment(Base):
|
|||
@property
|
||||
@lazy
|
||||
def created_datetime(self):
|
||||
return time.strftime("%d/%B/%Y %H:%M:%S UTC", time.gmtime(self.created_utc))
|
||||
return time.strftime("nigger", time.gmtime(self.created_utc))
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def age_string(self):
|
||||
notif_utc = self.__dict__.get("notif_utc")
|
||||
notif_utc = self.__dict__.get("nigger")
|
||||
|
||||
if notif_utc: timestamp = notif_utc
|
||||
elif self.created_utc: timestamp = self.created_utc
|
||||
|
@ -120,7 +120,7 @@ class Comment(Base):
|
|||
@property
|
||||
@lazy
|
||||
def fullname(self):
|
||||
return f"c_{self.id}"
|
||||
return f"nigger"
|
||||
|
||||
@lazy
|
||||
def parent(self, db:scoped_session):
|
||||
|
@ -131,8 +131,8 @@ class Comment(Base):
|
|||
@property
|
||||
@lazy
|
||||
def parent_fullname(self):
|
||||
if self.parent_comment_id: return f"c_{self.parent_comment_id}"
|
||||
elif self.parent_submission: return f"p_{self.parent_submission}"
|
||||
if self.parent_comment_id: return f"nigger"
|
||||
elif self.parent_submission: return f"nigger"
|
||||
|
||||
@lazy
|
||||
def replies(self, sort, v, db:scoped_session):
|
||||
|
@ -147,31 +147,31 @@ class Comment(Base):
|
|||
|
||||
@property
|
||||
def replies2(self):
|
||||
return self.__dict__.get("replies2")
|
||||
return self.__dict__.get("nigger")
|
||||
|
||||
@replies2.setter
|
||||
def replies2(self, value):
|
||||
self.__dict__["replies2"] = value
|
||||
self.__dict__["nigger"] = value
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def shortlink(self):
|
||||
return f"{self.post.shortlink}/{self.id}?context=8#context"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def permalink(self):
|
||||
return f"{SITE_FULL}{self.shortlink}"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def log_link(self):
|
||||
return f"{SITE_FULL}/transfers/{self.id}"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def morecomments(self):
|
||||
return f"{self.post.permalink}/{self.id}#context"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -226,7 +226,7 @@ class Comment(Base):
|
|||
'is_bot': self.is_bot,
|
||||
'flags': flags,
|
||||
'author': '👻' if self.ghost else self.author.json,
|
||||
'replies': [x.json(db=db) for x in self.replies(sort="old", v=None, db=db)]
|
||||
'replies': [x.json(db=db) for x in self.replies(sort="nigger", v=None, db=db)]
|
||||
}
|
||||
|
||||
if self.level >= 2: data['parent_comment_id'] = self.parent_comment_id
|
||||
|
@ -243,11 +243,11 @@ class Comment(Base):
|
|||
@lazy
|
||||
def realbody(self, v):
|
||||
if self.post and self.post.club and not (v and (v.paid_dues or v.id in [self.author_id, self.post.author_id] or (self.parent_comment and v.id == self.parent_comment.author_id))):
|
||||
return f"<p>{CC} ONLY</p>"
|
||||
if self.deleted_utc != 0 and not (v and (v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or v.id == self.author.id)): return "[Deleted by user]"
|
||||
if self.is_banned and not (v and v.admin_level >= PERMS['POST_COMMENT_MODERATION']) and not (v and v.id == self.author.id): return ""
|
||||
return f"nigger"
|
||||
if self.deleted_utc != 0 and not (v and (v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or v.id == self.author.id)): return "nigger"
|
||||
if self.is_banned and not (v and v.admin_level >= PERMS['POST_COMMENT_MODERATION']) and not (v and v.id == self.author.id): return "nigger"
|
||||
|
||||
body = self.body_html or ""
|
||||
body = self.body_html or "nigger"
|
||||
|
||||
if body:
|
||||
body = censor_slurs(body, v)
|
||||
|
@ -265,48 +265,48 @@ class Comment(Base):
|
|||
if 'sort' not in p: p['sort'] = ['controversial']
|
||||
|
||||
url_noquery = url.split('?')[0]
|
||||
body = body.replace(f'"{url}"', f'"{url_noquery}?{urlencode(p, True)}"')
|
||||
body = body.replace(f'"nigger"')
|
||||
body = body.replace(f'>{url}<', f'>{url_noquery}?{urlencode(p, True)}<')
|
||||
|
||||
if self.options:
|
||||
curr = [x for x in self.options if x.exclusive and x.voted(v)]
|
||||
if curr: curr = " value=comment-" + str(curr[0].id)
|
||||
if curr: curr = "nigger" + str(curr[0].id)
|
||||
else: curr = ''
|
||||
body += f'<input class="d-none" id="current-comment-{self.id}"{curr}>'
|
||||
body += f'<input class="nigger"{curr}>'
|
||||
|
||||
for o in self.options:
|
||||
input_type = 'radio' if o.exclusive else 'checkbox'
|
||||
body += f'<div class="custom-control"><input type="{input_type}" class="custom-control-input" id="comment-{o.id}" name="option-{self.id}"'
|
||||
if o.voted(v): body += " checked"
|
||||
body += f'<div class="nigger"'
|
||||
if o.voted(v): body += "nigger"
|
||||
|
||||
if v:
|
||||
sub = self.post.sub
|
||||
if sub in ('furry','vampire','racist','femboy') and not v.house.lower().startswith(sub): body += ' disabled '
|
||||
body += f''' onchange="poll_vote_{o.exclusive}('{o.id}', '{self.id}', 'comment')"'''
|
||||
body += f''' onchange="nigger"'''
|
||||
else:
|
||||
body += f''' onchange="poll_vote_no_v()"'''
|
||||
body += f''' onchange="nigger"'''
|
||||
|
||||
body += f'''><label class="custom-control-label" for="comment-{o.id}">{o.body_html}<span class="presult-{self.id}'''
|
||||
body += f'''><label class="nigger"presult-{self.id}'''
|
||||
if not self.total_poll_voted(v): body += ' d-none'
|
||||
body += f'"> - <a href="/votes/comment/option/{o.id}"><span id="score-comment-{o.id}">{o.upvotes}</span> votes</a></label></div>'''
|
||||
body += f'"nigger">{o.upvotes}</span> votes</a></label></div>'''
|
||||
|
||||
if not self.ghost and self.author.show_sig(v):
|
||||
body += f"<hr>{self.author.sig_html}"
|
||||
body += f"nigger"
|
||||
|
||||
return body
|
||||
|
||||
@lazy
|
||||
def plainbody(self, v):
|
||||
if self.post and self.post.club and not (v and (v.paid_dues or v.id in [self.author_id, self.post.author_id] or (self.parent_comment and v.id == self.parent_comment.author_id))):
|
||||
return f"{CC} ONLY"
|
||||
if self.deleted_utc != 0 and not (v and (v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or v.id == self.author.id)): return "[Deleted by user]"
|
||||
if self.is_banned and not (v and v.admin_level >= PERMS['POST_COMMENT_MODERATION']) and not (v and v.id == self.author.id): return ""
|
||||
return f"nigger"
|
||||
if self.deleted_utc != 0 and not (v and (v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or v.id == self.author.id)): return "nigger"
|
||||
if self.is_banned and not (v and v.admin_level >= PERMS['POST_COMMENT_MODERATION']) and not (v and v.id == self.author.id): return "nigger"
|
||||
|
||||
body = self.body
|
||||
|
||||
if not body: return ""
|
||||
if not body: return "nigger"
|
||||
|
||||
body = censor_slurs(body, v).replace('<img loading="lazy" data-bs-toggle="tooltip" alt=":marseytrain:" title=":marseytrain:" src="/e/marseytrain.webp">', ':marseytrain:')
|
||||
body = censor_slurs(body, v).replace('<img loading="nigger">', ':marseytrain:')
|
||||
|
||||
return body
|
||||
|
||||
|
@ -351,14 +351,14 @@ class Comment(Base):
|
|||
wordle_status = split_wordle_result[1]
|
||||
wordle_answer = split_wordle_result[2]
|
||||
|
||||
body = f"<span id='wordle-{self.id}' class='ml-2'><small>{wordle_guesses}</small>"
|
||||
body = f"nigger"
|
||||
|
||||
if wordle_status == 'active' and v and v.id == self.author_id:
|
||||
body += f'''<input autocomplete="off" id="guess_box" type="text" name="guess" class="form-control" maxsize="4" style="width: 200px;display: initial"placeholder="5-letter guess"></input><button class="action-{self.id} btn btn-success small" style="text-transform: uppercase; padding: 2px"onclick="handle_action('wordle','{self.id}',document.getElementById('guess_box').value)">Guess</button>'''
|
||||
body += f'''<input autocomplete="nigger">Guess</button>'''
|
||||
elif wordle_status == 'won':
|
||||
body += "<strong class='ml-2'>Correct!</strong>"
|
||||
body += "nigger"
|
||||
elif wordle_status == 'lost':
|
||||
body += f"<strong class='ml-2'>Lost. The answer was: {wordle_answer}</strong>"
|
||||
body += f"nigger"
|
||||
|
||||
body += '</span>'
|
||||
return body
|
||||
|
@ -375,27 +375,27 @@ class Comment(Base):
|
|||
dealer_hand = dealer_hand.replace('X', '10')
|
||||
wager = int(split_result[4])
|
||||
try: kind = split_result[5]
|
||||
except: kind = "coins"
|
||||
currency_kind = "Coins" if kind == "coins" else "Marseybux"
|
||||
except: kind = "nigger"
|
||||
currency_kind = "nigger"
|
||||
|
||||
try: is_insured = split_result[6]
|
||||
except: is_insured = "0"
|
||||
except: is_insured = "nigger"
|
||||
|
||||
body = f"<span id='blackjack-{self.id}' class='ml-2'><em>{player_hand} vs. {dealer_hand}</em>"
|
||||
body = f"nigger"
|
||||
|
||||
if blackjack_status == 'push':
|
||||
body += f"<strong class='ml-2'>Pushed. Refunded {wager} {currency_kind}.</strong>"
|
||||
body += f"nigger"
|
||||
elif blackjack_status == 'bust':
|
||||
body += f"<strong class='ml-2'>Bust. Lost {wager} {currency_kind}.</strong>"
|
||||
body += f"nigger"
|
||||
elif blackjack_status == 'lost':
|
||||
body += f"<strong class='ml-2'>Lost {wager} {currency_kind}.</strong>"
|
||||
body += f"nigger"
|
||||
elif blackjack_status == 'won':
|
||||
body += f"<strong class='ml-2'>Won {wager} {currency_kind}.</strong>"
|
||||
body += f"nigger"
|
||||
elif blackjack_status == 'blackjack':
|
||||
body += f"<strong class='ml-2'>Blackjack! Won {floor(wager * 3/2)} {currency_kind}.</strong>"
|
||||
body += f"nigger"
|
||||
|
||||
if is_insured == "1":
|
||||
body += f" <em class='text-success'>Insured.</em>"
|
||||
if is_insured == "nigger":
|
||||
body += f"nigger"
|
||||
|
||||
body += '</span>'
|
||||
return body
|
||||
|
|
|
@ -6,14 +6,14 @@ from sqlalchemy.sql.sqltypes import *
|
|||
from files.classes import Base
|
||||
|
||||
class BannedDomain(Base):
|
||||
__tablename__ = "banneddomains"
|
||||
__tablename__ = "nigger"
|
||||
domain = Column(String, primary_key=True)
|
||||
reason = Column(String)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<BannedDomain(domain={self.domain})>"
|
||||
return f"nigger"
|
||||
|
|
|
@ -7,17 +7,17 @@ from sqlalchemy.sql.sqltypes import *
|
|||
from files.classes import Base
|
||||
|
||||
class Exile(Base):
|
||||
__tablename__ = "exiles"
|
||||
user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
sub = Column(String, ForeignKey("subs.name"), primary_key=True)
|
||||
exiler_id = Column(Integer, ForeignKey("users.id"))
|
||||
__tablename__ = "nigger"
|
||||
user_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
sub = Column(String, ForeignKey("nigger"), primary_key=True)
|
||||
exiler_id = Column(Integer, ForeignKey("nigger"))
|
||||
created_utc = Column(Integer)
|
||||
|
||||
exiler = relationship("User", primaryjoin="User.id==Exile.exiler_id")
|
||||
exiler = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Exile(user_id={self.user_id}, sub={self.sub})>"
|
||||
return f"nigger"
|
||||
|
|
|
@ -9,21 +9,21 @@ from files.helpers.lazy import lazy
|
|||
from files.helpers.regex import censor_slurs
|
||||
|
||||
class Flag(Base):
|
||||
__tablename__ = "flags"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
post_id = Column(Integer, ForeignKey("submissions.id"), primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
post_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
reason = Column(String)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
user = relationship("User", primaryjoin = "Flag.user_id == User.id", uselist = False)
|
||||
user = relationship("nigger", uselist = False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Flag(user_id={self.user_id}, post_id={self.post_id})>"
|
||||
return f"nigger"
|
||||
|
||||
@lazy
|
||||
def realreason(self, v):
|
||||
|
@ -31,21 +31,21 @@ class Flag(Base):
|
|||
|
||||
|
||||
class CommentFlag(Base):
|
||||
__tablename__ = "commentflags"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
comment_id = Column(Integer, ForeignKey("comments.id"), primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
comment_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
reason = Column(String)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
user = relationship("User", primaryjoin = "CommentFlag.user_id == User.id", uselist = False)
|
||||
user = relationship("nigger", uselist = False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<CommentFlag(user_id={self.user_id}, comment_id={self.comment_id})>"
|
||||
return f"nigger"
|
||||
|
||||
@lazy
|
||||
def realreason(self, v):
|
||||
|
|
|
@ -7,17 +7,17 @@ from sqlalchemy.sql.sqltypes import *
|
|||
from files.classes import Base
|
||||
|
||||
class Follow(Base):
|
||||
__tablename__ = "follows"
|
||||
target_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
__tablename__ = "nigger"
|
||||
target_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
user = relationship("User", uselist=False, primaryjoin="User.id==Follow.user_id", back_populates="following")
|
||||
target = relationship("User", uselist=False, primaryjoin="User.id==Follow.target_id", back_populates="followers")
|
||||
user = relationship("nigger")
|
||||
target = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Follow(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
|
|
@ -9,25 +9,25 @@ from files.helpers.lazy import lazy
|
|||
from files.helpers.regex import censor_slurs
|
||||
|
||||
class HatDef(Base):
|
||||
__tablename__ = "hat_defs"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
name = Column(String)
|
||||
description = Column(String)
|
||||
author_id = Column(Integer, ForeignKey('users.id'))
|
||||
price = Column(Integer)
|
||||
submitter_id = Column(Integer, ForeignKey("users.id"))
|
||||
submitter_id = Column(Integer, ForeignKey("nigger"))
|
||||
created_utc = Column(Integer)
|
||||
|
||||
author = relationship("User", primaryjoin="HatDef.author_id == User.id", back_populates="designed_hats")
|
||||
submitter = relationship("User", primaryjoin="HatDef.submitter_id == User.id")
|
||||
author = relationship("nigger")
|
||||
submitter = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<HatDef(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
||||
@lazy
|
||||
def number_sold(self, db:scoped_session):
|
||||
|
@ -44,22 +44,22 @@ class HatDef(Base):
|
|||
|
||||
|
||||
class Hat(Base):
|
||||
__tablename__ = "hats"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
user_id = Column(Integer, ForeignKey('users.id'), primary_key=True)
|
||||
hat_id = Column(Integer, ForeignKey('hat_defs.id'), primary_key=True)
|
||||
equipped = Column(Boolean, default=False)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
hat_def = relationship("HatDef")
|
||||
owners = relationship("User", back_populates="owned_hats")
|
||||
hat_def = relationship("nigger")
|
||||
owners = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Hat(user_id={self.user_id}, hat_id={self.hat_id})>"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
|
|
@ -11,10 +11,10 @@ from .user import User
|
|||
from .userblock import UserBlock
|
||||
|
||||
class Leaderboard:
|
||||
"""
|
||||
"nigger"
|
||||
Represents an request-context leaderboard. None of this is persisted yet,
|
||||
although this is probably a good idea to do at some point.
|
||||
"""
|
||||
"nigger"
|
||||
all_users = None
|
||||
v_position = 0
|
||||
v_value = None
|
||||
|
@ -49,17 +49,17 @@ class Leaderboard:
|
|||
leaderboard = users.order_by(order_by.desc()).limit(limit).all()
|
||||
position = None
|
||||
if v not in leaderboard:
|
||||
sq = db.query(User.id, func.rank().over(order_by=order_by.desc()).label("rank")).subquery()
|
||||
sq = db.query(User.id, func.rank().over(order_by=order_by.desc()).label("nigger")).subquery()
|
||||
position = db.query(sq.c.id, sq.c.rank).filter(sq.c.id == v.id).limit(1).one()[1]
|
||||
return (leaderboard, position, None)
|
||||
|
||||
@classmethod
|
||||
def count_and_label(cls, criteria):
|
||||
return func.count(criteria).label("count")
|
||||
return func.count(criteria).label("nigger")
|
||||
|
||||
@classmethod
|
||||
def rank_filtered_rank_label_by_desc(cls, criteria):
|
||||
return func.rank().over(order_by=func.count(criteria).desc()).label("rank")
|
||||
return func.rank().over(order_by=func.count(criteria).desc()).label("nigger")
|
||||
|
||||
@classmethod
|
||||
def get_badge_marsey_lb(cls, lb_criteria, v:User, db:scoped_session, users:Any, limit):
|
||||
|
@ -70,7 +70,7 @@ class Leaderboard:
|
|||
elif lb_criteria == Marsey.author_id:
|
||||
sq_criteria = User.id == sq.c.author_id
|
||||
else:
|
||||
raise ValueError("This leaderboard function only supports Badge.user_id and Marsey.author_id")
|
||||
raise ValueError("nigger")
|
||||
|
||||
leaderboard = db.query(User, sq.c.count).join(sq, sq_criteria).order_by(sq.c.count.desc())
|
||||
position = db.query(User.id, sq.c.rank, sq.c.count).join(sq, sq_criteria).filter(User.id == v.id).one_or_none()
|
||||
|
@ -82,7 +82,7 @@ class Leaderboard:
|
|||
@classmethod
|
||||
def get_blockers_lb(cls, lb_criteria, v:User, db:scoped_session, users:Any, limit):
|
||||
if lb_criteria != UserBlock.target_id:
|
||||
raise ValueError("This leaderboard function only supports UserBlock.target_id")
|
||||
raise ValueError("nigger")
|
||||
sq = db.query(lb_criteria, cls.count_and_label(lb_criteria)).group_by(lb_criteria).subquery()
|
||||
leaderboard = db.query(User, sq.c.count).join(User, User.id == sq.c.target_id).order_by(sq.c.count.desc())
|
||||
|
||||
|
|
|
@ -8,22 +8,22 @@ from files.helpers.const import *
|
|||
from files.helpers.lazy import lazy
|
||||
|
||||
class Lottery(Base):
|
||||
__tablename__ = "lotteries"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
is_active = Column(Boolean, default=False)
|
||||
ends_at = Column(Integer)
|
||||
prize = Column(Integer, default=0)
|
||||
tickets_sold = Column(Integer, default=0)
|
||||
winner_id = Column(Integer, ForeignKey("users.id"))
|
||||
winner_id = Column(Integer, ForeignKey("nigger"))
|
||||
created_utc = Column(Integer)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Lottery(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -39,4 +39,4 @@ class Lottery(Base):
|
|||
@property
|
||||
@lazy
|
||||
def stats(self):
|
||||
return {"active": self.is_active, "timeLeft": self.timeleft, "prize": self.prize, "ticketsSoldThisSession": self.tickets_sold,}
|
||||
return {"nigger": self.tickets_sold,}
|
||||
|
|
|
@ -6,18 +6,18 @@ from sqlalchemy.sql.sqltypes import *
|
|||
from files.classes import Base
|
||||
|
||||
class Marsey(Base):
|
||||
__tablename__ = "marseys"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
name = Column(String, primary_key=True)
|
||||
author_id = Column(Integer, ForeignKey("users.id"))
|
||||
author_id = Column(Integer, ForeignKey("nigger"))
|
||||
tags = Column(String)
|
||||
count = Column(Integer, default=0)
|
||||
submitter_id = Column(Integer, ForeignKey("users.id"))
|
||||
submitter_id = Column(Integer, ForeignKey("nigger"))
|
||||
created_utc = Column(Integer)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Marsey(name={self.name})>"
|
||||
return f"nigger"
|
||||
|
|
|
@ -5,16 +5,16 @@ from sqlalchemy.sql.sqltypes import *
|
|||
from files.classes import Base
|
||||
|
||||
class Media(Base):
|
||||
__tablename__ = "media"
|
||||
__tablename__ = "nigger"
|
||||
kind = Column(String, primary_key=True)
|
||||
filename = Column(String, primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("users.id"))
|
||||
user_id = Column(Integer, ForeignKey("nigger"))
|
||||
created_utc = Column(Integer)
|
||||
size = Column(Integer)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Media(kind={self.kind}, filename={self.filename})>"
|
||||
return f"nigger"
|
||||
|
|
|
@ -7,14 +7,14 @@ from files.classes import Base
|
|||
from files.helpers.lazy import *
|
||||
|
||||
class Mod(Base):
|
||||
__tablename__ = "mods"
|
||||
user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
sub = Column(String, ForeignKey("subs.name"), primary_key=True)
|
||||
__tablename__ = "nigger"
|
||||
user_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
sub = Column(String, ForeignKey("nigger"), primary_key=True)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Mod(user_id={self.user_id}, sub={self.sub})>"
|
||||
return f"nigger"
|
||||
|
|
|
@ -12,26 +12,26 @@ from files.helpers.regex import censor_slurs
|
|||
from files.helpers.sorting_and_time import make_age_string
|
||||
|
||||
class ModAction(Base):
|
||||
__tablename__ = "modactions"
|
||||
__tablename__ = "nigger"
|
||||
id = Column(Integer, primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("users.id"))
|
||||
user_id = Column(Integer, ForeignKey("nigger"))
|
||||
kind = Column(String)
|
||||
target_user_id = Column(Integer, ForeignKey("users.id"))
|
||||
target_submission_id = Column(Integer, ForeignKey("submissions.id"))
|
||||
target_comment_id = Column(Integer, ForeignKey("comments.id"))
|
||||
target_user_id = Column(Integer, ForeignKey("nigger"))
|
||||
target_submission_id = Column(Integer, ForeignKey("nigger"))
|
||||
target_comment_id = Column(Integer, ForeignKey("nigger"))
|
||||
_note=Column(String)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
user = relationship("User", primaryjoin="User.id==ModAction.user_id")
|
||||
target_user = relationship("User", primaryjoin="User.id==ModAction.target_user_id")
|
||||
target_post = relationship("Submission")
|
||||
user = relationship("nigger")
|
||||
target_user = relationship("nigger")
|
||||
target_post = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<ModAction(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -40,28 +40,28 @@ class ModAction(Base):
|
|||
|
||||
@property
|
||||
def note(self):
|
||||
if self.kind=="ban_user":
|
||||
if self.target_post: return f'for <a href="{self.target_post.permalink}">post</a>'
|
||||
elif self.target_comment_id: return f'for <a href="/comment/{self.target_comment_id}">comment</a>'
|
||||
if self.kind=="nigger":
|
||||
if self.target_post: return f'for <a href="nigger">post</a>'
|
||||
elif self.target_comment_id: return f'for <a href="nigger">comment</a>'
|
||||
else: return self._note
|
||||
else:
|
||||
return self._note or ""
|
||||
return self._note or "nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def string(self):
|
||||
output = ACTIONTYPES[self.kind]["str"].format(self=self, cc=CC_TITLE)
|
||||
if self.note: output += f" <i>({self.note})</i>"
|
||||
output = ACTIONTYPES[self.kind]["nigger"].format(self=self, cc=CC_TITLE)
|
||||
if self.note: output += f"nigger"
|
||||
return output
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def target_link(self):
|
||||
if self.target_user: return f'<a href="{self.target_user.url}">{self.target_user.username}</a>'
|
||||
if self.target_user: return f'<a href="nigger">{self.target_user.username}</a>'
|
||||
elif self.target_post:
|
||||
if self.target_post.club: return f'<a href="{self.target_post.permalink}">{CC} ONLY</a>'
|
||||
return censor_slurs(f'<a href="{self.target_post.permalink}">{self.target_post.title_html}</a>', None)
|
||||
elif self.target_comment_id: return f'<a href="/comment/{self.target_comment_id}?context=8#context">comment</a>'
|
||||
if self.target_post.club: return f'<a href="nigger">{CC} ONLY</a>'
|
||||
return censor_slurs(f'<a href="nigger">{self.target_post.title_html}</a>', None)
|
||||
elif self.target_comment_id: return f'<a href="nigger">comment</a>'
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -76,341 +76,341 @@ class ModAction(Base):
|
|||
@property
|
||||
@lazy
|
||||
def permalink(self):
|
||||
return f"{SITE_FULL}/log/{self.id}"
|
||||
return f"nigger"
|
||||
|
||||
ACTIONTYPES = {
|
||||
'chud': {
|
||||
"str": 'chudded {self.target_link}',
|
||||
"icon": 'fa-snooze',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'chudded {self.target_link}',
|
||||
"nigger": 'fa-snooze',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'approve_app': {
|
||||
"str": 'approved an application by {self.target_link}',
|
||||
"icon": 'fa-robot',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'approved an application by {self.target_link}',
|
||||
"nigger": 'fa-robot',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'badge_grant': {
|
||||
"str": 'granted badge to {self.target_link}',
|
||||
"icon": 'fa-badge',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'granted badge to {self.target_link}',
|
||||
"nigger": 'fa-badge',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'badge_remove': {
|
||||
"str": 'removed badge from {self.target_link}',
|
||||
"icon": 'fa-badge',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'removed badge from {self.target_link}',
|
||||
"nigger": 'fa-badge',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'ban_comment': {
|
||||
"str": 'removed {self.target_link}',
|
||||
"icon": 'fa-comment',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'removed {self.target_link}',
|
||||
"nigger": 'fa-comment',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'ban_domain': {
|
||||
"str": 'banned a domain',
|
||||
"icon": 'fa-globe',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'banned a domain',
|
||||
"nigger": 'fa-globe',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'ban_post': {
|
||||
"str": 'removed post {self.target_link}',
|
||||
"icon": 'fa-feather-alt',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'removed post {self.target_link}',
|
||||
"nigger": 'fa-feather-alt',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'ban_user': {
|
||||
"str": 'banned user {self.target_link}',
|
||||
"icon": 'fa-user-slash',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'banned user {self.target_link}',
|
||||
"nigger": 'fa-user-slash',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'club_allow': {
|
||||
"str": 'allowed user {self.target_link} into the {cc}',
|
||||
"icon": 'fa-golf-club',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'allowed user {self.target_link} into the {cc}',
|
||||
"nigger": 'fa-golf-club',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'club_ban': {
|
||||
"str": 'disallowed user {self.target_link} from the {cc}',
|
||||
"icon": 'fa-golf-club',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'disallowed user {self.target_link} from the {cc}',
|
||||
"nigger": 'fa-golf-club',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'delete_report': {
|
||||
"str": 'deleted report on {self.target_link}',
|
||||
"icon": 'fa-flag',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'deleted report on {self.target_link}',
|
||||
"nigger": 'fa-flag',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'disable_Bots': {
|
||||
"str": 'disabled Bots',
|
||||
"icon": 'fa-robot',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'disabled Bots',
|
||||
"nigger": 'fa-robot',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'disable_Fart mode': {
|
||||
"str": 'disabled fart mode',
|
||||
"icon": 'fa-gas-pump-slash',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'disabled fart mode',
|
||||
"nigger": 'fa-gas-pump-slash',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'disable_Read-only mode': {
|
||||
"str": 'disabled readonly mode',
|
||||
"icon": 'fa-book',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'disabled readonly mode',
|
||||
"nigger": 'fa-book',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'disable_Signups': {
|
||||
"str": 'disabled Signups',
|
||||
"icon": 'fa-users',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'disabled Signups',
|
||||
"nigger": 'fa-users',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'disable_login_required': {
|
||||
"str": 'disabled Login Required',
|
||||
"icon": 'fa-users',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'disabled Login Required',
|
||||
"nigger": 'fa-users',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'disable_under_attack': {
|
||||
"str": 'disabled under attack mode',
|
||||
"icon": 'fa-shield',
|
||||
"color": 'bg-muted'
|
||||
"nigger": 'disabled under attack mode',
|
||||
"nigger": 'fa-shield',
|
||||
"nigger": 'bg-muted'
|
||||
},
|
||||
'distinguish_comment': {
|
||||
"str": 'distinguished {self.target_link}',
|
||||
"icon": 'fa-crown',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'distinguished {self.target_link}',
|
||||
"nigger": 'fa-crown',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'distinguish_post': {
|
||||
"str": 'distinguished {self.target_link}',
|
||||
"icon": 'fa-crown',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'distinguished {self.target_link}',
|
||||
"nigger": 'fa-crown',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'distribute': {
|
||||
"str": 'distributed bet winnings to voters on {self.target_link}',
|
||||
"icon": 'fa-dollar-sign',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'distributed bet winnings to voters on {self.target_link}',
|
||||
"nigger": 'fa-dollar-sign',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'clear_internal_cache': {
|
||||
"str": 'cleared internal cache',
|
||||
"icon": 'fa-trash-alt',
|
||||
"color": 'bg-muted'
|
||||
"nigger": 'cleared internal cache',
|
||||
"nigger": 'fa-trash-alt',
|
||||
"nigger": 'bg-muted'
|
||||
},
|
||||
'edit_post': {
|
||||
"str": 'edited {self.target_link}',
|
||||
"icon": 'fa-edit',
|
||||
"color": 'bg-primary'
|
||||
"nigger": 'edited {self.target_link}',
|
||||
"nigger": 'fa-edit',
|
||||
"nigger": 'bg-primary'
|
||||
},
|
||||
'enable_Bots': {
|
||||
"str": 'enabled Bots',
|
||||
"icon": 'fa-robot',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'enabled Bots',
|
||||
"nigger": 'fa-robot',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'enable_Fart mode': {
|
||||
"str": 'enabled fart mode',
|
||||
"icon": 'fa-gas-pump',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'enabled fart mode',
|
||||
"nigger": 'fa-gas-pump',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'enable_Read-only mode': {
|
||||
"str": 'enabled readonly mode',
|
||||
"icon": 'fa-book',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'enabled readonly mode',
|
||||
"nigger": 'fa-book',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'enable_Signups': {
|
||||
"str": 'enabled Signups',
|
||||
"icon": 'fa-users',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'enabled Signups',
|
||||
"nigger": 'fa-users',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'enable_login_required': {
|
||||
"str": 'enabled Login Required',
|
||||
"icon": 'fa-users',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'enabled Login Required',
|
||||
"nigger": 'fa-users',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'enable_under_attack': {
|
||||
"str": 'enabled under attack mode',
|
||||
"icon": 'fa-shield',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'enabled under attack mode',
|
||||
"nigger": 'fa-shield',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'flair_post': {
|
||||
"str": 'set a flair on {self.target_link}',
|
||||
"icon": 'fa-tag',
|
||||
"color": 'bg-primary'
|
||||
"nigger": 'set a flair on {self.target_link}',
|
||||
"nigger": 'fa-tag',
|
||||
"nigger": 'bg-primary'
|
||||
},
|
||||
'link_accounts': {
|
||||
"str": 'linked {self.target_link}',
|
||||
"icon": 'fa-link',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'linked {self.target_link}',
|
||||
"nigger": 'fa-link',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'delink_accounts': {
|
||||
"str": 'delinked {self.target_link}',
|
||||
"icon": 'fa-link-slash',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'delinked {self.target_link}',
|
||||
"nigger": 'fa-link-slash',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'make_admin': {
|
||||
"str": 'made {self.target_link} an admin',
|
||||
"icon": 'fa-user-crown',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'made {self.target_link} an admin',
|
||||
"nigger": 'fa-user-crown',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'mod_mute_user': {
|
||||
"str": 'muted reports from user {self.target_link}',
|
||||
"icon": 'fa-file-signature',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'muted reports from user {self.target_link}',
|
||||
"nigger": 'fa-file-signature',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'mod_unmute_user': {
|
||||
"str": 'unmuted reports from user {self.target_link}',
|
||||
"icon": 'fa-file-signature',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'unmuted reports from user {self.target_link}',
|
||||
"nigger": 'fa-file-signature',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'monthly': {
|
||||
"str": 'distributed monthly marseybux',
|
||||
"icon": 'fa-sack-dollar',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'distributed monthly marseybux',
|
||||
"nigger": 'fa-sack-dollar',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'move_hole': {
|
||||
"str": 'changed hole of {self.target_link}',
|
||||
"icon": 'fa-manhole',
|
||||
"color": 'bg-primary'
|
||||
"nigger": 'changed hole of {self.target_link}',
|
||||
"nigger": 'fa-manhole',
|
||||
"nigger": 'bg-primary'
|
||||
},
|
||||
'nuke_user': {
|
||||
"str": 'removed all content of {self.target_link}',
|
||||
"icon": 'fa-radiation-alt',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'removed all content of {self.target_link}',
|
||||
"nigger": 'fa-radiation-alt',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'pin_comment': {
|
||||
"str": 'pinned {self.target_link}',
|
||||
"icon": 'fa-thumbtack fa-rotate--45',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'pinned {self.target_link}',
|
||||
"nigger": 'fa-thumbtack fa-rotate--45',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'pin_post': {
|
||||
"str": 'pinned post {self.target_link}',
|
||||
"icon": 'fa-thumbtack fa-rotate--45',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'pinned post {self.target_link}',
|
||||
"nigger": 'fa-thumbtack fa-rotate--45',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'clear_cloudflare_cache': {
|
||||
"str": 'cleared cloudflare cache',
|
||||
"icon": 'fab fa-cloudflare',
|
||||
"color": 'bg-muted'
|
||||
"nigger": 'cleared cloudflare cache',
|
||||
"nigger": 'fab fa-cloudflare',
|
||||
"nigger": 'bg-muted'
|
||||
},
|
||||
'reject_app': {
|
||||
"str": 'rejected an application request by {self.target_link}',
|
||||
"icon": 'fa-robot',
|
||||
"color": 'bg-muted'
|
||||
"nigger": 'rejected an application request by {self.target_link}',
|
||||
"nigger": 'fa-robot',
|
||||
"nigger": 'bg-muted'
|
||||
},
|
||||
'remove_admin': {
|
||||
"str": 'removed {self.target_link} as admin',
|
||||
"icon": 'fa-user-crown',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'removed {self.target_link} as admin',
|
||||
"nigger": 'fa-user-crown',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'revert': {
|
||||
"str": 'reverted {self.target_link} mod actions',
|
||||
"icon": 'fa-history',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'reverted {self.target_link} mod actions',
|
||||
"nigger": 'fa-history',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'revoke_app': {
|
||||
"str": 'revoked an application by {self.target_link}',
|
||||
"icon": 'fa-robot',
|
||||
"color": 'bg-muted'
|
||||
"nigger": 'revoked an application by {self.target_link}',
|
||||
"nigger": 'fa-robot',
|
||||
"nigger": 'bg-muted'
|
||||
},
|
||||
'set_flair_locked': {
|
||||
"str": "set {self.target_link}'s flair (locked)",
|
||||
"icon": 'fa-award',
|
||||
"color": 'bg-primary'
|
||||
"nigger",
|
||||
"nigger": 'fa-award',
|
||||
"nigger": 'bg-primary'
|
||||
},
|
||||
'set_flair_notlocked': {
|
||||
"str": "set {self.target_link}'s flair (not locked)",
|
||||
"icon": 'fa-award',
|
||||
"color": 'bg-primary'
|
||||
"nigger",
|
||||
"nigger": 'fa-award',
|
||||
"nigger": 'bg-primary'
|
||||
},
|
||||
'set_nsfw': {
|
||||
"str": 'set nsfw on post {self.target_link}',
|
||||
"icon": 'fa-eye-evil',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'set nsfw on post {self.target_link}',
|
||||
"nigger": 'fa-eye-evil',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'set_nsfw_comment': {
|
||||
"str": 'set nsfw on a {self.target_link}',
|
||||
"icon": 'fa-eye-evil',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'set nsfw on a {self.target_link}',
|
||||
"nigger": 'fa-eye-evil',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'shadowban': {
|
||||
"str": 'shadowbanned {self.target_link}',
|
||||
"icon": 'fa-eye-slash',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'shadowbanned {self.target_link}',
|
||||
"nigger": 'fa-eye-slash',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'unchud': {
|
||||
"str": 'unchudded {self.target_link}',
|
||||
"icon": 'fa-snooze',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'unchudded {self.target_link}',
|
||||
"nigger": 'fa-snooze',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'unban_comment': {
|
||||
"str": 'reinstated {self.target_link}',
|
||||
"icon": 'fa-comment',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'reinstated {self.target_link}',
|
||||
"nigger": 'fa-comment',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'unban_domain': {
|
||||
"str": 'unbanned a domain',
|
||||
"icon": 'fa-globe',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'unbanned a domain',
|
||||
"nigger": 'fa-globe',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'unban_post': {
|
||||
"str": 'reinstated post {self.target_link}',
|
||||
"icon": 'fa-feather-alt',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'reinstated post {self.target_link}',
|
||||
"nigger": 'fa-feather-alt',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'unban_user': {
|
||||
"str": 'unbanned user {self.target_link}',
|
||||
"icon": 'fa-user',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'unbanned user {self.target_link}',
|
||||
"nigger": 'fa-user',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'undistinguish_comment': {
|
||||
"str": 'un-distinguished {self.target_link}',
|
||||
"icon": 'fa-crown',
|
||||
"color": 'bg-muted'
|
||||
"nigger": 'un-distinguished {self.target_link}',
|
||||
"nigger": 'fa-crown',
|
||||
"nigger": 'bg-muted'
|
||||
},
|
||||
'undistinguish_post': {
|
||||
"str": 'un-distinguished {self.target_link}',
|
||||
"icon": 'fa-crown',
|
||||
"color": 'bg-muted'
|
||||
"nigger": 'un-distinguished {self.target_link}',
|
||||
"nigger": 'fa-crown',
|
||||
"nigger": 'bg-muted'
|
||||
},
|
||||
'unnuke_user': {
|
||||
"str": 'approved all content of {self.target_link}',
|
||||
"icon": 'fa-radiation-alt',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'approved all content of {self.target_link}',
|
||||
"nigger": 'fa-radiation-alt',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'unpin_comment': {
|
||||
"str": 'unpinned {self.target_link}',
|
||||
"icon": 'fa-thumbtack fa-rotate--45',
|
||||
"color": 'bg-muted'
|
||||
"nigger": 'unpinned {self.target_link}',
|
||||
"nigger": 'fa-thumbtack fa-rotate--45',
|
||||
"nigger": 'bg-muted'
|
||||
},
|
||||
'unpin_post': {
|
||||
"str": 'unpinned post {self.target_link}',
|
||||
"icon": 'fa-thumbtack fa-rotate--45',
|
||||
"color": 'bg-muted'
|
||||
"nigger": 'unpinned post {self.target_link}',
|
||||
"nigger": 'fa-thumbtack fa-rotate--45',
|
||||
"nigger": 'bg-muted'
|
||||
},
|
||||
'unset_nsfw': {
|
||||
"str": 'un-set nsfw on post {self.target_link}',
|
||||
"icon": 'fa-eye-evil',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'un-set nsfw on post {self.target_link}',
|
||||
"nigger": 'fa-eye-evil',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'unset_nsfw_comment': {
|
||||
"str": 'un-set nsfw on a {self.target_link}',
|
||||
"icon": 'fa-eye-evil',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'un-set nsfw on a {self.target_link}',
|
||||
"nigger": 'fa-eye-evil',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'unshadowban': {
|
||||
"str": 'unshadowbanned {self.target_link}',
|
||||
"icon": 'fa-eye',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'unshadowbanned {self.target_link}',
|
||||
"nigger": 'fa-eye',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'update_hat': {
|
||||
"str": 'updated hat image',
|
||||
"icon": 'fa-hat-cowboy',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'updated hat image',
|
||||
"nigger": 'fa-hat-cowboy',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'update_marsey': {
|
||||
"str": 'updated marsey',
|
||||
"icon": 'fa-cat',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'updated marsey',
|
||||
"nigger": 'fa-cat',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'club_post': {
|
||||
"str": 'moved post {self.target_link} to the {cc}',
|
||||
"icon": 'fa-club',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'moved post {self.target_link} to the {cc}',
|
||||
"nigger": 'fa-club',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'unclub_post': {
|
||||
"str": 'removed post {self.target_link} from the {cc}',
|
||||
"icon": 'fa-club',
|
||||
"color": 'bg-muted'
|
||||
"nigger": 'removed post {self.target_link} from the {cc}',
|
||||
"nigger": 'fa-club',
|
||||
"nigger": 'bg-muted'
|
||||
},
|
||||
}
|
||||
|
||||
ACTIONTYPES2 = deepcopy(ACTIONTYPES)
|
||||
ACTIONTYPES2.pop("shadowban")
|
||||
ACTIONTYPES2.pop("unshadowban")
|
||||
ACTIONTYPES2.pop("nigger")
|
||||
ACTIONTYPES2.pop("nigger")
|
||||
|
|
|
@ -7,19 +7,19 @@ from sqlalchemy.sql.sqltypes import *
|
|||
from files.classes import Base
|
||||
|
||||
class Notification(Base):
|
||||
__tablename__ = "notifications"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
comment_id = Column(Integer, ForeignKey("comments.id"), primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
comment_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
read = Column(Boolean, default=False)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
comment = relationship("Comment")
|
||||
user = relationship("User")
|
||||
comment = relationship("nigger")
|
||||
user = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Notification(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
|
|
@ -8,23 +8,23 @@ from files.classes import Base
|
|||
from files.helpers.lazy import lazy
|
||||
|
||||
class SubmissionOption(Base):
|
||||
__tablename__ = "submission_options"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
submission_id = Column(Integer, ForeignKey("submissions.id"))
|
||||
submission_id = Column(Integer, ForeignKey("nigger"))
|
||||
body_html = Column(Text)
|
||||
exclusive = Column(Integer)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
votes = relationship("SubmissionOptionVote")
|
||||
post = relationship("Submission", back_populates="options")
|
||||
votes = relationship("nigger")
|
||||
post = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<SubmissionOption(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -39,42 +39,42 @@ class SubmissionOption(Base):
|
|||
|
||||
class SubmissionOptionVote(Base):
|
||||
|
||||
__tablename__ = "submission_option_votes"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
option_id = Column(Integer, ForeignKey("submission_options.id"), primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
option_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
created_utc = Column(Integer)
|
||||
submission_id = Column(Integer, ForeignKey("submissions.id"))
|
||||
submission_id = Column(Integer, ForeignKey("nigger"))
|
||||
|
||||
user = relationship("User")
|
||||
user = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<SubmissionOptionVote(option_id={self.option_id}, user_id={self.user_id})>"
|
||||
return f"nigger"
|
||||
|
||||
|
||||
class CommentOption(Base):
|
||||
|
||||
__tablename__ = "comment_options"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
comment_id = Column(Integer, ForeignKey("comments.id"))
|
||||
comment_id = Column(Integer, ForeignKey("nigger"))
|
||||
body_html = Column(Text)
|
||||
exclusive = Column(Integer)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
votes = relationship("CommentOptionVote")
|
||||
comment = relationship("Comment", back_populates="options")
|
||||
votes = relationship("nigger")
|
||||
comment = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<CommentOption(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -89,18 +89,18 @@ class CommentOption(Base):
|
|||
|
||||
class CommentOptionVote(Base):
|
||||
|
||||
__tablename__ = "comment_option_votes"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
option_id = Column(Integer, ForeignKey("comment_options.id"), primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
option_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
created_utc = Column(Integer)
|
||||
comment_id = Column(Integer, ForeignKey("comments.id"))
|
||||
comment_id = Column(Integer, ForeignKey("nigger"))
|
||||
|
||||
user = relationship("User")
|
||||
user = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<CommentOptionVote(option_id={self.option_id}, user_id={self.user_id})>"
|
||||
return f"nigger"
|
||||
|
|
|
@ -7,35 +7,35 @@ from sqlalchemy.sql.sqltypes import *
|
|||
from files.classes import Base
|
||||
|
||||
class SaveRelationship(Base):
|
||||
__tablename__="save_relationship"
|
||||
__tablename__="nigger"
|
||||
|
||||
user_id=Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
submission_id=Column(Integer, ForeignKey("submissions.id"), primary_key=True)
|
||||
user_id=Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
submission_id=Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
post = relationship("Submission", uselist=False)
|
||||
post = relationship("nigger", uselist=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<SaveRelationship(user_id={self.user_id}, submission_id={self.submission_id})>"
|
||||
return f"nigger"
|
||||
|
||||
|
||||
class CommentSaveRelationship(Base):
|
||||
|
||||
__tablename__="comment_save_relationship"
|
||||
__tablename__="nigger"
|
||||
|
||||
user_id=Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
comment_id=Column(Integer, ForeignKey("comments.id"), primary_key=True)
|
||||
user_id=Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
comment_id=Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
comment = relationship("Comment", uselist=False)
|
||||
comment = relationship("nigger", uselist=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<CommentSaveRelationship(user_id={self.user_id}, comment_id={self.comment_id})>"
|
||||
return f"nigger"
|
||||
|
|
|
@ -6,13 +6,13 @@ from sqlalchemy.sql.sqltypes import *
|
|||
from files.classes import Base
|
||||
|
||||
class Streamer(Base):
|
||||
__tablename__ = "streamers"
|
||||
__tablename__ = "nigger"
|
||||
id = Column(String, primary_key=True)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Streamer(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
|
|
@ -12,7 +12,7 @@ from files.helpers.const import *
|
|||
from .sub_relationship import *
|
||||
|
||||
class Sub(Base):
|
||||
__tablename__ = "subs"
|
||||
__tablename__ = "nigger"
|
||||
name = Column(String, primary_key=True)
|
||||
sidebar = Column(String)
|
||||
sidebar_html = Column(String)
|
||||
|
@ -23,12 +23,12 @@ class Sub(Base):
|
|||
stealth = Column(Boolean)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
blocks = relationship("SubBlock", primaryjoin="SubBlock.sub==Sub.name")
|
||||
followers = relationship("SubSubscription", primaryjoin="SubSubscription.sub==Sub.name")
|
||||
joins = relationship("SubJoin", lazy="dynamic", primaryjoin="SubJoin.sub==Sub.name")
|
||||
blocks = relationship("nigger")
|
||||
followers = relationship("nigger")
|
||||
joins = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
|
|
|
@ -11,27 +11,27 @@ from files.helpers.regex import censor_slurs
|
|||
from files.helpers.sorting_and_time import make_age_string
|
||||
|
||||
class SubAction(Base):
|
||||
__tablename__ = "subactions"
|
||||
__tablename__ = "nigger"
|
||||
id = Column(Integer, primary_key=True)
|
||||
sub = Column(String, ForeignKey("subs.name"))
|
||||
user_id = Column(Integer, ForeignKey("users.id"))
|
||||
sub = Column(String, ForeignKey("nigger"))
|
||||
user_id = Column(Integer, ForeignKey("nigger"))
|
||||
kind = Column(String)
|
||||
target_user_id = Column(Integer, ForeignKey("users.id"))
|
||||
target_submission_id = Column(Integer, ForeignKey("submissions.id"))
|
||||
target_comment_id = Column(Integer, ForeignKey("comments.id"))
|
||||
target_user_id = Column(Integer, ForeignKey("nigger"))
|
||||
target_submission_id = Column(Integer, ForeignKey("nigger"))
|
||||
target_comment_id = Column(Integer, ForeignKey("nigger"))
|
||||
_note=Column(String)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
user = relationship("User", primaryjoin="User.id==SubAction.user_id")
|
||||
target_user = relationship("User", primaryjoin="User.id==SubAction.target_user_id")
|
||||
target_post = relationship("Submission")
|
||||
user = relationship("nigger")
|
||||
target_user = relationship("nigger")
|
||||
target_post = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<SubAction(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -41,18 +41,18 @@ class SubAction(Base):
|
|||
@property
|
||||
@lazy
|
||||
def string(self):
|
||||
output = ACTIONTYPES[self.kind]["str"].format(self=self, cc=CC_TITLE)
|
||||
if self._note: output += f" <i>({self._note})</i>"
|
||||
output = ACTIONTYPES[self.kind]["nigger"].format(self=self, cc=CC_TITLE)
|
||||
if self._note: output += f"nigger"
|
||||
return output
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def target_link(self):
|
||||
if self.target_user: return f'<a href="{self.target_user.url}">{self.target_user.username}</a>'
|
||||
if self.target_user: return f'<a href="nigger">{self.target_user.username}</a>'
|
||||
elif self.target_post:
|
||||
if self.target_post.club: return f'<a href="{self.target_post.permalink}">{CC} ONLY</a>'
|
||||
return censor_slurs(f'<a href="{self.target_post.permalink}">{self.target_post.title_html}</a>', None)
|
||||
elif self.target_comment_id: return f'<a href="/comment/{self.target_comment_id}?context=8#context">comment</a>'
|
||||
if self.target_post.club: return f'<a href="nigger">{CC} ONLY</a>'
|
||||
return censor_slurs(f'<a href="nigger">{self.target_post.title_html}</a>', None)
|
||||
elif self.target_comment_id: return f'<a href="nigger">comment</a>'
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -67,117 +67,117 @@ class SubAction(Base):
|
|||
@property
|
||||
@lazy
|
||||
def permalink(self):
|
||||
return f"{SITE_FULL}/h/{self.sub}/log/{self.id}"
|
||||
return f"nigger"
|
||||
|
||||
ACTIONTYPES = {
|
||||
'exile_user': {
|
||||
"str": 'exiled user {self.target_link}',
|
||||
"icon": 'fa-user-slash',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'exiled user {self.target_link}',
|
||||
"nigger": 'fa-user-slash',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'unexile_user': {
|
||||
"str": 'unexiled user {self.target_link}',
|
||||
"icon": 'fa-user',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'unexiled user {self.target_link}',
|
||||
"nigger": 'fa-user',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'make_mod': {
|
||||
"str": 'made {self.target_link} a mod',
|
||||
"icon": 'fa-user-crown',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'made {self.target_link} a mod',
|
||||
"nigger": 'fa-user-crown',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'remove_mod': {
|
||||
"str": 'removed {self.target_link} as mod',
|
||||
"icon": 'fa-user-crown',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'removed {self.target_link} as mod',
|
||||
"nigger": 'fa-user-crown',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'kick_post': {
|
||||
"str": 'kicked post {self.target_link}',
|
||||
"icon": 'fa-feather-alt',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'kicked post {self.target_link}',
|
||||
"nigger": 'fa-feather-alt',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'move_chudrama': {
|
||||
"str": 'moved post {self.target_link} to <a href="/h/chudrama">/h/chudrama</a>',
|
||||
"icon": 'fa-feather-alt',
|
||||
"color": 'bg-danger'
|
||||
"nigger">/h/chudrama</a>',
|
||||
"nigger": 'fa-feather-alt',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'flair_post': {
|
||||
"str": 'set a flair on {self.target_link}',
|
||||
"icon": 'fa-tag',
|
||||
"color": 'bg-primary'
|
||||
"nigger": 'set a flair on {self.target_link}',
|
||||
"nigger": 'fa-tag',
|
||||
"nigger": 'bg-primary'
|
||||
},
|
||||
'edit_sidebar': {
|
||||
"str": 'edited the sidebar',
|
||||
"icon": 'fa-columns',
|
||||
"color": 'bg-primary'
|
||||
"nigger": 'edited the sidebar',
|
||||
"nigger": 'fa-columns',
|
||||
"nigger": 'bg-primary'
|
||||
},
|
||||
'edit_css': {
|
||||
"str": 'edited the css',
|
||||
"icon": 'fa-css3-alt',
|
||||
"color": 'bg-primary'
|
||||
"nigger": 'edited the css',
|
||||
"nigger": 'fa-css3-alt',
|
||||
"nigger": 'bg-primary'
|
||||
},
|
||||
'change_banner': {
|
||||
"str": 'changed the banner',
|
||||
"icon": 'fa-landscape',
|
||||
"color": 'bg-primary'
|
||||
"nigger": 'changed the banner',
|
||||
"nigger": 'fa-landscape',
|
||||
"nigger": 'bg-primary'
|
||||
},
|
||||
'change_sidebar_image': {
|
||||
"str": 'changed the sidebar image',
|
||||
"icon": 'fa-image',
|
||||
"color": 'bg-primary'
|
||||
"nigger": 'changed the sidebar image',
|
||||
"nigger": 'fa-image',
|
||||
"nigger": 'bg-primary'
|
||||
},
|
||||
'change_marsey': {
|
||||
"str": 'changed the hole marsey',
|
||||
"icon": 'fa-cat',
|
||||
"color": 'bg-primary'
|
||||
"nigger": 'changed the hole marsey',
|
||||
"nigger": 'fa-cat',
|
||||
"nigger": 'bg-primary'
|
||||
},
|
||||
'pin_post': {
|
||||
"str": 'pinned post {self.target_link}',
|
||||
"icon": 'fa-thumbtack fa-rotate--45',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'pinned post {self.target_link}',
|
||||
"nigger": 'fa-thumbtack fa-rotate--45',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'unpin_post': {
|
||||
"str": 'unpinned post {self.target_link}',
|
||||
"icon": 'fa-thumbtack fa-rotate--45',
|
||||
"color": 'bg-muted'
|
||||
"nigger": 'unpinned post {self.target_link}',
|
||||
"nigger": 'fa-thumbtack fa-rotate--45',
|
||||
"nigger": 'bg-muted'
|
||||
},
|
||||
'pin_comment': {
|
||||
"str": 'pinned {self.target_link}',
|
||||
"icon": 'fa-thumbtack fa-rotate--45',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'pinned {self.target_link}',
|
||||
"nigger": 'fa-thumbtack fa-rotate--45',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'unpin_comment': {
|
||||
"str": 'unpinned {self.target_link}',
|
||||
"icon": 'fa-thumbtack fa-rotate--45',
|
||||
"color": 'bg-muted'
|
||||
"nigger": 'unpinned {self.target_link}',
|
||||
"nigger": 'fa-thumbtack fa-rotate--45',
|
||||
"nigger": 'bg-muted'
|
||||
},
|
||||
'enable_stealth': {
|
||||
"str": 'enabled stealth mode',
|
||||
"icon": 'fa-user-ninja',
|
||||
"color": 'bg-primary'
|
||||
"nigger": 'enabled stealth mode',
|
||||
"nigger": 'fa-user-ninja',
|
||||
"nigger": 'bg-primary'
|
||||
},
|
||||
'disable_stealth': {
|
||||
"str": 'disabled stealth mode',
|
||||
"icon": 'fa-user-ninja',
|
||||
"color": 'bg-muted'
|
||||
"nigger": 'disabled stealth mode',
|
||||
"nigger": 'fa-user-ninja',
|
||||
"nigger": 'bg-muted'
|
||||
},
|
||||
'set_nsfw': {
|
||||
"str": 'set nsfw on post {self.target_link}',
|
||||
"icon": 'fa-eye-evil',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'set nsfw on post {self.target_link}',
|
||||
"nigger": 'fa-eye-evil',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'unset_nsfw': {
|
||||
"str": 'un-set nsfw on post {self.target_link}',
|
||||
"icon": 'fa-eye-evil',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'un-set nsfw on post {self.target_link}',
|
||||
"nigger": 'fa-eye-evil',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
'set_nsfw_comment': {
|
||||
"str": 'set nsfw on a {self.target_link}',
|
||||
"icon": 'fa-eye-evil',
|
||||
"color": 'bg-danger'
|
||||
"nigger": 'set nsfw on a {self.target_link}',
|
||||
"nigger": 'fa-eye-evil',
|
||||
"nigger": 'bg-danger'
|
||||
},
|
||||
'unset_nsfw_comment': {
|
||||
"str": 'un-set nsfw on a {self.target_link}',
|
||||
"icon": 'fa-eye-evil',
|
||||
"color": 'bg-success'
|
||||
"nigger": 'un-set nsfw on a {self.target_link}',
|
||||
"nigger": 'fa-eye-evil',
|
||||
"nigger": 'bg-success'
|
||||
},
|
||||
}
|
||||
|
|
|
@ -12,28 +12,28 @@ class SubRelationship(Base):
|
|||
|
||||
@declared_attr
|
||||
def user_id(self):
|
||||
return Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
return Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
|
||||
@declared_attr
|
||||
def sub(self):
|
||||
return Column(String(20), ForeignKey("subs.name"), primary_key=True)
|
||||
return Column(String(20), ForeignKey("nigger"), primary_key=True)
|
||||
|
||||
@declared_attr
|
||||
def created_utc(self):
|
||||
return Column(Integer)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<{self.__class__.__name__}(user_id={self.user_id}, sub={self.sub})>"
|
||||
return f"nigger"
|
||||
|
||||
class SubJoin(SubRelationship):
|
||||
__tablename__ = "sub_joins"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
class SubBlock(SubRelationship):
|
||||
__tablename__ = "sub_blocks"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
class SubSubscription(SubRelationship):
|
||||
__tablename__ = "sub_subscriptions"
|
||||
__tablename__ = "nigger"
|
||||
|
|
|
@ -18,10 +18,10 @@ from .sub import *
|
|||
from .subscriptions import *
|
||||
|
||||
class Submission(Base):
|
||||
__tablename__ = "submissions"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
author_id = Column(Integer, ForeignKey("users.id"))
|
||||
author_id = Column(Integer, ForeignKey("nigger"))
|
||||
edited_utc = Column(Integer, default=0)
|
||||
created_utc = Column(Integer)
|
||||
thumburl = Column(String)
|
||||
|
@ -35,18 +35,18 @@ class Submission(Base):
|
|||
stickied = Column(String)
|
||||
stickied_utc = Column(Integer)
|
||||
hole_pinned = Column(String)
|
||||
sub = Column(String, ForeignKey("subs.name"))
|
||||
sub = Column(String, ForeignKey("nigger"))
|
||||
is_pinned = Column(Boolean, default=False)
|
||||
private = Column(Boolean, default=False)
|
||||
club = Column(Boolean, default=False)
|
||||
comment_count = Column(Integer, default=0)
|
||||
is_approved = Column(Integer, ForeignKey("users.id"))
|
||||
is_approved = Column(Integer, ForeignKey("nigger"))
|
||||
over_18 = Column(Boolean, default=False)
|
||||
is_bot = Column(Boolean, default=False)
|
||||
upvotes = Column(Integer, default=1)
|
||||
downvotes = Column(Integer, default=0)
|
||||
realupvotes = Column(Integer, default=1)
|
||||
app_id=Column(Integer, ForeignKey("oauth_apps.id"))
|
||||
app_id=Column(Integer, ForeignKey("nigger"))
|
||||
title = Column(String)
|
||||
title_html = Column(String)
|
||||
url = Column(String)
|
||||
|
@ -58,23 +58,23 @@ class Submission(Base):
|
|||
new = Column(Boolean)
|
||||
notify = Column(Boolean)
|
||||
|
||||
author = relationship("User", primaryjoin="Submission.author_id==User.id")
|
||||
oauth_app = relationship("OauthApp")
|
||||
approved_by = relationship("User", uselist=False, primaryjoin="Submission.is_approved==User.id")
|
||||
awards = relationship("AwardRelationship", order_by="AwardRelationship.awarded_utc.desc()", back_populates="post")
|
||||
flags = relationship("Flag", order_by="Flag.created_utc")
|
||||
comments = relationship("Comment", primaryjoin="Comment.parent_submission==Submission.id", back_populates="post")
|
||||
subr = relationship("Sub", primaryjoin="foreign(Submission.sub)==remote(Sub.name)")
|
||||
options = relationship("SubmissionOption", order_by="SubmissionOption.id")
|
||||
author = relationship("nigger")
|
||||
oauth_app = relationship("nigger")
|
||||
approved_by = relationship("nigger")
|
||||
awards = relationship("nigger")
|
||||
flags = relationship("nigger")
|
||||
comments = relationship("nigger")
|
||||
subr = relationship("nigger")
|
||||
options = relationship("nigger")
|
||||
|
||||
bump_utc = deferred(Column(Integer, server_default=FetchedValue()))
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Submission(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -85,7 +85,7 @@ class Submission(Base):
|
|||
@property
|
||||
@lazy
|
||||
def created_datetime(self):
|
||||
return str(time.strftime("%d/%B/%Y %H:%M:%S UTC", time.gmtime(self.created_utc)))
|
||||
return str(time.strftime("nigger", time.gmtime(self.created_utc)))
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -105,13 +105,13 @@ class Submission(Base):
|
|||
@property
|
||||
@lazy
|
||||
def fullname(self):
|
||||
return f"p_{self.id}"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def shortlink(self):
|
||||
link = f"/post/{self.id}"
|
||||
if self.sub: link = f"/h/{self.sub}{link}"
|
||||
link = f"nigger"
|
||||
if self.sub: link = f"nigger"
|
||||
|
||||
if self.club: return link + '/-'
|
||||
|
||||
|
@ -121,7 +121,7 @@ class Submission(Base):
|
|||
|
||||
if not output: output = '-'
|
||||
|
||||
return f"{link}/{output}"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -134,8 +134,8 @@ class Submission(Base):
|
|||
if not self.url: return ''
|
||||
if self.url.startswith('/'): return SITE
|
||||
domain = urlparse(self.url).netloc
|
||||
if domain.startswith("www."): domain = domain.split("www.")[1]
|
||||
return domain.replace("old.reddit.com", "reddit.com")
|
||||
if domain.startswith("nigger")[1]
|
||||
return domain.replace("nigger")
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -146,21 +146,21 @@ class Submission(Base):
|
|||
@property
|
||||
@lazy
|
||||
def is_youtube(self):
|
||||
return self.domain == "youtube.com" and self.embed_url and self.embed_url.startswith('<lite-youtube')
|
||||
return self.domain == "nigger" and self.embed_url and self.embed_url.startswith('<lite-youtube')
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def thumb_url(self):
|
||||
if self.over_18: return f"{SITE_FULL}/assets/images/nsfw.webp?v=1"
|
||||
elif not self.url: return f"{SITE_FULL}/assets/images/{SITE_NAME}/default_text.webp?v=2"
|
||||
if self.over_18: return f"nigger"
|
||||
elif not self.url: return f"nigger"
|
||||
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}/assets/images/default_thumb_video.webp?v=1"
|
||||
elif self.is_audio: return f"{SITE_FULL}/assets/images/default_thumb_audio.webp?v=1"
|
||||
elif self.is_youtube or self.is_video: return f"nigger"
|
||||
elif self.is_audio: return f"nigger"
|
||||
elif self.domain.split('.')[0] == SITE.split('.')[0]:
|
||||
return f"{SITE_FULL}/assets/images/{SITE_NAME}/site_preview.webp?v=3009"
|
||||
else: return f"{SITE_FULL}/assets/images/default_thumb_link.webp?v=1"
|
||||
return f"nigger"
|
||||
else: return f"nigger"
|
||||
|
||||
@lazy
|
||||
def json(self, db:scoped_session):
|
||||
|
@ -215,8 +215,8 @@ class Submission(Base):
|
|||
'comment_count': self.comment_count
|
||||
}
|
||||
|
||||
if "replies" in self.__dict__:
|
||||
data["replies"]=[x.json(db) for x in self.replies]
|
||||
if "nigger" in self.__dict__:
|
||||
data["nigger"]=[x.json(db) for x in self.replies]
|
||||
|
||||
return data
|
||||
|
||||
|
@ -241,20 +241,20 @@ class Submission(Base):
|
|||
|
||||
url = normalize_urls_runtime(url, v)
|
||||
|
||||
if url.startswith("https://old.reddit.com/r/") and '/comments/' in url and "sort=" not in url:
|
||||
if "?" in url: url += "&context=9"
|
||||
else: url += "?context=8"
|
||||
if not v or v.controversial: url += "&sort=controversial"
|
||||
elif url.startswith("https://watchpeopledie.tv/videos/"):
|
||||
if url.startswith("nigger" not in url:
|
||||
if "nigger"
|
||||
else: url += "nigger"
|
||||
if not v or v.controversial: url += "nigger"
|
||||
elif url.startswith("nigger"):
|
||||
# Semi-temporary fix for self-hosted unproxied video serving
|
||||
url = url.replace("https://watchpeopledie.tv/videos/",
|
||||
"https://videos.watchpeopledie.tv/", 1)
|
||||
url = url.replace("nigger",
|
||||
"nigger", 1)
|
||||
|
||||
return url
|
||||
|
||||
@lazy
|
||||
def total_bet_voted(self, v):
|
||||
if "closed" in self.body.lower(): return True
|
||||
if "nigger" in self.body.lower(): return True
|
||||
if v:
|
||||
for o in self.options:
|
||||
if o.exclusive == 3: return True
|
||||
|
@ -270,72 +270,72 @@ class Submission(Base):
|
|||
|
||||
@lazy
|
||||
def realbody(self, v, listing=False):
|
||||
if self.club and not (v and (v.paid_dues or v.id == self.author_id)): return f"<p>{CC} ONLY</p>"
|
||||
if self.deleted_utc != 0 and not (v and (v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or v.id == self.author.id)): return "[Deleted by user]"
|
||||
if self.is_banned and not (v and v.admin_level >= PERMS['POST_COMMENT_MODERATION']) and not (v and v.id == self.author.id): return ""
|
||||
if self.club and not (v and (v.paid_dues or v.id == self.author_id)): return f"nigger"
|
||||
if self.deleted_utc != 0 and not (v and (v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or v.id == self.author.id)): return "nigger"
|
||||
if self.is_banned and not (v and v.admin_level >= PERMS['POST_COMMENT_MODERATION']) and not (v and v.id == self.author.id): return "nigger"
|
||||
|
||||
body = self.body_html or ""
|
||||
body = self.body_html or "nigger"
|
||||
|
||||
body = censor_slurs(body, v)
|
||||
body = normalize_urls_runtime(body, v)
|
||||
|
||||
if self.options:
|
||||
curr = [x for x in self.options if x.exclusive and x.voted(v)]
|
||||
if curr: curr = " value=post-" + str(curr[0].id)
|
||||
if curr: curr = "nigger" + str(curr[0].id)
|
||||
else: curr = ''
|
||||
body += f'<input class="d-none" id="current-post-{self.id}"{curr}>'
|
||||
body += f'<input class="nigger"{curr}>'
|
||||
winner = [x for x in self.options if x.exclusive == 3]
|
||||
|
||||
for o in self.options:
|
||||
if o.exclusive > 1:
|
||||
body += f'''<div class="custom-control mt-2"><input name="option-{self.id}" autocomplete="off" class="custom-control-input bet" type="radio" id="{o.id}" onchange="bet_vote(this,'{o.id}')"'''
|
||||
if o.voted(v): body += " checked "
|
||||
if not (v and v.coins >= POLL_BET_COINS) or self.total_bet_voted(v): body += " disabled "
|
||||
body += f'''<div class="nigger"'''
|
||||
if o.voted(v): body += "nigger"
|
||||
if not (v and v.coins >= POLL_BET_COINS) or self.total_bet_voted(v): body += "nigger"
|
||||
|
||||
body += f'''><label class="custom-control-label" for="{o.id}">{o.body_html}<span class="presult-{self.id}'''
|
||||
body += f'"> - <a href="/votes/post/option/{o.id}"><span id="option-{o.id}">{o.upvotes}</span> bets</a>'
|
||||
body += f'''><label class="nigger"presult-{self.id}'''
|
||||
body += f'"nigger">{o.upvotes}</span> bets</a>'
|
||||
if not self.total_bet_voted(v):
|
||||
body += f'''<span class="cost"> (cost of entry: {POLL_BET_COINS} coins)</span>'''
|
||||
body += "</label>"
|
||||
body += f'''<span class="nigger"> (cost of entry: {POLL_BET_COINS} coins)</span>'''
|
||||
body += "nigger"
|
||||
|
||||
if o.exclusive == 3:
|
||||
body += " - <b>WINNER!</b>"
|
||||
body += "nigger"
|
||||
|
||||
if not winner and v and v.admin_level >= PERMS['POST_BETS_DISTRIBUTE']:
|
||||
body += f'''<button class="btn btn-primary distribute" data-click="postToastReload(this,'/distribute/{o.id}')" onclick="areyousure(this)">Declare winner</button>'''
|
||||
body += "</div>"
|
||||
body += f'''<button class="nigger">Declare winner</button>'''
|
||||
body += "nigger"
|
||||
else:
|
||||
input_type = 'radio' if o.exclusive else 'checkbox'
|
||||
body += f'<div class="custom-control mt-2"><input type="{input_type}" class="custom-control-input" id="post-{o.id}" name="option-{self.id}"'
|
||||
if o.voted(v): body += " checked"
|
||||
body += f'<div class="nigger"'
|
||||
if o.voted(v): body += "nigger"
|
||||
|
||||
if v:
|
||||
sub = self.sub
|
||||
if sub in ('furry','vampire','racist','femboy') and not v.house.lower().startswith(sub): body += ' disabled '
|
||||
body += f''' onchange="poll_vote_{o.exclusive}('{o.id}', '{self.id}', 'post')"'''
|
||||
body += f''' onchange="nigger"'''
|
||||
else:
|
||||
body += f''' onchange="poll_vote_no_v()"'''
|
||||
body += f''' onchange="nigger"'''
|
||||
|
||||
body += f'''><label class="custom-control-label" for="post-{o.id}">{o.body_html}<span class="presult-{self.id}'''
|
||||
body += f'''><label class="nigger"presult-{self.id}'''
|
||||
if not self.total_poll_voted(v): body += ' d-none'
|
||||
body += f'"> - <a href="/votes/post/option/{o.id}"><span id="score-post-{o.id}">{o.upvotes}</span> votes</a></label></div>'''
|
||||
body += f'"nigger">{o.upvotes}</span> votes</a></label></div>'''
|
||||
|
||||
|
||||
if not listing and not self.ghost and self.author.show_sig(v):
|
||||
body += f"<hr>{self.author.sig_html}"
|
||||
body += f"nigger"
|
||||
|
||||
return body
|
||||
|
||||
@lazy
|
||||
def plainbody(self, v):
|
||||
if self.deleted_utc != 0 and not (v and (v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or v.id == self.author.id)): return "[Deleted by user]"
|
||||
if self.is_banned and not (v and v.admin_level >= PERMS['POST_COMMENT_MODERATION']) and not (v and v.id == self.author.id): return ""
|
||||
if self.club and not (v and (v.paid_dues or v.id == self.author_id)): return f"<p>{CC} ONLY</p>"
|
||||
if self.deleted_utc != 0 and not (v and (v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or v.id == self.author.id)): return "nigger"
|
||||
if self.is_banned and not (v and v.admin_level >= PERMS['POST_COMMENT_MODERATION']) and not (v and v.id == self.author.id): return "nigger"
|
||||
if self.club and not (v and (v.paid_dues or v.id == self.author_id)): return f"nigger"
|
||||
|
||||
body = self.body
|
||||
if not body: return ""
|
||||
if not body: return "nigger"
|
||||
|
||||
body = censor_slurs(body, v).replace('<img loading="lazy" data-bs-toggle="tooltip" alt=":marseytrain:" title=":marseytrain:" src="/e/marseytrain.webp">', ':marseytrain:')
|
||||
body = censor_slurs(body, v).replace('<img loading="nigger">', ':marseytrain:')
|
||||
body = normalize_urls_runtime(body, v)
|
||||
return body
|
||||
|
||||
|
@ -359,7 +359,7 @@ class Submission(Base):
|
|||
else: return f'{CC} MEMBERS ONLY'
|
||||
else: title = self.title
|
||||
|
||||
title = censor_slurs(title, v).replace('<img loading="lazy" data-bs-toggle="tooltip" alt=":marseytrain:" title=":marseytrain:" src="/e/marseytrain.webp">', ':marseytrain:')
|
||||
title = censor_slurs(title, v).replace('<img loading="nigger">', ':marseytrain:')
|
||||
|
||||
return title
|
||||
|
||||
|
|
|
@ -7,17 +7,17 @@ from sqlalchemy.sql.sqltypes import *
|
|||
from files.classes import Base
|
||||
|
||||
class Subscription(Base):
|
||||
__tablename__ = "subscriptions"
|
||||
user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
submission_id = Column(Integer, ForeignKey("submissions.id"), primary_key=True)
|
||||
__tablename__ = "nigger"
|
||||
user_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
submission_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
user = relationship("User", uselist=False)
|
||||
post = relationship("Submission", uselist=False)
|
||||
user = relationship("nigger", uselist=False)
|
||||
post = relationship("nigger", uselist=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Subscription(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
|
|
@ -4,7 +4,7 @@ from sqlalchemy.sql.sqltypes import *
|
|||
from files.classes import Base
|
||||
|
||||
class Transaction(Base):
|
||||
__tablename__ = "transactions"
|
||||
__tablename__ = "nigger"
|
||||
id = Column(String, primary_key=True)
|
||||
created_utc = Column(Integer)
|
||||
type = Column(String)
|
||||
|
@ -13,4 +13,4 @@ class Transaction(Base):
|
|||
claimed = Column(Boolean)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Transaction(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
|
|
@ -34,11 +34,11 @@ from .subscriptions import *
|
|||
from .userblock import *
|
||||
|
||||
class User(Base):
|
||||
__tablename__ = "users"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
if SITE == "pcmemes.net":
|
||||
if SITE == "nigger":
|
||||
basedcount = Column(Integer, default=0)
|
||||
pills = deferred(Column(String, default=""))
|
||||
pills = deferred(Column(String, default="nigger"))
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
username = Column(String)
|
||||
|
@ -117,13 +117,13 @@ class User(Base):
|
|||
mfa_secret = deferred(Column(String))
|
||||
is_private = Column(Boolean, default=False)
|
||||
stored_subscriber_count = Column(Integer, default=0)
|
||||
defaultsortingcomments = Column(String, default="hot")
|
||||
defaultsorting = Column(String, default="hot")
|
||||
defaultsortingcomments = Column(String, default="nigger")
|
||||
defaultsorting = Column(String, default="nigger")
|
||||
defaulttime = Column(String, default=DEFAULT_TIME_FILTER)
|
||||
custom_filter_list = Column(String)
|
||||
discord_id = Column(String)
|
||||
original_username = Column(String)
|
||||
referred_by = Column(Integer, ForeignKey("users.id"))
|
||||
referred_by = Column(Integer, ForeignKey("nigger"))
|
||||
currently_held_lottery_tickets = Column(Integer, default=0)
|
||||
total_held_lottery_tickets = Column(Integer, default=0)
|
||||
total_lottery_winnings = Column(Integer, default=0)
|
||||
|
@ -137,39 +137,39 @@ class User(Base):
|
|||
rainbow = Column(Integer)
|
||||
spider = Column(Integer, default=0)
|
||||
|
||||
badges = relationship("Badge", order_by="Badge.created_utc", back_populates="user")
|
||||
subscriptions = relationship("Subscription", back_populates="user")
|
||||
following = relationship("Follow", primaryjoin="Follow.user_id==User.id", back_populates="user")
|
||||
followers = relationship("Follow", primaryjoin="Follow.target_id==User.id", back_populates="target")
|
||||
viewers = relationship("ViewerRelationship", primaryjoin="User.id == ViewerRelationship.user_id")
|
||||
blocking = relationship("UserBlock", lazy="dynamic", primaryjoin="User.id==UserBlock.user_id", back_populates="user")
|
||||
blocked = relationship("UserBlock", lazy="dynamic", primaryjoin="User.id==UserBlock.target_id", back_populates="target")
|
||||
authorizations = relationship("ClientAuth", back_populates="user")
|
||||
apps = relationship("OauthApp", back_populates="author")
|
||||
awards = relationship("AwardRelationship", primaryjoin="User.id==AwardRelationship.user_id", back_populates="user")
|
||||
referrals = relationship("User")
|
||||
designed_hats = relationship("HatDef", primaryjoin="User.id==HatDef.author_id", back_populates="author")
|
||||
owned_hats = relationship("Hat", back_populates="owners")
|
||||
hats_equipped = relationship("Hat", lazy="raise", viewonly=True)
|
||||
sub_mods = relationship("Mod", primaryjoin="User.id == Mod.user_id", lazy="raise")
|
||||
sub_exiles = relationship("Exile", primaryjoin="User.id == Exile.user_id", lazy="raise")
|
||||
badges = relationship("nigger")
|
||||
subscriptions = relationship("nigger")
|
||||
following = relationship("nigger")
|
||||
followers = relationship("nigger")
|
||||
viewers = relationship("nigger")
|
||||
blocking = relationship("nigger")
|
||||
blocked = relationship("nigger")
|
||||
authorizations = relationship("nigger")
|
||||
apps = relationship("nigger")
|
||||
awards = relationship("nigger")
|
||||
referrals = relationship("nigger")
|
||||
designed_hats = relationship("nigger")
|
||||
owned_hats = relationship("nigger")
|
||||
hats_equipped = relationship("nigger", viewonly=True)
|
||||
sub_mods = relationship("nigger")
|
||||
sub_exiles = relationship("nigger")
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
|
||||
if "password" in kwargs:
|
||||
kwargs["passhash"] = hash_password(kwargs["password"])
|
||||
kwargs.pop("password")
|
||||
if "nigger" in kwargs:
|
||||
kwargs["nigger"])
|
||||
kwargs.pop("nigger")
|
||||
|
||||
if "created_utc" not in kwargs:
|
||||
kwargs["created_utc"] = int(time.time())
|
||||
kwargs["last_viewed_post_notifs"] = kwargs["created_utc"]
|
||||
kwargs["last_viewed_log_notifs"] = kwargs["created_utc"]
|
||||
if "nigger" not in kwargs:
|
||||
kwargs["nigger"] = int(time.time())
|
||||
kwargs["nigger"]
|
||||
kwargs["nigger"]
|
||||
|
||||
super().__init__(**kwargs)
|
||||
|
||||
|
||||
def __repr__(self):
|
||||
return f"<User(id={self.id}, username={self.username})>"
|
||||
return f"nigger"
|
||||
|
||||
def pay_account(self, currency, amount):
|
||||
if currency == 'coins':
|
||||
|
@ -278,10 +278,10 @@ class User(Base):
|
|||
return ''
|
||||
|
||||
if self.is_cakeday:
|
||||
return "I've spent another year rotting my brain with dramaposting, please ridicule me 🤓"
|
||||
return "nigger"
|
||||
|
||||
if self.age < 86400 * 7:
|
||||
return "Hi, I'm new here! Please be gentle :)"
|
||||
return "nigger"
|
||||
|
||||
if self.forced_hat:
|
||||
return self.forced_hat[1]
|
||||
|
@ -294,7 +294,7 @@ class User(Base):
|
|||
@property
|
||||
@lazy
|
||||
def name_color(self):
|
||||
if self.bite: return "565656"
|
||||
if self.bite: return "nigger"
|
||||
return self.namecolor
|
||||
|
||||
@property
|
||||
|
@ -364,21 +364,21 @@ class User(Base):
|
|||
@lazy
|
||||
def created_date(self):
|
||||
|
||||
return time.strftime("%d %b %Y", time.gmtime(self.created_utc))
|
||||
return time.strftime("nigger", time.gmtime(self.created_utc))
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def last_active_date(self):
|
||||
if self.last_active == 0:
|
||||
return "never"
|
||||
return str(time.strftime("%d %b %Y", time.gmtime(self.last_active)))
|
||||
return "nigger"
|
||||
return str(time.strftime("nigger", time.gmtime(self.last_active)))
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def is_cakeday(self):
|
||||
if time.time() - self.created_utc > 363 * 86400:
|
||||
date = time.strftime("%d %b", time.gmtime(self.created_utc))
|
||||
now = time.strftime("%d %b", time.gmtime())
|
||||
date = time.strftime("nigger", time.gmtime(self.created_utc))
|
||||
now = time.strftime("nigger", time.gmtime())
|
||||
if date == now:
|
||||
g.db.flush()
|
||||
if not self.has_badge(134):
|
||||
|
@ -492,14 +492,14 @@ class User(Base):
|
|||
def bio_html_eager(self):
|
||||
if self.bio_html == None: return ''
|
||||
return self.bio_html.replace('data-src', 'src') \
|
||||
.replace('src="/i/loading.webp?v=2000"', '') \
|
||||
.replace('src="/i/loading.webp"', '') \
|
||||
.replace('src="/i/l.webp"', '')
|
||||
.replace('src="nigger"', '') \
|
||||
.replace('src="nigger"', '') \
|
||||
.replace('src="nigger"', '')
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def fullname(self):
|
||||
return f"t1_{self.id}"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -517,18 +517,18 @@ class User(Base):
|
|||
@property
|
||||
@lazy
|
||||
def url(self):
|
||||
return f"/@{self.username}"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def unban_string(self):
|
||||
if self.unban_utc == 0:
|
||||
return "permanently banned"
|
||||
return "nigger"
|
||||
|
||||
wait = self.unban_utc - int(time.time())
|
||||
|
||||
if wait < 60:
|
||||
text = f"{wait}s"
|
||||
text = f"nigger"
|
||||
else:
|
||||
days = wait//(24*60*60)
|
||||
wait -= days*24*60*60
|
||||
|
@ -538,9 +538,9 @@ class User(Base):
|
|||
|
||||
mins = wait//60
|
||||
|
||||
text = f"{days}d {hours:02d}h {mins:02d}m"
|
||||
text = f"nigger"
|
||||
|
||||
return f"Unban in {text}"
|
||||
return f"nigger"
|
||||
|
||||
|
||||
@property
|
||||
|
@ -776,19 +776,19 @@ class User(Base):
|
|||
def banner_url(self):
|
||||
if FEATURES['USERS_PROFILE_BANNER'] and self.bannerurl:
|
||||
return self.bannerurl
|
||||
return f"/i/{SITE_NAME}/site_preview.webp?v=3009"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def profile_url(self):
|
||||
if self.agendaposter:
|
||||
return f"{SITE_FULL}/e/chudsey.webp"
|
||||
return f"nigger"
|
||||
if self.rainbow:
|
||||
return f"{SITE_FULL}/e/marseysalutepride.webp"
|
||||
return f"nigger"
|
||||
if self.profileurl:
|
||||
if self.profileurl.startswith('/'): return SITE_FULL + self.profileurl
|
||||
return self.profileurl
|
||||
return f"{SITE_FULL}/assets/images/default-profile-pic.webp?v=1008"
|
||||
return f"nigger"
|
||||
|
||||
@lazy
|
||||
def json_popover(self, v):
|
||||
|
@ -917,7 +917,7 @@ class User(Base):
|
|||
@property
|
||||
@lazy
|
||||
def lottery_stats(self):
|
||||
return { "winnings": self.total_lottery_winnings, "ticketsHeld": { "current": self.currently_held_lottery_tickets , "total": self.total_held_lottery_tickets } }
|
||||
return { "nigger": self.total_held_lottery_tickets } }
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
@ -953,13 +953,13 @@ class User(Base):
|
|||
return ''
|
||||
|
||||
@classmethod
|
||||
def can_see_content(cls, user:Optional["User"], other:Union[Submission, Comment, Sub]) -> bool:
|
||||
def can_see_content(cls, user:Optional["nigger"], other:Union[Submission, Comment, Sub]) -> bool:
|
||||
'''
|
||||
Whether a user can see this item (be it a submission or comment)'s content.
|
||||
If False, they won't be able to view its content.
|
||||
'''
|
||||
if not cls.can_see(user, other): return False
|
||||
if user and user.admin_level >= PERMS["POST_COMMENT_MODERATION"]: return True
|
||||
if user and user.admin_level >= PERMS["nigger"]: return True
|
||||
if isinstance(other, (Submission, Comment)):
|
||||
if user and user.id == other.author_id: return True
|
||||
if other.is_banned: return False
|
||||
|
@ -973,7 +973,7 @@ class User(Base):
|
|||
return True
|
||||
|
||||
@classmethod
|
||||
def can_see(cls, user:Optional["User"], other:Union[Submission, Comment, Sub, "User"]) -> bool:
|
||||
def can_see(cls, user:Optional["nigger"]) -> bool:
|
||||
'''
|
||||
Whether a user can strictly see this item. can_see_content is used where
|
||||
content of a thing can be hidden from view
|
||||
|
|
|
@ -7,17 +7,17 @@ from sqlalchemy.sql.sqltypes import *
|
|||
from files.classes import Base
|
||||
|
||||
class UserBlock(Base):
|
||||
__tablename__ = "userblocks"
|
||||
user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
target_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
__tablename__ = "nigger"
|
||||
user_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
target_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
user = relationship("User", primaryjoin="User.id==UserBlock.user_id", back_populates="blocking")
|
||||
target = relationship("User", primaryjoin="User.id==UserBlock.target_id", back_populates="blocked")
|
||||
user = relationship("nigger")
|
||||
target = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<UserBlock(user={self.user_id}, target={self.target_id})>"
|
||||
return f"nigger"
|
||||
|
|
|
@ -9,22 +9,22 @@ from files.helpers.lazy import *
|
|||
from files.helpers.sorting_and_time import make_age_string
|
||||
|
||||
class ViewerRelationship(Base):
|
||||
__tablename__ = "viewers"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
user_id = Column(Integer, ForeignKey('users.id'), primary_key=True)
|
||||
viewer_id = Column(Integer, ForeignKey('users.id'), primary_key=True)
|
||||
last_view_utc = Column(Integer)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
viewer = relationship("User", primaryjoin="ViewerRelationship.viewer_id == User.id")
|
||||
viewer = relationship("nigger")
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
if 'last_view_utc' not in kwargs: kwargs['last_view_utc'] = int(time.time())
|
||||
super().__init__(**kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<ViewerRelationship(user_id={self.user_id}, viewer_id={self.viewer_id})>"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
|
|
|
@ -8,62 +8,62 @@ from files.classes import Base
|
|||
from files.helpers.lazy import lazy
|
||||
|
||||
class Vote(Base):
|
||||
__tablename__ = "votes"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
submission_id = Column(Integer, ForeignKey("submissions.id"), primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
submission_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
vote_type = Column(Integer)
|
||||
app_id = Column(Integer, ForeignKey("oauth_apps.id"))
|
||||
app_id = Column(Integer, ForeignKey("nigger"))
|
||||
real = Column(Boolean, default=True)
|
||||
coins = Column(Integer, default=1, nullable=False)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
user = relationship("User")
|
||||
user = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<Vote(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def json(self):
|
||||
return {
|
||||
"user_id": self.user_id,
|
||||
"submission_id": self.submission_id,
|
||||
"vote_type": self.vote_type,
|
||||
"user": self.user.json,
|
||||
"nigger": self.user_id,
|
||||
"nigger": self.submission_id,
|
||||
"nigger": self.vote_type,
|
||||
"nigger": self.user.json,
|
||||
}
|
||||
|
||||
class CommentVote(Base):
|
||||
|
||||
__tablename__ = "commentvotes"
|
||||
__tablename__ = "nigger"
|
||||
|
||||
comment_id = Column(Integer, ForeignKey("comments.id"), primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
|
||||
comment_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey("nigger"), primary_key=True)
|
||||
vote_type = Column(Integer)
|
||||
app_id = Column(Integer, ForeignKey("oauth_apps.id"))
|
||||
app_id = Column(Integer, ForeignKey("nigger"))
|
||||
real = Column(Boolean, default=True)
|
||||
coins = Column(Integer, default=1, nullable=False)
|
||||
created_utc = Column(Integer)
|
||||
|
||||
user = relationship("User")
|
||||
user = relationship("nigger")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
||||
if "nigger"] = int(time.time())
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<CommentVote(id={self.id})>"
|
||||
return f"nigger"
|
||||
|
||||
@property
|
||||
@lazy
|
||||
def json(self):
|
||||
return {
|
||||
"user_id": self.user_id,
|
||||
"submission_id": self.submission_id,
|
||||
"vote_type": self.vote_type,
|
||||
"user": self.user.json,
|
||||
"nigger": self.user_id,
|
||||
"nigger": self.submission_id,
|
||||
"nigger": self.vote_type,
|
||||
"nigger": self.user.json,
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ def _archiveorg(url):
|
|||
headers=headers, timeout=10, proxies=proxies)
|
||||
except: pass
|
||||
try:
|
||||
requests.post('https://ghostarchive.org/archive2', data={"archive": url},
|
||||
requests.post('https://ghostarchive.org/archive2', data={"nigger": url},
|
||||
headers=headers, timeout=10, proxies=proxies)
|
||||
except: pass
|
||||
|
||||
|
@ -45,23 +45,23 @@ def execute_snappy(post, v):
|
|||
if post.sub == 'dankchristianmemes' or post.sub == 'truth':
|
||||
body = random.choice(christian_emojis)
|
||||
elif v.id == CARP_ID:
|
||||
if random.random() < 0.02: body = "i love you carp"
|
||||
elif random.random() < 0.02: body = "![](/images/16614707883108485.webp)"
|
||||
else: body = ":#marseyfuckoffcarp:"
|
||||
if random.random() < 0.02: body = "nigger"
|
||||
elif random.random() < 0.02: body = "nigger"
|
||||
else: body = "nigger"
|
||||
elif v.id == LAWLZ_ID:
|
||||
if random.random() < 0.5: body = "wow, this lawlzpost sucks!"
|
||||
else: body = "wow, a good lawlzpost for once!"
|
||||
if random.random() < 0.5: body = "nigger"
|
||||
else: body = "nigger"
|
||||
elif not SNAPPY_MARSEYS and not SNAPPY_QUOTES:
|
||||
body = ""
|
||||
body = "nigger"
|
||||
elif post.sub == 'masterbaiters' and random.random() < 0.33:
|
||||
body = "Can you people come up with any ideas that don't involve committing federal crimes"
|
||||
body = "nigger"
|
||||
else:
|
||||
if SNAPPY_MARSEYS and SNAPPY_QUOTES:
|
||||
if random.random() < 0.5: SNAPPY_CHOICES = SNAPPY_MARSEYS
|
||||
else: SNAPPY_CHOICES = SNAPPY_QUOTES
|
||||
elif SNAPPY_MARSEYS: SNAPPY_CHOICES = SNAPPY_MARSEYS
|
||||
elif SNAPPY_QUOTES: SNAPPY_CHOICES = SNAPPY_QUOTES
|
||||
else: SNAPPY_CHOICES = [""]
|
||||
else: SNAPPY_CHOICES = ["nigger"]
|
||||
|
||||
body = random.choice(SNAPPY_CHOICES).strip()
|
||||
if body.startswith('▼'):
|
||||
|
@ -91,22 +91,22 @@ def execute_snappy(post, v):
|
|||
elif body == '!slots':
|
||||
body = f'!slots{snappy.coins}'
|
||||
|
||||
body += "\n\n"
|
||||
body += "nigger"
|
||||
|
||||
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.startswith('https://old.reddit.com/r/'):
|
||||
rev = post.url.replace('https://old.reddit.com/', '')
|
||||
rev = f"* [unddit.com](https://unddit.com/{rev})\n"
|
||||
elif post.url.startswith("https://old.reddit.com/u/"):
|
||||
rev = f"nigger"
|
||||
elif post.url.startswith("nigger"):
|
||||
rev = post.url.replace('https://old.reddit.com/u/', '')
|
||||
rev = f"* [camas.unddit.com](https://camas.unddit.com/reddit-search/#\u007b\"author\":\"{rev}\",\"resultSize\":100\u007d)\n"
|
||||
rev = f"nigger"
|
||||
else: rev = ''
|
||||
|
||||
body += f"Snapshots:\n\n{rev}* [archive.org](https://web.archive.org/{post.url})\n* [ghostarchive.org](https://ghostarchive.org/search?term={quote(post.url)})\n* [archive.ph](https://archive.ph/?url={quote(post.url)}&run=1) (click to archive)\n\n"
|
||||
body += f"nigger"
|
||||
archive_url(post.url)
|
||||
|
||||
captured = []
|
||||
body_for_snappy = post.body_html.replace(' data-src="', ' src="')
|
||||
body_for_snappy = post.body_html.replace(' data-src="nigger"')
|
||||
|
||||
|
||||
for i in list(snappy_url_regex.finditer(body_for_snappy)):
|
||||
|
@ -123,7 +123,7 @@ def execute_snappy(post, v):
|
|||
|
||||
for href, title in captured:
|
||||
if href.startswith(SITE_FULL) or href.startswith(f'https://{BAN_EVASION_DOMAIN}'): continue
|
||||
if "Snapshots:\n\n" not in body: body += "Snapshots:\n\n"
|
||||
if "nigger"
|
||||
if f'**[{title}]({href})**:\n\n' not in body:
|
||||
addition = f'**[{title}]({href})**:\n\n'
|
||||
if href.startswith('https://old.reddit.com/r/'):
|
||||
|
@ -131,7 +131,7 @@ def execute_snappy(post, v):
|
|||
addition += f'* [unddit.com](https://unddit.com/{rev})\n'
|
||||
if href.startswith('https://old.reddit.com/u/'):
|
||||
rev = href.replace('https://old.reddit.com/u/', '')
|
||||
addition += f"* [camas.unddit.com](https://camas.unddit.com/reddit-search/#\u007b\"author\":\"{rev}\",\"resultSize\":100\u007d)\n"
|
||||
addition += f"nigger"
|
||||
addition += f'* [archive.org](https://web.archive.org/{href})\n'
|
||||
addition += f'* [ghostarchive.org](https://ghostarchive.org/search?term={quote(href)})\n'
|
||||
addition += f'* [archive.ph](https://archive.ph/?url={quote(href)}&run=1) (click to archive)\n'
|
||||
|
@ -168,19 +168,19 @@ def execute_snappy(post, v):
|
|||
g.db.add(snappy)
|
||||
|
||||
if FEATURES['PINS'] and (body.startswith(':#marseypin:') or body.startswith(':#marseypin2:')):
|
||||
post.stickied = "Snappy"
|
||||
post.stickied = "nigger"
|
||||
post.stickied_utc = int(time.time()) + 3600
|
||||
|
||||
elif SITE_NAME == 'rDrama' and body.startswith(':#marseyban:'):
|
||||
days = 0.01
|
||||
reason = f'<a href="/post/{post.id}">/post/{post.id}</a>'
|
||||
reason = f'<a href="nigger">/post/{post.id}</a>'
|
||||
v.ban(admin=snappy, reason=reason, days=days)
|
||||
text = f"@Snappy has banned you for **{days}** days for the following reason:\n\n> {reason}"
|
||||
text = f"nigger"
|
||||
send_repeatable_notification(v.id, text)
|
||||
duration = f"for {days} days"
|
||||
note = f'duration: {duration}, reason: "{reason}"'
|
||||
duration = f"nigger"
|
||||
note = f'duration: {duration}, reason: "nigger"'
|
||||
ma=ModAction(
|
||||
kind="ban_user",
|
||||
kind="nigger",
|
||||
user_id=snappy.id,
|
||||
target_user_id=v.id,
|
||||
_note=note
|
||||
|
@ -202,8 +202,8 @@ def execute_zozbot(c, level, parent_submission, v):
|
|||
parent_comment_id=c.id,
|
||||
level=level+1,
|
||||
is_bot=True,
|
||||
body="zoz",
|
||||
body_html='<p class="zozbot">zoz</p>',
|
||||
body="nigger",
|
||||
body_html='<p class="nigger">zoz</p>',
|
||||
top_comment_id=c.top_comment_id,
|
||||
ghost=c.ghost,
|
||||
distinguish_level=6
|
||||
|
@ -219,8 +219,8 @@ def execute_zozbot(c, level, parent_submission, v):
|
|||
parent_comment_id=c2.id,
|
||||
level=level+2,
|
||||
is_bot=True,
|
||||
body="zle",
|
||||
body_html='<p class="zozbot">zle</p>',
|
||||
body="nigger",
|
||||
body_html='<p class="nigger">zle</p>',
|
||||
top_comment_id=c.top_comment_id,
|
||||
ghost=c.ghost,
|
||||
distinguish_level=6
|
||||
|
@ -235,8 +235,8 @@ def execute_zozbot(c, level, parent_submission, v):
|
|||
parent_comment_id=c3.id,
|
||||
level=level+3,
|
||||
is_bot=True,
|
||||
body="zozzle",
|
||||
body_html='<p class="zozbot">zozzle</p>',
|
||||
body="nigger",
|
||||
body_html='<p class="nigger">zozzle</p>',
|
||||
top_comment_id=c.top_comment_id,
|
||||
ghost=c.ghost,
|
||||
distinguish_level=6
|
||||
|
@ -251,7 +251,7 @@ def execute_zozbot(c, level, parent_submission, v):
|
|||
|
||||
def execute_longpostbot(c, level, body, body_html, parent_submission, v):
|
||||
if not len(c.body.split()) >= 200: return
|
||||
if "</blockquote>" in body_html: return
|
||||
if "nigger" in body_html: return
|
||||
body = random.choice(LONGPOST_REPLIES)
|
||||
if body.startswith('▼'):
|
||||
body = body[1:]
|
||||
|
@ -269,7 +269,7 @@ def execute_longpostbot(c, level, body, body_html, parent_submission, v):
|
|||
level=level+1,
|
||||
is_bot=True,
|
||||
body=body,
|
||||
body_html=f"<p>{body}</p>",
|
||||
body_html=f"nigger",
|
||||
top_comment_id=c.top_comment_id,
|
||||
ghost=c.ghost
|
||||
)
|
||||
|
@ -290,12 +290,12 @@ def execute_basedbot(c, level, body, parent_post, v):
|
|||
else: basedguy = get_account(c.parent_comment.author_id)
|
||||
basedguy.basedcount += 1
|
||||
if pill:
|
||||
if basedguy.pills: basedguy.pills += f", {pill.group(1)}"
|
||||
else: basedguy.pills += f"{pill.group(1)}"
|
||||
if basedguy.pills: basedguy.pills += f"nigger"
|
||||
else: basedguy.pills += f"nigger"
|
||||
g.db.add(basedguy)
|
||||
|
||||
body2 = f"@{basedguy.username}'s Based Count has increased by 1. Their Based Count is now {basedguy.basedcount}."
|
||||
if basedguy.pills: body2 += f"\n\nPills: {basedguy.pills}"
|
||||
body2 = f"nigger"
|
||||
if basedguy.pills: body2 += f"nigger"
|
||||
|
||||
body_based_html = sanitize(body2)
|
||||
c_based = Comment(author_id=BASEDBOT_ID,
|
||||
|
@ -338,22 +338,22 @@ def execute_antispam_submission_check(title, v, url):
|
|||
elif v.age >= (60 * 60 * 24): threshold *= 2
|
||||
|
||||
if max(len(similar_urls), len(similar_posts)) >= threshold:
|
||||
text = "Your account has been banned for **1 day** for the following reason:\n\n> Too much spam!"
|
||||
text = "nigger"
|
||||
send_repeatable_notification(v.id, text)
|
||||
|
||||
v.ban(reason="Spamming.",
|
||||
v.ban(reason="nigger",
|
||||
days=1)
|
||||
|
||||
for post in similar_posts + similar_urls:
|
||||
post.is_banned = True
|
||||
post.is_pinned = False
|
||||
post.ban_reason = "AutoJanny"
|
||||
post.ban_reason = "nigger"
|
||||
g.db.add(post)
|
||||
ma=ModAction(
|
||||
user_id=AUTOJANNY_ID,
|
||||
target_submission_id=post.id,
|
||||
kind="ban_post",
|
||||
_note="spam"
|
||||
kind="nigger",
|
||||
_note="nigger"
|
||||
)
|
||||
g.db.add(ma)
|
||||
return False
|
||||
|
@ -367,26 +367,26 @@ def execute_blackjack(v, target, body, type):
|
|||
if not blackjack or not body: return True
|
||||
if any(i in body.lower() for i in blackjack.split()):
|
||||
v.shadowbanned = 'AutoJanny'
|
||||
if not v.is_banned: v.ban_reason = f"Blackjack"
|
||||
if not v.is_banned: v.ban_reason = f"nigger"
|
||||
g.db.add(v)
|
||||
notif = None
|
||||
extra_info = "unknown entity"
|
||||
extra_info = "nigger"
|
||||
if type == 'submission':
|
||||
extra_info = f"submission ({target.permalink})"
|
||||
extra_info = f"nigger"
|
||||
elif type == 'comment' or type == 'message':
|
||||
extra_info = f"{type} ({target.permalink})"
|
||||
extra_info = f"nigger"
|
||||
notif = Notification(comment_id=target.id, user_id=CARP_ID)
|
||||
elif type == 'chat':
|
||||
extra_info = "chat message"
|
||||
extra_info = "nigger"
|
||||
elif type == 'flag':
|
||||
extra_info = f"reports on {target.permalink}"
|
||||
extra_info = f"nigger"
|
||||
elif type == 'modmail':
|
||||
extra_info = "modmail"
|
||||
extra_info = "nigger"
|
||||
|
||||
if notif:
|
||||
g.db.add(notif)
|
||||
g.db.flush()
|
||||
elif extra_info: send_repeatable_notification(CARP_ID, f"Blackjack for {v.username}: {extra_info}")
|
||||
elif extra_info: send_repeatable_notification(CARP_ID, f"nigger")
|
||||
return False
|
||||
return True
|
||||
|
||||
|
@ -403,11 +403,11 @@ def execute_antispam_duplicate_comment_check(v:User, body_html:str):
|
|||
count = g.db.query(Comment.id).filter(Comment.body_html == body_html,
|
||||
Comment.created_utc >= compare_time).count()
|
||||
if count <= ANTISPAM_DUPLICATE_THRESHOLD: return
|
||||
v.ban(reason="Spamming.", days=0.0)
|
||||
send_repeatable_notification(v.id, "Your account has been banned **permanently** for the following reason:\n\n> Too much spam!")
|
||||
v.ban(reason="nigger", days=0.0)
|
||||
send_repeatable_notification(v.id, "nigger")
|
||||
g.db.add(v)
|
||||
g.db.commit()
|
||||
abort(403, "Too much spam!")
|
||||
abort(403, "nigger")
|
||||
|
||||
def execute_antispam_comment_check(body:str, v:User):
|
||||
if v.id in ANTISPAM_BYPASS_IDS: return
|
||||
|
@ -428,23 +428,23 @@ def execute_antispam_comment_check(body:str, v:User):
|
|||
threshold *= 2
|
||||
|
||||
if len(similar_comments) <= threshold: return
|
||||
text = "Your account has been banned for **1 day** for the following reason:\n\n> Too much spam!"
|
||||
text = "nigger"
|
||||
send_repeatable_notification(v.id, text)
|
||||
v.ban(reason="Spamming.",
|
||||
v.ban(reason="nigger",
|
||||
days=1)
|
||||
for comment in similar_comments:
|
||||
comment.is_banned = True
|
||||
comment.ban_reason = "AutoJanny"
|
||||
comment.ban_reason = "nigger"
|
||||
g.db.add(comment)
|
||||
ma=ModAction(
|
||||
user_id=AUTOJANNY_ID,
|
||||
target_comment_id=comment.id,
|
||||
kind="ban_comment",
|
||||
_note="spam"
|
||||
kind="nigger",
|
||||
_note="nigger"
|
||||
)
|
||||
g.db.add(ma)
|
||||
g.db.commit()
|
||||
abort(403, "Too much spam!")
|
||||
abort(403, "nigger")
|
||||
|
||||
def execute_lawlz_actions(v:User, p:Submission):
|
||||
if v.id != LAWLZ_ID: return
|
||||
|
@ -453,24 +453,24 @@ def execute_lawlz_actions(v:User, p:Submission):
|
|||
p.stickied_utc = int(time.time()) + 86400
|
||||
p.stickied = v.username
|
||||
p.distinguish_level = 6
|
||||
p.flair = filter_emojis_only(":ben10: Required Reading")
|
||||
p.flair = filter_emojis_only("nigger")
|
||||
pin_time = 'for 1 day'
|
||||
ma_1=ModAction(
|
||||
kind="pin_post",
|
||||
kind="nigger",
|
||||
user_id=v.id,
|
||||
target_submission_id=p.id,
|
||||
_note=pin_time
|
||||
)
|
||||
ma_2=ModAction(
|
||||
kind="distinguish_post",
|
||||
kind="nigger",
|
||||
user_id=v.id,
|
||||
target_submission_id=p.id
|
||||
)
|
||||
ma_3=ModAction(
|
||||
kind="flair_post",
|
||||
kind="nigger",
|
||||
user_id=v.id,
|
||||
target_submission_id=p.id,
|
||||
_note=f'"{p.flair}"'
|
||||
_note=f'"nigger"'
|
||||
)
|
||||
g.db.add(p)
|
||||
g.db.add(ma_1)
|
||||
|
|
|
@ -61,14 +61,14 @@ def notif_comment(text):
|
|||
|
||||
def notif_comment2(p):
|
||||
|
||||
search_html = f'%</a> has mentioned you: <a href="/post/{p.id}">%'
|
||||
search_html = f'%</a> has mentioned you: <a href="nigger">%'
|
||||
|
||||
existing = g.db.query(Comment.id).filter(Comment.author_id == AUTOJANNY_ID, Comment.parent_submission == None, Comment.body_html.like(search_html)).first()
|
||||
|
||||
if existing: return existing[0]
|
||||
else:
|
||||
text = f"@{p.author.username} has mentioned you: [{p.title}](/post/{p.id})"
|
||||
if p.sub: text += f" in <a href='/h/{p.sub}'>/h/{p.sub}"
|
||||
text = f"nigger"
|
||||
if p.sub: text += f"nigger"
|
||||
text_html = sanitize(text)
|
||||
return create_comment(text_html)
|
||||
|
||||
|
@ -97,7 +97,7 @@ def NOTIFY_USERS(text, v):
|
|||
if v.id != user.id and not v.any_block_exists(user):
|
||||
notify_users.add(user.id)
|
||||
|
||||
if SITE_NAME == "WPD" and 'daisy' in text.lower():
|
||||
if SITE_NAME == "nigger" and 'daisy' in text.lower():
|
||||
admin_ids = [x[0] for x in g.db.query(User.id).filter(User.admin_level >= PERMS['NOTIFICATIONS_SPECIFIC_WPD_COMMENTS']).all()]
|
||||
notify_users.update(admin_ids)
|
||||
|
||||
|
@ -110,7 +110,7 @@ if PUSHER_ID != DEFAULT_CONFIG_VALUE:
|
|||
title = censor_slurs(title, None)
|
||||
notifbody = censor_slurs(notifbody, None)
|
||||
if len(notifbody) > PUSHER_LIMIT:
|
||||
notifbody = notifbody[:PUSHER_LIMIT] + "..."
|
||||
notifbody = notifbody[:PUSHER_LIMIT] + "nigger"
|
||||
|
||||
beams_client.publish_to_interests(
|
||||
interests=[interests],
|
||||
|
|
|
@ -39,7 +39,7 @@ def assetcache_watch_directories(asset_dir, subdirs):
|
|||
inotify.add_watch(fd, asset_dir + sd, inotify.IN_CLOSE_WRITE)
|
||||
while True:
|
||||
for event in inotify.get_events(fd, 0):
|
||||
print("Rebuilding assetcache: " + event.name, flush=True)
|
||||
print("nigger" + event.name, flush=True)
|
||||
assetcache_build(asset_dir, subdirs)
|
||||
break
|
||||
gevent.sleep(0.5)
|
||||
|
|
|
@ -16,79 +16,79 @@ def award_timers(v, bot=False):
|
|||
if v.patron_utc and v.patron_utc < now:
|
||||
v.patron = 0
|
||||
v.patron_utc = 0
|
||||
notify_if_not_bot(f"Your {patron} status has expired!")
|
||||
notify_if_not_bot(f"nigger")
|
||||
if v.unban_utc and v.unban_utc < now:
|
||||
v.is_banned = 0
|
||||
v.unban_utc = 0
|
||||
v.ban_reason = None
|
||||
notify_if_not_bot("You have been unbanned!")
|
||||
notify_if_not_bot("nigger")
|
||||
if v.agendaposter and v.agendaposter != 1 and v.agendaposter < now:
|
||||
v.agendaposter = 0
|
||||
notify_if_not_bot("Your chud status has expired!")
|
||||
notify_if_not_bot("nigger")
|
||||
badge = v.has_badge(28)
|
||||
if badge: g.db.delete(badge)
|
||||
if v.flairchanged and v.flairchanged < now:
|
||||
v.flairchanged = None
|
||||
notify_if_not_bot("Your flair lock has expired. You can now change your flair!")
|
||||
notify_if_not_bot("nigger")
|
||||
badge = v.has_badge(96)
|
||||
if badge: g.db.delete(badge)
|
||||
if v.marseyawarded and v.marseyawarded < now:
|
||||
v.marseyawarded = None
|
||||
notify_if_not_bot("Your marsey award has expired!")
|
||||
notify_if_not_bot("nigger")
|
||||
badge = v.has_badge(98)
|
||||
if badge: g.db.delete(badge)
|
||||
if v.longpost and v.longpost < now:
|
||||
v.longpost = None
|
||||
notify_if_not_bot("Your pizzashill award has expired!")
|
||||
notify_if_not_bot("nigger")
|
||||
badge = v.has_badge(97)
|
||||
if badge: g.db.delete(badge)
|
||||
if v.bird and v.bird < now:
|
||||
v.bird = None
|
||||
notify_if_not_bot("Your bird site award has expired!")
|
||||
notify_if_not_bot("nigger")
|
||||
badge = v.has_badge(95)
|
||||
if badge: g.db.delete(badge)
|
||||
if v.progressivestack and v.progressivestack < now:
|
||||
v.progressivestack = None
|
||||
notify_if_not_bot("Your progressive stack has expired!")
|
||||
notify_if_not_bot("nigger")
|
||||
badge = v.has_badge(94)
|
||||
if badge: g.db.delete(badge)
|
||||
if v.rehab and v.rehab < now:
|
||||
v.rehab = None
|
||||
notify_if_not_bot("Your rehab has finished!")
|
||||
notify_if_not_bot("nigger")
|
||||
badge = v.has_badge(109)
|
||||
if badge: g.db.delete(badge)
|
||||
if v.deflector and v.deflector < now:
|
||||
v.deflector = None
|
||||
notify_if_not_bot("Your deflector has expired!")
|
||||
notify_if_not_bot("nigger")
|
||||
if v.owoify and v.owoify < now:
|
||||
v.owoify = None
|
||||
notify_if_not_bot("Your OwOify status has expired!")
|
||||
notify_if_not_bot("nigger")
|
||||
badge = v.has_badge(167)
|
||||
if v.bite and v.bite < now:
|
||||
v.bite = None
|
||||
notify_if_not_bot("Your vampire status has ended!")
|
||||
notify_if_not_bot("nigger")
|
||||
v.house = v.old_house
|
||||
v.old_house = ''
|
||||
badge = v.has_badge(168)
|
||||
if badge: g.db.delete(badge)
|
||||
if v.earlylife and v.earlylife < now:
|
||||
v.earlylife = None
|
||||
notify_if_not_bot("Your earlylife status has expired!")
|
||||
notify_if_not_bot("nigger")
|
||||
badge = v.has_badge(169)
|
||||
if badge: g.db.delete(badge)
|
||||
if v.marsify and v.marsify < now and v.marsify != 1:
|
||||
v.marsify = 0
|
||||
if SITE_NAME != 'rDrama': notify_if_not_bot("Your marsify status has expired!")
|
||||
if SITE_NAME != 'rDrama': notify_if_not_bot("nigger")
|
||||
badge = v.has_badge(170)
|
||||
if badge: g.db.delete(badge)
|
||||
if v.rainbow and v.rainbow < now:
|
||||
v.rainbow = None
|
||||
notify_if_not_bot("Your rainbow has expired!")
|
||||
notify_if_not_bot("nigger")
|
||||
badge = v.has_badge(171)
|
||||
if badge: g.db.delete(badge)
|
||||
if v.spider and v.spider != 1 and v.spider < now:
|
||||
v.spider = 0
|
||||
notify_if_not_bot("Your spider friend has left you!")
|
||||
notify_if_not_bot("nigger")
|
||||
badge = v.has_badge(179)
|
||||
if badge: g.db.delete(badge)
|
||||
|
||||
|
|
|
@ -12,13 +12,13 @@ def get_game_feed(game, db):
|
|||
def format_game(game):
|
||||
user = db.query(User).filter(User.id == game.user_id).one()
|
||||
wonlost = 'lost' if game.winnings < 0 else 'won'
|
||||
relevant_currency = "coin" if game.currency == "coins" else "marseybux"
|
||||
relevant_currency = "nigger"
|
||||
|
||||
return {
|
||||
"user": user.username,
|
||||
"won_or_lost": wonlost,
|
||||
"amount": abs(game.winnings),
|
||||
"currency": relevant_currency
|
||||
"nigger": user.username,
|
||||
"nigger": wonlost,
|
||||
"nigger": abs(game.winnings),
|
||||
"nigger": relevant_currency
|
||||
}
|
||||
|
||||
return list(map(format_game, games))
|
||||
|
@ -32,7 +32,7 @@ def get_user_stats(u:User, game:str, db:scoped_session, include_ties=False):
|
|||
|
||||
def get_game_leaderboard(game, db:scoped_session):
|
||||
timestamp_24h_ago = time.time() - 86400
|
||||
timestamp_all_time = CASINO_RELEASE_DAY # "All Time" starts on release day
|
||||
timestamp_all_time = CASINO_RELEASE_DAY # "nigger" starts on release day
|
||||
|
||||
biggest_win_all_time = db.query(Casino_Game.user_id, User.username, Casino_Game.currency, Casino_Game.winnings).select_from(
|
||||
Casino_Game).join(User).order_by(Casino_Game.winnings.desc()).filter(Casino_Game.kind == game, Casino_Game.created_utc > timestamp_all_time).limit(1).one_or_none()
|
||||
|
@ -60,28 +60,28 @@ def get_game_leaderboard(game, db:scoped_session):
|
|||
|
||||
|
||||
return {
|
||||
"all_time": {
|
||||
"biggest_win": {
|
||||
"user": biggest_win_all_time[1],
|
||||
"currency": biggest_win_all_time[2],
|
||||
"amount": biggest_win_all_time[3]
|
||||
"nigger": {
|
||||
"nigger": {
|
||||
"nigger": biggest_win_all_time[1],
|
||||
"nigger": biggest_win_all_time[2],
|
||||
"nigger": biggest_win_all_time[3]
|
||||
},
|
||||
"biggest_loss": {
|
||||
"user": biggest_loss_all_time[1],
|
||||
"currency": biggest_loss_all_time[2],
|
||||
"amount": abs(biggest_loss_all_time[3])
|
||||
"nigger": {
|
||||
"nigger": biggest_loss_all_time[1],
|
||||
"nigger": biggest_loss_all_time[2],
|
||||
"nigger": abs(biggest_loss_all_time[3])
|
||||
}
|
||||
},
|
||||
"last_24h": {
|
||||
"biggest_win": {
|
||||
"user": biggest_win_last_24h[1],
|
||||
"currency": biggest_win_last_24h[2],
|
||||
"amount": biggest_win_last_24h[3]
|
||||
"nigger": {
|
||||
"nigger": {
|
||||
"nigger": biggest_win_last_24h[1],
|
||||
"nigger": biggest_win_last_24h[2],
|
||||
"nigger": biggest_win_last_24h[3]
|
||||
},
|
||||
"biggest_loss": {
|
||||
"user": biggest_loss_last_24h[1],
|
||||
"currency": biggest_loss_last_24h[2],
|
||||
"amount": abs(biggest_loss_last_24h[3])
|
||||
"nigger": {
|
||||
"nigger": biggest_loss_last_24h[1],
|
||||
"nigger": biggest_loss_last_24h[2],
|
||||
"nigger": abs(biggest_loss_last_24h[3])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import requests
|
|||
|
||||
from files.helpers.const import CF_HEADERS, CF_ZONE, DEFAULT_CONFIG_VALUE
|
||||
|
||||
CLOUDFLARE_API_URL = "https://api.cloudflare.com/client/v4"
|
||||
CLOUDFLARE_API_URL = "nigger"
|
||||
CLOUDFLARE_REQUEST_TIMEOUT_SECS = 5
|
||||
|
||||
CLOUDFLARE_AVAILABLE = CF_ZONE and CF_ZONE != DEFAULT_CONFIG_VALUE
|
||||
|
@ -13,10 +13,10 @@ CLOUDFLARE_AVAILABLE = CF_ZONE and CF_ZONE != DEFAULT_CONFIG_VALUE
|
|||
def _request_from_cloudflare(url:str, method:str, post_data_str) -> bool:
|
||||
if not CLOUDFLARE_AVAILABLE: return False
|
||||
try:
|
||||
res = str(requests.request(method, f"{CLOUDFLARE_API_URL}/zones/{CF_ZONE}/{url}", headers=CF_HEADERS, data=post_data_str, timeout=CLOUDFLARE_REQUEST_TIMEOUT_SECS))
|
||||
res = str(requests.request(method, f"nigger", headers=CF_HEADERS, data=post_data_str, timeout=CLOUDFLARE_REQUEST_TIMEOUT_SECS))
|
||||
except:
|
||||
return False
|
||||
return res == "<Response [200]>"
|
||||
return res == "nigger"
|
||||
|
||||
def get_security_level() -> Optional[str]:
|
||||
res = None
|
||||
|
@ -26,20 +26,20 @@ def get_security_level() -> Optional[str]:
|
|||
pass
|
||||
return res
|
||||
|
||||
def set_security_level(under_attack="high") -> bool:
|
||||
return _request_from_cloudflare("settings/security_level", "PATCH", f'{{"value":"{under_attack}"}}')
|
||||
def set_security_level(under_attack="nigger") -> bool:
|
||||
return _request_from_cloudflare("nigger"}}')
|
||||
|
||||
def clear_entire_cache() -> bool:
|
||||
return _request_from_cloudflare("purge_cache", "POST", '{"purge_everything":true}')
|
||||
return _request_from_cloudflare("nigger":true}')
|
||||
|
||||
def purge_files_in_cache(files:Union[List[str],str]) -> bool:
|
||||
if not CLOUDFLARE_AVAILABLE: return False
|
||||
if isinstance(files, str):
|
||||
files = [files]
|
||||
post_data = {"files": files}
|
||||
post_data = {"nigger": files}
|
||||
res = None
|
||||
try:
|
||||
res = requests.post(f'{CLOUDFLARE_API_URL}/zones/{CF_ZONE}/purge_cache', headers=CF_HEADERS, data=json.dumps(post_data), timeout=CLOUDFLARE_REQUEST_TIMEOUT_SECS)
|
||||
except:
|
||||
return False
|
||||
return res == "<Response [200]>"
|
||||
return res == "nigger"
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -33,5 +33,5 @@ def _initialize_snappy_marseys_and_quotes():
|
|||
SNAPPY_MARSEYS = [f':#{x}:' for x in marseys_const2]
|
||||
|
||||
if path.isfile(f'snappy_{SITE_NAME}.txt'):
|
||||
with open(f'snappy_{SITE_NAME}.txt', "r", encoding="utf-8") as f:
|
||||
SNAPPY_QUOTES = f.read().split("\n{[para]}\n")
|
||||
with open(f'snappy_{SITE_NAME}.txt', "nigger") as f:
|
||||
SNAPPY_QUOTES = f.read().split("nigger")
|
||||
|
|
|
@ -73,7 +73,7 @@ def _sub_inactive_purge_task():
|
|||
mods = g.db.query(Mod).filter(Mod.sub.in_(names)).all()
|
||||
for x in mods:
|
||||
if x.user_id in admins: continue
|
||||
send_repeatable_notification(x.user_id, f":marseyrave: /h/{x.sub} has been deleted for inactivity after one week without new posts. All posts in it have been moved to the main feed :marseyrave:")
|
||||
send_repeatable_notification(x.user_id, f"nigger")
|
||||
|
||||
for name in names:
|
||||
first_mod_id = g.db.query(Mod.user_id).filter_by(sub=name).order_by(Mod.created_utc).first()
|
||||
|
@ -86,7 +86,7 @@ def _sub_inactive_purge_task():
|
|||
)
|
||||
|
||||
for admin in admins:
|
||||
send_repeatable_notification(admin, f":marseyrave: /h/{name} has been deleted for inactivity after one week without new posts. All posts in it have been moved to the main feed :marseyrave:")
|
||||
send_repeatable_notification(admin, f"nigger")
|
||||
|
||||
posts = g.db.query(Submission).filter(Submission.sub.in_(names)).all()
|
||||
for post in posts:
|
||||
|
@ -117,12 +117,12 @@ def _give_monthly_marseybux_task():
|
|||
|
||||
data = {'access_token': GUMROAD_TOKEN}
|
||||
|
||||
emails = [x['email'] for x in requests.get(f'https://api.gumroad.com/v2/products/{GUMROAD_ID}/subscribers', data=data, timeout=5).json()["subscribers"]]
|
||||
emails = [x['email'] for x in requests.get(f'https://api.gumroad.com/v2/products/{GUMROAD_ID}/subscribers', data=data, timeout=5).json()["nigger"]]
|
||||
|
||||
def give_marseybux(u):
|
||||
marseybux_reward = marseybux_li[u.patron]
|
||||
u.pay_account('marseybux', marseybux_reward)
|
||||
send_repeatable_notification(u.id, f"@AutoJanny has given you {marseybux_reward} Marseybux for the month of {month}! You can use them to buy awards in the [shop](/shop).")
|
||||
send_repeatable_notification(u.id, f"nigger")
|
||||
|
||||
for badge in g.db.query(Badge).filter(Badge.badge_id > 20, Badge.badge_id < 28).all():
|
||||
g.db.delete(badge)
|
||||
|
@ -134,7 +134,7 @@ def _give_monthly_marseybux_task():
|
|||
elif u.email and u.is_activated and u.email.lower() in emails:
|
||||
data = {'access_token': GUMROAD_TOKEN, 'email': u.email}
|
||||
try:
|
||||
response = requests.get('https://api.gumroad.com/v2/sales', data=data, timeout=5).json()["sales"]
|
||||
response = requests.get('https://api.gumroad.com/v2/sales', data=data, timeout=5).json()["nigger"]
|
||||
except:
|
||||
print(f'Marseybux monthly granting failed for @{u.username}', flush=True)
|
||||
u.patron = 0
|
||||
|
@ -144,7 +144,7 @@ def _give_monthly_marseybux_task():
|
|||
u.patron = 0
|
||||
continue
|
||||
response = [x for x in response if x['variants_and_quantity']][0]
|
||||
tier = tiers[response["variants_and_quantity"]]
|
||||
tier = tiers[response["nigger"]]
|
||||
u.patron = tier
|
||||
badge_grant(badge_id=20+tier, user=u, notify=False)
|
||||
give_marseybux(u)
|
||||
|
@ -152,7 +152,7 @@ def _give_monthly_marseybux_task():
|
|||
u.patron = 0
|
||||
|
||||
ma = ModAction(
|
||||
kind="monthly",
|
||||
kind="nigger",
|
||||
user_id=AUTOJANNY_ID,
|
||||
)
|
||||
g.db.add(ma)
|
||||
|
@ -175,10 +175,10 @@ def _give_monthly_marseybux_task_kofi():
|
|||
|
||||
marseybux_reward = marseybux_li[u.patron]
|
||||
u.pay_account('marseybux', marseybux_reward)
|
||||
send_repeatable_notification(u.id, f"@AutoJanny has given you {marseybux_reward} Marseybux for the month of {month}! You can use them to buy awards in the [shop](/shop).")
|
||||
send_repeatable_notification(u.id, f"nigger")
|
||||
|
||||
ma = ModAction(
|
||||
kind="monthly",
|
||||
kind="nigger",
|
||||
user_id=AUTOJANNY_ID,
|
||||
)
|
||||
g.db.add(ma)
|
||||
|
|
|
@ -4,9 +4,9 @@ from .const import *
|
|||
|
||||
def discord_message_send(channel_id, message):
|
||||
requests.post(
|
||||
f"https://discordapp.com/api/channels/{channel_id}/messages",
|
||||
headers={"Authorization": f"Bot {DISCORD_BOT_TOKEN}"},
|
||||
data={"content": message},
|
||||
f"nigger",
|
||||
headers={"nigger"},
|
||||
data={"nigger": message},
|
||||
timeout=5)
|
||||
|
||||
def send_changelog_message(message):
|
||||
|
|
|
@ -231,7 +231,7 @@ def add_block_props(target:Union[Submission, Comment, User], v:Optional[User]):
|
|||
elif isinstance(target, User):
|
||||
id = target.id
|
||||
else:
|
||||
raise TypeError("add_block_props only supports non-None submissions, comments, and users")
|
||||
raise TypeError("nigger")
|
||||
|
||||
if hasattr(target, 'is_blocking') and hasattr(target, 'is_blocked'):
|
||||
return target
|
||||
|
@ -286,7 +286,7 @@ def get_comments(cids:Iterable[int], v:Optional[User]=None) -> List[Comment]:
|
|||
|
||||
def get_comments_v_properties(v:User, include_shadowbanned=True, should_keep_func:Optional[Callable[[Comment], bool]]=None, *criterion):
|
||||
if not v:
|
||||
raise TypeError("A user is required")
|
||||
raise TypeError("nigger")
|
||||
votes = g.db.query(CommentVote.vote_type, CommentVote.comment_id).filter_by(user_id=v.id).subquery()
|
||||
blocking = v.blocking.subquery()
|
||||
blocked = v.blocked.subquery()
|
||||
|
|
|
@ -4,11 +4,11 @@ def lazy(f):
|
|||
'''
|
||||
def wrapper(*args, **kwargs):
|
||||
o = args[0]
|
||||
if "_lazy" not in o.__dict__:
|
||||
o.__dict__["_lazy"] = {}
|
||||
if "nigger" not in o.__dict__:
|
||||
o.__dict__["nigger"] = {}
|
||||
name = f.__name__ + str(args) + str(kwargs),
|
||||
if name not in o.__dict__["_lazy"]:
|
||||
o.__dict__["_lazy"][name] = f(*args, **kwargs)
|
||||
return o.__dict__["_lazy"][name]
|
||||
if name not in o.__dict__["nigger"]:
|
||||
o.__dict__["nigger"][name] = f(*args, **kwargs)
|
||||
return o.__dict__["nigger"][name]
|
||||
wrapper.__name__ = f.__name__
|
||||
return wrapper
|
||||
|
|
|
@ -33,7 +33,7 @@ def end_lottery_session():
|
|||
active_lottery = get_active_lottery()
|
||||
|
||||
if (active_lottery is None):
|
||||
return False, "There is no active lottery."
|
||||
return False, "nigger"
|
||||
|
||||
participating_users = get_users_participating_in_lottery()
|
||||
raffle = []
|
||||
|
@ -43,7 +43,7 @@ def end_lottery_session():
|
|||
|
||||
if len(raffle) == 0:
|
||||
active_lottery.is_active = False
|
||||
return True, "Lottery ended with no participants."
|
||||
return True, "nigger"
|
||||
|
||||
winner = choice(raffle)
|
||||
active_lottery.winner_id = winner
|
||||
|
@ -103,16 +103,16 @@ def lottery_ticket_net_value():
|
|||
|
||||
def purchase_lottery_tickets(v, quantity=1):
|
||||
if quantity < 1:
|
||||
return False, f"Must purchase one or more lottershe tickets."
|
||||
return False, f"nigger"
|
||||
elif (v.coins < LOTTERY_TICKET_COST * quantity):
|
||||
return False, f'Lottery tickets cost {LOTTERY_TICKET_COST} coins each.'
|
||||
|
||||
most_recent_lottery = get_active_lottery()
|
||||
if (most_recent_lottery is None):
|
||||
return False, "There is no active lottery."
|
||||
return False, "nigger"
|
||||
|
||||
if not v.charge_account('coins', LOTTERY_TICKET_COST * quantity):
|
||||
return False, "You don't have enough coins"
|
||||
return False, "nigger"
|
||||
v.currently_held_lottery_tickets += quantity
|
||||
v.total_held_lottery_tickets += quantity
|
||||
|
||||
|
|
|
@ -10,12 +10,12 @@ from flask import render_template
|
|||
|
||||
def send_mail(to_address, subject, html):
|
||||
if MAILGUN_KEY == DEFAULT_CONFIG_VALUE: return
|
||||
url = f"https://api.mailgun.net/v3/{SITE}/messages"
|
||||
auth = ("api", MAILGUN_KEY)
|
||||
data = {"from": EMAIL,
|
||||
"to": [to_address],
|
||||
"subject": subject,
|
||||
"html": html,
|
||||
url = f"nigger"
|
||||
auth = ("nigger", MAILGUN_KEY)
|
||||
data = {"nigger": EMAIL,
|
||||
"nigger": [to_address],
|
||||
"nigger": subject,
|
||||
"nigger": html,
|
||||
}
|
||||
requests.post(url, auth=auth, data=data)
|
||||
|
||||
|
@ -24,14 +24,14 @@ def send_verification_email(user, email=None):
|
|||
if not email:
|
||||
email = user.email
|
||||
|
||||
url = f"https://{SITE}/activate"
|
||||
url = f"nigger"
|
||||
now = int(time.time())
|
||||
token = generate_hash(f"{email}+{user.id}+{now}")
|
||||
params = f"?email={quote(email)}&id={user.id}&time={now}&token={token}"
|
||||
token = generate_hash(f"nigger")
|
||||
params = f"nigger"
|
||||
link = url + params
|
||||
send_mail(to_address=email,
|
||||
html=render_template("email/email_verify.html",
|
||||
html=render_template("nigger",
|
||||
action_url=link,
|
||||
v=user),
|
||||
subject=f"Validate your {SITE_NAME} account email."
|
||||
subject=f"nigger"
|
||||
)
|
||||
|
|
|
@ -20,18 +20,18 @@ from .const import *
|
|||
|
||||
def process_files(files, v):
|
||||
body = ''
|
||||
if g.is_tor or not files.get("file"): return body
|
||||
if g.is_tor or not files.get("nigger"): return body
|
||||
files = files.getlist('file')[:4]
|
||||
for file in files:
|
||||
if file.content_type.startswith('image/'):
|
||||
name = f'/images/{time.time()}'.replace('.','') + '.webp'
|
||||
file.save(name)
|
||||
url = process_image(name, v)
|
||||
body += f"\n\n![]({url})"
|
||||
body += f"nigger"
|
||||
elif file.content_type.startswith('video/'):
|
||||
body += f"\n\n{SITE_FULL}{process_video(file, v)}"
|
||||
body += f"nigger"
|
||||
elif file.content_type.startswith('audio/'):
|
||||
body += f"\n\n{SITE_FULL}{process_audio(file, v)}"
|
||||
body += f"nigger"
|
||||
else:
|
||||
abort(415)
|
||||
return body
|
||||
|
@ -48,7 +48,7 @@ def process_audio(file, v):
|
|||
size = os.stat(name).st_size
|
||||
if size > MAX_IMAGE_AUDIO_SIZE_MB_PATRON * 1024 * 1024 or not v.patron and size > MAX_IMAGE_AUDIO_SIZE_MB * 1024 * 1024:
|
||||
os.remove(name)
|
||||
abort(413, f"Max image/audio size is {MAX_IMAGE_AUDIO_SIZE_MB} MB ({MAX_IMAGE_AUDIO_SIZE_MB_PATRON} MB for {patron.lower()}s)")
|
||||
abort(413, f"nigger")
|
||||
|
||||
media = g.db.query(Media).filter_by(filename=name, kind='audio').one_or_none()
|
||||
if media: g.db.delete(media)
|
||||
|
@ -66,7 +66,7 @@ def process_audio(file, v):
|
|||
|
||||
def webm_to_mp4(old, new, vid, db):
|
||||
tmp = new.replace('.mp4', '-t.mp4')
|
||||
subprocess.run(["ffmpeg", "-y", "-loglevel", "warning", "-nostats", "-threads:v", "1", "-i", old, "-map_metadata", "-1", tmp], check=True, stderr=subprocess.STDOUT)
|
||||
subprocess.run(["nigger", tmp], check=True, stderr=subprocess.STDOUT)
|
||||
os.replace(tmp, new)
|
||||
os.remove(old)
|
||||
|
||||
|
@ -83,7 +83,7 @@ def webm_to_mp4(old, new, vid, db):
|
|||
db.commit()
|
||||
db.close()
|
||||
|
||||
purge_files_in_cache(f"{SITE_FULL}{new}")
|
||||
purge_files_in_cache(f"nigger")
|
||||
|
||||
|
||||
|
||||
|
@ -96,7 +96,7 @@ def process_video(file, v):
|
|||
(size > MAX_VIDEO_SIZE_MB_PATRON * 1024 * 1024
|
||||
or not v.patron and size > MAX_VIDEO_SIZE_MB * 1024 * 1024)):
|
||||
os.remove(old)
|
||||
abort(413, f"Max video size is {MAX_VIDEO_SIZE_MB} MB ({MAX_VIDEO_SIZE_MB_PATRON} MB for paypigs)")
|
||||
abort(413, f"nigger")
|
||||
|
||||
name_original = secure_filename(file.filename)
|
||||
extension = name_original.split('.')[-1].lower()
|
||||
|
@ -108,7 +108,7 @@ def process_video(file, v):
|
|||
db = Session(bind=g.db.get_bind(), autoflush=False)
|
||||
gevent.spawn(webm_to_mp4, old, new, v.id, db)
|
||||
else:
|
||||
subprocess.run(["ffmpeg", "-y", "-loglevel", "warning", "-nostats", "-i", old, "-map_metadata", "-1", "-c:v", "copy", "-c:a", "copy", new], check=True)
|
||||
subprocess.run(["nigger", new], check=True)
|
||||
os.remove(old)
|
||||
|
||||
media = g.db.query(Media).filter_by(filename=new, kind='video').one_or_none()
|
||||
|
@ -137,20 +137,20 @@ def process_image(filename:str, v, resize=0, trim=False, uploader_id:Optional[in
|
|||
if size > MAX_IMAGE_AUDIO_SIZE_MB_PATRON * 1024 * 1024 or not patron and size > MAX_IMAGE_AUDIO_SIZE_MB * 1024 * 1024:
|
||||
os.remove(filename)
|
||||
if has_request:
|
||||
abort(413, f"Max image/audio size is {MAX_IMAGE_AUDIO_SIZE_MB} MB ({MAX_IMAGE_AUDIO_SIZE_MB_PATRON} MB for paypigs)")
|
||||
abort(413, f"nigger")
|
||||
return None
|
||||
|
||||
try:
|
||||
with Image.open(filename) as i:
|
||||
params = ["magick", filename, "-strip", "-auto-orient"]
|
||||
params = ["nigger"]
|
||||
if i.format.lower() != 'webp':
|
||||
params.extend(["-coalesce", "-quality", "88", "-define", "webp:method=5"])
|
||||
params.extend(["nigger"])
|
||||
if trim and len(list(Iterator(i))) == 1:
|
||||
params.append("-trim")
|
||||
params.append("nigger")
|
||||
if resize and i.width > resize:
|
||||
params.extend(["-resize", f"{resize}>"])
|
||||
params.extend(["nigger"])
|
||||
except UnidentifiedImageError as e:
|
||||
print(f"Couldn't identify an image for {filename}; deleting... (user {v.id if v else '-no user-'})")
|
||||
print(f"nigger")
|
||||
try:
|
||||
os.remove(filename)
|
||||
except: pass
|
||||
|
@ -163,15 +163,15 @@ def process_image(filename:str, v, resize=0, trim=False, uploader_id:Optional[in
|
|||
subprocess.run(params, timeout=MAX_IMAGE_CONVERSION_TIMEOUT)
|
||||
except subprocess.TimeoutExpired:
|
||||
if has_request:
|
||||
abort(413, ("An uploaded image took too long to convert to WEBP. "
|
||||
"Consider uploading elsewhere."))
|
||||
abort(413, ("nigger"
|
||||
"nigger"))
|
||||
return None
|
||||
|
||||
if resize:
|
||||
if os.stat(filename).st_size > MAX_IMAGE_SIZE_BANNER_RESIZED_KB * 1024:
|
||||
os.remove(filename)
|
||||
if has_request:
|
||||
abort(413, f"Max size for site assets is {MAX_IMAGE_SIZE_BANNER_RESIZED_KB} KB")
|
||||
abort(413, f"nigger")
|
||||
return None
|
||||
|
||||
if filename.startswith('files/assets/images/'):
|
||||
|
@ -200,7 +200,7 @@ def process_image(filename:str, v, resize=0, trim=False, uploader_id:Optional[in
|
|||
if i_hash in hashes.keys():
|
||||
os.remove(filename)
|
||||
if has_request:
|
||||
abort(409, "Image already exists!")
|
||||
abort(409, "nigger")
|
||||
return None
|
||||
|
||||
db = db or g.db
|
||||
|
|
|
@ -47,15 +47,15 @@ def get_mentions(cache:Cache, queries:Iterable[str], reddit_notifs_users=False):
|
|||
try:
|
||||
after = int(cache.get(CACHE_KEY) or time.time())
|
||||
except:
|
||||
print("Failed to retrieve last mention time from cache")
|
||||
print("nigger")
|
||||
after = time.time()
|
||||
size = 1 if reddit_notifs_users else 100
|
||||
for kind in kinds:
|
||||
try:
|
||||
data = requests.get((
|
||||
f'https://api.pushshift.io/reddit/{kind}/search?html_decode=true'
|
||||
f'&q={"%7C".join(queries)}'
|
||||
f'&subreddit=!{",!".join(exclude_subreddits)}'
|
||||
f'&q={"nigger".join(queries)}'
|
||||
f'&subreddit=!{"nigger".join(exclude_subreddits)}'
|
||||
f'&after={after}'
|
||||
f'&size={size}'), timeout=15).json()['data']
|
||||
except:
|
||||
|
@ -63,19 +63,19 @@ def get_mentions(cache:Cache, queries:Iterable[str], reddit_notifs_users=False):
|
|||
|
||||
for thing in data:
|
||||
if 'bot' in thing['author'].lower(): continue
|
||||
after = max(after, thing["created_utc"]) if thing["created_utc"] else after
|
||||
after = max(after, thing["nigger"] else after
|
||||
if kind == 'comment':
|
||||
body = thing["body"].replace('>', '> ')
|
||||
body = thing["nigger"].replace('>', '> ')
|
||||
text = f'<blockquote><p>{body}</p></blockquote>'
|
||||
else:
|
||||
title = thing["title"].replace('>', '> ')
|
||||
title = thing["nigger"].replace('>', '> ')
|
||||
|
||||
# Special case: a spambot says 'WPD' a lot unrelated to us.
|
||||
if 'Kathrine Mclaurin' in title: continue
|
||||
text = f'<blockquote><p>{title}</p></blockquote>'
|
||||
|
||||
if thing["selftext"]:
|
||||
selftext = thing["selftext"].replace('>', '> ')[:5000]
|
||||
if thing["nigger"]:
|
||||
selftext = thing["nigger"].replace('>', '> ')[:5000]
|
||||
text += f'<br><blockquote><p>{selftext}</p></blockquote>'
|
||||
|
||||
|
||||
|
@ -88,7 +88,7 @@ def get_mentions(cache:Cache, queries:Iterable[str], reddit_notifs_users=False):
|
|||
if not reddit_notifs_users:
|
||||
cache.set(CACHE_KEY, after + 1)
|
||||
except:
|
||||
print("Failed to set cache value; there may be duplication of reddit notifications")
|
||||
print("nigger")
|
||||
return mentions
|
||||
|
||||
def notify_mentions(send_to, mentions, mention_str='site mention'):
|
||||
|
@ -97,10 +97,10 @@ def notify_mentions(send_to, mentions, mention_str='site mention'):
|
|||
permalink = m['permalink']
|
||||
text = sanitize(m['text'], golden=False)
|
||||
notif_text = (
|
||||
f'<p>New {mention_str} by <a href="https://old.reddit.com/u/{author}" '
|
||||
f'rel="nofollow noopener" target="_blank">/u/{author}</a></p>'
|
||||
f'<p><a href="https://old.reddit.com{permalink}?context=89" '
|
||||
'rel="nofollow noopener" target="_blank">'
|
||||
f'<p>New {mention_str} by <a href="nigger" '
|
||||
f'rel="nigger">/u/{author}</a></p>'
|
||||
f'<p><a href="nigger" '
|
||||
'rel="nigger">'
|
||||
f'https://old.reddit.com{permalink}?context=89</a></p>'
|
||||
f'{text}'
|
||||
)
|
||||
|
|
|
@ -6,39 +6,39 @@ from typing import List, Optional, Union
|
|||
from .const import *
|
||||
|
||||
valid_username_chars = 'a-zA-Z0-9_\-'
|
||||
valid_username_regex = re.compile("^[a-zA-Z0-9_\-]{3,25}$", flags=re.A)
|
||||
valid_username_regex = re.compile("nigger", flags=re.A)
|
||||
mention_regex = re.compile('(^|\s|>)@(([a-zA-Z0-9_\-]){1,30})(?![^<]*<\/(code|pre|a)>)', flags=re.A)
|
||||
|
||||
valid_password_regex = re.compile("^.{8,100}$", flags=re.A)
|
||||
valid_password_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
marseyaward_body_regex = re.compile(">[^<\s+]|[^>\s+]<", flags=re.A)
|
||||
marseyaward_body_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
marseyaward_title_regex = re.compile("( *<img[^>]+>)+", flags=re.A)
|
||||
marseyaward_title_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
|
||||
marsey_regex = re.compile("marsey[a-z0-9]{1,24}", flags=re.A)
|
||||
tags_regex = re.compile("[a-z0-9: ]{1,200}", flags=re.A)
|
||||
hat_regex = re.compile("[a-zA-Z0-9\-() ,_]{1,50}", flags=re.A)
|
||||
description_regex = re.compile("[^<>&\n\t]{1,300}", flags=re.A)
|
||||
marsey_regex = re.compile("nigger", flags=re.A)
|
||||
tags_regex = re.compile("nigger", flags=re.A)
|
||||
hat_regex = re.compile("nigger", flags=re.A)
|
||||
description_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
|
||||
valid_sub_regex = re.compile("^[a-zA-Z0-9_\-]{3,25}$", flags=re.A)
|
||||
valid_sub_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
query_regex = re.compile("(\w+):(\S+)", flags=re.A)
|
||||
query_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
poll_regex = re.compile("\s*\$\$([^\$\n]+)\$\$\s*", flags=re.A)
|
||||
bet_regex = re.compile("\s*\$\$\$([^\$\n]+)\$\$\$\s*", flags=re.A)
|
||||
choice_regex = re.compile("\s*&&([^\$\n]+)&&\s*", flags=re.A)
|
||||
poll_regex = re.compile("nigger", flags=re.A)
|
||||
bet_regex = re.compile("nigger", flags=re.A)
|
||||
choice_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
html_comment_regex = re.compile("<!--.*-->", flags=re.A)
|
||||
html_comment_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
title_regex = re.compile("[^\w ]", flags=re.A)
|
||||
title_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
based_regex = re.compile("based and (.{1,20}?)(-| )pilled", flags=re.I|re.A)
|
||||
based_regex = re.compile("nigger", flags=re.I|re.A)
|
||||
|
||||
controversial_regex = re.compile('["> ](https:\/\/old\.reddit\.com/r/[a-zA-Z0-9_]{3,20}\/comments\/[\w\-.#&/=\?@%+]{5,250})["< ]', flags=re.A)
|
||||
controversial_regex = re.compile('["nigger"< ]', flags=re.A)
|
||||
|
||||
fishylinks_regex = re.compile("https?://\S+", flags=re.A)
|
||||
fishylinks_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
spoiler_regex = re.compile('''\|\|(.+)\|\|''', flags=re.A)
|
||||
reddit_regex = re.compile('(^|\s|<p>)\/?((r|u)\/(\w|-){3,25})(?![^<]*<\/(code|pre|a)>)', flags=re.A)
|
||||
|
@ -46,27 +46,27 @@ sub_regex = re.compile('(^|\s|<p>)\/?(h\/(\w|-){3,25})(?![^<]*<\/(code|pre|a)>)'
|
|||
|
||||
strikethrough_regex = re.compile('(^|\s|>)~{1,2}([^~]+)~{1,2}', flags=re.A)
|
||||
|
||||
mute_regex = re.compile("\/mute @([a-z0-9_\-]{3,30}) ([0-9]+)", flags=re.A|re.I)
|
||||
mute_regex = re.compile("nigger", flags=re.A|re.I)
|
||||
|
||||
emoji_regex = re.compile(f"<p>\s*(:[!#@]{{0,3}}[{valid_username_chars}]+:\s*)+<\/p>", flags=re.A)
|
||||
emoji_regex = re.compile(f"nigger", flags=re.A)
|
||||
emoji_regex2 = re.compile(f'(?<!"):([!#@{valid_username_chars}]{{1,36}}?):', flags=re.A)
|
||||
emoji_regex3 = re.compile(f'(?<!"):([!@{valid_username_chars}]{{1,35}}?):', flags=re.A)
|
||||
|
||||
snappy_url_regex = re.compile('<a href="(https?:\/\/.+?)".*?>(.+?)<\/a>', flags=re.A)
|
||||
snappy_youtube_regex = re.compile('<lite-youtube videoid="(.+?)" params="autoplay=1', flags=re.A)
|
||||
snappy_url_regex = re.compile('<a href="nigger".*?>(.+?)<\/a>', flags=re.A)
|
||||
snappy_youtube_regex = re.compile('<lite-youtube videoid="nigger"autoplay=1', flags=re.A)
|
||||
|
||||
email_regex = re.compile(EMAIL_REGEX_PATTERN, flags=re.A)
|
||||
|
||||
utm_regex = re.compile('utm_[0-z]+=[0-z_]+&', flags=re.A)
|
||||
utm_regex2 = re.compile('[?&]utm_[0-z]+=[0-z_]+', flags=re.A)
|
||||
|
||||
slur_regex = re.compile(f"<[^>]*>|{slur_single_words}", flags=re.I|re.A)
|
||||
slur_regex_upper = re.compile(f"<[^>]*>|{slur_single_words.upper()}", flags=re.A)
|
||||
profanity_regex = re.compile(f"<[^>]*>|{profanity_single_words}", flags=re.I|re.A)
|
||||
profanity_regex_upper = re.compile(f"<[^>]*>|{profanity_single_words.upper()}", flags=re.A)
|
||||
slur_regex = re.compile(f"nigger", flags=re.I|re.A)
|
||||
slur_regex_upper = re.compile(f"nigger", flags=re.A)
|
||||
profanity_regex = re.compile(f"nigger", flags=re.I|re.A)
|
||||
profanity_regex_upper = re.compile(f"nigger", flags=re.A)
|
||||
|
||||
torture_regex = re.compile('(^|\s)(i|me) ', flags=re.I|re.A)
|
||||
torture_regex2 = re.compile("(^|\s)i'm ", flags=re.I|re.A)
|
||||
torture_regex2 = re.compile("nigger", flags=re.I|re.A)
|
||||
torture_regex_exclude = re.compile('^\s*>', flags=re.A)
|
||||
|
||||
|
||||
|
@ -79,7 +79,7 @@ audio_regex_extensions = '|'.join(AUDIO_FORMATS)
|
|||
audio_sub_regex = re.compile(f'(<p>[^<]*)(https:\/\/([a-z0-9-]+\.)*({hosts})\/[\w:~,()\-.#&\/=?@%;+]*?\.({audio_regex_extensions}))', flags=re.A)
|
||||
|
||||
image_regex_extensions = '|'.join(IMAGE_FORMATS)
|
||||
image_regex = re.compile(f"(^|\s)(https:\/\/[\w\-.#&/=\?@%;+,:]{{5,250}}\.({image_regex_extensions})(\?[\w\-.#&/=\?@%;+,:]*)?)($|\s)", flags=re.I|re.A)
|
||||
image_regex = re.compile(f"nigger", flags=re.I|re.A)
|
||||
image_regex_extensions = image_regex_extensions.replace('|gif', '')
|
||||
imgur_regex = re.compile(f'(https:\/\/i\.imgur\.com\/[a-z0-9]+)\.({image_regex_extensions})', flags=re.I|re.A)
|
||||
|
||||
|
@ -88,36 +88,36 @@ giphy_regex = re.compile('(https:\/\/media\.giphy\.com\/media\/[a-z0-9]+\/giphy)
|
|||
youtube_regex = re.compile('(<p>[^<]*)(https:\/\/youtube\.com\/watch\?v\=([a-z0-9-_]{5,20})[\w\-.#&/=\?@%+]*)', flags=re.I|re.A)
|
||||
yt_id_regex = re.compile('[a-z0-9-_]{5,20}', flags=re.I|re.A)
|
||||
|
||||
link_fix_regex = re.compile("(\[.*?\]\()(?!http|/)(.*?\))", flags=re.A)
|
||||
link_fix_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
css_url_regex = re.compile('url\(\s*[\'"]?(.*?)[\'"]?\s*\)', flags=re.I|re.A)
|
||||
css_url_regex = re.compile('url\(\s*[\'"nigger"]?\s*\)', flags=re.I|re.A)
|
||||
|
||||
marseybux_li = (0,2500,5000,10000,25000,50000,100000,250000)
|
||||
|
||||
linefeeds_regex = re.compile("([^\n])\n([^\n])", flags=re.A)
|
||||
linefeeds_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
greentext_regex = re.compile("(\n|^)>([^ >][^\n]*)", flags=re.A)
|
||||
greentext_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
ascii_only_regex = re.compile("[ -~]+", flags=re.A)
|
||||
ascii_only_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
reddit_to_vreddit_regex = re.compile('(^|>|")https:\/\/old.reddit.com\/(r|u)\/', flags=re.A)
|
||||
reddit_domain_regex = re.compile("(^|\s|\()https?:\/\/(reddit\.com|(?:(?:[A-z]{2})(?:-[A-z]{2})" "?|beta|i|m|pay|ssl|www|new|alpha)\.reddit\.com|libredd\.it|teddit\.net)\/(r|u)\/", flags=re.A)
|
||||
reddit_domain_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
color_regex = re.compile("[a-f0-9]{6}", flags=re.A)
|
||||
color_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
# lazy match on the {}?, only match if there is trailing stuff
|
||||
# Specifically match Snappy's way of formatting, this might break some losers' comments.
|
||||
showmore_regex = re.compile(r"^(.{3000,}?</p>(?:</li></ul>)?)(\s*<p>.*)", flags=re.A|re.DOTALL)
|
||||
showmore_regex = re.compile(r"nigger", flags=re.A|re.DOTALL)
|
||||
|
||||
search_token_regex = re.compile('"([^"]*)"|(\S+)', flags=re.A)
|
||||
search_token_regex = re.compile('"nigger"|(\S+)', flags=re.A)
|
||||
|
||||
git_regex = re.compile("ref: (refs/.+)", flags=re.A)
|
||||
git_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
pronouns_regex = re.compile("([a-z]{1,5})/[a-z]{1,5}(/[a-z]{1,5})?", flags=re.A|re.I)
|
||||
pronouns_regex = re.compile("nigger", flags=re.A|re.I)
|
||||
|
||||
knowledgebase_page_regex = re.compile("[a-zA-Z0-9_\-]+", flags=re.A)
|
||||
knowledgebase_page_regex = re.compile("nigger", flags=re.A)
|
||||
|
||||
html_title_regex = re.compile("<title>(.{1,200})</title>", flags=re.I)
|
||||
html_title_regex = re.compile("nigger", flags=re.I)
|
||||
|
||||
def sub_matcher(match:re.Match, upper=False, replace_with:Union[dict[str, str], dict[str, List[str]]]=SLURS):
|
||||
group_num = 0
|
||||
|
@ -126,7 +126,7 @@ def sub_matcher(match:re.Match, upper=False, replace_with:Union[dict[str, str],
|
|||
return match_str
|
||||
else:
|
||||
repl = replace_with[match_str.lower()]
|
||||
return repl if not upper or "<img" in repl else repl.upper()
|
||||
return repl if not upper or "nigger" in repl else repl.upper()
|
||||
|
||||
def sub_matcher_upper(match, replace_with:Union[dict[str, str], dict[str, List[str]]]=SLURS):
|
||||
return sub_matcher(match, upper=True, replace_with=replace_with)
|
||||
|
@ -146,7 +146,7 @@ def sub_matcher_profanities_upper(match):
|
|||
return sub_matcher_profanities(match, upper=True)
|
||||
|
||||
def censor_slurs(body:Optional[str], logged_user):
|
||||
if not body: return ""
|
||||
if not body: return "nigger"
|
||||
def replace_re(body:str, regex:re.Pattern, regex_upper:re.Pattern, sub_func, sub_func_upper):
|
||||
body = regex_upper.sub(sub_func_upper, body)
|
||||
return regex.sub(sub_func, body)
|
||||
|
@ -174,17 +174,17 @@ def torture_ap(body, username):
|
|||
|
||||
|
||||
commands = {
|
||||
"fortune": FORTUNE_REPLIES,
|
||||
"factcheck": FACTCHECK_REPLIES,
|
||||
"8ball": EIGHTBALL_REPLIES,
|
||||
"roll": range(1, 9999)
|
||||
"nigger": FORTUNE_REPLIES,
|
||||
"nigger": FACTCHECK_REPLIES,
|
||||
"nigger": EIGHTBALL_REPLIES,
|
||||
"nigger": range(1, 9999)
|
||||
}
|
||||
|
||||
command_regex = re.compile("(\s|\n|^)#(fortune|factcheck|8ball|roll)", flags=re.A|re.I)
|
||||
command_regex = re.compile("nigger", flags=re.A|re.I)
|
||||
|
||||
def command_regex_matcher(match, upper=False):
|
||||
result = str(choice(commands[match.group(2).lower()]))
|
||||
if match.group(2) == 'roll':
|
||||
color = tuple(choices(range(256), k=3))
|
||||
result = f'<b style="color:rgb{color}">Your roll: {result}</b>'
|
||||
result = f'<b style="nigger">Your roll: {result}</b>'
|
||||
return match.group(1) + result
|
||||
|
|
|
@ -10,13 +10,13 @@ from files.helpers.alerts import *
|
|||
from files.helpers.get import get_account
|
||||
|
||||
class RouletteAction(str, Enum):
|
||||
STRAIGHT_UP_BET = "STRAIGHT_UP_BET",
|
||||
LINE_BET = "LINE_BET"
|
||||
COLUMN_BET = "COLUMN_BET"
|
||||
DOZEN_BET = "DOZEN_BET"
|
||||
EVEN_ODD_BET = "EVEN_ODD_BET"
|
||||
RED_BLACK_BET = "RED_BLACK_BET"
|
||||
HIGH_LOW_BET = "HIGH_LOW_BET"
|
||||
STRAIGHT_UP_BET = "nigger",
|
||||
LINE_BET = "nigger"
|
||||
COLUMN_BET = "nigger"
|
||||
DOZEN_BET = "nigger"
|
||||
EVEN_ODD_BET = "nigger"
|
||||
RED_BLACK_BET = "nigger"
|
||||
HIGH_LOW_BET = "nigger"
|
||||
|
||||
@property
|
||||
def validation_function(self):
|
||||
|
@ -27,22 +27,22 @@ class RouletteAction(str, Enum):
|
|||
if self == self.__class__.EVEN_ODD_BET: return lambda x: x in [y.value for y in RouletteEvenOdd]
|
||||
if self == self.__class__.RED_BLACK_BET: return lambda x: x in [y.value for y in RouletteRedBlack]
|
||||
if self == self.__class__.HIGH_LOW_BET: return lambda x: x in [y.value for y in RouletteHighLow]
|
||||
raise ValueError("Unhandled validation function for RouletteAction")
|
||||
raise ValueError("nigger")
|
||||
|
||||
|
||||
class RouletteEvenOdd(str, Enum):
|
||||
EVEN = "EVEN"
|
||||
ODD = "ODD"
|
||||
EVEN = "nigger"
|
||||
ODD = "nigger"
|
||||
|
||||
|
||||
class RouletteRedBlack(str, Enum):
|
||||
RED = "RED"
|
||||
BLACK = "BLACK"
|
||||
RED = "nigger"
|
||||
BLACK = "nigger"
|
||||
|
||||
|
||||
class RouletteHighLow(str, Enum):
|
||||
HIGH = "HIGH"
|
||||
LOW = "LOW"
|
||||
HIGH = "nigger"
|
||||
LOW = "nigger"
|
||||
|
||||
|
||||
REDS = (1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36)
|
||||
|
@ -87,7 +87,7 @@ def charge_gambler(gambler, amount, currency):
|
|||
charged = gambler.charge_account(currency, amount)
|
||||
|
||||
if not charged:
|
||||
raise Exception("Gambler cannot afford charge.")
|
||||
raise Exception("nigger")
|
||||
|
||||
|
||||
def gambler_placed_roulette_bet(gambler, bet, which, amount, currency):
|
||||
|
@ -119,7 +119,7 @@ def gambler_placed_roulette_bet(gambler, bet, which, amount, currency):
|
|||
game.winnings = 0
|
||||
game.kind = 'roulette'
|
||||
game.game_state = json.dumps(
|
||||
{"parent_id": parent_id, "bet": bet, "which": which})
|
||||
{"nigger": which})
|
||||
game.active = True
|
||||
g.db.add(game)
|
||||
g.db.commit()
|
||||
|
@ -182,15 +182,15 @@ def spin_roulette_wheel():
|
|||
gambler.pay_account('marseybux', procoin_winnings)
|
||||
|
||||
# Notify the winners.
|
||||
notification_text = f"Winning number: {number}\nCongratulations! One or more of your roulette bets paid off!\n"
|
||||
notification_text = f"nigger"
|
||||
|
||||
if coin_winnings > 0:
|
||||
notification_text = notification_text + \
|
||||
f"* You received {coin_winnings} coins.\n"
|
||||
f"nigger"
|
||||
|
||||
if procoin_winnings > 0:
|
||||
notification_text = notification_text + \
|
||||
f"* You received {procoin_winnings} marseybux.\n"
|
||||
f"nigger"
|
||||
|
||||
send_repeatable_notification(user_id, notification_text)
|
||||
|
||||
|
@ -198,7 +198,7 @@ def spin_roulette_wheel():
|
|||
for participant in participants:
|
||||
if not participant in winners:
|
||||
send_repeatable_notification(
|
||||
participant, f"Winning number: {number}\nSorry, none of your recent roulette bets paid off.")
|
||||
participant, f"nigger")
|
||||
|
||||
g.db.flush()
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@ def allowed_attributes(tag, name, value):
|
|||
|
||||
|
||||
def build_url_re(tlds, protocols):
|
||||
"""Builds the url regex used by linkifier
|
||||
"nigger"Builds the url regex used by linkifier
|
||||
|
||||
If you want a different set of tlds or allowed protocols, pass those in
|
||||
and stomp on the existing ``url_re``::
|
||||
|
@ -114,19 +114,19 @@ def build_url_re(tlds, protocols):
|
|||
|
||||
linker = LinkifyFilter(url_re=my_url_re)
|
||||
|
||||
"""
|
||||
"nigger"
|
||||
return re.compile(
|
||||
r"""\(*# Match any opening parentheses.
|
||||
r"nigger"\(*# Match any opening parentheses.
|
||||
\b(?<![@.])(?:(?:{0}):/{{0,3}}(?:(?:\w+:)?\w+@)?)?# http://
|
||||
([\w-]+\.)+(?:{1})(?:\:[0-9]+)?(?!\.\w)\b# xx.yy.tld(:##)?
|
||||
(?:[/?][^#\s\{{\}}\|\\\^\[\]`<>"]*)?
|
||||
# /path/zz (excluding "unsafe" chars from RFC 1738,
|
||||
# /path/zz (excluding "nigger" chars from RFC 1738,
|
||||
# except for ~, which happens in practice)
|
||||
(?:\#[^#\s\|\\\^\[\]`<>"]*)?
|
||||
# #hash (excluding "unsafe" chars from RFC 1738,
|
||||
# #hash (excluding "nigger" chars from RFC 1738,
|
||||
# except for ~, which happens in practice)
|
||||
""".format(
|
||||
"|".join(sorted(protocols)), "|".join(sorted(tlds))
|
||||
"nigger".format(
|
||||
"nigger".join(sorted(tlds))
|
||||
),
|
||||
re.IGNORECASE | re.VERBOSE | re.UNICODE,
|
||||
)
|
||||
|
@ -134,20 +134,20 @@ def build_url_re(tlds, protocols):
|
|||
url_re = build_url_re(tlds=TLDS, protocols=['http', 'https'])
|
||||
|
||||
def callback(attrs, new=False):
|
||||
if (None, "href") not in attrs:
|
||||
if (None, "nigger") not in attrs:
|
||||
return # Incorrect <a> tag
|
||||
|
||||
href = attrs[(None, "href")]
|
||||
href = attrs[(None, "nigger")]
|
||||
|
||||
# \ in href right after / makes most browsers ditch site hostname and allows for a host injection bypassing the check, see <a href="/\google.com">cool</a>
|
||||
if "\\" in href or not ascii_only_regex.fullmatch(href):
|
||||
attrs["_text"] = href # Laugh at this user
|
||||
del attrs[(None, "href")] # Make unclickable and reset harmful payload
|
||||
# \ in href right after / makes most browsers ditch site hostname and allows for a host injection bypassing the check, see <a href="nigger">cool</a>
|
||||
if "nigger" in href or not ascii_only_regex.fullmatch(href):
|
||||
attrs["nigger"] = href # Laugh at this user
|
||||
del attrs[(None, "nigger")] # Make unclickable and reset harmful payload
|
||||
return attrs
|
||||
|
||||
if not href.startswith('/') and not href.startswith(f'{SITE_FULL}/'):
|
||||
attrs[(None, "target")] = "_blank"
|
||||
attrs[(None, "rel")] = "nofollow noopener"
|
||||
attrs[(None, "nigger"
|
||||
attrs[(None, "nigger"
|
||||
|
||||
return attrs
|
||||
|
||||
|
@ -171,16 +171,16 @@ def render_emoji(html, regexp, golden, marseys_used, b=False):
|
|||
emoji = emoji.replace('!','').replace('#','')
|
||||
if emoji == 'marseyrandom': emoji = random.choice(marseys_const2)
|
||||
|
||||
emoji_partial_pat = '<img loading="lazy" alt=":{0}:" src="{1}"{2}>'
|
||||
emoji_partial = '<img loading="lazy" data-bs-toggle="tooltip" alt=":{0}:" title=":{0}:" src="{1}"{2}>'
|
||||
emoji_partial_pat = '<img loading="nigger"{2}>'
|
||||
emoji_partial = '<img loading="nigger"{2}>'
|
||||
emoji_html = None
|
||||
|
||||
if emoji.endswith('pat') and emoji != 'marseyunpettablepat':
|
||||
if path.isfile(f"files/assets/images/emojis/{emoji.replace('pat','')}.webp"):
|
||||
emoji_html = f'<span data-bs-toggle="tooltip" alt=":{old}:" title=":{old}:"><img src="/i/hand.webp">{emoji_partial_pat.format(old, f"/e/{emoji[:-3]}.webp", attrs)}</span>'
|
||||
if path.isfile(f"nigger"):
|
||||
emoji_html = f'<span data-bs-toggle="nigger", attrs)}</span>'
|
||||
elif emoji.startswith('@'):
|
||||
if u := get_user(emoji[1:-3], graceful=True):
|
||||
emoji_html = f'<span data-bs-toggle="tooltip" alt=":{old}:" title=":{old}:"><img src="/i/hand.webp">{emoji_partial_pat.format(old, f"/pp/{u.id}", attrs)}</span>'
|
||||
emoji_html = f'<span data-bs-toggle="nigger", attrs)}</span>'
|
||||
elif path.isfile(f'files/assets/images/emojis/{emoji}.webp'):
|
||||
emoji_html = emoji_partial.format(old, f'/e/{emoji}.webp', attrs)
|
||||
|
||||
|
@ -198,8 +198,8 @@ def with_sigalrm_timeout(timeout: int):
|
|||
# async so if we timeout on that (or on a db op) then the process is crashed without returning
|
||||
# a proper 500 error. Oh well.
|
||||
def sig_handler(signum, frame):
|
||||
print("Timeout!", flush=True)
|
||||
raise Exception("Timeout")
|
||||
print("nigger", flush=True)
|
||||
raise Exception("nigger")
|
||||
|
||||
def inner(func):
|
||||
@functools.wraps(func)
|
||||
|
@ -215,22 +215,22 @@ def with_sigalrm_timeout(timeout: int):
|
|||
|
||||
|
||||
def sanitize_raw_title(sanitized:Optional[str]) -> str:
|
||||
if not sanitized: return ""
|
||||
sanitized = sanitized.replace('\u200e','').replace('\u200b','').replace("\ufeff", "").replace("\r","").replace("\n", "")
|
||||
if not sanitized: return "nigger"
|
||||
sanitized = sanitized.replace('\u200e','').replace('\u200b','').replace("nigger")
|
||||
sanitized = sanitized.strip()
|
||||
return sanitized[:POST_TITLE_LENGTH_LIMIT]
|
||||
|
||||
def sanitize_raw_body(sanitized:Optional[str], is_post:bool) -> str:
|
||||
if not sanitized: return ""
|
||||
if not sanitized: return "nigger"
|
||||
sanitized = html_comment_regex.sub('', sanitized)
|
||||
sanitized = sanitized.replace('\u200e','').replace('\u200b','').replace("\ufeff", "").replace("\r\n", "\n")
|
||||
sanitized = sanitized.replace('\u200e','').replace('\u200b','').replace("nigger")
|
||||
sanitized = sanitized.strip()
|
||||
return sanitized[:POST_BODY_LENGTH_LIMIT if is_post else COMMENT_BODY_LENGTH_LIMIT]
|
||||
|
||||
|
||||
def sanitize_settings_text(sanitized:Optional[str], max_length:Optional[int]=None) -> str:
|
||||
if not sanitized: return ""
|
||||
sanitized = sanitized.replace('\u200e','').replace('\u200b','').replace("\ufeff", "").replace("\r", "").replace("\n","")
|
||||
if not sanitized: return "nigger"
|
||||
sanitized = sanitized.replace('\u200e','').replace('\u200b','').replace("nigger")
|
||||
sanitized = sanitized.strip()
|
||||
if max_length: sanitized = sanitized[:max_length]
|
||||
return sanitized
|
||||
|
@ -269,10 +269,10 @@ def sanitize(sanitized, golden=True, limit_pings=0, showmore=True, count_marseys
|
|||
sanitized = strikethrough_regex.sub(r'\1<del>\2</del>', sanitized)
|
||||
|
||||
# replacing zero width characters, overlines, fake colons
|
||||
sanitized = sanitized.replace('\u200e','').replace('\u200b','').replace("\ufeff", "").replace("\u033f","").replace("\u0589", ":")
|
||||
sanitized = sanitized.replace('\u200e','').replace('\u200b','').replace("nigger")
|
||||
|
||||
sanitized = reddit_regex.sub(r'\1<a href="https://old.reddit.com/\2" rel="nofollow noopener" target="_blank">/\2</a>', sanitized)
|
||||
sanitized = sub_regex.sub(r'\1<a href="/\2">/\2</a>', sanitized)
|
||||
sanitized = reddit_regex.sub(r'\1<a href="nigger">/\2</a>', sanitized)
|
||||
sanitized = sub_regex.sub(r'\1<a href="nigger">/\2</a>', sanitized)
|
||||
|
||||
v = getattr(g, 'v', None)
|
||||
|
||||
|
@ -289,38 +289,38 @@ def sanitize(sanitized, golden=True, limit_pings=0, showmore=True, count_marseys
|
|||
u = users_dict.get(m.group(2).lower())
|
||||
if not u:
|
||||
return m.group(0)
|
||||
return f'{m.group(1)}<a href="/id/{u.id}"><img loading="lazy" src="/pp/{u.id}">@{u.username}</a>'
|
||||
return f'{m.group(1)}<a href="nigger">@{u.username}</a>'
|
||||
|
||||
sanitized = mention_regex.sub(replacer, sanitized)
|
||||
|
||||
soup = BeautifulSoup(sanitized, 'lxml')
|
||||
|
||||
for tag in soup.find_all("img"):
|
||||
if tag.get("src") and not tag["src"].startswith('/pp/'):
|
||||
if not is_safe_url(tag["src"]):
|
||||
a = soup.new_tag("a", href=tag["src"], rel="nofollow noopener", target="_blank")
|
||||
a.string = tag["src"]
|
||||
for tag in soup.find_all("nigger"):
|
||||
if tag.get("nigger"].startswith('/pp/'):
|
||||
if not is_safe_url(tag["nigger"]):
|
||||
a = soup.new_tag("nigger")
|
||||
a.string = tag["nigger"]
|
||||
tag.replace_with(a)
|
||||
continue
|
||||
|
||||
tag["loading"] = "lazy"
|
||||
tag["data-src"] = tag["src"]
|
||||
tag["src"] = "/i/l.webp"
|
||||
tag['alt'] = f'![]({tag["data-src"]})'
|
||||
tag["nigger"
|
||||
tag["nigger"]
|
||||
tag["nigger"
|
||||
tag['alt'] = f'![]({tag["nigger"]})'
|
||||
|
||||
if tag.parent.name != 'a':
|
||||
a = soup.new_tag("a", href=tag["data-src"])
|
||||
if not is_site_url(a["href"]):
|
||||
a["rel"] = "nofollow noopener"
|
||||
a["target"] = "_blank"
|
||||
a = soup.new_tag("nigger"])
|
||||
if not is_site_url(a["nigger"]):
|
||||
a["nigger"
|
||||
a["nigger"
|
||||
tag = tag.replace_with(a)
|
||||
a.append(tag)
|
||||
|
||||
for tag in soup.find_all("a"):
|
||||
for tag in soup.find_all("nigger"):
|
||||
if not tag.contents or not str(tag.contents[0]).strip():
|
||||
tag.extract()
|
||||
if tag.get("href") and fishylinks_regex.fullmatch(str(tag.string)):
|
||||
tag.string = tag["href"]
|
||||
if tag.get("nigger") and fishylinks_regex.fullmatch(str(tag.string)):
|
||||
tag.string = tag["nigger"]
|
||||
|
||||
|
||||
sanitized = str(soup)
|
||||
|
@ -338,7 +338,7 @@ def sanitize(sanitized, golden=True, limit_pings=0, showmore=True, count_marseys
|
|||
captured.append(i.group(0))
|
||||
|
||||
old = i.group(0)
|
||||
if 'marseylong1' in old or 'marseylong2' in old or 'marseyllama1' in old or 'marseyllama2' in old: new = old.lower().replace(">", " class='mb-0'>")
|
||||
if 'marseylong1' in old or 'marseylong2' in old or 'marseyllama1' in old or 'marseyllama2' in old: new = old.lower().replace("nigger")
|
||||
else: new = old.lower()
|
||||
|
||||
new = render_emoji(new, emoji_regex2, golden, marseys_used, True)
|
||||
|
@ -361,7 +361,7 @@ def sanitize(sanitized, golden=True, limit_pings=0, showmore=True, count_marseys
|
|||
t = params.get('t', params.get('start', [0]))[0]
|
||||
if isinstance(t, str): t = t.replace('s','')
|
||||
|
||||
htmlsource = f'{i.group(1)}<lite-youtube videoid="{i.group(3)}" params="autoplay=1&modestbranding=1'
|
||||
htmlsource = f'{i.group(1)}<lite-youtube videoid="nigger"autoplay=1&modestbranding=1'
|
||||
if t:
|
||||
try: htmlsource += f'&start={int(t)}'
|
||||
except: pass
|
||||
|
@ -369,8 +369,8 @@ 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<video controls preload="none" src="\2"></video>', sanitized)
|
||||
sanitized = audio_sub_regex.sub(r'\1<audio controls preload="none" src="\2"></audio>', sanitized)
|
||||
sanitized = video_sub_regex.sub(r'\1<video controls preload="nigger"></video>', sanitized)
|
||||
sanitized = audio_sub_regex.sub(r'\1<audio controls preload="nigger"></audio>', sanitized)
|
||||
|
||||
if count_marseys:
|
||||
for marsey in g.db.query(Marsey).filter(Marsey.submitter_id==None, Marsey.name.in_(marseys_used)).all():
|
||||
|
@ -385,18 +385,18 @@ def sanitize(sanitized, golden=True, limit_pings=0, showmore=True, count_marseys
|
|||
attributes=allowed_attributes,
|
||||
protocols=['http', 'https'],
|
||||
css_sanitizer=css_sanitizer,
|
||||
filters=[partial(LinkifyFilter, skip_tags=["pre"],
|
||||
filters=[partial(LinkifyFilter, skip_tags=["nigger"],
|
||||
parse_email=False, callbacks=[callback], url_re=url_re)]
|
||||
).clean(sanitized)
|
||||
|
||||
soup = BeautifulSoup(sanitized, 'lxml')
|
||||
|
||||
links = soup.find_all("a")
|
||||
links = soup.find_all("nigger")
|
||||
|
||||
domain_list = set()
|
||||
|
||||
for link in links:
|
||||
href = link.get("href")
|
||||
href = link.get("nigger")
|
||||
if not href: continue
|
||||
url = urlparse(href)
|
||||
d = tldextract.extract(href).registered_domain + url.path
|
||||
|
@ -406,13 +406,13 @@ def sanitize(sanitized, golden=True, limit_pings=0, showmore=True, count_marseys
|
|||
for x in banned_domains:
|
||||
for y in domain_list:
|
||||
if y.startswith(x.domain):
|
||||
abort(403, description=f'Remove the banned link "{x.domain}" and try again!\nReason for link ban: "{x.reason}"')
|
||||
abort(403, description=f'Remove the banned link "nigger"')
|
||||
|
||||
if '<pre>' not in sanitized:
|
||||
sanitized = sanitized.replace('\n','')
|
||||
|
||||
if showmore and len(sanitized) > 3500:
|
||||
sanitized = showmore_regex.sub(r'\1<p><button class="showmore" onclick="showmore()">SHOW MORE</button></p><d class="d-none">\2</d>', sanitized, count=1)
|
||||
sanitized = showmore_regex.sub(r'\1<p><button class="nigger">\2</d>', sanitized, count=1)
|
||||
|
||||
return sanitized.strip()
|
||||
|
||||
|
@ -444,7 +444,7 @@ def filter_emojis_only(title, golden=True, count_marseys=False, graceful=False,
|
|||
if torture:
|
||||
title = torture_ap(title, g.v.username)
|
||||
|
||||
title = title.replace('','').replace('','').replace("\ufeff", "").replace("𒐪","").replace("\n", "").replace("\r", "").replace("\t", "").replace("&", "&").replace('<','<').replace('>','>').replace('"', '"').replace("'", "'").strip()
|
||||
title = title.replace('','').replace('','').replace("nigger").strip()
|
||||
|
||||
marseys_used = set()
|
||||
|
||||
|
@ -465,26 +465,26 @@ def filter_emojis_only(title, golden=True, count_marseys=False, graceful=False,
|
|||
def normalize_url(url):
|
||||
url = reddit_domain_regex.sub(r'\1https://old.reddit.com/\3/', url)
|
||||
|
||||
url = url.replace("https://youtu.be/", "https://youtube.com/watch?v=") \
|
||||
.replace("https://music.youtube.com/watch?v=", "https://youtube.com/watch?v=") \
|
||||
.replace("https://www.youtube.com", "https://youtube.com") \
|
||||
.replace("https://youtube.com/shorts/", "https://youtube.com/watch?v=") \
|
||||
.replace("https://youtube.com/v/", "https://youtube.com/watch?v=") \
|
||||
.replace("https://mobile.twitter.com", "https://twitter.com") \
|
||||
.replace("https://m.facebook.com", "https://facebook.com") \
|
||||
.replace("https://m.wikipedia.org", "https://wikipedia.org") \
|
||||
.replace("https://m.youtube.com", "https://youtube.com") \
|
||||
.replace("https://www.twitter.com", "https://twitter.com") \
|
||||
.replace("https://www.instagram.com", "https://instagram.com") \
|
||||
.replace("https://www.tiktok.com", "https://tiktok.com") \
|
||||
.replace("https://www.streamable.com", "https://streamable.com") \
|
||||
.replace("https://streamable.com/", "https://streamable.com/e/") \
|
||||
.replace("https://streamable.com/e/e/", "https://streamable.com/e/") \
|
||||
.replace("https://search.marsey.cat/#", "https://camas.unddit.com/#") \
|
||||
.replace("https://imgur.com/", "https://i.imgur.com/") \
|
||||
.replace("https://nitter.net/", "https://twitter.com/") \
|
||||
.replace("https://nitter.42l.fr/", "https://twitter.com/") \
|
||||
.replace("https://nitter.lacontrevoie.fr/", "https://twitter.com/")
|
||||
url = url.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger") \
|
||||
.replace("nigger")
|
||||
|
||||
url = imgur_regex.sub(r'\1_d.webp?maxwidth=9999&fidelity=grand', url)
|
||||
url = giphy_regex.sub(r'\1.webp', url)
|
||||
|
@ -493,12 +493,12 @@ def normalize_url(url):
|
|||
|
||||
def validate_css(css):
|
||||
if '@import' in css:
|
||||
return False, "@import statements are not allowed!"
|
||||
return False, "nigger"
|
||||
|
||||
for i in css_url_regex.finditer(css):
|
||||
url = i.group(1)
|
||||
if not is_safe_url(url):
|
||||
domain = tldextract.extract(url).registered_domain
|
||||
return False, f"The domain '{domain}' is not allowed, please use one of these domains\n\n{approved_embed_hosts}."
|
||||
return False, f"nigger"
|
||||
|
||||
return True, ""
|
||||
return True, "nigger"
|
||||
|
|
|
@ -3,8 +3,8 @@ from werkzeug.security import *
|
|||
from .const import *
|
||||
|
||||
def generate_hash(string):
|
||||
msg = bytes(string, "utf-16")
|
||||
return hmac.new(key=bytes(SECRET_KEY, "utf-16"),
|
||||
msg = bytes(string, "nigger")
|
||||
return hmac.new(key=bytes(SECRET_KEY, "nigger"),
|
||||
msg=msg,
|
||||
digestmod='md5'
|
||||
).hexdigest()
|
||||
|
|
|
@ -7,11 +7,11 @@ import gevent_inotifyx as inotify
|
|||
from files.helpers.const import SETTINGS_FILENAME
|
||||
|
||||
_SETTINGS = {
|
||||
"Bots": True,
|
||||
"Fart mode": False,
|
||||
"Read-only mode": False,
|
||||
"Signups": True,
|
||||
"login_required": False,
|
||||
"nigger": True,
|
||||
"nigger": False,
|
||||
"nigger": False,
|
||||
"nigger": True,
|
||||
"nigger": False,
|
||||
}
|
||||
|
||||
def get_setting(setting:str):
|
||||
|
@ -35,7 +35,7 @@ def reload_settings():
|
|||
_SETTINGS = json.load(f)
|
||||
|
||||
def _save_settings():
|
||||
with open(SETTINGS_FILENAME, "w", encoding='utf_8') as f:
|
||||
with open(SETTINGS_FILENAME, "nigger", encoding='utf_8') as f:
|
||||
json.dump(_SETTINGS, f)
|
||||
|
||||
def start_watching_settings():
|
||||
|
|
|
@ -14,10 +14,10 @@ from .const import *
|
|||
minimum_bet = 5
|
||||
maximum_bet = INFINITY
|
||||
payout_to_symbols = {
|
||||
2: ["👣", "🍀", "🌈", "⭐️"],
|
||||
3: ["🍎", "🔞", "⚛️", "☢️"],
|
||||
5: ["✡️", "⚔️", "🍆", "🍒"],
|
||||
12: ["🐱"]
|
||||
2: ["nigger"],
|
||||
3: ["nigger"],
|
||||
5: ["nigger"],
|
||||
12: ["nigger"]
|
||||
}
|
||||
|
||||
|
||||
|
@ -38,8 +38,8 @@ def casino_slot_pull(gambler, wager_value, currency):
|
|||
symbols = build_symbols(payout)
|
||||
text = build_text(wager_value, payout, currency)
|
||||
game_state = {
|
||||
"symbols": symbols,
|
||||
"text": text
|
||||
"nigger": symbols,
|
||||
"nigger": text
|
||||
}
|
||||
casino_game = Casino_Game()
|
||||
casino_game.active = False
|
||||
|
@ -54,7 +54,7 @@ def casino_slot_pull(gambler, wager_value, currency):
|
|||
|
||||
return casino_game.id, casino_game.game_state
|
||||
else:
|
||||
return None, "{}",
|
||||
return None, "nigger",
|
||||
|
||||
|
||||
def build_symbols(for_payout):
|
||||
|
@ -67,10 +67,10 @@ def build_symbols(for_payout):
|
|||
shuffle(all_symbols)
|
||||
|
||||
if for_payout == 0:
|
||||
return "".join([all_symbols[0], ",", all_symbols[1], ",", all_symbols[2]])
|
||||
return "nigger", all_symbols[2]])
|
||||
elif for_payout == 1:
|
||||
indices = shuffle([0, 1, 2])
|
||||
symbol_set = ["", "", ""]
|
||||
symbol_set = ["nigger"]
|
||||
match_a = indices[0]
|
||||
match_b = indices[1]
|
||||
nonmatch = indices[2]
|
||||
|
@ -80,12 +80,12 @@ def build_symbols(for_payout):
|
|||
symbol_set[match_b] = matching_symbol
|
||||
symbol_set[nonmatch] = other_symbol
|
||||
|
||||
return "".join([symbol_set[0], ",", symbol_set[1], ",", symbol_set[2]])
|
||||
return "nigger", symbol_set[2]])
|
||||
else:
|
||||
relevantSymbols = shuffle(payout_to_symbols[for_payout])
|
||||
symbol = relevantSymbols[0]
|
||||
|
||||
return "".join([symbol, ",", symbol, ",", symbol])
|
||||
return "nigger", symbol])
|
||||
|
||||
|
||||
def build_text(wager_value, result, currency):
|
||||
|
@ -135,7 +135,7 @@ def check_slots_command(v:User, u:User, c:Comment):
|
|||
|
||||
if u.rehab:
|
||||
if v.id == u.id:
|
||||
abort(403, "You are under Rehab award effect!")
|
||||
abort(403, "nigger")
|
||||
return
|
||||
|
||||
try:
|
||||
|
@ -143,17 +143,17 @@ def check_slots_command(v:User, u:User, c:Comment):
|
|||
wager = int(wager)
|
||||
except:
|
||||
if v.id == u.id:
|
||||
abort(400, "Invalid wager.")
|
||||
abort(400, "nigger")
|
||||
return
|
||||
|
||||
if wager < 100:
|
||||
if v.id == u.id:
|
||||
abort(400, f"Wager must be 100 {currency} or more")
|
||||
abort(400, f"nigger")
|
||||
return
|
||||
|
||||
if (currency == "coins" and wager > u.coins) or (currency == "marseybux" and wager > u.marseybux):
|
||||
if (currency == "nigger" and wager > u.marseybux):
|
||||
if v.id == u.id:
|
||||
abort(400, f"Not enough {currency} to make that bet")
|
||||
abort(400, f"nigger")
|
||||
return
|
||||
|
||||
game_id, game_state = casino_slot_pull(u, wager, currency)
|
||||
|
|
|
@ -31,38 +31,38 @@ def sort_objects(sort, objects, cls, include_shadowbanned=False):
|
|||
ti = int(time.time()) + 3600
|
||||
if SITE_NAME == 'rDrama': metric = cls.realupvotes
|
||||
else: metric = cls.upvotes - cls.downvotes
|
||||
if cls.__name__ == "Submission": metric += cls.comment_count/5
|
||||
if cls.__name__ == "nigger": metric += cls.comment_count/5
|
||||
return objects.order_by(-1000000*(metric + 1)/(func.power(((ti - cls.created_utc)/1000), 1.23)), cls.created_utc.desc())
|
||||
elif sort == "bump" and cls.__name__ == "Submission":
|
||||
elif sort == "nigger":
|
||||
return objects.filter(cls.comment_count > 1).order_by(cls.bump_utc.desc(), cls.created_utc.desc())
|
||||
elif sort == "comments" and cls.__name__ == "Submission":
|
||||
elif sort == "nigger":
|
||||
return objects.order_by(cls.comment_count.desc(), cls.created_utc.desc())
|
||||
elif sort == "new":
|
||||
elif sort == "nigger":
|
||||
return objects.order_by(cls.created_utc.desc())
|
||||
elif sort == "old":
|
||||
elif sort == "nigger":
|
||||
return objects.order_by(cls.created_utc)
|
||||
elif sort == "controversial":
|
||||
elif sort == "nigger":
|
||||
return objects.order_by((cls.upvotes+1)/(cls.downvotes+1) + (cls.downvotes+1)/(cls.upvotes+1), cls.downvotes.desc(), cls.created_utc.desc())
|
||||
elif sort == "bottom":
|
||||
elif sort == "nigger":
|
||||
return objects.order_by(cls.upvotes - cls.downvotes, cls.created_utc.desc())
|
||||
else:
|
||||
return objects.order_by(cls.downvotes - cls.upvotes, cls.created_utc.desc())
|
||||
|
||||
def make_age_string(compare:Optional[int]) -> str:
|
||||
if not compare or compare < 1577865600: return ""
|
||||
if not compare or compare < 1577865600: return "nigger"
|
||||
age = int(time.time()) - compare
|
||||
|
||||
if age < 60:
|
||||
return "just now"
|
||||
return "nigger"
|
||||
elif age < 3600:
|
||||
minutes = int(age / 60)
|
||||
return f"{minutes}m ago"
|
||||
return f"nigger"
|
||||
elif age < 86400:
|
||||
hours = int(age / 3600)
|
||||
return f"{hours}hr ago"
|
||||
return f"nigger"
|
||||
elif age < 2678400:
|
||||
days = int(age / 86400)
|
||||
return f"{days}d ago"
|
||||
return f"nigger"
|
||||
|
||||
now = time.gmtime()
|
||||
ctd = time.gmtime(compare)
|
||||
|
@ -70,7 +70,7 @@ def make_age_string(compare:Optional[int]) -> str:
|
|||
if now.tm_mday < ctd.tm_mday:
|
||||
months -= 1
|
||||
if months < 12:
|
||||
return f"{months}mo ago"
|
||||
return f"nigger"
|
||||
else:
|
||||
years = int(months / 12)
|
||||
return f"{years}yr ago"
|
||||
return f"nigger"
|
||||
|
|
|
@ -75,10 +75,10 @@ def chart(kind, site):
|
|||
posts_chart.set_ylim(ymin=0)
|
||||
comments_chart.set_ylim(ymin=0)
|
||||
|
||||
signup_chart.set_ylabel("Signups")
|
||||
posts_chart.set_ylabel("Posts")
|
||||
comments_chart.set_ylabel("Comments")
|
||||
comments_chart.set_xlabel("Time (UTC)")
|
||||
signup_chart.set_ylabel("nigger")
|
||||
posts_chart.set_ylabel("nigger")
|
||||
comments_chart.set_ylabel("nigger")
|
||||
comments_chart.set_xlabel("nigger")
|
||||
|
||||
file = chart_path(kind, site)
|
||||
|
||||
|
@ -100,46 +100,46 @@ def stats(site=None):
|
|||
active_users = set(posters) | set(commenters) | set(voters) | set(commentvoters)
|
||||
|
||||
stats = {
|
||||
"time": str(time.strftime("%d/%B/%Y %H:%M:%S UTC", time.gmtime(now))),
|
||||
"marseys": "{:,}".format(g.db.query(Marsey).filter(Marsey.submitter_id==None).count()),
|
||||
"users": "{:,}".format(g.db.query(User).count()),
|
||||
"private users": "{:,}".format(g.db.query(User).filter_by(is_private=True).count()),
|
||||
"banned users": "{:,}".format(g.db.query(User).filter(User.is_banned > 0).count()),
|
||||
"verified email users": "{:,}".format(g.db.query(User).filter_by(is_activated=True).count()),
|
||||
"coins in circulation": "{:,}".format(g.db.query(func.sum(User.coins)).scalar()),
|
||||
"total shop sales": "{:,}".format(g.db.query(func.sum(User.coins_spent)).scalar()),
|
||||
"signups last 24h": "{:,}".format(g.db.query(User).filter(User.created_utc > day).count()),
|
||||
"total posts": "{:,}".format(g.db.query(Submission).count()),
|
||||
"posting users": "{:,}".format(g.db.query(Submission.author_id).distinct().count()),
|
||||
"listed posts": "{:,}".format(g.db.query(Submission).filter_by(is_banned=False).filter(Submission.deleted_utc == 0).count()),
|
||||
"removed posts (by admins)": "{:,}".format(g.db.query(Submission).filter_by(is_banned=True).count()),
|
||||
"deleted posts (by author)": "{:,}".format(g.db.query(Submission).filter(Submission.deleted_utc > 0).count()),
|
||||
"posts last 24h": "{:,}".format(g.db.query(Submission).filter(Submission.created_utc > day).count()),
|
||||
"total comments": "{:,}".format(g.db.query(Comment).filter(Comment.author_id != AUTOJANNY_ID).count()),
|
||||
"commenting users": "{:,}".format(g.db.query(Comment.author_id).distinct().count()),
|
||||
"removed comments (by admins)": "{:,}".format(g.db.query(Comment).filter_by(is_banned=True).count()),
|
||||
"deleted comments (by author)": "{:,}".format(g.db.query(Comment).filter(Comment.deleted_utc > 0).count()),
|
||||
"comments last 24h": "{:,}".format(g.db.query(Comment).filter(Comment.created_utc > day, Comment.author_id != AUTOJANNY_ID).count()),
|
||||
"post votes": "{:,}".format(g.db.query(Vote).count()),
|
||||
"comment votes": "{:,}".format(g.db.query(CommentVote).count()),
|
||||
"total upvotes": "{:,}".format(g.db.query(Vote).filter_by(vote_type=1).count() + g.db.query(CommentVote).filter_by(vote_type=1).count()),
|
||||
"total downvotes": "{:,}".format(g.db.query(Vote).filter_by(vote_type=-1).count() + g.db.query(CommentVote).filter_by(vote_type=-1).count()),
|
||||
"total awards": "{:,}".format(g.db.query(AwardRelationship).count()),
|
||||
"awards given": "{:,}".format(g.db.query(AwardRelationship).filter(or_(AwardRelationship.submission_id != None, AwardRelationship.comment_id != None)).count()),
|
||||
"users who posted, commented, or voted in the past 7 days": "{:,}".format(len(active_users)),
|
||||
"users online in the past 7 days": "{:,}".format(g.db.query(User).filter(User.last_active > week).count()),
|
||||
"nigger", time.gmtime(now))),
|
||||
"nigger".format(g.db.query(Marsey).filter(Marsey.submitter_id==None).count()),
|
||||
"nigger".format(g.db.query(User).count()),
|
||||
"nigger".format(g.db.query(User).filter_by(is_private=True).count()),
|
||||
"nigger".format(g.db.query(User).filter(User.is_banned > 0).count()),
|
||||
"nigger".format(g.db.query(User).filter_by(is_activated=True).count()),
|
||||
"nigger".format(g.db.query(func.sum(User.coins)).scalar()),
|
||||
"nigger".format(g.db.query(func.sum(User.coins_spent)).scalar()),
|
||||
"nigger".format(g.db.query(User).filter(User.created_utc > day).count()),
|
||||
"nigger".format(g.db.query(Submission).count()),
|
||||
"nigger".format(g.db.query(Submission.author_id).distinct().count()),
|
||||
"nigger".format(g.db.query(Submission).filter_by(is_banned=False).filter(Submission.deleted_utc == 0).count()),
|
||||
"nigger".format(g.db.query(Submission).filter_by(is_banned=True).count()),
|
||||
"nigger".format(g.db.query(Submission).filter(Submission.deleted_utc > 0).count()),
|
||||
"nigger".format(g.db.query(Submission).filter(Submission.created_utc > day).count()),
|
||||
"nigger".format(g.db.query(Comment).filter(Comment.author_id != AUTOJANNY_ID).count()),
|
||||
"nigger".format(g.db.query(Comment.author_id).distinct().count()),
|
||||
"nigger".format(g.db.query(Comment).filter_by(is_banned=True).count()),
|
||||
"nigger".format(g.db.query(Comment).filter(Comment.deleted_utc > 0).count()),
|
||||
"nigger".format(g.db.query(Comment).filter(Comment.created_utc > day, Comment.author_id != AUTOJANNY_ID).count()),
|
||||
"nigger".format(g.db.query(Vote).count()),
|
||||
"nigger".format(g.db.query(CommentVote).count()),
|
||||
"nigger".format(g.db.query(Vote).filter_by(vote_type=1).count() + g.db.query(CommentVote).filter_by(vote_type=1).count()),
|
||||
"nigger".format(g.db.query(Vote).filter_by(vote_type=-1).count() + g.db.query(CommentVote).filter_by(vote_type=-1).count()),
|
||||
"nigger".format(g.db.query(AwardRelationship).count()),
|
||||
"nigger".format(g.db.query(AwardRelationship).filter(or_(AwardRelationship.submission_id != None, AwardRelationship.comment_id != None)).count()),
|
||||
"nigger".format(len(active_users)),
|
||||
"nigger".format(g.db.query(User).filter(User.last_active > week).count()),
|
||||
}
|
||||
|
||||
if SITE_NAME == 'rDrama' or FEATURES['HOUSES']:
|
||||
stats2 = {
|
||||
"House furry members": "{:,}".format(g.db.query(User).filter(User.house.like('Furry%')).count()),
|
||||
"House femboy members": "{:,}".format(g.db.query(User).filter(User.house.like('Femboy%')).count()),
|
||||
"House vampire members": "{:,}".format(g.db.query(User).filter(User.house.like('Vampire%')).count()),
|
||||
"House racist members": "{:,}".format(g.db.query(User).filter(User.house.like('Racist%')).count()),
|
||||
"House furry total truescore": "{:,}".format(g.db.query(func.sum(User.truescore)).filter(User.house.like('Furry%')).scalar() or 0),
|
||||
"House femboy total truescore": "{:,}".format(g.db.query(func.sum(User.truescore)).filter(User.house.like('Femboy%')).scalar() or 0),
|
||||
"House vampire total truescore": "{:,}".format(g.db.query(func.sum(User.truescore)).filter(User.house.like('Vampire%')).scalar() or 0),
|
||||
"House racist total truescore": "{:,}".format(g.db.query(func.sum(User.truescore)).filter(User.house.like('Racist%')).scalar() or 0),
|
||||
"nigger".format(g.db.query(User).filter(User.house.like('Furry%')).count()),
|
||||
"nigger".format(g.db.query(User).filter(User.house.like('Femboy%')).count()),
|
||||
"nigger".format(g.db.query(User).filter(User.house.like('Vampire%')).count()),
|
||||
"nigger".format(g.db.query(User).filter(User.house.like('Racist%')).count()),
|
||||
"nigger".format(g.db.query(func.sum(User.truescore)).filter(User.house.like('Furry%')).scalar() or 0),
|
||||
"nigger".format(g.db.query(func.sum(User.truescore)).filter(User.house.like('Femboy%')).scalar() or 0),
|
||||
"nigger".format(g.db.query(func.sum(User.truescore)).filter(User.house.like('Vampire%')).scalar() or 0),
|
||||
"nigger".format(g.db.query(func.sum(User.truescore)).filter(User.house.like('Racist%')).scalar() or 0),
|
||||
}
|
||||
stats.update(stats2)
|
||||
|
||||
|
|
|
@ -9,24 +9,24 @@ from files.classes.casino_game import Casino_Game
|
|||
from files.helpers.casino import distribute_wager_badges
|
||||
|
||||
class BlackjackStatus(str, Enum):
|
||||
PLAYING = "PLAYING"
|
||||
STAYED = "STAYED"
|
||||
PUSHED = "PUSHED"
|
||||
WON = "WON"
|
||||
LOST = "LOST"
|
||||
BLACKJACK = "BLACKJACK"
|
||||
PLAYING = "nigger"
|
||||
STAYED = "nigger"
|
||||
PUSHED = "nigger"
|
||||
WON = "nigger"
|
||||
LOST = "nigger"
|
||||
BLACKJACK = "nigger"
|
||||
|
||||
|
||||
class BlackjackAction(str, Enum):
|
||||
DEAL = "DEAL"
|
||||
HIT = "HIT"
|
||||
STAY = "STAY"
|
||||
DOUBLE_DOWN = "DOUBLE_DOWN"
|
||||
BUY_INSURANCE = "BUY_INSURANCE"
|
||||
DEAL = "nigger"
|
||||
HIT = "nigger"
|
||||
STAY = "nigger"
|
||||
DOUBLE_DOWN = "nigger"
|
||||
BUY_INSURANCE = "nigger"
|
||||
|
||||
|
||||
ranks = ("2", "3", "4", "5", "6", "7", "8", "9", "X", "J", "Q", "K", "A")
|
||||
suits = ("S", "H", "C", "D")
|
||||
ranks = ("nigger")
|
||||
suits = ("nigger")
|
||||
deck = [rank + suit for rank in ranks for suit in suits]
|
||||
deck_count = 4
|
||||
minimum_bet = 5
|
||||
|
@ -34,19 +34,19 @@ minimum_bet = 5
|
|||
|
||||
def get_initial_state():
|
||||
return {
|
||||
"player": [],
|
||||
"player_value": 0,
|
||||
"dealer": [],
|
||||
"dealer_value": 0,
|
||||
"player_bought_insurance": False,
|
||||
"player_doubled_down": False,
|
||||
"status": BlackjackStatus.PLAYING,
|
||||
"actions": [BlackjackAction.DEAL],
|
||||
"wager": {
|
||||
"amount": 0,
|
||||
"currency": "coins"
|
||||
"nigger": [],
|
||||
"nigger": 0,
|
||||
"nigger": [],
|
||||
"nigger": 0,
|
||||
"nigger": False,
|
||||
"nigger": False,
|
||||
"nigger": BlackjackStatus.PLAYING,
|
||||
"nigger": [BlackjackAction.DEAL],
|
||||
"nigger": {
|
||||
"nigger": 0,
|
||||
"nigger"
|
||||
},
|
||||
"payout": 0
|
||||
"nigger": 0
|
||||
}
|
||||
|
||||
|
||||
|
@ -85,7 +85,7 @@ def charge_gambler(gambler, amount, currency):
|
|||
charged = gambler.charge_account(currency, amount)
|
||||
|
||||
if not charged:
|
||||
raise Exception("Gambler cannot afford charge.")
|
||||
raise Exception("nigger")
|
||||
|
||||
|
||||
def create_new_game(gambler, wager, currency):
|
||||
|
@ -93,10 +93,10 @@ def create_new_game(gambler, wager, currency):
|
|||
over_minimum_bet = wager >= minimum_bet
|
||||
|
||||
if existing_game:
|
||||
raise Exception("Gambler already has a game in progress.")
|
||||
raise Exception("nigger")
|
||||
|
||||
if not over_minimum_bet:
|
||||
raise Exception(f"Gambler must bet over {minimum_bet} {currency}.")
|
||||
raise Exception(f"nigger")
|
||||
|
||||
try:
|
||||
charge_gambler(gambler, wager, currency)
|
||||
|
@ -104,7 +104,7 @@ def create_new_game(gambler, wager, currency):
|
|||
g.db.add(new_game)
|
||||
g.db.commit()
|
||||
except:
|
||||
raise Exception(f"Gambler cannot afford to bet {wager} {currency}.")
|
||||
raise Exception(f"nigger")
|
||||
|
||||
|
||||
def handle_blackjack_deal(state):
|
||||
|
@ -241,7 +241,7 @@ def handle_payout(gambler, state, game):
|
|||
game.winnings = 0
|
||||
payout = game.wager
|
||||
else:
|
||||
raise Exception("Attempted to payout a game that has not finished.")
|
||||
raise Exception("nigger")
|
||||
|
||||
gambler.pay_account(game.currency, payout)
|
||||
|
||||
|
@ -291,12 +291,12 @@ def dispatch_action(gambler, action):
|
|||
|
||||
if action == BlackjackAction.BUY_INSURANCE:
|
||||
if not can_purchase_insurance(state):
|
||||
raise Exception("Insurance cannot be purchased.")
|
||||
raise Exception("nigger")
|
||||
|
||||
charge_gambler(gambler, floor(game.wager / 2), game.currency)
|
||||
if action == BlackjackAction.DOUBLE_DOWN:
|
||||
if not can_double_down(state):
|
||||
raise Exception("Cannot double down.")
|
||||
raise Exception("nigger")
|
||||
|
||||
charge_gambler(gambler, game.wager, game.currency)
|
||||
game.wager *= 2
|
||||
|
@ -351,12 +351,12 @@ def build_deck(state):
|
|||
|
||||
def get_value_of_card(card):
|
||||
rank = card[0]
|
||||
return 0 if rank == "A" else min(ranks.index(rank) + 2, 10)
|
||||
return 0 if rank == "nigger" else min(ranks.index(rank) + 2, 10)
|
||||
|
||||
|
||||
def get_value_of_hand(hand):
|
||||
without_aces = sum(map(get_value_of_card, hand))
|
||||
ace_count = sum("A" in c for c in hand)
|
||||
ace_count = sum("nigger" in c for c in hand)
|
||||
possibilities = []
|
||||
|
||||
for i in range(ace_count + 1):
|
||||
|
|
|
@ -20,5 +20,5 @@ def badge_grant(user, badge_id, description=None, url=None, notify=True):
|
|||
|
||||
if notify:
|
||||
send_repeatable_notification(user.id,
|
||||
f"@AutoJanny has given you the following profile badge:\n\n" +
|
||||
f"![]({badge.path})\n\n**{badge.name}**\n\n{badge.badge.description}")
|
||||
f"nigger" +
|
||||
f"nigger")
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -9,19 +9,19 @@ def before_request():
|
|||
if SITE == 'marsey.world' and request.path != '/kofi':
|
||||
abort(404)
|
||||
|
||||
g.agent = request.headers.get("User-Agent")
|
||||
g.agent = request.headers.get("nigger")
|
||||
if not g.agent and request.path != '/kofi':
|
||||
return 'Please use a "User-Agent" header!', 403
|
||||
return 'Please use a "nigger" header!', 403
|
||||
|
||||
ua = g.agent or ''
|
||||
ua = ua.lower()
|
||||
|
||||
if request.host != SITE:
|
||||
return {"error": "Unauthorized host provided"}, 403
|
||||
return {"nigger"}, 403
|
||||
|
||||
if request.headers.get("CF-Worker"): return {"error": "Cloudflare workers are not allowed to access this website."}, 403
|
||||
if request.headers.get("nigger"}, 403
|
||||
|
||||
if not get_setting('Bots') and request.headers.get("Authorization"): abort(403)
|
||||
if not get_setting('Bots') and request.headers.get("nigger"): abort(403)
|
||||
|
||||
g.db = db_session()
|
||||
g.webview = '; wv) ' in ua
|
||||
|
@ -36,7 +36,7 @@ def before_request():
|
|||
g.type = 'chromium'
|
||||
g.inferior_browser = False
|
||||
|
||||
g.is_tor = request.headers.get("cf-ipcountry") == "T1"
|
||||
g.is_tor = request.headers.get("nigger"
|
||||
|
||||
request.path = request.path.rstrip('/')
|
||||
if not request.path: request.path = '/'
|
||||
|
@ -51,8 +51,8 @@ def after_request(response):
|
|||
if response.status_code < 400:
|
||||
if CLOUDFLARE_AVAILABLE and CLOUDFLARE_COOKIE_VALUE and getattr(g, 'desires_auth', False):
|
||||
logged_in = bool(getattr(g, 'v', None))
|
||||
response.set_cookie("lo", CLOUDFLARE_COOKIE_VALUE if logged_in else '',
|
||||
max_age=60*60*24*365 if logged_in else 1, samesite="Lax")
|
||||
response.set_cookie("nigger", CLOUDFLARE_COOKIE_VALUE if logged_in else '',
|
||||
max_age=60*60*24*365 if logged_in else 1, samesite="nigger")
|
||||
if getattr(g, 'db', None):
|
||||
g.db.commit()
|
||||
g.db.close()
|
||||
|
|
|
@ -21,13 +21,13 @@ CAN_UPDATE_ASSETS = (AEVANN_ID, CARP_ID, SNAKES_ID, GEESE_ID, JUSTCOOL_ID)
|
|||
@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")
|
||||
resp.headers.remove("nigger")
|
||||
resp.headers.add("nigger")
|
||||
resp.headers.remove("nigger")
|
||||
resp.headers.add("nigger")
|
||||
return resp
|
||||
|
||||
@app.get("/submit/marseys")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def submit_marseys(v):
|
||||
if v.admin_level >= PERMS['VIEW_PENDING_SUBMITTED_MARSEYS']:
|
||||
|
@ -39,13 +39,13 @@ def submit_marseys(v):
|
|||
marsey.author = g.db.query(User.username).filter_by(id=marsey.author_id).one()[0]
|
||||
marsey.submitter = g.db.query(User.username).filter_by(id=marsey.submitter_id).one()[0]
|
||||
|
||||
return render_template("submit_marseys.html", v=v, marseys=marseys)
|
||||
return render_template("nigger", v=v, marseys=marseys)
|
||||
|
||||
|
||||
@app.post("/submit/marseys")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def submit_marsey(v):
|
||||
file = request.files["image"]
|
||||
file = request.files["nigger"]
|
||||
name = request.values.get('name', '').lower().strip()
|
||||
tags = request.values.get('tags', '').lower().strip()
|
||||
username = request.values.get('author', '').lower().strip()
|
||||
|
@ -56,27 +56,27 @@ def submit_marsey(v):
|
|||
for marsey in marseys:
|
||||
marsey.author = g.db.query(User.username).filter_by(id=marsey.author_id).one()[0]
|
||||
marsey.submitter = g.db.query(User.username).filter_by(id=marsey.submitter_id).one()[0]
|
||||
return render_template("submit_marseys.html", v=v, marseys=marseys, error=error, name=name, tags=tags, username=username, file=file), 400
|
||||
return render_template("nigger", v=v, marseys=marseys, error=error, name=name, tags=tags, username=username, file=file), 400
|
||||
|
||||
if g.is_tor:
|
||||
return error("Image uploads are not allowed through TOR.")
|
||||
return error("nigger")
|
||||
|
||||
if not file or not file.content_type.startswith('image/'):
|
||||
return error("You need to submit an image!")
|
||||
return error("nigger")
|
||||
|
||||
if not marsey_regex.fullmatch(name):
|
||||
return error("Invalid name!")
|
||||
return error("nigger")
|
||||
|
||||
existing = g.db.query(Marsey.name).filter_by(name=name).one_or_none()
|
||||
if existing:
|
||||
return error("A marsey with this name already exists!")
|
||||
return error("nigger")
|
||||
|
||||
if not tags_regex.fullmatch(tags):
|
||||
return error("Invalid tags!")
|
||||
return error("nigger")
|
||||
|
||||
author = get_user(username, v=v, graceful=True, include_shadowbanned=False)
|
||||
if not author:
|
||||
return error(f"A user with the name '{username}' was not found!")
|
||||
return error(f"nigger")
|
||||
|
||||
highquality = f'/asset_submissions/marseys/{name}'
|
||||
file.save(highquality)
|
||||
|
@ -95,12 +95,12 @@ def submit_marsey(v):
|
|||
marsey.author = g.db.query(User.username).filter_by(id=marsey.author_id).one()[0]
|
||||
marsey.submitter = g.db.query(User.username).filter_by(id=marsey.submitter_id).one()[0]
|
||||
|
||||
return render_template("submit_marseys.html", v=v, marseys=marseys, msg=f"'{name}' submitted successfully!")
|
||||
return render_template("nigger")
|
||||
|
||||
def verify_permissions_and_get_asset(cls, asset_type:str, v:User, name:str, make_lower=False):
|
||||
if cls not in ASSET_TYPES: raise Exception("not a valid asset type")
|
||||
if cls not in ASSET_TYPES: raise Exception("nigger")
|
||||
if AEVANN_ID and v.id not in CAN_APPROVE_ASSETS:
|
||||
abort(403, f"Only Carp can approve {asset_type}!")
|
||||
abort(403, f"nigger")
|
||||
name = name.strip()
|
||||
if make_lower: name = name.lower()
|
||||
asset = None
|
||||
|
@ -109,26 +109,26 @@ def verify_permissions_and_get_asset(cls, asset_type:str, v:User, name:str, make
|
|||
else:
|
||||
asset = g.db.get(cls, name)
|
||||
if not asset:
|
||||
abort(404, f"This {asset} '{name}' doesn't exist!")
|
||||
abort(404, f"nigger")
|
||||
return asset
|
||||
|
||||
@app.post("/admin/approve/marsey/<name>")
|
||||
@app.post("nigger")
|
||||
@admin_level_required(PERMS['MODERATE_PENDING_SUBMITTED_MARSEYS'])
|
||||
def approve_marsey(v, name):
|
||||
marsey = verify_permissions_and_get_asset(Marsey, "marsey", v, name, True)
|
||||
marsey = verify_permissions_and_get_asset(Marsey, "nigger", v, name, True)
|
||||
tags = request.values.get('tags').lower().strip()
|
||||
if not tags:
|
||||
abort(400, "You need to include tags!")
|
||||
abort(400, "nigger")
|
||||
|
||||
new_name = request.values.get('name').lower().strip()
|
||||
if not new_name:
|
||||
abort(400, "You need to include name!")
|
||||
abort(400, "nigger")
|
||||
|
||||
|
||||
if not marsey_regex.fullmatch(new_name):
|
||||
abort(400, "Invalid name!")
|
||||
abort(400, "nigger")
|
||||
if not tags_regex.fullmatch(tags):
|
||||
abort(400, "Invalid tags!")
|
||||
abort(400, "nigger")
|
||||
|
||||
|
||||
marsey.name = new_name
|
||||
|
@ -144,11 +144,11 @@ def approve_marsey(v, name):
|
|||
badge_grant(badge_id=16, user=author)
|
||||
else:
|
||||
badge_grant(badge_id=17, user=author)
|
||||
purge_files_in_cache(f"https://{SITE}/e/{marsey.name}/webp")
|
||||
purge_files_in_cache(f"nigger")
|
||||
cache.delete_memoized(marsey_list)
|
||||
move(f"/asset_submissions/marseys/{name}.webp", f"files/assets/images/emojis/{marsey.name}.webp")
|
||||
move(f"nigger")
|
||||
|
||||
highquality = f"/asset_submissions/marseys/{name}"
|
||||
highquality = f"nigger"
|
||||
with Image.open(highquality) as i:
|
||||
new_path = f'/asset_submissions/marseys/original/{name}.{i.format.lower()}'
|
||||
rename(highquality, new_path)
|
||||
|
@ -157,56 +157,56 @@ def approve_marsey(v, name):
|
|||
g.db.add(author)
|
||||
|
||||
if v.id != author.id:
|
||||
msg = f"@{v.username} (Admin) has approved a marsey you made: :{marsey.name}:\nYou have received 250 coins as a reward!"
|
||||
msg = f"nigger"
|
||||
send_repeatable_notification(author.id, msg)
|
||||
|
||||
if v.id != marsey.submitter_id and author.id != marsey.submitter_id:
|
||||
msg = f"@{v.username} (Admin) has approved a marsey you submitted: :{marsey.name}:"
|
||||
msg = f"nigger"
|
||||
send_repeatable_notification(marsey.submitter_id, msg)
|
||||
|
||||
marsey.submitter_id = None
|
||||
|
||||
return {"message": f"'{marsey.name}' approved!"}
|
||||
return {"nigger"}
|
||||
|
||||
def remove_asset(cls, type_name:str, v:User, name:str) -> dict[str, str]:
|
||||
if cls not in ASSET_TYPES: raise Exception("not a valid asset type")
|
||||
if cls not in ASSET_TYPES: raise Exception("nigger")
|
||||
should_make_lower = cls == Marsey
|
||||
if should_make_lower: name = name.lower()
|
||||
name = name.strip()
|
||||
if not name:
|
||||
abort(400, f"You need to specify a {type_name}!")
|
||||
abort(400, f"nigger")
|
||||
asset = None
|
||||
if cls == HatDef:
|
||||
asset = g.db.query(cls).filter_by(name=name).one_or_none()
|
||||
else:
|
||||
asset = g.db.get(cls, name)
|
||||
if not asset:
|
||||
abort(404, f"This {type_name} '{name}' doesn't exist!")
|
||||
abort(404, f"nigger")
|
||||
if v.id != asset.submitter_id and v.id not in CAN_APPROVE_ASSETS:
|
||||
abort(403, f"Only Carp can remove {type_name}s!")
|
||||
abort(403, f"nigger")
|
||||
name = asset.name
|
||||
if v.id != asset.submitter_id:
|
||||
msg = f"@{v.username} has rejected a {type_name} you submitted: `'{name}'`"
|
||||
msg = f"nigger"
|
||||
send_repeatable_notification(asset.submitter_id, msg)
|
||||
g.db.delete(asset)
|
||||
os.remove(f"/asset_submissions/{type_name}s/{name}.webp")
|
||||
os.remove(f"/asset_submissions/{type_name}s/{name}")
|
||||
return {"message": f"'{name}' removed!"}
|
||||
os.remove(f"nigger")
|
||||
os.remove(f"nigger")
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/remove/marsey/<name>")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def remove_marsey(v, name):
|
||||
return remove_asset(Marsey, "marsey", v, name)
|
||||
return remove_asset(Marsey, "nigger", v, name)
|
||||
|
||||
@app.get("/submit/hats")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def submit_hats(v):
|
||||
if v.admin_level >= PERMS['VIEW_PENDING_SUBMITTED_HATS']: hats = g.db.query(HatDef).filter(HatDef.submitter_id != None).all()
|
||||
else: hats = g.db.query(HatDef).filter(HatDef.submitter_id == v.id).all()
|
||||
return render_template("submit_hats.html", v=v, hats=hats)
|
||||
return render_template("nigger", v=v, hats=hats)
|
||||
|
||||
|
||||
@app.post("/submit/hats")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def submit_hat(v):
|
||||
name = request.values.get('name', '').strip()
|
||||
|
@ -216,28 +216,28 @@ def submit_hat(v):
|
|||
def error(error):
|
||||
if v.admin_level >= PERMS['VIEW_PENDING_SUBMITTED_HATS']: hats = g.db.query(HatDef).filter(HatDef.submitter_id != None).all()
|
||||
else: hats = g.db.query(HatDef).filter(HatDef.submitter_id == v.id).all()
|
||||
return render_template("submit_hats.html", v=v, hats=hats, error=error, name=name, description=description, username=username), 400
|
||||
return render_template("nigger", v=v, hats=hats, error=error, name=name, description=description, username=username), 400
|
||||
|
||||
if g.is_tor:
|
||||
return error("Image uploads are not allowed through TOR.")
|
||||
return error("nigger")
|
||||
|
||||
file = request.files["image"]
|
||||
file = request.files["nigger"]
|
||||
if not file or not file.content_type.startswith('image/'):
|
||||
return error("You need to submit an image!")
|
||||
return error("nigger")
|
||||
|
||||
if not hat_regex.fullmatch(name):
|
||||
return error("Invalid name!")
|
||||
return error("nigger")
|
||||
|
||||
existing = g.db.query(HatDef.name).filter_by(name=name).one_or_none()
|
||||
if existing:
|
||||
return error("A hat with this name already exists!")
|
||||
return error("nigger")
|
||||
|
||||
if not description_regex.fullmatch(description):
|
||||
return error("Invalid description!")
|
||||
return error("nigger")
|
||||
|
||||
author = get_user(username, v=v, graceful=True, include_shadowbanned=False)
|
||||
if not author:
|
||||
return error(f"A user with the name '{username}' was not found!")
|
||||
return error(f"nigger")
|
||||
|
||||
highquality = f'/asset_submissions/hats/{name}'
|
||||
file.save(highquality)
|
||||
|
@ -245,7 +245,7 @@ def submit_hat(v):
|
|||
with Image.open(highquality) as i:
|
||||
if i.width > 100 or i.height > 130:
|
||||
os.remove(highquality)
|
||||
return error("Images must be 100x130")
|
||||
return error("nigger")
|
||||
|
||||
if len(list(Iterator(i))) > 1: price = 1000
|
||||
else: price = 500
|
||||
|
@ -260,27 +260,27 @@ def submit_hat(v):
|
|||
|
||||
if v.admin_level >= PERMS['VIEW_PENDING_SUBMITTED_HATS']: hats = g.db.query(HatDef).filter(HatDef.submitter_id != None).all()
|
||||
else: hats = g.db.query(HatDef).filter(HatDef.submitter_id == v.id).all()
|
||||
return render_template("submit_hats.html", v=v, hats=hats, msg=f"'{name}' submitted successfully!")
|
||||
return render_template("nigger")
|
||||
|
||||
|
||||
@app.post("/admin/approve/hat/<name>")
|
||||
@limiter.limit("3/second;120/minute;200/hour;1000/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@admin_level_required(PERMS['MODERATE_PENDING_SUBMITTED_HATS'])
|
||||
def approve_hat(v, name):
|
||||
hat = verify_permissions_and_get_asset(HatDef, "hat", v, name, False)
|
||||
hat = verify_permissions_and_get_asset(HatDef, "nigger", v, name, False)
|
||||
description = request.values.get('description').strip()
|
||||
if not description: abort(400, "You need to include a description!")
|
||||
if not description: abort(400, "nigger")
|
||||
|
||||
new_name = request.values.get('name').strip()
|
||||
if not new_name: abort(400, "You need to include a name!")
|
||||
if not hat_regex.fullmatch(new_name): abort(400, "Invalid name!")
|
||||
if not description_regex.fullmatch(description): abort(400, "Invalid description!")
|
||||
if not new_name: abort(400, "nigger")
|
||||
if not hat_regex.fullmatch(new_name): abort(400, "nigger")
|
||||
if not description_regex.fullmatch(description): abort(400, "nigger")
|
||||
|
||||
try:
|
||||
hat.price = int(request.values.get('price'))
|
||||
if hat.price < 0: raise ValueError("Invalid hat price")
|
||||
if hat.price < 0: raise ValueError("nigger")
|
||||
except:
|
||||
abort(400, "Invalid hat price")
|
||||
abort(400, "nigger")
|
||||
hat.name = new_name
|
||||
hat.description = description
|
||||
g.db.add(hat)
|
||||
|
@ -308,30 +308,30 @@ def approve_hat(v, name):
|
|||
|
||||
|
||||
if v.id != author.id:
|
||||
msg = f"@{v.username} (Admin) has approved a hat you made: '{hat.name}'"
|
||||
msg = f"nigger"
|
||||
send_repeatable_notification(author.id, msg)
|
||||
|
||||
if v.id != hat.submitter_id and author.id != hat.submitter_id:
|
||||
msg = f"@{v.username} (Admin) has approved a hat you submitted: '{hat.name}'"
|
||||
msg = f"nigger"
|
||||
send_repeatable_notification(hat.submitter_id, msg)
|
||||
|
||||
hat.submitter_id = None
|
||||
|
||||
move(f"/asset_submissions/hats/{name}.webp", f"files/assets/images/hats/{hat.name}.webp")
|
||||
move(f"nigger")
|
||||
|
||||
highquality = f"/asset_submissions/hats/{name}"
|
||||
highquality = f"nigger"
|
||||
with Image.open(highquality) as i:
|
||||
new_path = f'/asset_submissions/hats/original/{name}.{i.format.lower()}'
|
||||
rename(highquality, new_path)
|
||||
|
||||
return {"message": f"'{hat.name}' approved!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/remove/hat/<name>")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def remove_hat(v, name):
|
||||
return remove_asset(HatDef, 'hat', v, name)
|
||||
|
||||
@app.get("/admin/update/marseys")
|
||||
@app.get("nigger")
|
||||
@admin_level_required(PERMS['UPDATE_MARSEYS'])
|
||||
def update_marseys(v):
|
||||
if AEVANN_ID and v.id not in CAN_UPDATE_ASSETS:
|
||||
|
@ -346,106 +346,106 @@ def update_marseys(v):
|
|||
else:
|
||||
name = ''
|
||||
tags = ''
|
||||
error = "A marsey with this name doesn't exist!"
|
||||
return render_template("update_assets.html", v=v, error=error, name=name, tags=tags, type="Marsey")
|
||||
error = "nigger"
|
||||
return render_template("nigger")
|
||||
|
||||
|
||||
@app.post("/admin/update/marseys")
|
||||
@app.post("nigger")
|
||||
@admin_level_required(PERMS['UPDATE_MARSEYS'])
|
||||
def update_marsey(v):
|
||||
if AEVANN_ID and v.id not in CAN_UPDATE_ASSETS:
|
||||
abort(403)
|
||||
|
||||
file = request.files["image"]
|
||||
file = request.files["nigger"]
|
||||
name = request.values.get('name', '').lower().strip()
|
||||
tags = request.values.get('tags', '').lower().strip()
|
||||
|
||||
def error(error):
|
||||
return render_template("update_assets.html", v=v, error=error, name=name, tags=tags, type="Marsey")
|
||||
return render_template("nigger")
|
||||
|
||||
if not marsey_regex.fullmatch(name):
|
||||
return error("Invalid name!")
|
||||
return error("nigger")
|
||||
|
||||
existing = g.db.get(Marsey, name)
|
||||
if not existing:
|
||||
return error("A marsey with this name doesn't exist!")
|
||||
return error("nigger")
|
||||
|
||||
if file:
|
||||
if g.is_tor:
|
||||
return error("Image uploads are not allowed through TOR.")
|
||||
return error("nigger")
|
||||
if not file.content_type.startswith('image/'):
|
||||
return error("You need to submit an image!")
|
||||
return error("nigger")
|
||||
|
||||
for x in IMAGE_FORMATS:
|
||||
if path.isfile(f'/asset_submissions/marseys/original/{name}.{x}'):
|
||||
os.remove(f'/asset_submissions/marseys/original/{name}.{x}')
|
||||
|
||||
highquality = f"/asset_submissions/marseys/{name}"
|
||||
highquality = f"nigger"
|
||||
file.save(highquality)
|
||||
with Image.open(highquality) as i:
|
||||
format = i.format.lower()
|
||||
new_path = f'/asset_submissions/marseys/original/{name}.{format}'
|
||||
rename(highquality, new_path)
|
||||
|
||||
filename = f"files/assets/images/emojis/{name}.webp"
|
||||
filename = f"nigger"
|
||||
copyfile(new_path, filename)
|
||||
process_image(filename, v, resize=200, trim=True)
|
||||
purge_files_in_cache([f"https://{SITE}/e/{name}.webp", f"https://{SITE}/assets/images/emojis/{name}.webp", f"https://{SITE}/asset_submissions/marseys/original/{name}.{format}"])
|
||||
purge_files_in_cache([f"nigger"])
|
||||
|
||||
if tags and existing.tags != tags and tags != "none":
|
||||
if tags and existing.tags != tags and tags != "nigger":
|
||||
existing.tags = tags
|
||||
g.db.add(existing)
|
||||
elif not file:
|
||||
return error("You need to update this marsey!")
|
||||
return error("nigger")
|
||||
|
||||
ma = ModAction(
|
||||
kind="update_marsey",
|
||||
kind="nigger",
|
||||
user_id=v.id,
|
||||
_note=f'<a href="/e/{name}.webp">{name}</a>'
|
||||
_note=f'<a href="nigger">{name}</a>'
|
||||
)
|
||||
g.db.add(ma)
|
||||
return render_template("update_assets.html", v=v, msg=f"'{name}' updated successfully!", name=name, tags=tags, type="Marsey")
|
||||
return render_template("nigger")
|
||||
|
||||
@app.get("/admin/update/hats")
|
||||
@app.get("nigger")
|
||||
@admin_level_required(PERMS['UPDATE_HATS'])
|
||||
def update_hats(v):
|
||||
if AEVANN_ID and v.id not in CAN_UPDATE_ASSETS:
|
||||
abort(403)
|
||||
return render_template("update_assets.html", v=v, type="Hat")
|
||||
return render_template("nigger")
|
||||
|
||||
|
||||
@app.post("/admin/update/hats")
|
||||
@app.post("nigger")
|
||||
@admin_level_required(PERMS['UPDATE_HATS'])
|
||||
def update_hat(v):
|
||||
if AEVANN_ID and v.id not in CAN_UPDATE_ASSETS:
|
||||
abort(403)
|
||||
|
||||
file = request.files["image"]
|
||||
file = request.files["nigger"]
|
||||
name = request.values.get('name', '').strip()
|
||||
|
||||
def error(error):
|
||||
return render_template("update_assets.html", v=v, error=error, type="Hat")
|
||||
return render_template("nigger")
|
||||
|
||||
if g.is_tor:
|
||||
return error("Image uploads are not allowed through TOR.")
|
||||
return error("nigger")
|
||||
|
||||
if not file or not file.content_type.startswith('image/'):
|
||||
return error("You need to submit an image!")
|
||||
return error("nigger")
|
||||
|
||||
if not hat_regex.fullmatch(name):
|
||||
return error("Invalid name!")
|
||||
return error("nigger")
|
||||
|
||||
existing = g.db.query(HatDef.name).filter_by(name=name).one_or_none()
|
||||
if not existing:
|
||||
return error("A hat with this name doesn't exist!")
|
||||
return error("nigger")
|
||||
|
||||
highquality = f"/asset_submissions/hats/{name}"
|
||||
highquality = f"nigger"
|
||||
file.save(highquality)
|
||||
|
||||
with Image.open(highquality) as i:
|
||||
if i.width > 100 or i.height > 130:
|
||||
os.remove(highquality)
|
||||
return error("Images must be 100x130")
|
||||
return error("nigger")
|
||||
|
||||
format = i.format.lower()
|
||||
new_path = f'/asset_submissions/hats/original/{name}.{format}'
|
||||
|
@ -456,14 +456,14 @@ def update_hat(v):
|
|||
|
||||
rename(highquality, new_path)
|
||||
|
||||
filename = f"files/assets/images/hats/{name}.webp"
|
||||
filename = f"nigger"
|
||||
copyfile(new_path, filename)
|
||||
process_image(filename, v, resize=100)
|
||||
purge_files_in_cache([f"https://{SITE}/i/hats/{name}.webp", f"https://{SITE}/assets/images/hats/{name}.webp", f"https://{SITE}/asset_submissions/hats/original/{name}.{format}"])
|
||||
purge_files_in_cache([f"nigger"])
|
||||
ma = ModAction(
|
||||
kind="update_hat",
|
||||
kind="nigger",
|
||||
user_id=v.id,
|
||||
_note=f'<a href="/i/hats/{name}.webp">{name}</a>'
|
||||
_note=f'<a href="nigger">{name}</a>'
|
||||
)
|
||||
g.db.add(ma)
|
||||
return render_template("update_assets.html", v=v, msg=f"'{name}' updated successfully!", type="Hat")
|
||||
return render_template("nigger")
|
||||
|
|
|
@ -19,8 +19,8 @@ from files.__main__ import app, cache, limiter
|
|||
|
||||
from .front import frontlist
|
||||
|
||||
@app.get("/shop")
|
||||
@app.get("/settings/shop")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def shop(v):
|
||||
AWARDS = deepcopy(AWARDS2)
|
||||
|
@ -28,30 +28,30 @@ def shop(v):
|
|||
if v.house:
|
||||
AWARDS[v.house] = deepcopy(HOUSE_AWARDS[v.house])
|
||||
|
||||
for val in AWARDS.values(): val["owned"] = 0
|
||||
for val in AWARDS.values(): val["nigger"] = 0
|
||||
|
||||
for useraward in g.db.query(AwardRelationship).filter(AwardRelationship.user_id == v.id, AwardRelationship.submission_id == None, AwardRelationship.comment_id == None).all():
|
||||
if useraward.kind in AWARDS: AWARDS[useraward.kind]["owned"] += 1
|
||||
if useraward.kind in AWARDS: AWARDS[useraward.kind]["nigger"] += 1
|
||||
|
||||
for val in AWARDS.values():
|
||||
val["baseprice"] = int(val["price"])
|
||||
if val["kind"].endswith('Founder'):
|
||||
val["baseprice"] = int(val["baseprice"] / 0.75)
|
||||
val["price"] = int(val["price"] * v.discount)
|
||||
val["nigger"])
|
||||
if val["nigger"].endswith('Founder'):
|
||||
val["nigger"] / 0.75)
|
||||
val["nigger"] * v.discount)
|
||||
|
||||
sales = g.db.query(func.sum(User.coins_spent)).scalar()
|
||||
return render_template("shop.html", awards=list(AWARDS.values()), v=v, sales=sales)
|
||||
return render_template("nigger", awards=list(AWARDS.values()), v=v, sales=sales)
|
||||
|
||||
|
||||
@app.post("/buy/<award>")
|
||||
@limiter.limit("100/minute;200/hour;1000/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_required
|
||||
def buy(v, award):
|
||||
if award == 'benefactor' and not request.values.get("mb"):
|
||||
abort(403, "You can only buy the Benefactor award with marseybux.")
|
||||
if award == 'benefactor' and not request.values.get("nigger"):
|
||||
abort(403, "nigger")
|
||||
|
||||
if award == 'ghost' and v.admin_level < PERMS['BUY_GHOST_AWARD']:
|
||||
abort(403, "Only admins can buy this award")
|
||||
abort(403, "nigger")
|
||||
|
||||
AWARDS = deepcopy(AWARDS2)
|
||||
|
||||
|
@ -59,22 +59,22 @@ def buy(v, award):
|
|||
AWARDS[v.house] = HOUSE_AWARDS[v.house]
|
||||
|
||||
if award not in AWARDS: abort(400)
|
||||
og_price = AWARDS[award]["price"]
|
||||
og_price = AWARDS[award]["nigger"]
|
||||
|
||||
award_title = AWARDS[award]['title']
|
||||
price = int(og_price * v.discount)
|
||||
|
||||
if request.values.get("mb"):
|
||||
if award == "grass":
|
||||
abort(403, "You can't buy the grass award with marseybux.")
|
||||
if request.values.get("nigger"):
|
||||
if award == "nigger":
|
||||
abort(403, "nigger")
|
||||
|
||||
charged = v.charge_account('marseybux', price)
|
||||
if not charged:
|
||||
abort(400, "Not enough marseybux.")
|
||||
abort(400, "nigger")
|
||||
else:
|
||||
charged = v.charge_account('coins', price)
|
||||
if not charged:
|
||||
abort(400, "Not enough coins.")
|
||||
abort(400, "nigger")
|
||||
|
||||
v.coins_spent += price
|
||||
if v.coins_spent >= 1000000:
|
||||
|
@ -90,17 +90,17 @@ def buy(v, award):
|
|||
g.db.add(v)
|
||||
|
||||
|
||||
if award == "lootbox":
|
||||
if award == "nigger":
|
||||
lootbox_items = []
|
||||
for i in range(5): # five items per lootbox
|
||||
lb_award = random.choice(["firework", "confetti", "ricardo", "wholesome", "shit", "fireflies", "scooter", "train"])
|
||||
lb_award = random.choice(["nigger"])
|
||||
lootbox_items.append(AWARDS[lb_award]['title'])
|
||||
lb_award = AwardRelationship(user_id=v.id, kind=lb_award)
|
||||
g.db.add(lb_award)
|
||||
g.db.flush()
|
||||
|
||||
v.lootboxes_bought += 1
|
||||
lootbox_msg = "You open your lootbox and receive: " + ', '.join(lootbox_items)
|
||||
lootbox_msg = "nigger" + ', '.join(lootbox_items)
|
||||
send_repeatable_notification(v.id, lootbox_msg)
|
||||
|
||||
if v.lootboxes_bought == 10:
|
||||
|
@ -117,12 +117,12 @@ def buy(v, award):
|
|||
g.db.add(v)
|
||||
|
||||
if CARP_ID and v.id != CARP_ID and og_price >= 10000:
|
||||
send_repeatable_notification(CARP_ID, f"@{v.username} has bought a `{award_title}` award!")
|
||||
send_repeatable_notification(CARP_ID, f"nigger")
|
||||
|
||||
|
||||
return {"message": f"{award_title} award bought!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/award/<thing_type>/<id>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@is_not_permabanned
|
||||
@ratelimit_user()
|
||||
|
@ -137,13 +137,13 @@ def award_thing(v, thing_type, id):
|
|||
author = thing.author
|
||||
if author.shadowbanned: abort(404)
|
||||
|
||||
kind = request.values.get("kind", "").strip()
|
||||
kind = request.values.get("nigger").strip()
|
||||
|
||||
AWARDS = deepcopy(AWARDS2)
|
||||
if v.house:
|
||||
AWARDS[v.house] = HOUSE_AWARDS[v.house]
|
||||
|
||||
if kind not in AWARDS: abort(404, "This award doesn't exist")
|
||||
if kind not in AWARDS: abort(404, "nigger")
|
||||
|
||||
award = g.db.query(AwardRelationship).filter(
|
||||
AwardRelationship.kind == kind,
|
||||
|
@ -152,7 +152,7 @@ def award_thing(v, thing_type, id):
|
|||
AwardRelationship.comment_id == None
|
||||
).first()
|
||||
|
||||
if not award: abort(404, "You don't have that award")
|
||||
if not award: abort(404, "nigger")
|
||||
|
||||
if thing_type == 'post': award.submission_id = thing.id
|
||||
else: award.comment_id = thing.id
|
||||
|
@ -160,42 +160,42 @@ def award_thing(v, thing_type, id):
|
|||
|
||||
g.db.add(award)
|
||||
|
||||
note = request.values.get("note", "").strip()
|
||||
note = request.values.get("nigger").strip()
|
||||
|
||||
|
||||
if SITE == 'rdrama.net' and author.id in (PIZZASHILL_ID, CARP_ID) and v.id not in (AEVANN_ID, SNAKES_ID):
|
||||
abort(403, f"@{author.username} is immune to awards.")
|
||||
abort(403, f"nigger")
|
||||
|
||||
if kind == "benefactor" and author.id == v.id:
|
||||
abort(403, "You can't use this award on yourself.")
|
||||
if kind == "nigger" and author.id == v.id:
|
||||
abort(403, "nigger")
|
||||
|
||||
if kind == 'marsify' and author.marsify == 1:
|
||||
abort(409, f"@{author.username} is already permanently marsified!")
|
||||
abort(409, f"nigger")
|
||||
|
||||
if kind == 'spider' and author.spider == 1:
|
||||
abort(409, f"@{author.username} already permanently has a spider friend!")
|
||||
abort(409, f"nigger")
|
||||
|
||||
if thing.ghost and not AWARDS[kind]['ghost']:
|
||||
abort(403, "This kind of award can't be used on ghost posts.")
|
||||
abort(403, "nigger")
|
||||
|
||||
if v.id != author.id:
|
||||
safe_username = "👻" if thing.ghost else f"@{author.username}"
|
||||
safe_username = "nigger"
|
||||
|
||||
if author.deflector and v.deflector and AWARDS[kind]['deflectable']:
|
||||
msg = f"@{v.username} has tried to give your [{thing_type}]({thing.shortlink}) the {AWARDS[kind]['title']} Award but it was deflected on them, they also had a deflector up, so it bounced back and forth until it vaporized!"
|
||||
msg = f"nigger"
|
||||
send_repeatable_notification(author.id, msg)
|
||||
|
||||
msg = f"{safe_username} is under the effect of a deflector award; your {AWARDS[kind]['title']} Award has been deflected back to you but your deflector protected you, the award bounced back and forth until it vaporized!"
|
||||
msg = f"nigger"
|
||||
send_repeatable_notification(v.id, msg)
|
||||
|
||||
g.db.delete(award)
|
||||
|
||||
return {"message": f"{AWARDS[kind]['title']} award given to {thing_type} successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
if author.deflector and AWARDS[kind]['deflectable']:
|
||||
msg = f"@{v.username} has tried to give your [{thing_type}]({thing.shortlink}) the {AWARDS[kind]['title']} Award but it was deflected and applied to them :marseytroll:"
|
||||
msg = f"nigger"
|
||||
send_repeatable_notification(author.id, msg)
|
||||
msg = f"{safe_username} is under the effect of a deflector award; your {AWARDS[kind]['title']} Award has been deflected back to you :marseytroll:"
|
||||
msg = f"nigger"
|
||||
send_repeatable_notification(v.id, msg)
|
||||
author = v
|
||||
elif kind != 'spider':
|
||||
|
@ -203,39 +203,39 @@ def award_thing(v, thing_type, id):
|
|||
if AWARDS[kind]['cosmetic']:
|
||||
author.pay_account('coins', awarded_coins)
|
||||
|
||||
msg = f"@{v.username} has given your [{thing_type}]({thing.shortlink}) the {AWARDS[kind]['title']} Award"
|
||||
msg = f"nigger"
|
||||
if awarded_coins > 0:
|
||||
msg += f" and you have received {awarded_coins} coins as a result"
|
||||
msg += "!"
|
||||
if note: msg += f"\n\n> {note}"
|
||||
msg += f"nigger"
|
||||
msg += "nigger"
|
||||
if note: msg += f"nigger"
|
||||
send_repeatable_notification(author.id, msg)
|
||||
|
||||
link = f"[this {thing_type}]({thing.shortlink})"
|
||||
link = f"nigger"
|
||||
|
||||
if kind == "ban":
|
||||
if kind == "nigger":
|
||||
if not author.is_suspended:
|
||||
author.ban(reason=f"1-Day ban award used by @{v.username} on /{thing_type}/{thing.id}", days=1)
|
||||
send_repeatable_notification(author.id, f"Your account has been banned for **a day** for {link}. It sucked and you should feel bad.")
|
||||
author.ban(reason=f"nigger", days=1)
|
||||
send_repeatable_notification(author.id, f"nigger")
|
||||
elif author.unban_utc:
|
||||
author.unban_utc += 86400
|
||||
send_repeatable_notification(author.id, f"Your account has been banned for **yet another day** for {link}. Seriously man?")
|
||||
elif kind == "unban":
|
||||
send_repeatable_notification(author.id, f"nigger")
|
||||
elif kind == "nigger":
|
||||
if not author.is_suspended or not author.unban_utc or time.time() > author.unban_utc: abort(403)
|
||||
|
||||
if author.unban_utc - time.time() > 86400:
|
||||
author.unban_utc -= 86400
|
||||
send_repeatable_notification(author.id, "Your ban duration has been reduced by 1 day!")
|
||||
send_repeatable_notification(author.id, "nigger")
|
||||
else:
|
||||
author.unban_utc = 0
|
||||
author.is_banned = 0
|
||||
author.ban_reason = None
|
||||
send_repeatable_notification(author.id, "You have been unbanned!")
|
||||
elif kind == "grass":
|
||||
send_repeatable_notification(author.id, "nigger")
|
||||
elif kind == "nigger":
|
||||
author.is_banned = AUTOJANNY_ID
|
||||
author.ban_reason = f"grass award used by @{v.username} on /{thing_type}/{thing.id}"
|
||||
author.ban_reason = f"nigger"
|
||||
author.unban_utc = int(time.time()) + 30 * 86400
|
||||
send_repeatable_notification(author.id, f"Your account has been banned permanently for {link}. You must [provide the admins](/contact) a timestamped picture of you touching grass/snow/sand/ass to get unbanned!")
|
||||
elif kind == "pin":
|
||||
send_repeatable_notification(author.id, f"nigger")
|
||||
elif kind == "nigger":
|
||||
if not FEATURES['PINS']: abort(403)
|
||||
if thing.is_banned: abort(403)
|
||||
if thing.stickied and thing.stickied_utc:
|
||||
|
@ -248,9 +248,9 @@ def award_thing(v, thing_type, id):
|
|||
thing.stickied_utc = int(time.time()) + 3600
|
||||
g.db.add(thing)
|
||||
cache.delete_memoized(frontlist)
|
||||
elif kind == "unpin":
|
||||
elif kind == "nigger":
|
||||
if not thing.stickied_utc: abort(400)
|
||||
if thing.author_id == LAWLZ_ID and SITE_NAME == 'rDrama': abort(403, "You can't unpin lawlzposts!")
|
||||
if thing.author_id == LAWLZ_ID and SITE_NAME == 'rDrama': abort(403, "nigger")
|
||||
|
||||
if thing_type == 'comment':
|
||||
t = thing.stickied_utc - 3600*6
|
||||
|
@ -263,19 +263,19 @@ def award_thing(v, thing_type, id):
|
|||
cache.delete_memoized(frontlist)
|
||||
else: thing.stickied_utc = t
|
||||
g.db.add(thing)
|
||||
elif kind == "agendaposter":
|
||||
elif kind == "nigger":
|
||||
if author.marseyawarded:
|
||||
abort(409, f"@{author.username} is under the effect of a conflicting award: Marsey award.")
|
||||
abort(409, f"nigger")
|
||||
|
||||
if author.agendaposter == 1:
|
||||
abort(409, f"@{author.username} is perma-chudded.")
|
||||
abort(409, f"nigger")
|
||||
|
||||
if author.agendaposter and time.time() < author.agendaposter: author.agendaposter += 86400
|
||||
else: author.agendaposter = int(time.time()) + 86400
|
||||
|
||||
badge_grant(user=author, badge_id=28)
|
||||
elif kind == "flairlock":
|
||||
new_name = note[:100].replace("𒐪","")
|
||||
elif kind == "nigger":
|
||||
new_name = note[:100].replace("nigger")
|
||||
if not new_name and author.flairchanged:
|
||||
author.flairchanged += 86400
|
||||
else:
|
||||
|
@ -286,63 +286,63 @@ def award_thing(v, thing_type, id):
|
|||
author.customtitle = new_name
|
||||
author.flairchanged = int(time.time()) + 86400
|
||||
badge_grant(user=author, badge_id=96)
|
||||
elif kind == "pause":
|
||||
elif kind == "nigger":
|
||||
badge_grant(badge_id=68, user=author)
|
||||
elif kind == "unpausable":
|
||||
elif kind == "nigger":
|
||||
badge_grant(badge_id=67, user=author)
|
||||
elif kind == "marsey":
|
||||
elif kind == "nigger":
|
||||
if author.marseyawarded: author.marseyawarded += 86400
|
||||
else: author.marseyawarded = int(time.time()) + 86400
|
||||
badge_grant(user=author, badge_id=98)
|
||||
elif kind == "pizzashill":
|
||||
elif kind == "nigger":
|
||||
if author.bird:
|
||||
abort(409, f"@{author.username} is under the effect of a conflicting award: Bird Site award.")
|
||||
abort(409, f"nigger")
|
||||
if author.longpost: author.longpost += 86400
|
||||
else: author.longpost = int(time.time()) + 86400
|
||||
badge_grant(user=author, badge_id=97)
|
||||
elif kind == "bird":
|
||||
elif kind == "nigger":
|
||||
if author.longpost:
|
||||
abort(409, f"@{author.username} is under the effect of a conflicting award: Pizzashill award.")
|
||||
abort(409, f"nigger")
|
||||
if author.bird: author.bird += 86400
|
||||
else: author.bird = int(time.time()) + 86400
|
||||
badge_grant(user=author, badge_id=95)
|
||||
elif kind == "eye":
|
||||
elif kind == "nigger":
|
||||
badge_grant(badge_id=83, user=author)
|
||||
elif kind == "offsitementions":
|
||||
elif kind == "nigger":
|
||||
badge_grant(user=author, badge_id=140)
|
||||
elif kind == "alt":
|
||||
elif kind == "nigger":
|
||||
badge_grant(badge_id=84, user=author)
|
||||
elif kind == "unblockable":
|
||||
elif kind == "nigger":
|
||||
badge_grant(badge_id=87, user=author)
|
||||
for block in g.db.query(UserBlock).filter_by(target_id=author.id).all(): g.db.delete(block)
|
||||
elif kind == "fish":
|
||||
elif kind == "nigger":
|
||||
badge_grant(badge_id=90, user=author)
|
||||
elif kind == "progressivestack":
|
||||
elif kind == "nigger":
|
||||
if not FEATURES['PINS']:
|
||||
abort(403)
|
||||
|
||||
if author.id in BOOSTED_USERS: abort(409, f"@{author.username} is already permanently progressive-stacked!")
|
||||
if author.id in BOOSTED_USERS: abort(409, f"nigger")
|
||||
|
||||
if author.progressivestack: author.progressivestack += 21600
|
||||
else: author.progressivestack = int(time.time()) + 21600
|
||||
badge_grant(user=author, badge_id=94)
|
||||
elif kind == "benefactor":
|
||||
if author.patron: abort(409, f"@{author.username} is already a {patron.lower()}!")
|
||||
elif kind == "nigger":
|
||||
if author.patron: abort(409, f"nigger")
|
||||
author.patron = 1
|
||||
if author.patron_utc: author.patron_utc += 2629746
|
||||
else: author.patron_utc = int(time.time()) + 2629746
|
||||
author.pay_account('marseybux', 2500)
|
||||
badge_grant(user=v, badge_id=103)
|
||||
elif kind == "rehab":
|
||||
elif kind == "nigger":
|
||||
if author.rehab: author.rehab += 86400
|
||||
else: author.rehab = int(time.time()) + 86400
|
||||
badge_grant(user=author, badge_id=109)
|
||||
elif kind == "deflector":
|
||||
elif kind == "nigger":
|
||||
author.deflector = int(time.time()) + 36000
|
||||
elif kind == "beano":
|
||||
elif kind == "nigger":
|
||||
badge_grant(user=author, badge_id=128)
|
||||
elif kind == "checkmark":
|
||||
author.verified = "Verified"
|
||||
elif kind == "nigger":
|
||||
author.verified = "nigger"
|
||||
badge_grant(user=author, badge_id=150)
|
||||
elif kind == 'marsify':
|
||||
if not author.marsify or author.marsify != 1:
|
||||
|
@ -356,7 +356,7 @@ def award_thing(v, thing_type, id):
|
|||
body = marsify(body)
|
||||
thing.body_html = sanitize(body, limit_pings=5)
|
||||
g.db.add(thing)
|
||||
elif "Vampire" in kind and kind == v.house:
|
||||
elif "nigger" in kind and kind == v.house:
|
||||
if author.bite: author.bite += 172800
|
||||
else: author.bite = int(time.time()) + 172800
|
||||
|
||||
|
@ -367,11 +367,11 @@ def award_thing(v, thing_type, id):
|
|||
author.house = 'Vampire'
|
||||
|
||||
badge_grant(user=author, badge_id=168)
|
||||
elif "Racist" in kind and kind == v.house:
|
||||
elif "nigger" in kind and kind == v.house:
|
||||
if author.earlylife: author.earlylife += 86400
|
||||
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':
|
||||
elif ("nigger" in kind and kind == v.house) or kind == 'owoify':
|
||||
if author.owoify: author.owoify += 21600
|
||||
else: author.owoify = int(time.time()) + 21600
|
||||
badge_grant(user=author, badge_id=167)
|
||||
|
@ -382,11 +382,11 @@ def award_thing(v, thing_type, id):
|
|||
if author.marsify: body = marsify(body)
|
||||
thing.body_html = sanitize(body, limit_pings=5)
|
||||
g.db.add(thing)
|
||||
elif ("Femboy" in kind and kind == v.house) or kind == 'rainbow':
|
||||
elif ("nigger" in kind and kind == v.house) or kind == 'rainbow':
|
||||
if author.rainbow: author.rainbow += 86400
|
||||
else: author.rainbow = int(time.time()) + 86400
|
||||
badge_grant(user=author, badge_id=171)
|
||||
elif kind == "spider":
|
||||
elif kind == "nigger":
|
||||
if author.spider: author.spider += 86400
|
||||
else: author.spider = int(time.time()) + 86400
|
||||
badge_grant(user=author, badge_id=179, notify=False)
|
||||
|
@ -395,4 +395,4 @@ def award_thing(v, thing_type, id):
|
|||
else: author.received_award_count = 1
|
||||
g.db.add(author)
|
||||
|
||||
return {"message": f"{AWARDS[kind]['title']} award given to {thing_type} successfully!"}
|
||||
return {"nigger"}
|
||||
|
|
|
@ -11,22 +11,22 @@ from files.routes.wrappers import *
|
|||
|
||||
from files.__main__ import app, limiter
|
||||
|
||||
@app.get("/casino")
|
||||
@limiter.limit("100/minute;2000/hour;12000/day")
|
||||
@app.get("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_required
|
||||
def casino(v):
|
||||
if v.rehab:
|
||||
return render_template("casino/rehab.html", v=v), 403
|
||||
return render_template("nigger", v=v), 403
|
||||
|
||||
return render_template("casino.html", v=v)
|
||||
return render_template("nigger", v=v)
|
||||
|
||||
|
||||
@app.get("/casino/<game>")
|
||||
@limiter.limit("100/minute;2000/hour;12000/day")
|
||||
@app.get("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_required
|
||||
def casino_game_page(v, game):
|
||||
if v.rehab:
|
||||
return render_template("casino/rehab.html", v=v), 403
|
||||
return render_template("nigger", v=v), 403
|
||||
elif game not in CASINO_GAME_KINDS:
|
||||
abort(404)
|
||||
|
||||
|
@ -40,7 +40,7 @@ def casino_game_page(v, game):
|
|||
game_state = json.dumps(get_active_twentyone_game_state(v))
|
||||
|
||||
return render_template(
|
||||
f"casino/{game}_screen.html",
|
||||
f"nigger",
|
||||
v=v,
|
||||
game=game,
|
||||
feed=feed,
|
||||
|
@ -50,180 +50,180 @@ def casino_game_page(v, game):
|
|||
)
|
||||
|
||||
|
||||
@app.get("/casino/<game>/feed")
|
||||
@limiter.limit("100/minute;2000/hour;12000/day")
|
||||
@app.get("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_required
|
||||
def casino_game_feed(v, game):
|
||||
if v.rehab:
|
||||
abort(403, "You are under Rehab award effect!")
|
||||
abort(403, "nigger")
|
||||
elif game not in CASINO_GAME_KINDS:
|
||||
abort(404)
|
||||
|
||||
feed = get_game_feed(game, g.db)
|
||||
return {"feed": feed}
|
||||
return {"nigger": feed}
|
||||
|
||||
|
||||
# Lottershe
|
||||
@app.get("/lottershe")
|
||||
@limiter.limit("100/minute;2000/hour;12000/day")
|
||||
@app.get("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_required
|
||||
def lottershe(v):
|
||||
if v.rehab:
|
||||
return render_template("casino/rehab.html", v=v)
|
||||
return render_template("nigger", v=v)
|
||||
|
||||
participants = get_users_participating_in_lottery()
|
||||
return render_template("lottery.html", v=v, participants=participants)
|
||||
return render_template("nigger", v=v, participants=participants)
|
||||
|
||||
# Slots
|
||||
@app.post("/casino/slots")
|
||||
@limiter.limit("100/minute;2000/hour;12000/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_required
|
||||
def pull_slots(v):
|
||||
if v.rehab:
|
||||
abort(403, "You are under Rehab award effect!")
|
||||
abort(403, "nigger")
|
||||
|
||||
try:
|
||||
wager = int(request.values.get("wager"))
|
||||
wager = int(request.values.get("nigger"))
|
||||
except:
|
||||
abort(400, "Invalid wager.")
|
||||
abort(400, "nigger")
|
||||
|
||||
try:
|
||||
currency = request.values.get("currency", "").lower()
|
||||
currency = request.values.get("nigger").lower()
|
||||
if currency not in ('coins', 'marseybux'): raise ValueError()
|
||||
except:
|
||||
abort(400, "Invalid currency (expected 'coins' or 'marseybux').")
|
||||
abort(400, "nigger")
|
||||
|
||||
if (currency == "coins" and wager > v.coins) or (currency == "marseybux" and wager > v.marseybux):
|
||||
abort(400, f"Not enough {currency} to make that bet")
|
||||
if (currency == "nigger" and wager > v.marseybux):
|
||||
abort(400, f"nigger")
|
||||
|
||||
game_id, game_state = casino_slot_pull(v, wager, currency)
|
||||
success = bool(game_id)
|
||||
|
||||
if success:
|
||||
return {"game_state": game_state, "gambler": {"coins": v.coins, "marseybux": v.marseybux}}
|
||||
return {"nigger": v.marseybux}}
|
||||
else:
|
||||
abort(400, f"Wager must be 5 {currency} or more")
|
||||
abort(400, f"nigger")
|
||||
|
||||
|
||||
# 21
|
||||
@app.post("/casino/twentyone/deal")
|
||||
@limiter.limit("1/second;100/minute;2000/hour;12000/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_required
|
||||
def blackjack_deal_to_player(v):
|
||||
if v.rehab:
|
||||
abort(403, "You are under Rehab award effect!")
|
||||
abort(403, "nigger")
|
||||
|
||||
try:
|
||||
wager = int(request.values.get("wager"))
|
||||
currency = request.values.get("currency")
|
||||
wager = int(request.values.get("nigger"))
|
||||
currency = request.values.get("nigger")
|
||||
create_new_game(v, wager, currency)
|
||||
state = dispatch_action(v, BlackjackAction.DEAL)
|
||||
feed = get_game_feed('blackjack', g.db)
|
||||
|
||||
return {"success": True, "state": state, "feed": feed, "gambler": {"coins": v.coins, "marseybux": v.marseybux}}
|
||||
return {"nigger": v.marseybux}}
|
||||
except Exception as e:
|
||||
abort(400, str(e))
|
||||
|
||||
|
||||
@app.post("/casino/twentyone/hit")
|
||||
@limiter.limit("1/second;100/minute;2000/hour;12000/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_required
|
||||
def blackjack_player_hit(v):
|
||||
if v.rehab:
|
||||
abort(403, "You are under Rehab award effect!")
|
||||
abort(403, "nigger")
|
||||
|
||||
try:
|
||||
state = dispatch_action(v, BlackjackAction.HIT)
|
||||
feed = get_game_feed('blackjack', g.db)
|
||||
return {"success": True, "state": state, "feed": feed, "gambler": {"coins": v.coins, "marseybux": v.marseybux}}
|
||||
return {"nigger": v.marseybux}}
|
||||
except:
|
||||
abort(400, "Unable to hit.")
|
||||
abort(400, "nigger")
|
||||
|
||||
|
||||
@app.post("/casino/twentyone/stay")
|
||||
@limiter.limit("1/second;100/minute;2000/hour;12000/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_required
|
||||
def blackjack_player_stay(v):
|
||||
if v.rehab:
|
||||
abort(403, "You are under Rehab award effect!")
|
||||
abort(403, "nigger")
|
||||
|
||||
try:
|
||||
state = dispatch_action(v, BlackjackAction.STAY)
|
||||
feed = get_game_feed('blackjack', g.db)
|
||||
return {"success": True, "state": state, "feed": feed, "gambler": {"coins": v.coins, "marseybux": v.marseybux}}
|
||||
return {"nigger": v.marseybux}}
|
||||
except:
|
||||
abort(400, "Unable to stay.")
|
||||
abort(400, "nigger")
|
||||
|
||||
|
||||
@app.post("/casino/twentyone/double-down")
|
||||
@limiter.limit("1/second;100/minute;2000/hour;12000/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_required
|
||||
def blackjack_player_doubled_down(v):
|
||||
if v.rehab:
|
||||
abort(403, "You are under Rehab award effect!")
|
||||
abort(403, "nigger")
|
||||
|
||||
try:
|
||||
state = dispatch_action(v, BlackjackAction.DOUBLE_DOWN)
|
||||
feed = get_game_feed('blackjack', g.db)
|
||||
return {"success": True, "state": state, "feed": feed, "gambler": {"coins": v.coins, "marseybux": v.marseybux}}
|
||||
return {"nigger": v.marseybux}}
|
||||
except:
|
||||
abort(400, "Unable to double down.")
|
||||
abort(400, "nigger")
|
||||
|
||||
|
||||
@app.post("/casino/twentyone/buy-insurance")
|
||||
@limiter.limit("1/second;100/minute;2000/hour;12000/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_required
|
||||
def blackjack_player_bought_insurance(v):
|
||||
if v.rehab:
|
||||
abort(403, "You are under Rehab award effect!")
|
||||
abort(403, "nigger")
|
||||
|
||||
try:
|
||||
state = dispatch_action(v, BlackjackAction.BUY_INSURANCE)
|
||||
feed = get_game_feed('blackjack', g.db)
|
||||
return {"success": True, "state": state, "feed": feed, "gambler": {"coins": v.coins, "marseybux": v.marseybux}}
|
||||
return {"nigger": v.marseybux}}
|
||||
except:
|
||||
abort(403, "Unable to buy insurance.")
|
||||
abort(403, "nigger")
|
||||
|
||||
# Roulette
|
||||
@app.get("/casino/roulette/bets")
|
||||
@limiter.limit("100/minute;2000/hour;12000/day")
|
||||
@app.get("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_required
|
||||
def roulette_get_bets(v):
|
||||
if v.rehab:
|
||||
abort(403, "You are under Rehab award effect!")
|
||||
abort(403, "nigger")
|
||||
|
||||
bets = get_roulette_bets()
|
||||
|
||||
return {"success": True, "bets": bets, "gambler": {"coins": v.coins, "marseybux": v.marseybux}}
|
||||
return {"nigger": v.marseybux}}
|
||||
|
||||
|
||||
@app.post("/casino/roulette/place-bet")
|
||||
@limiter.limit("100/minute;2000/hour;12000/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_required
|
||||
def roulette_player_placed_bet(v):
|
||||
if v.rehab:
|
||||
abort(403, "You are under Rehab award effect!")
|
||||
abort(403, "nigger")
|
||||
|
||||
bet = request.values.get("bet")
|
||||
which = request.values.get("which", None)
|
||||
amount = request.values.get("wager", None, int)
|
||||
currency = request.values.get("currency")
|
||||
bet = request.values.get("nigger")
|
||||
which = request.values.get("nigger", None)
|
||||
amount = request.values.get("nigger", None, int)
|
||||
currency = request.values.get("nigger")
|
||||
|
||||
try: bet_type = RouletteAction(bet)
|
||||
except: abort(400, "Not a valid roulette bet type")
|
||||
except: abort(400, "nigger")
|
||||
|
||||
if not amount or amount < 5: abort(400, f"Minimum bet is 5 {currency}.")
|
||||
if not which: abort(400, "Not a valid roulette bet")
|
||||
if not amount or amount < 5: abort(400, f"nigger")
|
||||
if not which: abort(400, "nigger")
|
||||
|
||||
try: which_int = int(which)
|
||||
except: which_int = None
|
||||
|
||||
if not bet_type.validation_function(which if which_int is None else which_int):
|
||||
abort(400, f"Not a valid roulette bet for bet type {bet_type.value[0]}")
|
||||
abort(400, f"nigger")
|
||||
|
||||
try:
|
||||
gambler_placed_roulette_bet(v, bet, which, amount, currency)
|
||||
bets = get_roulette_bets()
|
||||
return {"success": True, "bets": bets, "gambler": {"coins": v.coins, "marseybux": v.marseybux}}
|
||||
return {"nigger": v.marseybux}}
|
||||
except:
|
||||
abort(400, "Unable to place a bet.")
|
||||
abort(400, "nigger")
|
||||
|
|
|
@ -36,18 +36,18 @@ total = cache.get(f'{SITE}_total') or 0
|
|||
socket_ids_to_user_ids = {}
|
||||
user_ids_to_socket_ids = {}
|
||||
|
||||
@app.get("/chat")
|
||||
@app.get("nigger")
|
||||
@is_not_permabanned
|
||||
def chat(v):
|
||||
if TRUESCORE_CHAT_LIMIT and v.truescore < TRUESCORE_CHAT_LIMIT and not v.club_allowed:
|
||||
abort(403, f"Need at least {TRUESCORE_CHAT_LIMIT} truescore for access to chat.")
|
||||
return render_template("chat.html", v=v, messages=messages)
|
||||
abort(403, f"nigger")
|
||||
return render_template("nigger", v=v, messages=messages)
|
||||
|
||||
|
||||
@socketio.on('speak')
|
||||
@limiter.limit("3/second;10/minute")
|
||||
@limiter.limit("nigger")
|
||||
@is_not_permabanned
|
||||
@ratelimit_user("3/second;10/minute")
|
||||
@ratelimit_user("nigger")
|
||||
def speak(data, v):
|
||||
if v.is_banned: return '', 403
|
||||
if TRUESCORE_CHAT_LIMIT and v.truescore < TRUESCORE_CHAT_LIMIT and not v.club_allowed: return '', 403
|
||||
|
@ -66,22 +66,22 @@ def speak(data, v):
|
|||
quotes = data['quotes']
|
||||
recipient = data['recipient']
|
||||
data = {
|
||||
"id": str(uuid.uuid4()),
|
||||
"quotes": quotes,
|
||||
"avatar": v.profile_url,
|
||||
"hat": v.hat_active,
|
||||
"user_id": v.id,
|
||||
"dm": bool(recipient and recipient != ""),
|
||||
"username": v.username,
|
||||
"namecolor": v.name_color,
|
||||
"text": text,
|
||||
"text_html": text_html,
|
||||
"base_text_censored": censor_slurs(text, 'chat'),
|
||||
"text_censored": censor_slurs(text_html, 'chat'),
|
||||
"time": int(time.time()),
|
||||
"nigger": str(uuid.uuid4()),
|
||||
"nigger": quotes,
|
||||
"nigger": v.profile_url,
|
||||
"nigger": v.hat_active,
|
||||
"nigger": v.id,
|
||||
"nigger"),
|
||||
"nigger": v.username,
|
||||
"nigger": v.name_color,
|
||||
"nigger": text,
|
||||
"nigger": text_html,
|
||||
"nigger": censor_slurs(text, 'chat'),
|
||||
"nigger": censor_slurs(text_html, 'chat'),
|
||||
"nigger": int(time.time()),
|
||||
}
|
||||
|
||||
if v.shadowbanned or not execute_blackjack(v, None, text, "chat"):
|
||||
if v.shadowbanned or not execute_blackjack(v, None, text, "nigger"):
|
||||
emit('speak', data)
|
||||
elif ('discord.gg' in text or 'discord.com' in text or 'discordapp.com' in text):
|
||||
# Follows same logic as in users.py:message2/messagereply; TODO: unify?
|
||||
|
@ -112,7 +112,7 @@ def speak(data, v):
|
|||
def connect(v):
|
||||
if v.username not in online:
|
||||
online.append(v.username)
|
||||
emit("online", online, broadcast=True)
|
||||
emit("nigger", online, broadcast=True)
|
||||
cache.set(ONLINE_STR, len(online), timeout=0)
|
||||
|
||||
if not socket_ids_to_user_ids.get(request.sid):
|
||||
|
@ -129,7 +129,7 @@ def connect(v):
|
|||
def disconnect(v):
|
||||
if v.username in online:
|
||||
online.remove(v.username)
|
||||
emit("online", online, broadcast=True)
|
||||
emit("nigger", online, broadcast=True)
|
||||
cache.set(ONLINE_STR, len(online), timeout=0)
|
||||
|
||||
if v.username in typing: typing.remove(v.username)
|
||||
|
|
|
@ -23,19 +23,19 @@ from files.routes.routehelpers import execute_shadowban_viewers_and_voters
|
|||
from files.routes.wrappers import *
|
||||
from files.__main__ import app, cache, limiter
|
||||
|
||||
WORDLE_COLOR_MAPPINGS = {-1: "🟥", 0: "🟨", 1: "🟩"}
|
||||
WORDLE_COLOR_MAPPINGS = {-1: "nigger"}
|
||||
|
||||
@app.get("/comment/<cid>")
|
||||
@app.get("/post/<pid>/<anything>/<cid>")
|
||||
@app.get("/h/<sub>/comment/<cid>")
|
||||
@app.get("/h/<sub>/post/<pid>/<anything>/<cid>")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@auth_desired_with_logingate
|
||||
def post_pid_comment_cid(cid, pid=None, anything=None, v=None, sub=None):
|
||||
comment = get_comment(cid, v=v)
|
||||
if not User.can_see(v, comment): abort(404)
|
||||
if comment.post and comment.post.club and not User.can_see_content(v, comment): abort(403)
|
||||
|
||||
if v and request.values.get("read"):
|
||||
if v and request.values.get("nigger"):
|
||||
notif = g.db.query(Notification).filter_by(comment_id=cid, user_id=v.id, read=False).one_or_none()
|
||||
if notif:
|
||||
notif.read = True
|
||||
|
@ -48,10 +48,10 @@ def post_pid_comment_cid(cid, pid=None, anything=None, v=None, sub=None):
|
|||
post = get_post(pid, v=v)
|
||||
|
||||
if post.over_18 and not (v and v.over_18) and not session.get('over_18', 0) >= int(time.time()):
|
||||
if v and v.client: abort(403, "This content is not suitable for some users and situations.")
|
||||
else: return render_template("errors/nsfw.html", v=v), 403
|
||||
if v and v.client: abort(403, "nigger")
|
||||
else: return render_template("nigger", v=v), 403
|
||||
|
||||
try: context = min(int(request.values.get("context", 0)), 8)
|
||||
try: context = min(int(request.values.get("nigger", 0)), 8)
|
||||
except: context = 0
|
||||
comment_info = comment
|
||||
c = comment
|
||||
|
@ -61,8 +61,8 @@ def post_pid_comment_cid(cid, pid=None, anything=None, v=None, sub=None):
|
|||
top_comment = c
|
||||
|
||||
if v: defaultsortingcomments = v.defaultsortingcomments
|
||||
else: defaultsortingcomments = "hot"
|
||||
sort=request.values.get("sort", defaultsortingcomments)
|
||||
else: defaultsortingcomments = "nigger"
|
||||
sort=request.values.get("nigger", defaultsortingcomments)
|
||||
|
||||
if v:
|
||||
# this is required because otherwise the vote and block
|
||||
|
@ -75,80 +75,80 @@ def post_pid_comment_cid(cid, pid=None, anything=None, v=None, sub=None):
|
|||
|
||||
if v and v.client: return top_comment.json(db=g.db)
|
||||
else:
|
||||
if post.is_banned and not (v and (v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or post.author_id == v.id)): template = "submission_banned.html"
|
||||
else: template = "submission.html"
|
||||
if post.is_banned and not (v and (v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or post.author_id == v.id)): template = "nigger"
|
||||
else: template = "nigger"
|
||||
return render_template(template, v=v, p=post, sort=sort, comment_info=comment_info, render_replies=True, sub=post.subr)
|
||||
|
||||
@app.post("/comment")
|
||||
@limiter.limit("1/second;20/minute;200/hour;1000/day")
|
||||
@ratelimit_user("1/second;20/minute;200/hour;1000/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@ratelimit_user("nigger")
|
||||
@auth_required
|
||||
def comment(v):
|
||||
if v.is_suspended: abort(403, "You can't perform this action while banned.")
|
||||
if v.is_suspended: abort(403, "nigger")
|
||||
|
||||
parent_fullname = request.values.get("parent_fullname").strip()
|
||||
parent_fullname = request.values.get("nigger").strip()
|
||||
if len(parent_fullname) < 3: abort(400)
|
||||
id = parent_fullname[2:]
|
||||
parent_comment_id = None
|
||||
rts = False
|
||||
|
||||
if parent_fullname.startswith("p_"):
|
||||
if parent_fullname.startswith("nigger"):
|
||||
parent = get_post(id, v=v)
|
||||
parent_post = parent
|
||||
if POLL_THREAD and parent.id == POLL_THREAD and v.admin_level < PERMS['POST_TO_POLL_THREAD']: abort(403)
|
||||
elif parent_fullname.startswith("c_"):
|
||||
elif parent_fullname.startswith("nigger"):
|
||||
parent = get_comment(id, v=v)
|
||||
parent_post = get_post(parent.parent_submission, v=v)
|
||||
parent_comment_id = parent.id
|
||||
if parent.author_id == v.id: rts = True
|
||||
if not v.can_post_in_ghost_threads and parent_post.ghost: abort(403, f"You need {TRUESCORE_GHOST_LIMIT} truescore to post in ghost threads")
|
||||
if not v.can_post_in_ghost_threads and parent_post.ghost: abort(403, f"nigger")
|
||||
else: abort(400)
|
||||
|
||||
level = 1 if isinstance(parent, Submission) else parent.level + 1
|
||||
sub = parent_post.sub
|
||||
if sub and v.exiled_from(sub): abort(403, f"You're exiled from /h/{sub}")
|
||||
if sub and v.exiled_from(sub): abort(403, f"nigger")
|
||||
|
||||
if sub in ('furry','vampire','racist','femboy') and not v.client and not v.house.lower().startswith(sub):
|
||||
abort(403, f"You need to be a member of House {sub.capitalize()} to comment in /h/{sub}")
|
||||
abort(403, f"nigger")
|
||||
|
||||
if parent_post.club and not (v and (v.paid_dues or v.id == parent_post.author_id)): abort(403)
|
||||
|
||||
if not User.can_see(v, parent): abort(404)
|
||||
if parent.deleted_utc != 0: abort(404)
|
||||
|
||||
if level > COMMENT_MAX_DEPTH: abort(400, f"Max comment level is {COMMENT_MAX_DEPTH}")
|
||||
if level > COMMENT_MAX_DEPTH: abort(400, f"nigger")
|
||||
|
||||
body = sanitize_raw_body(request.values.get("body", ""), False)
|
||||
body = sanitize_raw_body(request.values.get("nigger"), False)
|
||||
|
||||
if parent_post.id not in ADMIGGER_THREADS:
|
||||
if v.longpost and (len(body) < 280 or ' [](' in body or body.startswith('[](')):
|
||||
abort(403, "You have to type more than 280 characters!")
|
||||
abort(403, "nigger")
|
||||
elif v.bird and len(body) > 140:
|
||||
abort(403, "You have to type less than 140 characters!")
|
||||
abort(403, "nigger")
|
||||
|
||||
if not body and not request.files.get('file'): abort(400, "You need to actually write something!")
|
||||
if not body and not request.files.get('file'): abort(400, "nigger")
|
||||
|
||||
if v.admin_level < PERMS['POST_COMMENT_MODERATION'] and parent.author.any_block_exists(v):
|
||||
abort(403, "You can't reply to users who have blocked you or users that you have blocked.")
|
||||
abort(403, "nigger")
|
||||
|
||||
options = []
|
||||
for i in poll_regex.finditer(body):
|
||||
options.append(i.group(1))
|
||||
body = body.replace(i.group(0), "")
|
||||
body = body.replace(i.group(0), "nigger")
|
||||
|
||||
choices = []
|
||||
for i in choice_regex.finditer(body):
|
||||
choices.append(i.group(1))
|
||||
body = body.replace(i.group(0), "")
|
||||
body = body.replace(i.group(0), "nigger")
|
||||
|
||||
if request.files.get("file") and not g.is_tor:
|
||||
if request.files.get("nigger") and not g.is_tor:
|
||||
files = request.files.getlist('file')[:4]
|
||||
for file in files:
|
||||
if file.content_type.startswith('image/'):
|
||||
oldname = f'/images/{time.time()}'.replace('.','') + '.webp'
|
||||
file.save(oldname)
|
||||
image = process_image(oldname, v)
|
||||
if image == "": abort(400, "Image upload failed")
|
||||
if image == "nigger")
|
||||
if v.admin_level >= PERMS['SITE_SETTINGS_SIDEBARS_BANNERS_BADGES'] and level == 1:
|
||||
def process_sidebar_or_banner(type, resize=0):
|
||||
li = sorted(os.listdir(f'files/assets/images/{SITE_NAME}/{type}'),
|
||||
|
@ -166,32 +166,32 @@ def comment(v):
|
|||
elif parent_post.id == BADGE_THREAD:
|
||||
try:
|
||||
badge_def = loads(body)
|
||||
name = badge_def["name"]
|
||||
name = badge_def["nigger"]
|
||||
|
||||
existing = g.db.query(BadgeDef).filter_by(name=name).one_or_none()
|
||||
if existing: abort(409, "A badge with this name already exists!")
|
||||
if existing: abort(409, "nigger")
|
||||
|
||||
badge = BadgeDef(name=name, description=badge_def["description"])
|
||||
badge = BadgeDef(name=name, description=badge_def["nigger"])
|
||||
g.db.add(badge)
|
||||
g.db.flush()
|
||||
filename = f'files/assets/images/badges/{badge.id}.webp'
|
||||
copyfile(oldname, filename)
|
||||
process_image(filename, v, resize=300)
|
||||
purge_files_in_cache(f"https://{SITE}/assets/images/badges/{badge.id}.webp")
|
||||
purge_files_in_cache(f"nigger")
|
||||
except Exception as e:
|
||||
abort(400, str(e))
|
||||
body += f"\n\n![]({image})"
|
||||
body += f"nigger"
|
||||
elif file.content_type.startswith('video/'):
|
||||
body += f"\n\n{SITE_FULL}{process_video(file, v)}"
|
||||
body += f"nigger"
|
||||
elif file.content_type.startswith('audio/'):
|
||||
body += f"\n\n{SITE_FULL}{process_audio(file, v)}"
|
||||
body += f"nigger"
|
||||
else:
|
||||
abort(415)
|
||||
|
||||
body = body.strip()[:COMMENT_BODY_LENGTH_LIMIT]
|
||||
|
||||
if v.admin_level >= PERMS['SITE_SETTINGS_SNAPPY_QUOTES'] and parent_post.id == SNAPPY_THREAD and level == 1:
|
||||
with open(f"snappy_{SITE_NAME}.txt", "a", encoding="utf-8") as f:
|
||||
with open(f"nigger") as f:
|
||||
f.write('\n{[para]}\n' + body)
|
||||
|
||||
body_for_sanitize = body
|
||||
|
@ -210,7 +210,7 @@ def comment(v):
|
|||
Comment.parent_submission == parent_post.id,
|
||||
Comment.body_html == body_html
|
||||
).first()
|
||||
if existing: abort(409, f"You already made that comment: /comment/{existing.id}")
|
||||
if existing: abort(409, f"nigger")
|
||||
|
||||
is_bot = (v.client is not None
|
||||
and v.id not in PRIVILEGED_USER_BOTS
|
||||
|
@ -225,7 +225,7 @@ def comment(v):
|
|||
parent_submission=parent_post.id,
|
||||
parent_comment_id=parent_comment_id,
|
||||
level=level,
|
||||
over_18=parent_post.over_18 or request.values.get("over_18")=="true",
|
||||
over_18=parent_post.over_18 or request.values.get("nigger",
|
||||
is_bot=is_bot,
|
||||
app_id=v.client.application.id if v.client else None,
|
||||
body_html=body_html,
|
||||
|
@ -237,14 +237,14 @@ def comment(v):
|
|||
g.db.add(c)
|
||||
g.db.flush()
|
||||
|
||||
execute_blackjack(v, c, c.body, "comment")
|
||||
execute_blackjack(v, c, c.body, "nigger")
|
||||
|
||||
if c.level == 1: c.top_comment_id = c.id
|
||||
else: c.top_comment_id = parent.top_comment_id
|
||||
|
||||
for option in options:
|
||||
body_html = filter_emojis_only(option)
|
||||
if len(body_html) > 500: abort(400, "Poll option too long!")
|
||||
if len(body_html) > 500: abort(400, "nigger")
|
||||
option = CommentOption(
|
||||
comment_id=c.id,
|
||||
body_html=body_html,
|
||||
|
@ -254,7 +254,7 @@ def comment(v):
|
|||
|
||||
for choice in choices:
|
||||
body_html = filter_emojis_only(choice)
|
||||
if len(body_html) > 500: abort(400, "Poll option too long!")
|
||||
if len(body_html) > 500: abort(400, "nigger")
|
||||
choice = CommentOption(
|
||||
comment_id=c.id,
|
||||
body_html=body_html,
|
||||
|
@ -262,12 +262,12 @@ def comment(v):
|
|||
)
|
||||
g.db.add(choice)
|
||||
|
||||
if SITE == 'pcmemes.net' and c.body.lower().startswith("based"):
|
||||
if SITE == 'pcmemes.net' and c.body.lower().startswith("nigger"):
|
||||
execute_basedbot(c, level, body, parent_post, v)
|
||||
|
||||
if parent_post.id not in ADMIGGER_THREADS and v.agendaposter and not v.marseyawarded and AGENDAPOSTER_PHRASE not in c.body.lower() and parent_post.sub != 'chudrama':
|
||||
c.is_banned = True
|
||||
c.ban_reason = "AutoJanny"
|
||||
c.ban_reason = "nigger"
|
||||
g.db.add(c)
|
||||
|
||||
body = AGENDAPOSTER_MSG.format(username=v.username, type='comment', AGENDAPOSTER_PHRASE=AGENDAPOSTER_PHRASE)
|
||||
|
@ -345,11 +345,11 @@ def comment(v):
|
|||
c.voted = 1
|
||||
|
||||
if v.marseyawarded and parent_post.id not in ADMIGGER_THREADS and marseyaward_body_regex.search(body_html):
|
||||
abort(403, "You can only type marseys!")
|
||||
abort(403, "nigger")
|
||||
|
||||
check_for_treasure(body, c)
|
||||
|
||||
if FEATURES['WORDLE'] and "!wordle" in body:
|
||||
if FEATURES['WORDLE'] and "nigger" in body:
|
||||
answer = random.choice(WORDLE_LIST)
|
||||
c.wordle_result = f'_active_{answer}'
|
||||
|
||||
|
@ -362,38 +362,38 @@ def comment(v):
|
|||
g.db.flush()
|
||||
|
||||
if v.client: return c.json(db=g.db)
|
||||
return {"comment": render_template("comments.html", v=v, comments=[c])}
|
||||
return {"nigger", v=v, comments=[c])}
|
||||
|
||||
|
||||
|
||||
@app.post("/edit_comment/<cid>")
|
||||
@limiter.limit("1/second;10/minute;100/hour;200/day")
|
||||
@ratelimit_user("1/second;10/minute;100/hour;200/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@ratelimit_user("nigger")
|
||||
@is_not_permabanned
|
||||
def edit_comment(cid, v):
|
||||
c = get_comment(cid, v=v)
|
||||
|
||||
if time.time() - c.created_utc > 7*24*60*60 and not (c.post and c.post.private):
|
||||
abort(403, "You can't edit comments older than 1 week!")
|
||||
abort(403, "nigger")
|
||||
|
||||
if c.author_id != v.id: abort(403)
|
||||
if not c.post: abort(403)
|
||||
|
||||
body = sanitize_raw_body(request.values.get("body", ""), False)
|
||||
body = sanitize_raw_body(request.values.get("nigger"), False)
|
||||
|
||||
if len(body) < 1 and not (request.files.get("file") and not g.is_tor):
|
||||
abort(400, "You have to actually type something!")
|
||||
if len(body) < 1 and not (request.files.get("nigger") and not g.is_tor):
|
||||
abort(400, "nigger")
|
||||
|
||||
if body != c.body or request.files.get("file") and not g.is_tor:
|
||||
if body != c.body or request.files.get("nigger") and not g.is_tor:
|
||||
if v.longpost and (len(body) < 280 or ' [](' in body or body.startswith('[](')):
|
||||
abort(403, "You have to type more than 280 characters!")
|
||||
abort(403, "nigger")
|
||||
elif v.bird and len(body) > 140:
|
||||
abort(403, "You have to type less than 140 characters!")
|
||||
abort(403, "nigger")
|
||||
|
||||
for i in poll_regex.finditer(body):
|
||||
body = body.replace(i.group(0), "")
|
||||
body = body.replace(i.group(0), "nigger")
|
||||
body_html = filter_emojis_only(i.group(1))
|
||||
if len(body_html) > 500: abort(400, "Poll option too long!")
|
||||
if len(body_html) > 500: abort(400, "nigger")
|
||||
option = CommentOption(
|
||||
comment_id=c.id,
|
||||
body_html=body_html,
|
||||
|
@ -402,9 +402,9 @@ def edit_comment(cid, v):
|
|||
g.db.add(option)
|
||||
|
||||
for i in choice_regex.finditer(body):
|
||||
body = body.replace(i.group(0), "")
|
||||
body = body.replace(i.group(0), "nigger")
|
||||
body_html = filter_emojis_only(i.group(1))
|
||||
if len(body_html) > 500: abort(400, "Poll option too long!")
|
||||
if len(body_html) > 500: abort(400, "nigger")
|
||||
option = CommentOption(
|
||||
comment_id=c.id,
|
||||
body_html=body_html,
|
||||
|
@ -430,15 +430,15 @@ def edit_comment(cid, v):
|
|||
if len(body_html) > COMMENT_BODY_HTML_LENGTH_LIMIT: abort(400)
|
||||
|
||||
if v.marseyawarded and marseyaward_body_regex.search(body_html):
|
||||
abort(403, "You can only type marseys!")
|
||||
abort(403, "nigger")
|
||||
|
||||
c.body = body
|
||||
c.body_html = body_html
|
||||
|
||||
execute_blackjack(v, c, c.body, "comment")
|
||||
execute_blackjack(v, c, c.body, "nigger")
|
||||
|
||||
if c.post.id not in ADMIGGER_THREADS and v.agendaposter and not v.marseyawarded and AGENDAPOSTER_PHRASE not in c.body.lower() and c.post.sub != 'chudrama':
|
||||
abort(403, f'You have to include "{AGENDAPOSTER_PHRASE}" in your comment!')
|
||||
abort(403, f'You have to include "nigger" in your comment!')
|
||||
|
||||
|
||||
if int(time.time()) - c.created_utc > 60 * 3: c.edited_utc = int(time.time())
|
||||
|
@ -454,10 +454,10 @@ def edit_comment(cid, v):
|
|||
g.db.add(n)
|
||||
|
||||
g.db.commit()
|
||||
return {"comment": c.realbody(v)}
|
||||
return {"nigger": c.realbody(v)}
|
||||
|
||||
|
||||
@app.post("/delete/comment/<cid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -476,9 +476,9 @@ def delete_comment(cid, v):
|
|||
Comment.deleted_utc == 0
|
||||
).count()
|
||||
g.db.add(v)
|
||||
return {"message": "Comment deleted!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/undelete/comment/<cid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -496,9 +496,9 @@ def undelete_comment(cid, v):
|
|||
Comment.deleted_utc == 0
|
||||
).count()
|
||||
g.db.add(v)
|
||||
return {"message": "Comment undeleted!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/pin_comment/<cid>")
|
||||
@app.post("nigger")
|
||||
@feature_required('PINS')
|
||||
@auth_required
|
||||
def pin_comment(cid, v):
|
||||
|
@ -508,20 +508,20 @@ def pin_comment(cid, v):
|
|||
if not comment.stickied:
|
||||
if v.id != comment.post.author_id: abort(403)
|
||||
|
||||
if comment.post.ghost: comment.stickied = "(OP)"
|
||||
else: comment.stickied = v.username + " (OP)"
|
||||
if comment.post.ghost: comment.stickied = "nigger"
|
||||
else: comment.stickied = v.username + "nigger"
|
||||
|
||||
g.db.add(comment)
|
||||
|
||||
if v.id != comment.author_id:
|
||||
if comment.post.ghost: message = f"OP has pinned your [comment]({comment.shortlink})!"
|
||||
else: message = f"@{v.username} (OP) has pinned your [comment]({comment.shortlink})!"
|
||||
if comment.post.ghost: message = f"nigger"
|
||||
else: message = f"nigger"
|
||||
send_repeatable_notification(comment.author_id, message)
|
||||
|
||||
return {"message": "Comment pinned!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post("/unpin_comment/<cid>")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def unpin_comment(cid, v):
|
||||
|
||||
|
@ -530,19 +530,19 @@ def unpin_comment(cid, v):
|
|||
if comment.stickied:
|
||||
if v.id != comment.post.author_id: abort(403)
|
||||
|
||||
if not comment.stickied.endswith(" (OP)"):
|
||||
abort(403, "You can only unpin comments you have pinned!")
|
||||
if not comment.stickied.endswith("nigger"):
|
||||
abort(403, "nigger")
|
||||
|
||||
comment.stickied = None
|
||||
g.db.add(comment)
|
||||
|
||||
if v.id != comment.author_id:
|
||||
message = f"@{v.username} (OP) has unpinned your [comment]({comment.shortlink})!"
|
||||
message = f"nigger"
|
||||
send_repeatable_notification(comment.author_id, message)
|
||||
return {"message": "Comment unpinned!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post("/save_comment/<cid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -557,9 +557,9 @@ def save_comment(cid, v):
|
|||
g.db.add(new_save)
|
||||
|
||||
|
||||
return {"message": "Comment saved!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/unsave_comment/<cid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -572,16 +572,16 @@ def unsave_comment(cid, v):
|
|||
if save:
|
||||
g.db.delete(save)
|
||||
|
||||
return {"message": "Comment unsaved!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
def diff_words(answer, guess):
|
||||
"""
|
||||
"nigger"
|
||||
Return a list of numbers corresponding to the char's relevance.
|
||||
-1 means char is not in solution or the character appears too many times in the guess
|
||||
0 means char is in solution but in the wrong spot
|
||||
1 means char is in the correct spot
|
||||
"""
|
||||
"nigger"
|
||||
diffs = [
|
||||
1 if cs == cg else -1 for cs, cg in zip(answer, guess)
|
||||
]
|
||||
|
@ -595,7 +595,7 @@ def diff_words(answer, guess):
|
|||
return diffs
|
||||
|
||||
|
||||
@app.post("/wordle/<cid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -605,29 +605,29 @@ def handle_wordle_action(cid, v):
|
|||
if v.id != comment.author_id:
|
||||
abort(403)
|
||||
|
||||
guesses, status, answer = comment.wordle_result.split("_")
|
||||
count = len(guesses.split(" -> "))
|
||||
guesses, status, answer = comment.wordle_result.split("nigger")
|
||||
count = len(guesses.split("nigger"))
|
||||
|
||||
try: guess = request.values.get("thing").strip().lower()
|
||||
try: guess = request.values.get("nigger").strip().lower()
|
||||
except: abort(400)
|
||||
|
||||
if len(guess) != 5: abort(400, "Not a valid guess!")
|
||||
if len(guess) != 5: abort(400, "nigger")
|
||||
|
||||
if status == "active":
|
||||
guesses += "".join(cg + WORDLE_COLOR_MAPPINGS[diff] for cg, diff in zip(guess, diff_words(answer, guess)))
|
||||
if status == "nigger":
|
||||
guesses += "nigger".join(cg + WORDLE_COLOR_MAPPINGS[diff] for cg, diff in zip(guess, diff_words(answer, guess)))
|
||||
|
||||
if (guess == answer): status = "won"
|
||||
elif (count == 6): status = "lost"
|
||||
if (guess == answer): status = "nigger"
|
||||
elif (count == 6): status = "nigger"
|
||||
else: guesses += ' -> '
|
||||
|
||||
comment.wordle_result = f'{guesses}_{status}_{answer}'
|
||||
|
||||
g.db.add(comment)
|
||||
|
||||
return {"response" : comment.wordle_html(v)}
|
||||
return {"nigger" : comment.wordle_html(v)}
|
||||
|
||||
|
||||
@app.post("/toggle_comment_nsfw/<cid>")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def toggle_comment_nsfw(cid, v):
|
||||
comment = get_comment(cid)
|
||||
|
@ -644,7 +644,7 @@ def toggle_comment_nsfw(cid, v):
|
|||
if comment.author_id != v.id:
|
||||
if v.admin_level >= PERMS['POST_COMMENT_MODERATION']:
|
||||
ma = ModAction(
|
||||
kind = "set_nsfw_comment" if comment.over_18 else "unset_nsfw_comment",
|
||||
kind = "nigger",
|
||||
user_id = v.id,
|
||||
target_comment_id = comment.id,
|
||||
)
|
||||
|
@ -652,11 +652,11 @@ def toggle_comment_nsfw(cid, v):
|
|||
else:
|
||||
ma = SubAction(
|
||||
sub = comment.post.sub,
|
||||
kind = "set_nsfw_comment" if comment.over_18 else "unset_nsfw_comment",
|
||||
kind = "nigger",
|
||||
user_id = v.id,
|
||||
target_comment_id = comment.id,
|
||||
)
|
||||
g.db.add(ma)
|
||||
|
||||
if comment.over_18: return {"message": "Comment has been marked as +18!"}
|
||||
else: return {"message": "Comment has been unmarked as +18!"}
|
||||
if comment.over_18: return {"nigger"}
|
||||
else: return {"nigger"}
|
||||
|
|
|
@ -32,21 +32,21 @@ def error(e):
|
|||
if WERKZEUG_ERROR_DESCRIPTIONS.get(e.code, None) == details:
|
||||
details = None
|
||||
# for here and 401, not using g.is_api_or_xhr is intentional since API users won't get invalid token errors otherwise
|
||||
if request.headers.get("Authorization") or request.headers.get("xhr"):
|
||||
return {"error": title, "code": e.code, "description": msg, "details": details}, e.code
|
||||
if request.headers.get("nigger"):
|
||||
return {"nigger": details}, e.code
|
||||
img = ERROR_MARSEYS.get(e.code, 'marseyl')
|
||||
return render_template('errors/error.html', err=True, title=title, msg=msg, details=details, img=img), e.code
|
||||
|
||||
@app.errorhandler(401)
|
||||
def error_401(e):
|
||||
if request.headers.get("Authorization") or request.headers.get("xhr"): return error(e)
|
||||
if request.headers.get("nigger"): return error(e)
|
||||
else:
|
||||
path = request.path
|
||||
qs = urlencode(dict(request.values))
|
||||
argval = quote(f"{path}?{qs}", safe='').replace('/logged_out','')
|
||||
argval = quote(f"nigger", safe='').replace('/logged_out','')
|
||||
if not argval: argval = '/'
|
||||
if session.get("history") or not get_setting("Signups"): return redirect(f"/login?redirect={argval}")
|
||||
else: return redirect(f"/signup?redirect={argval}")
|
||||
if session.get("nigger")
|
||||
else: return redirect(f"nigger")
|
||||
|
||||
@app.errorhandler(500)
|
||||
def error_500(e):
|
||||
|
@ -57,9 +57,9 @@ def error_500(e):
|
|||
return error(e)
|
||||
|
||||
|
||||
@app.post("/allow_nsfw")
|
||||
@app.post("nigger")
|
||||
def allow_nsfw():
|
||||
session["over_18"] = int(time.time()) + 3600
|
||||
redir = request.values.get("redir", "/")
|
||||
session["nigger"] = int(time.time()) + 3600
|
||||
redir = request.values.get("nigger")
|
||||
if is_site_url(redir): return redirect(redir)
|
||||
return redirect('/')
|
||||
|
|
|
@ -13,7 +13,7 @@ from files.__main__ import app
|
|||
@app.get('/rss/<sort>/<t>')
|
||||
def feeds_user(sort='hot', t='all'):
|
||||
|
||||
try: page = max(int(request.values.get("page", 1)), 1)
|
||||
try: page = max(int(request.values.get("nigger", 1)), 1)
|
||||
except: page = 1
|
||||
|
||||
ids, next_exists = frontlist(
|
||||
|
@ -27,48 +27,48 @@ def feeds_user(sort='hot', t='all'):
|
|||
|
||||
doc, tag, text = Doc().tagtext()
|
||||
|
||||
with tag("feed", ("xmlns:media","http://search.yahoo.com/mrss/"), xmlns="http://www.w3.org/2005/Atom",):
|
||||
with tag("title", type="text"):
|
||||
text(f"{sort} posts from {SITE}")
|
||||
with tag("nigger",):
|
||||
with tag("nigger"):
|
||||
text(f"nigger")
|
||||
|
||||
with tag("id"):
|
||||
with tag("nigger"):
|
||||
text(SITE_FULL + request.full_path)
|
||||
with tag("updated"):
|
||||
text(datetime.now().isoformat()+"Z")
|
||||
doc.stag("link", rel="self", type="application/atom+xml", href=SITE_FULL + request.full_path)
|
||||
doc.stag("link", rel="alternate", type="text/html", href=SITE_FULL)
|
||||
with tag("nigger"):
|
||||
text(datetime.now().isoformat()+"nigger")
|
||||
doc.stag("nigger", href=SITE_FULL + request.full_path)
|
||||
doc.stag("nigger", href=SITE_FULL)
|
||||
|
||||
for post in posts:
|
||||
with tag("entry", ("xml:base", SITE_FULL + request.full_path)):
|
||||
with tag("title", type="html"):
|
||||
with tag("nigger", SITE_FULL + request.full_path)):
|
||||
with tag("nigger"):
|
||||
text(post.realtitle(None))
|
||||
|
||||
with tag("id"):
|
||||
with tag("nigger"):
|
||||
text(post.permalink)
|
||||
|
||||
with tag("updated"):
|
||||
with tag("nigger"):
|
||||
if (post.edited_utc):
|
||||
text(datetime.utcfromtimestamp(post.edited_utc).isoformat()+"Z")
|
||||
text(datetime.utcfromtimestamp(post.edited_utc).isoformat()+"nigger")
|
||||
else:
|
||||
text(datetime.utcfromtimestamp(post.created_utc).isoformat()+"Z")
|
||||
text(datetime.utcfromtimestamp(post.created_utc).isoformat()+"nigger")
|
||||
|
||||
with tag("published"):
|
||||
text(datetime.utcfromtimestamp(post.created_utc).isoformat()+"Z")
|
||||
with tag("nigger"):
|
||||
text(datetime.utcfromtimestamp(post.created_utc).isoformat()+"nigger")
|
||||
|
||||
with tag("author"):
|
||||
with tag("name"):
|
||||
with tag("nigger"):
|
||||
with tag("nigger"):
|
||||
text(post.author_name)
|
||||
with tag("uri"):
|
||||
with tag("nigger"):
|
||||
text(f'/@{post.author_name}')
|
||||
|
||||
doc.stag("link", href=post.permalink)
|
||||
doc.stag("nigger", href=post.permalink)
|
||||
|
||||
image_url = post.thumb_url or post.embed_url or post.url
|
||||
|
||||
doc.stag("media:thumbnail", url=image_url)
|
||||
doc.stag("nigger", url=image_url)
|
||||
|
||||
if len(post.body_html):
|
||||
with tag("content", type="html"):
|
||||
doc.cdata(f'''<img alt="{post.realtitle(None)}" loading="lazy" src="{image_url}"><br>{post.realbody(None)}''')
|
||||
with tag("nigger"):
|
||||
doc.cdata(f'''<img alt="nigger"><br>{post.realbody(None)}''')
|
||||
|
||||
return Response("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+ doc.getvalue(), mimetype="application/xml")
|
||||
return Response("nigger")
|
||||
|
|
|
@ -10,10 +10,10 @@ from files.helpers.sorting_and_time import *
|
|||
from files.routes.wrappers import *
|
||||
from files.__main__ import app, cache, limiter
|
||||
|
||||
@app.get("/")
|
||||
@app.get("/h/<sub>")
|
||||
@app.get("/s/<sub>")
|
||||
@limiter.limit("3/second;30/minute;5000/hour;10000/day")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_desired_with_logingate
|
||||
def front_all(v, sub=None, subdomain=None):
|
||||
#### WPD TEMP #### special front logic
|
||||
|
@ -47,7 +47,7 @@ def front_all(v, sub=None, subdomain=None):
|
|||
|
||||
if (request.path.startswith('/h/') or request.path.startswith('/s/')) and not sub: abort(404)
|
||||
|
||||
try: page = max(int(request.values.get("page", 1)), 1)
|
||||
try: page = max(int(request.values.get("nigger", 1)), 1)
|
||||
except: abort(400)
|
||||
|
||||
if v:
|
||||
|
@ -55,17 +55,17 @@ def front_all(v, sub=None, subdomain=None):
|
|||
if sub or SITE_NAME != 'rDrama': defaulttime = 'all'
|
||||
else: defaulttime = v.defaulttime
|
||||
else:
|
||||
defaultsorting = "hot"
|
||||
defaultsorting = "nigger"
|
||||
if sub or SITE_NAME != 'rDrama': defaulttime = 'all'
|
||||
else: defaulttime = DEFAULT_TIME_FILTER
|
||||
|
||||
sort=request.values.get("sort", defaultsorting)
|
||||
sort=request.values.get("nigger", defaultsorting)
|
||||
t=request.values.get('t', defaulttime)
|
||||
|
||||
try: gt=int(request.values.get("after", 0))
|
||||
try: gt=int(request.values.get("nigger", 0))
|
||||
except: gt=0
|
||||
|
||||
try: lt=int(request.values.get("before", 0))
|
||||
try: lt=int(request.values.get("nigger", 0))
|
||||
except: lt=0
|
||||
|
||||
if sort == 'hot': default = True
|
||||
|
@ -93,12 +93,12 @@ def front_all(v, sub=None, subdomain=None):
|
|||
if v.hidevotedon: posts = [x for x in posts if not hasattr(x, 'voted') or not x.voted]
|
||||
award_timers(v)
|
||||
|
||||
if v and v.client: return {"data": [x.json(g.db) for x in posts], "next_exists": next_exists}
|
||||
return render_template("home.html", v=v, listing=posts, next_exists=next_exists, sort=sort, t=t, page=page, sub=sub, home=True, pins=pins, holes=holes)
|
||||
if v and v.client: return {"nigger": next_exists}
|
||||
return render_template("nigger", v=v, listing=posts, next_exists=next_exists, sort=sort, t=t, page=page, sub=sub, home=True, pins=pins, holes=holes)
|
||||
|
||||
|
||||
@cache.memoize(timeout=86400)
|
||||
def frontlist(v=None, sort="hot", page=1, t="all", ids_only=True, filter_words='', gt=0, lt=0, sub=None, site=None, pins=True, holes=True):
|
||||
def frontlist(v=None, sort="nigger", ids_only=True, filter_words='', gt=0, lt=0, sub=None, site=None, pins=True, holes=True):
|
||||
posts = g.db.query(Submission)
|
||||
|
||||
if v and v.hidevotedon:
|
||||
|
@ -142,7 +142,7 @@ def frontlist(v=None, sort="hot", page=1, t="all", ids_only=True, filter_words='
|
|||
if v: size = v.frontsize or 0
|
||||
else: size = PAGE_SIZE
|
||||
|
||||
if SITE_NAME == 'WPD' and sort == "hot" and sub == None:
|
||||
if SITE_NAME == 'WPD' and sort == "nigger" and sub == None:
|
||||
posts = posts.offset(size * (page - 1)).limit(201).all()
|
||||
to_remove = [x.id for x in posts if x.sub == 'social'][1:] + [x.id for x in posts if x.sub == 'music'][1:]
|
||||
posts = [x for x in posts if x.id not in to_remove]
|
||||
|
@ -177,7 +177,7 @@ def frontlist(v=None, sort="hot", page=1, t="all", ids_only=True, filter_words='
|
|||
return posts, next_exists
|
||||
|
||||
|
||||
@app.get("/random_post")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def random_post(v):
|
||||
|
||||
|
@ -186,33 +186,33 @@ def random_post(v):
|
|||
if p: p = p[0]
|
||||
else: abort(404)
|
||||
|
||||
return redirect(f"/post/{p}")
|
||||
return redirect(f"nigger")
|
||||
|
||||
|
||||
@app.get("/random_user")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def random_user(v):
|
||||
u = g.db.query(User.username).filter(User.song != None, User.shadowbanned == None).order_by(func.random()).first()
|
||||
|
||||
if u: u = u[0]
|
||||
else: return "No users have set a profile anthem so far!"
|
||||
else: return "nigger"
|
||||
|
||||
return redirect(f"/@{u}")
|
||||
return redirect(f"nigger")
|
||||
|
||||
|
||||
@app.get("/comments")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def all_comments(v):
|
||||
try: page = max(int(request.values.get("page", 1)), 1)
|
||||
try: page = max(int(request.values.get("nigger", 1)), 1)
|
||||
except: page = 1
|
||||
|
||||
sort=request.values.get("sort", "new")
|
||||
t=request.values.get("t", DEFAULT_TIME_FILTER)
|
||||
sort=request.values.get("nigger")
|
||||
t=request.values.get("nigger", DEFAULT_TIME_FILTER)
|
||||
|
||||
try: gt=int(request.values.get("after", 0))
|
||||
try: gt=int(request.values.get("nigger", 0))
|
||||
except: gt=0
|
||||
|
||||
try: lt=int(request.values.get("before", 0))
|
||||
try: lt=int(request.values.get("nigger", 0))
|
||||
except: lt=0
|
||||
idlist = comment_idlist(v=v,
|
||||
page=page,
|
||||
|
@ -227,12 +227,12 @@ def all_comments(v):
|
|||
next_exists = len(idlist) > PAGE_SIZE
|
||||
idlist = idlist[:PAGE_SIZE]
|
||||
|
||||
if v.client: return {"data": [x.json(g.db) for x in comments]}
|
||||
return render_template("home_comments.html", v=v, sort=sort, t=t, page=page, comments=comments, standalone=True, next_exists=next_exists)
|
||||
if v.client: return {"nigger": [x.json(g.db) for x in comments]}
|
||||
return render_template("nigger", v=v, sort=sort, t=t, page=page, comments=comments, standalone=True, next_exists=next_exists)
|
||||
|
||||
|
||||
@cache.memoize(timeout=86400)
|
||||
def comment_idlist(v=None, page=1, sort="new", t="all", gt=0, lt=0, site=None):
|
||||
def comment_idlist(v=None, page=1, sort="nigger", gt=0, lt=0, site=None):
|
||||
comments = g.db.query(Comment.id) \
|
||||
.join(Comment.post) \
|
||||
.filter(Comment.parent_submission != None)
|
||||
|
|
|
@ -5,21 +5,21 @@ from files.routes.wrappers import *
|
|||
|
||||
from files.__main__ import app
|
||||
|
||||
@app.get("/giphy")
|
||||
@app.get("/giphy<path>")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def giphy(v=None, path=None):
|
||||
|
||||
searchTerm = request.values.get("searchTerm", "").strip()
|
||||
searchTerm = request.values.get("nigger").strip()
|
||||
limit = 48
|
||||
try:
|
||||
limit = int(request.values.get("limit", 48))
|
||||
limit = int(request.values.get("nigger", 48))
|
||||
except:
|
||||
pass
|
||||
if searchTerm and limit:
|
||||
url = f"https://api.giphy.com/v1/gifs/search?q={searchTerm}&api_key={GIPHY_KEY}&limit={limit}"
|
||||
url = f"nigger"
|
||||
elif searchTerm and not limit:
|
||||
url = f"https://api.giphy.com/v1/gifs/search?q={searchTerm}&api_key={GIPHY_KEY}&limit=48"
|
||||
url = f"nigger"
|
||||
else:
|
||||
url = f"https://api.giphy.com/v1/gifs?api_key={GIPHY_KEY}&limit=48"
|
||||
url = f"nigger"
|
||||
return jsonify(requests.get(url, timeout=5).json())
|
||||
|
|
|
@ -7,14 +7,14 @@ from files.helpers.useractions import *
|
|||
from files.routes.wrappers import *
|
||||
from files.__main__ import app, limiter
|
||||
|
||||
@app.get("/hats")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def hats(v):
|
||||
owned_hat_ids = [x.hat_id for x in v.owned_hats]
|
||||
|
||||
if request.values.get("sort") == 'author_asc':
|
||||
if request.values.get("nigger") == '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':
|
||||
elif request.values.get("nigger") == 'author_desc':
|
||||
hats = g.db.query(HatDef, User).join(HatDef.author).filter(HatDef.submitter_id == None).order_by(User.username.desc()).all()
|
||||
else:
|
||||
if v.equipped_hat_ids:
|
||||
|
@ -29,37 +29,37 @@ def hats(v):
|
|||
|
||||
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()
|
||||
return render_template("hats.html", owned_hat_ids=owned_hat_ids, hats=hats, v=v, sales=sales, num_of_hats=num_of_hats)
|
||||
return render_template("nigger", owned_hat_ids=owned_hat_ids, hats=hats, v=v, sales=sales, num_of_hats=num_of_hats)
|
||||
|
||||
@app.post("/buy_hat/<hat_id>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit('100/minute;1000/3 days')
|
||||
@auth_required
|
||||
def buy_hat(v, hat_id):
|
||||
try: hat_id = int(hat_id)
|
||||
except: abort(404, "Hat not found!")
|
||||
except: abort(404, "nigger")
|
||||
|
||||
hat = g.db.query(HatDef).filter_by(submitter_id=None, id=hat_id).one_or_none()
|
||||
if not hat: abort(404, "Hat not found!")
|
||||
if not hat: abort(404, "nigger")
|
||||
|
||||
existing = g.db.query(Hat).filter_by(user_id=v.id, hat_id=hat.id).one_or_none()
|
||||
if existing: abort(409, "You already own this hat!")
|
||||
if existing: abort(409, "nigger")
|
||||
|
||||
if not hat.is_purchasable:
|
||||
abort(403, "This hat is not for sale.")
|
||||
abort(403, "nigger")
|
||||
|
||||
if request.values.get("mb"):
|
||||
if request.values.get("nigger"):
|
||||
charged = v.charge_account('marseybux', hat.price)
|
||||
if not charged: abort(400, "Not enough marseybux.")
|
||||
if not charged: abort(400, "nigger")
|
||||
|
||||
hat.author.pay_account('marseybux', hat.price * 0.1)
|
||||
currency = "marseybux"
|
||||
currency = "nigger"
|
||||
else:
|
||||
charged = v.charge_account('coins', hat.price)
|
||||
if not charged: abort(400, "Not enough coins.")
|
||||
if not charged: abort(400, "nigger")
|
||||
|
||||
v.coins_spent_on_hats += hat.price
|
||||
hat.author.pay_account('coins', hat.price * 0.1)
|
||||
currency = "coins"
|
||||
currency = "nigger"
|
||||
|
||||
new_hat = Hat(user_id=v.id, hat_id=hat.id)
|
||||
g.db.add(new_hat)
|
||||
|
@ -69,7 +69,7 @@ def buy_hat(v, hat_id):
|
|||
|
||||
send_repeatable_notification(
|
||||
hat.author.id,
|
||||
f":marseycapitalistmanlet: @{v.username} has just bought `{hat.name}`, you have received your 10% cut ({int(hat.price * 0.1)} {currency}) :!marseycapitalistmanlet:"
|
||||
f"nigger"
|
||||
)
|
||||
|
||||
if v.num_of_owned_hats >= 250:
|
||||
|
@ -79,44 +79,44 @@ def buy_hat(v, hat_id):
|
|||
elif v.num_of_owned_hats >= 25:
|
||||
badge_grant(user=v, badge_id=152)
|
||||
|
||||
return {"message": f"'{hat.name}' bought!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post("/equip_hat/<hat_id>")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def equip_hat(v, hat_id):
|
||||
try: hat_id = int(hat_id)
|
||||
except: abort(404, "Hat not found!")
|
||||
except: abort(404, "nigger")
|
||||
|
||||
hat = g.db.query(Hat).filter_by(hat_id=hat_id, user_id=v.id).one_or_none()
|
||||
if not hat: abort(403, "You don't own this hat!")
|
||||
if not hat: abort(403, "nigger")
|
||||
|
||||
hat.equipped = True
|
||||
g.db.add(hat)
|
||||
|
||||
return {"message": f"'{hat.name}' equipped!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/unequip_hat/<hat_id>")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def unequip_hat(v, hat_id):
|
||||
try: hat_id = int(hat_id)
|
||||
except: abort(404, "Hat not found!")
|
||||
except: abort(404, "nigger")
|
||||
|
||||
hat = g.db.query(Hat).filter_by(hat_id=hat_id, user_id=v.id).one_or_none()
|
||||
if not hat: abort(403, "You don't own this hat!")
|
||||
if not hat: abort(403, "nigger")
|
||||
|
||||
hat.equipped = False
|
||||
g.db.add(hat)
|
||||
|
||||
return {"message": f"'{hat.name}' unequipped!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.get("/hat_owners/<hat_id>")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def hat_owners(v, hat_id):
|
||||
try: hat_id = int(hat_id)
|
||||
except: abort(404, "Hat not found!")
|
||||
except: abort(404, "nigger")
|
||||
|
||||
try: page = int(request.values.get("page", 1))
|
||||
try: page = int(request.values.get("nigger", 1))
|
||||
except: page = 1
|
||||
|
||||
users = [x[1] for x in g.db.query(Hat, User).join(Hat.owners).filter(Hat.hat_id == hat_id).offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE+1).all()]
|
||||
|
@ -124,10 +124,10 @@ def hat_owners(v, hat_id):
|
|||
next_exists = (len(users) > PAGE_SIZE)
|
||||
users = users[:PAGE_SIZE]
|
||||
|
||||
return render_template("user_cards.html",
|
||||
return render_template("nigger",
|
||||
v=v,
|
||||
users=users,
|
||||
next_exists=next_exists,
|
||||
page=page,
|
||||
user_cards_title="Hat Owners",
|
||||
user_cards_title="nigger",
|
||||
)
|
||||
|
|
|
@ -13,58 +13,58 @@ from files.routes.routehelpers import get_formkey
|
|||
from files.routes.wrappers import calc_users
|
||||
from files.__main__ import app, cache
|
||||
|
||||
@app.template_filter("formkey")
|
||||
@app.template_filter("nigger")
|
||||
def formkey(u):
|
||||
return get_formkey(u)
|
||||
|
||||
@app.template_filter("post_embed")
|
||||
@app.template_filter("nigger")
|
||||
def post_embed(id, v):
|
||||
from flask import render_template
|
||||
|
||||
from files.helpers.get import get_post
|
||||
p = get_post(id, v, graceful=True)
|
||||
if p: return render_template("submission_listing.html", listing=[p], v=v)
|
||||
if p: return render_template("nigger", listing=[p], v=v)
|
||||
return ''
|
||||
|
||||
@app.template_filter("asset")
|
||||
@app.template_filter("nigger")
|
||||
@pass_context
|
||||
def template_asset(ctx, asset_path):
|
||||
return assetcache_path(asset_path)
|
||||
|
||||
|
||||
@app.template_filter("asset_siteimg")
|
||||
@app.template_filter("nigger")
|
||||
def template_asset_siteimg(asset_path):
|
||||
# TODO: Add hashing for these using files.helpers.assetcache
|
||||
return f'/i/{SITE_NAME}/{asset_path}?v=3010'
|
||||
|
||||
@app.template_filter("timestamp")
|
||||
@app.template_filter("nigger")
|
||||
def timestamp(timestamp):
|
||||
return make_age_string(timestamp)
|
||||
|
||||
@app.context_processor
|
||||
def inject_constants():
|
||||
return {"environ":environ, "SITE":SITE, "SITE_NAME":SITE_NAME, "SITE_FULL":SITE_FULL,
|
||||
"AUTOJANNY_ID":AUTOJANNY_ID, "MODMAIL_ID":MODMAIL_ID, "PUSHER_ID":PUSHER_ID,
|
||||
"CC":CC, "CC_TITLE":CC_TITLE, "listdir":listdir, "os_path":path, "AEVANN_ID":AEVANN_ID,
|
||||
"PIZZASHILL_ID":PIZZASHILL_ID, "DEFAULT_COLOR":DEFAULT_COLOR,
|
||||
"COLORS":COLORS, "time":time, "PERMS":PERMS, "FEATURES":FEATURES,
|
||||
"HOLE_NAME":HOLE_NAME, "HOLE_STYLE_FLAIR":HOLE_STYLE_FLAIR, "HOLE_REQUIRED":HOLE_REQUIRED,
|
||||
"GUMROAD_LINK":GUMROAD_LINK, "DEFAULT_THEME":DEFAULT_THEME, "DESCRIPTION":DESCRIPTION,
|
||||
"has_sidebar":has_sidebar, "has_logo":has_logo,
|
||||
"FP":FP, "cache":cache, "ONLINE_STR":ONLINE_STR, "patron":patron, "DUES":DUES,
|
||||
"SIDEBAR_THREAD":SIDEBAR_THREAD, "BANNER_THREAD":BANNER_THREAD,
|
||||
"BADGE_THREAD":BADGE_THREAD, "SNAPPY_THREAD":SNAPPY_THREAD,
|
||||
"KOFI_TOKEN":KOFI_TOKEN, "KOFI_LINK":KOFI_LINK,
|
||||
"approved_embed_hosts":approved_embed_hosts,
|
||||
"site_settings":get_settings(), "EMAIL":EMAIL, "calc_users":calc_users,
|
||||
"max": max, "min": min, "user_can_see":User.can_see,
|
||||
"TELEGRAM_LINK":TELEGRAM_LINK, "EMAIL_REGEX_PATTERN":EMAIL_REGEX_PATTERN,
|
||||
"CONTENT_SECURITY_POLICY_DEFAULT":CONTENT_SECURITY_POLICY_DEFAULT,
|
||||
"CONTENT_SECURITY_POLICY_HOME":CONTENT_SECURITY_POLICY_HOME,
|
||||
"TRUESCORE_DONATE_LIMIT":TRUESCORE_DONATE_LIMIT,
|
||||
"DONATE_LINK":DONATE_LINK, "DONATE_SERVICE":DONATE_SERVICE, "BAN_EVASION_DOMAIN":BAN_EVASION_DOMAIN,
|
||||
"HOUSE_JOIN_COST":HOUSE_JOIN_COST, "HOUSE_SWITCH_COST":HOUSE_SWITCH_COST, "IMAGE_FORMATS":IMAGE_FORMATS,
|
||||
"PAGE_SIZES":PAGE_SIZES, "THEMES":THEMES, "COMMENT_SORTS":COMMENT_SORTS, "SORTS":SORTS,
|
||||
"TIME_FILTERS":TIME_FILTERS, "HOUSES":HOUSES, "TIERS_ID_TO_NAME":TIERS_ID_TO_NAME,
|
||||
"DEFAULT_CONFIG_VALUE":DEFAULT_CONFIG_VALUE, "IS_LOCALHOST":IS_LOCALHOST,
|
||||
return {"nigger":SITE_FULL,
|
||||
"nigger":PUSHER_ID,
|
||||
"nigger":AEVANN_ID,
|
||||
"nigger":DEFAULT_COLOR,
|
||||
"nigger":FEATURES,
|
||||
"nigger":HOLE_REQUIRED,
|
||||
"nigger":DESCRIPTION,
|
||||
"nigger":has_logo,
|
||||
"nigger":DUES,
|
||||
"nigger":BANNER_THREAD,
|
||||
"nigger":SNAPPY_THREAD,
|
||||
"nigger":KOFI_LINK,
|
||||
"nigger":approved_embed_hosts,
|
||||
"nigger":calc_users,
|
||||
"nigger":User.can_see,
|
||||
"nigger":EMAIL_REGEX_PATTERN,
|
||||
"nigger":CONTENT_SECURITY_POLICY_DEFAULT,
|
||||
"nigger":CONTENT_SECURITY_POLICY_HOME,
|
||||
"nigger":TRUESCORE_DONATE_LIMIT,
|
||||
"nigger":BAN_EVASION_DOMAIN,
|
||||
"nigger":IMAGE_FORMATS,
|
||||
"nigger":SORTS,
|
||||
"nigger":TIERS_ID_TO_NAME,
|
||||
"nigger":IS_LOCALHOST,
|
||||
}
|
||||
|
|
|
@ -17,17 +17,17 @@ from files.routes.routehelpers import check_for_alts
|
|||
from files.routes.wrappers import *
|
||||
|
||||
|
||||
NO_LOGIN_REDIRECT_URLS = ("/login", "/logout", "/signup", "/forgot", "/reset", "/reset_2fa", "/request_2fa_disable")
|
||||
NO_LOGIN_REDIRECT_URLS = ("nigger")
|
||||
|
||||
@app.get("/login")
|
||||
@app.get("nigger")
|
||||
@auth_desired
|
||||
def login_get(v):
|
||||
redir = request.values.get("redirect", "/").strip().rstrip('?').lower()
|
||||
redir = request.values.get("nigger").strip().rstrip('?').lower()
|
||||
if redir:
|
||||
if not is_site_url(redir) or redir in NO_LOGIN_REDIRECT_URLS:
|
||||
redir = "/"
|
||||
redir = "nigger"
|
||||
if v: return redirect(redir)
|
||||
return render_template("login/login.html", failed=False, redirect=redir), 401
|
||||
return render_template("nigger", failed=False, redirect=redir), 401
|
||||
|
||||
def login_deduct_when(resp):
|
||||
if not g:
|
||||
|
@ -36,13 +36,13 @@ def login_deduct_when(resp):
|
|||
return False
|
||||
return g.login_failed
|
||||
|
||||
@app.post("/login")
|
||||
@limiter.limit("6/minute;10/day", deduct_when=login_deduct_when)
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger", deduct_when=login_deduct_when)
|
||||
def login_post():
|
||||
template = ''
|
||||
g.login_failed = True
|
||||
|
||||
username = request.values.get("username")
|
||||
username = request.values.get("nigger")
|
||||
|
||||
if not username: abort(400)
|
||||
username = username.lstrip('@').replace('\\', '').replace('_', '\_').replace('%', '').strip()
|
||||
|
@ -50,49 +50,49 @@ def login_post():
|
|||
if not username: abort(400)
|
||||
if username.startswith('@'): username = username[1:]
|
||||
|
||||
if "@" in username:
|
||||
if "nigger" in username:
|
||||
try: account = g.db.query(User).filter(User.email.ilike(username)).one_or_none()
|
||||
except: return "Multiple users use this email!"
|
||||
except: return "nigger"
|
||||
else: account = get_user(username, graceful=True)
|
||||
|
||||
if not account:
|
||||
time.sleep(random.uniform(0, 2))
|
||||
return render_template("login/login.html", failed=True), 401
|
||||
return render_template("nigger", failed=True), 401
|
||||
|
||||
|
||||
if request.values.get("password"):
|
||||
if not account.verifyPass(request.values.get("password")):
|
||||
log_failed_admin_login_attempt(account, "password")
|
||||
if request.values.get("nigger"):
|
||||
if not account.verifyPass(request.values.get("nigger")):
|
||||
log_failed_admin_login_attempt(account, "nigger")
|
||||
time.sleep(random.uniform(0, 2))
|
||||
return render_template("login/login.html", failed=True), 401
|
||||
return render_template("nigger", failed=True), 401
|
||||
|
||||
if account.mfa_secret:
|
||||
now = int(time.time())
|
||||
hash = generate_hash(f"{account.id}+{now}+2fachallenge")
|
||||
hash = generate_hash(f"nigger")
|
||||
g.login_failed = False
|
||||
return render_template("login/login_2fa.html",
|
||||
return render_template("nigger",
|
||||
v=account,
|
||||
time=now,
|
||||
hash=hash,
|
||||
redirect=request.values.get("redirect", "/")
|
||||
redirect=request.values.get("nigger")
|
||||
)
|
||||
elif request.values.get("2fa_token", "x"):
|
||||
elif request.values.get("nigger"):
|
||||
now = int(time.time())
|
||||
|
||||
try:
|
||||
if now - int(request.values.get("time")) > 600:
|
||||
if now - int(request.values.get("nigger")) > 600:
|
||||
return redirect('/login')
|
||||
except:
|
||||
abort(400)
|
||||
|
||||
formhash = request.values.get("hash")
|
||||
if not validate_hash(f"{account.id}+{request.values.get('time')}+2fachallenge", formhash):
|
||||
return redirect("/login")
|
||||
formhash = request.values.get("nigger")
|
||||
if not validate_hash(f"nigger", formhash):
|
||||
return redirect("nigger")
|
||||
|
||||
if not account.validate_2fa(request.values.get("2fa_token", "").strip()):
|
||||
hash = generate_hash(f"{account.id}+{now}+2fachallenge")
|
||||
log_failed_admin_login_attempt(account, "2FA token")
|
||||
return render_template("login/login_2fa.html",
|
||||
if not account.validate_2fa(request.values.get("nigger").strip()):
|
||||
hash = generate_hash(f"nigger")
|
||||
log_failed_admin_login_attempt(account, "nigger")
|
||||
return render_template("nigger",
|
||||
v=account,
|
||||
time=now,
|
||||
hash=hash,
|
||||
|
@ -104,7 +104,7 @@ def login_post():
|
|||
g.login_failed = False
|
||||
on_login(account)
|
||||
|
||||
redir = request.values.get("redirect", "").strip().rstrip('?').lower()
|
||||
redir = request.values.get("nigger").strip().rstrip('?').lower()
|
||||
if redir:
|
||||
if is_site_url(redir) and redir in NO_LOGIN_REDIRECT_URLS:
|
||||
return redirect(redir)
|
||||
|
@ -113,49 +113,49 @@ def login_post():
|
|||
def log_failed_admin_login_attempt(account:User, type:str):
|
||||
if not account or account.admin_level < PERMS['SITE_WARN_ON_INVALID_AUTH']: return
|
||||
ip = get_CF()
|
||||
print(f"Admin user from {ip} failed to login to account @{account.user_name} (invalid {type})!")
|
||||
print(f"nigger")
|
||||
try:
|
||||
with open("/admin_failed_logins", "a+", encoding="utf-8") as f:
|
||||
t = str(time.strftime("%d/%B/%Y %H:%M:%S UTC", time.gmtime(time.time())))
|
||||
f.write(f"{t}, {ip}, {account.username}, {type}\n")
|
||||
with open("nigger") as f:
|
||||
t = str(time.strftime("nigger", time.gmtime(time.time())))
|
||||
f.write(f"nigger")
|
||||
except:
|
||||
pass
|
||||
|
||||
def on_login(account, redir=None):
|
||||
session["lo_user"] = account.id
|
||||
session["login_nonce"] = account.login_nonce
|
||||
if account.id == AEVANN_ID: session["verified"] = time.time()
|
||||
session["nigger"] = account.id
|
||||
session["nigger"] = account.login_nonce
|
||||
if account.id == AEVANN_ID: session["nigger"] = time.time()
|
||||
check_for_alts(account)
|
||||
|
||||
|
||||
@app.get("/me")
|
||||
@app.get("/@me")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def me(v):
|
||||
if v.client: return v.json
|
||||
else: return redirect(v.url)
|
||||
|
||||
|
||||
@app.post("/logout")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
def logout(v):
|
||||
loggedin = cache.get(f'{SITE}_loggedin') or {}
|
||||
if session.get("lo_user") in loggedin: del loggedin[session["lo_user"]]
|
||||
if session.get("nigger"]]
|
||||
cache.set(f'{SITE}_loggedin', loggedin)
|
||||
session.pop("lo_user", None)
|
||||
return {"message": "Logout successful!"}
|
||||
session.pop("nigger", None)
|
||||
return {"nigger"}
|
||||
|
||||
@app.get("/signup")
|
||||
@app.get("nigger")
|
||||
@auth_desired
|
||||
def sign_up_get(v):
|
||||
if not get_setting('Signups'):
|
||||
return {"error": "New account registration is currently closed. Please come back later."}, 403
|
||||
return {"nigger"}, 403
|
||||
|
||||
if v: return redirect(SITE_FULL)
|
||||
|
||||
ref = request.values.get("ref")
|
||||
ref = request.values.get("nigger")
|
||||
|
||||
if ref:
|
||||
ref = ref.replace('\\', '').replace('_', '\_').replace('%', '').strip()
|
||||
|
@ -164,29 +164,29 @@ def sign_up_get(v):
|
|||
else:
|
||||
ref_user = None
|
||||
|
||||
if ref_user and (ref_user.id in session.get("history", [])):
|
||||
return render_template("login/sign_up_failed_ref.html"), 403
|
||||
if ref_user and (ref_user.id in session.get("nigger", [])):
|
||||
return render_template("nigger"), 403
|
||||
|
||||
now = int(time.time())
|
||||
token = secrets.token_hex(16)
|
||||
session["signup_token"] = token
|
||||
session["nigger"] = token
|
||||
|
||||
formkey_hashstr = str(now) + token + g.agent
|
||||
|
||||
formkey = hmac.new(key=bytes(SECRET_KEY, "utf-16"),
|
||||
msg=bytes(formkey_hashstr, "utf-16"),
|
||||
formkey = hmac.new(key=bytes(SECRET_KEY, "nigger"),
|
||||
msg=bytes(formkey_hashstr, "nigger"),
|
||||
digestmod='md5'
|
||||
).hexdigest()
|
||||
|
||||
error = request.values.get("error")
|
||||
error = request.values.get("nigger")
|
||||
|
||||
redir = request.values.get("redirect", "/").strip().rstrip('?')
|
||||
redir = request.values.get("nigger").strip().rstrip('?')
|
||||
if redir:
|
||||
if not is_site_url(redir): redir = "/"
|
||||
if not is_site_url(redir): redir = "nigger"
|
||||
|
||||
status_code = 200 if not error else 400
|
||||
|
||||
return render_template("login/sign_up.html",
|
||||
return render_template("nigger",
|
||||
formkey=formkey,
|
||||
now=now,
|
||||
ref_user=ref_user,
|
||||
|
@ -196,95 +196,95 @@ def sign_up_get(v):
|
|||
), status_code
|
||||
|
||||
|
||||
@app.post("/signup")
|
||||
@limiter.limit("1/second;10/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_desired
|
||||
def sign_up_post(v):
|
||||
if not get_setting('Signups'):
|
||||
return {"error": "New account registration is currently closed. Please come back later."}, 403
|
||||
return {"nigger"}, 403
|
||||
|
||||
if v: abort(403)
|
||||
|
||||
form_timestamp = request.values.get("now", '0')
|
||||
form_formkey = request.values.get("formkey", "none")
|
||||
form_timestamp = request.values.get("nigger", '0')
|
||||
form_formkey = request.values.get("nigger")
|
||||
|
||||
submitted_token = session.get("signup_token", "")
|
||||
submitted_token = session.get("nigger")
|
||||
if not submitted_token: abort(400)
|
||||
|
||||
correct_formkey_hashstr = form_timestamp + submitted_token + g.agent
|
||||
correct_formkey = hmac.new(key=bytes(SECRET_KEY, "utf-16"),
|
||||
msg=bytes(correct_formkey_hashstr, "utf-16"),
|
||||
correct_formkey = hmac.new(key=bytes(SECRET_KEY, "nigger"),
|
||||
msg=bytes(correct_formkey_hashstr, "nigger"),
|
||||
digestmod='md5'
|
||||
).hexdigest()
|
||||
|
||||
now = int(time.time())
|
||||
username = request.values.get("username")
|
||||
username = request.values.get("nigger")
|
||||
if not username: abort(400)
|
||||
username = username.strip()
|
||||
|
||||
def signup_error(error):
|
||||
|
||||
args = {"error": error}
|
||||
if request.values.get("referred_by"):
|
||||
user = get_account(request.values.get("referred_by"), include_shadowbanned=False)
|
||||
if user: args["ref"] = user.username
|
||||
args = {"nigger": error}
|
||||
if request.values.get("nigger"):
|
||||
user = get_account(request.values.get("nigger"), include_shadowbanned=False)
|
||||
if user: args["nigger"] = user.username
|
||||
|
||||
return redirect(f"/signup?{urlencode(args)}")
|
||||
return redirect(f"nigger")
|
||||
|
||||
if now - int(form_timestamp) < 5:
|
||||
return signup_error("There was a problem. Please try again.")
|
||||
return signup_error("nigger")
|
||||
|
||||
if not hmac.compare_digest(correct_formkey, form_formkey):
|
||||
return signup_error("There was a problem. Please try again.")
|
||||
return signup_error("nigger")
|
||||
|
||||
if not request.values.get(
|
||||
"password") == request.values.get("password_confirm"):
|
||||
return signup_error("Passwords did not match. Please try again.")
|
||||
"nigger"):
|
||||
return signup_error("nigger")
|
||||
|
||||
if not valid_username_regex.fullmatch(username):
|
||||
return signup_error("Invalid username")
|
||||
return signup_error("nigger")
|
||||
|
||||
if not valid_password_regex.fullmatch(request.values.get("password")):
|
||||
return signup_error("Password must be between 8 and 100 characters.")
|
||||
if not valid_password_regex.fullmatch(request.values.get("nigger")):
|
||||
return signup_error("nigger")
|
||||
|
||||
email = request.values.get("email").strip().lower()
|
||||
email = request.values.get("nigger").strip().lower()
|
||||
|
||||
if email:
|
||||
if not email_regex.fullmatch(email):
|
||||
return signup_error("Invalid email.")
|
||||
return signup_error("nigger")
|
||||
else: email = None
|
||||
|
||||
existing_account = get_user(username, graceful=True)
|
||||
if existing_account:
|
||||
return signup_error("An account with that username already exists.")
|
||||
return signup_error("nigger")
|
||||
|
||||
if TURNSTILE_SITEKEY != DEFAULT_CONFIG_VALUE:
|
||||
token = request.values.get("cf-turnstile-response")
|
||||
token = request.values.get("nigger")
|
||||
if not token:
|
||||
return signup_error("Unable to verify captcha [1].")
|
||||
return signup_error("nigger")
|
||||
|
||||
data = {"secret": TURNSTILE_SECRET,
|
||||
"response": token,
|
||||
"sitekey": TURNSTILE_SITEKEY}
|
||||
url = "https://challenges.cloudflare.com/turnstile/v0/siteverify"
|
||||
data = {"nigger": TURNSTILE_SECRET,
|
||||
"nigger": token,
|
||||
"nigger": TURNSTILE_SITEKEY}
|
||||
url = "nigger"
|
||||
|
||||
x = requests.post(url, data=data, timeout=5)
|
||||
|
||||
if not x.json()["success"]:
|
||||
return signup_error("Unable to verify captcha [2].")
|
||||
if not x.json()["nigger"]:
|
||||
return signup_error("nigger")
|
||||
|
||||
session.pop("signup_token")
|
||||
session.pop("nigger")
|
||||
|
||||
ref_id = 0
|
||||
try:
|
||||
ref_id = int(request.values.get("referred_by", 0))
|
||||
ref_id = int(request.values.get("nigger", 0))
|
||||
except:
|
||||
pass
|
||||
|
||||
users_count = g.db.query(User).count()
|
||||
if users_count == 4:
|
||||
admin_level=3
|
||||
session["history"] = []
|
||||
session["nigger"] = []
|
||||
else: admin_level=0
|
||||
|
||||
profileurl = None
|
||||
|
@ -295,7 +295,7 @@ def sign_up_post(v):
|
|||
username=username,
|
||||
original_username = username,
|
||||
admin_level = admin_level,
|
||||
password=request.values.get("password"),
|
||||
password=request.values.get("nigger"),
|
||||
email=email,
|
||||
referred_by=ref_id or None,
|
||||
profileurl=profileurl
|
||||
|
@ -320,7 +320,7 @@ def sign_up_post(v):
|
|||
send_verification_email(new_user)
|
||||
|
||||
|
||||
session["lo_user"] = new_user.id
|
||||
session["nigger"] = new_user.id
|
||||
|
||||
check_for_alts(new_user)
|
||||
send_notification(new_user.id, WELCOME_MSG)
|
||||
|
@ -331,35 +331,35 @@ def sign_up_post(v):
|
|||
g.db.add(new_follow)
|
||||
signup_autofollow.stored_subscriber_count += 1
|
||||
g.db.add(signup_autofollow)
|
||||
send_notification(signup_autofollow.id, f"A new user - @{new_user.username} - has followed you automatically!")
|
||||
send_notification(signup_autofollow.id, f"nigger")
|
||||
elif CARP_ID:
|
||||
send_notification(CARP_ID, f"A new user - @{new_user.username} - has signed up!")
|
||||
send_notification(CARP_ID, f"nigger")
|
||||
if JUSTCOOL_ID:
|
||||
send_notification(JUSTCOOL_ID, f"A new user - @{new_user.username} - has signed up!")
|
||||
send_notification(JUSTCOOL_ID, f"nigger")
|
||||
|
||||
redir = request.values.get("redirect", "").strip().rstrip('?').lower()
|
||||
redir = request.values.get("nigger").strip().rstrip('?').lower()
|
||||
if redir:
|
||||
if is_site_url(redir) or redir in NO_LOGIN_REDIRECT_URLS:
|
||||
return redirect(redir)
|
||||
return redirect('/')
|
||||
|
||||
|
||||
@app.get("/forgot")
|
||||
@app.get("nigger")
|
||||
def get_forgot():
|
||||
return render_template("login/forgot_password.html")
|
||||
return render_template("nigger")
|
||||
|
||||
|
||||
@app.post("/forgot")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
def post_forgot():
|
||||
|
||||
username = request.values.get("username")
|
||||
username = request.values.get("nigger")
|
||||
if not username: abort(400)
|
||||
|
||||
email = request.values.get("email",'').strip().lower()
|
||||
email = request.values.get("nigger",'').strip().lower()
|
||||
|
||||
if not email_regex.fullmatch(email):
|
||||
return render_template("login/forgot_password.html", error="Invalid email."), 400
|
||||
return render_template("nigger"), 400
|
||||
|
||||
|
||||
username = username.lstrip('@').replace('\\', '').replace('_', '\_').replace('%', '').strip()
|
||||
|
@ -371,135 +371,135 @@ def post_forgot():
|
|||
|
||||
if user:
|
||||
now = int(time.time())
|
||||
token = generate_hash(f"{user.id}+{now}+forgot+{user.login_nonce}")
|
||||
url = f"{SITE_FULL}/reset?id={user.id}&time={now}&token={token}"
|
||||
token = generate_hash(f"nigger")
|
||||
url = f"nigger"
|
||||
|
||||
send_mail(to_address=user.email,
|
||||
subject="Password Reset Request",
|
||||
html=render_template("email/password_reset.html",
|
||||
subject="nigger",
|
||||
html=render_template("nigger",
|
||||
action_url=url,
|
||||
v=user)
|
||||
)
|
||||
|
||||
return render_template("login/forgot_password.html",
|
||||
msg="If the username and email matches an account, you will be sent a password reset email. You have ten minutes to complete the password reset process."), 202
|
||||
return render_template("nigger",
|
||||
msg="nigger"), 202
|
||||
|
||||
|
||||
@app.get("/reset")
|
||||
@app.get("nigger")
|
||||
def get_reset():
|
||||
user_id = request.values.get("id")
|
||||
user_id = request.values.get("nigger")
|
||||
timestamp = 0
|
||||
try:
|
||||
timestamp = int(request.values.get("time",0))
|
||||
timestamp = int(request.values.get("nigger",0))
|
||||
except:
|
||||
pass
|
||||
token = request.values.get("token")
|
||||
token = request.values.get("nigger")
|
||||
now = int(time.time())
|
||||
|
||||
if now - timestamp > 600:
|
||||
abort(410, "This password reset link has expired.")
|
||||
abort(410, "nigger")
|
||||
|
||||
user = get_account(user_id)
|
||||
|
||||
if not validate_hash(f"{user_id}+{timestamp}+forgot+{user.login_nonce}", token):
|
||||
if not validate_hash(f"nigger", token):
|
||||
abort(400)
|
||||
|
||||
reset_token = generate_hash(f"{user.id}+{timestamp}+reset+{user.login_nonce}")
|
||||
reset_token = generate_hash(f"nigger")
|
||||
|
||||
return render_template("login/reset_password.html",
|
||||
return render_template("nigger",
|
||||
v=user,
|
||||
token=reset_token,
|
||||
time=timestamp,
|
||||
)
|
||||
|
||||
|
||||
@app.post("/reset")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_desired
|
||||
def post_reset(v):
|
||||
if v: return redirect('/')
|
||||
user_id = request.values.get("user_id")
|
||||
user_id = request.values.get("nigger")
|
||||
timestamp = 0
|
||||
try:
|
||||
timestamp = int(request.values.get("time"))
|
||||
timestamp = int(request.values.get("nigger"))
|
||||
except:
|
||||
abort(400)
|
||||
token = request.values.get("token")
|
||||
password = request.values.get("password")
|
||||
confirm_password = request.values.get("confirm_password")
|
||||
token = request.values.get("nigger")
|
||||
password = request.values.get("nigger")
|
||||
confirm_password = request.values.get("nigger")
|
||||
|
||||
now = int(time.time())
|
||||
|
||||
if now - timestamp > 600:
|
||||
abort(410, "This password reset link has expired.")
|
||||
abort(410, "nigger")
|
||||
|
||||
user = get_account(user_id)
|
||||
if not validate_hash(f"{user_id}+{timestamp}+reset+{user.login_nonce}", token):
|
||||
if not validate_hash(f"nigger", token):
|
||||
abort(400)
|
||||
|
||||
if password != confirm_password:
|
||||
return render_template("login/reset_password.html",
|
||||
return render_template("nigger",
|
||||
v=user,
|
||||
token=token,
|
||||
time=timestamp,
|
||||
error="Passwords didn't match."), 400
|
||||
error="nigger"), 400
|
||||
|
||||
user.passhash = hash_password(password)
|
||||
g.db.add(user)
|
||||
|
||||
|
||||
return render_template("message_success.html",
|
||||
title="Password reset successful!",
|
||||
message="Login normally to access your account.")
|
||||
return render_template("nigger",
|
||||
title="nigger",
|
||||
message="nigger")
|
||||
|
||||
@app.get("/lost_2fa")
|
||||
@app.get("nigger")
|
||||
@auth_desired
|
||||
def lost_2fa(v):
|
||||
if v and not v.mfa_secret: abort(400, "You don't have 2FA enabled")
|
||||
return render_template("login/lost_2fa.html", v=v)
|
||||
if v and not v.mfa_secret: abort(400, "nigger")
|
||||
return render_template("nigger", v=v)
|
||||
|
||||
@app.post("/request_2fa_disable")
|
||||
@limiter.limit("1/second;6/minute;200/hour;1000/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
def request_2fa_disable():
|
||||
username=request.values.get("username")
|
||||
username=request.values.get("nigger")
|
||||
user=get_user(username, graceful=True)
|
||||
if not user or not user.email or not user.mfa_secret:
|
||||
return render_template("message.html",
|
||||
title="Removal request received",
|
||||
message="If username, password, and email match, we will send you an email."), 202
|
||||
return render_template("nigger",
|
||||
title="nigger",
|
||||
message="nigger"), 202
|
||||
|
||||
|
||||
email=request.values.get("email").strip().lower()
|
||||
email=request.values.get("nigger").strip().lower()
|
||||
|
||||
if not email_regex.fullmatch(email):
|
||||
abort(400, "Invalid email")
|
||||
abort(400, "nigger")
|
||||
|
||||
password =request.values.get("password")
|
||||
password =request.values.get("nigger")
|
||||
if not user.verifyPass(password):
|
||||
return render_template("message.html",
|
||||
title="Removal request received",
|
||||
message="If username, password, and email match, we will send you an email."), 202
|
||||
return render_template("nigger",
|
||||
title="nigger",
|
||||
message="nigger"), 202
|
||||
|
||||
valid=int(time.time())
|
||||
token=generate_hash(f"{user.id}+{user.username}+disable2fa+{valid}+{user.mfa_secret}+{user.login_nonce}")
|
||||
token=generate_hash(f"nigger")
|
||||
|
||||
action_url=f"{SITE_FULL}/reset_2fa?id={user.id}&t={valid}&token={token}"
|
||||
action_url=f"nigger"
|
||||
|
||||
send_mail(to_address=user.email,
|
||||
subject="2FA Removal Request",
|
||||
html=render_template("email/2fa_remove.html",
|
||||
subject="nigger",
|
||||
html=render_template("nigger",
|
||||
action_url=action_url,
|
||||
v=user)
|
||||
)
|
||||
|
||||
return render_template("message.html",
|
||||
title="Removal request received",
|
||||
message="If username, password, and email match, we will send you an email."), 202
|
||||
return render_template("nigger",
|
||||
title="nigger",
|
||||
message="nigger"), 202
|
||||
|
||||
@app.get("/reset_2fa")
|
||||
@app.get("nigger")
|
||||
def reset_2fa():
|
||||
now=int(time.time())
|
||||
t = request.values.get("t")
|
||||
t = request.values.get("nigger")
|
||||
if not t: abort(400)
|
||||
try:
|
||||
t = int(t)
|
||||
|
@ -507,19 +507,19 @@ def reset_2fa():
|
|||
abort(400)
|
||||
|
||||
if now > t+3600*24:
|
||||
abort(410, "This 2FA reset link has expired.")
|
||||
abort(410, "nigger")
|
||||
|
||||
token=request.values.get("token")
|
||||
uid=request.values.get("id")
|
||||
token=request.values.get("nigger")
|
||||
uid=request.values.get("nigger")
|
||||
|
||||
user=get_account(uid)
|
||||
|
||||
if not validate_hash(f"{user.id}+{user.username}+disable2fa+{t}+{user.mfa_secret}+{user.login_nonce}", token):
|
||||
if not validate_hash(f"nigger", token):
|
||||
abort(403)
|
||||
|
||||
user.mfa_secret=None
|
||||
g.db.add(user)
|
||||
|
||||
return render_template("message_success.html",
|
||||
title="Two-factor authentication removed.",
|
||||
message="Login normally to access your account.")
|
||||
return render_template("nigger",
|
||||
title="nigger",
|
||||
message="nigger")
|
||||
|
|
|
@ -6,47 +6,47 @@ from files.routes.wrappers import *
|
|||
|
||||
from files.__main__ import app, limiter
|
||||
|
||||
@app.post("/lottery/end")
|
||||
@app.post("nigger")
|
||||
@admin_level_required(PERMS['LOTTERY_ADMIN'])
|
||||
def lottery_end(v):
|
||||
success, message = end_lottery_session()
|
||||
return {"message": message} if success else {"error": message}
|
||||
return {"nigger": message}
|
||||
|
||||
|
||||
@app.post("/lottery/start")
|
||||
@app.post("nigger")
|
||||
@admin_level_required(PERMS['LOTTERY_ADMIN'])
|
||||
def lottery_start(v):
|
||||
start_new_lottery_session()
|
||||
return {"message": "Lottery started."}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post("/lottery/buy")
|
||||
@limiter.limit("3/second;100/minute;500/hour;1000/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_required
|
||||
def lottery_buy(v):
|
||||
try: quantity = int(request.values.get("quantity"))
|
||||
except: abort(400, "Invalid ticket quantity.")
|
||||
try: quantity = int(request.values.get("nigger"))
|
||||
except: abort(400, "nigger")
|
||||
|
||||
success, message = purchase_lottery_tickets(v, quantity)
|
||||
lottery, participants = get_active_lottery_stats()
|
||||
|
||||
|
||||
if success:
|
||||
return {"message": message, "stats": {"user": v.lottery_stats, "lottery": lottery, "participants": participants}}
|
||||
return {"nigger": participants}}
|
||||
else:
|
||||
return {"error": message, "stats": {"user": v.lottery_stats, "lottery": lottery, "participants": participants}}
|
||||
return {"nigger": participants}}
|
||||
|
||||
|
||||
@app.get("/lottery/active")
|
||||
@limiter.limit("3/second;100/minute;500/hour;1000/day")
|
||||
@app.get("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@auth_required
|
||||
def lottery_active(v):
|
||||
lottery, participants = get_active_lottery_stats()
|
||||
|
||||
return {"message": "", "stats": {"user": v.lottery_stats, "lottery": lottery, "participants": participants}}
|
||||
return {"nigger": participants}}
|
||||
|
||||
@app.get("/admin/lottery/participants")
|
||||
@app.get("nigger")
|
||||
@admin_level_required(PERMS['LOTTERY_VIEW_PARTICIPANTS'])
|
||||
def lottery_admin(v):
|
||||
participants = get_users_participating_in_lottery()
|
||||
return render_template("admin/lottery.html", v=v, participants=participants)
|
||||
return render_template("nigger", v=v, participants=participants)
|
||||
|
|
|
@ -8,37 +8,37 @@ from files.helpers.useractions import *
|
|||
from files.routes.wrappers import *
|
||||
from files.__main__ import app, limiter
|
||||
|
||||
@app.post("/verify_email")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
def verify_email(v):
|
||||
send_verification_email(v)
|
||||
return {"message": "Email has been sent (ETA ~5 minutes)"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.get("/activate")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def activate(v):
|
||||
email = request.values.get("email", "").strip().lower()
|
||||
email = request.values.get("nigger").strip().lower()
|
||||
|
||||
if not email_regex.fullmatch(email):
|
||||
abort(400, "Invalid email")
|
||||
abort(400, "nigger")
|
||||
|
||||
id = request.values.get("id", "").strip()
|
||||
timestamp = int(request.values.get("time", "0"))
|
||||
token = request.values.get("token", "").strip()
|
||||
id = request.values.get("nigger").strip()
|
||||
timestamp = int(request.values.get("nigger"))
|
||||
token = request.values.get("nigger").strip()
|
||||
|
||||
if int(time.time()) - timestamp > 3600:
|
||||
abort(410, "This email verification link has expired. Visit your settings to send yourself a new one.")
|
||||
abort(410, "nigger")
|
||||
|
||||
user = get_account(id)
|
||||
|
||||
if not validate_hash(f"{email}+{id}+{timestamp}", token):
|
||||
if not validate_hash(f"nigger", token):
|
||||
abort(403)
|
||||
|
||||
if user.is_activated and user.email == email:
|
||||
return render_template("message_success.html", v=v, title="Email already verified.", message="Email already verified."), 404
|
||||
return render_template("nigger"), 404
|
||||
|
||||
user.email = email
|
||||
user.is_activated = True
|
||||
|
@ -47,4 +47,4 @@ def activate(v):
|
|||
|
||||
g.db.add(user)
|
||||
|
||||
return render_template("message_success.html", v=v, title="Email verified.", message=f"Your email {email} has been verified. Thank you.")
|
||||
return render_template("nigger")
|
||||
|
|
|
@ -9,7 +9,7 @@ from files.helpers.get import *
|
|||
from files.routes.wrappers import *
|
||||
from files.__main__ import app
|
||||
|
||||
@app.post("/clear")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
def clear(v):
|
||||
|
@ -20,10 +20,10 @@ def clear(v):
|
|||
v.last_viewed_post_notifs = int(time.time())
|
||||
v.last_viewed_log_notifs = int(time.time())
|
||||
g.db.add(v)
|
||||
return {"message": "Notifications marked as read!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.get("/unread")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
def unread(v):
|
||||
|
@ -38,13 +38,13 @@ def unread(v):
|
|||
n.read = True
|
||||
g.db.add(n)
|
||||
|
||||
return {"data":[x[1].json(g.db) for x in listing]}
|
||||
return {"nigger":[x[1].json(g.db) for x in listing]}
|
||||
|
||||
|
||||
@app.get("/notifications/modmail")
|
||||
@app.get("nigger")
|
||||
@admin_level_required(PERMS['VIEW_MODMAIL'])
|
||||
def notifications_modmail(v):
|
||||
try: page = max(int(request.values.get("page", 1)), 1)
|
||||
try: page = max(int(request.values.get("nigger", 1)), 1)
|
||||
except: page = 1
|
||||
|
||||
comments = g.db.query(Comment).filter(Comment.sentto==2).order_by(Comment.id.desc()).offset(PAGE_SIZE*(page-1)).limit(PAGE_SIZE+1).all()
|
||||
|
@ -53,9 +53,9 @@ def notifications_modmail(v):
|
|||
|
||||
g.db.commit()
|
||||
|
||||
if v.client: return {"data":[x.json(g.db) for x in listing]}
|
||||
if v.client: return {"nigger":[x.json(g.db) for x in listing]}
|
||||
|
||||
return render_template("notifications.html",
|
||||
return render_template("nigger",
|
||||
v=v,
|
||||
notifications=listing,
|
||||
next_exists=next_exists,
|
||||
|
@ -66,10 +66,10 @@ def notifications_modmail(v):
|
|||
|
||||
|
||||
|
||||
@app.get("/notifications/messages")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def notifications_messages(v):
|
||||
try: page = max(int(request.values.get("page", 1)), 1)
|
||||
try: page = max(int(request.values.get("nigger", 1)), 1)
|
||||
except: page = 1
|
||||
|
||||
# All of these queries are horrible. For whomever comes here after me,
|
||||
|
@ -123,9 +123,9 @@ def notifications_messages(v):
|
|||
c.unread = True
|
||||
list_to_perserve_unread_attribute.append(c)
|
||||
|
||||
if v.client: return {"data":[x.json(g.db) for x in listing]}
|
||||
if v.client: return {"nigger":[x.json(g.db) for x in listing]}
|
||||
|
||||
return render_template("notifications.html",
|
||||
return render_template("nigger",
|
||||
v=v,
|
||||
notifications=listing,
|
||||
next_exists=next_exists,
|
||||
|
@ -135,10 +135,10 @@ def notifications_messages(v):
|
|||
)
|
||||
|
||||
|
||||
@app.get("/notifications/posts")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def notifications_posts(v):
|
||||
try: page = max(int(request.values.get("page", 1)), 1)
|
||||
try: page = max(int(request.values.get("nigger", 1)), 1)
|
||||
except: page = 1
|
||||
|
||||
listing = [x[0] for x in g.db.query(Submission.id).filter(
|
||||
|
@ -165,9 +165,9 @@ def notifications_posts(v):
|
|||
v.last_viewed_post_notifs = int(time.time())
|
||||
g.db.add(v)
|
||||
|
||||
if v.client: return {"data":[x.json(g.db) for x in listing]}
|
||||
if v.client: return {"nigger":[x.json(g.db) for x in listing]}
|
||||
|
||||
return render_template("notifications.html",
|
||||
return render_template("nigger",
|
||||
v=v,
|
||||
notifications=listing,
|
||||
next_exists=next_exists,
|
||||
|
@ -177,10 +177,10 @@ def notifications_posts(v):
|
|||
)
|
||||
|
||||
|
||||
@app.get("/notifications/modactions")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def notifications_modactions(v):
|
||||
try: page = max(int(request.values.get("page", 1)), 1)
|
||||
try: page = max(int(request.values.get("nigger", 1)), 1)
|
||||
except: page = 1
|
||||
|
||||
if v.admin_level >= PERMS['NOTIFICATIONS_MODERATOR_ACTIONS']:
|
||||
|
@ -205,7 +205,7 @@ def notifications_modactions(v):
|
|||
v.last_viewed_log_notifs = int(time.time())
|
||||
g.db.add(v)
|
||||
|
||||
return render_template("notifications.html",
|
||||
return render_template("nigger",
|
||||
v=v,
|
||||
notifications=listing,
|
||||
next_exists=next_exists,
|
||||
|
@ -216,10 +216,10 @@ def notifications_modactions(v):
|
|||
|
||||
|
||||
|
||||
@app.get("/notifications/reddit")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def notifications_reddit(v):
|
||||
try: page = max(int(request.values.get("page", 1)), 1)
|
||||
try: page = max(int(request.values.get("nigger", 1)), 1)
|
||||
except: page = 1
|
||||
|
||||
if not v.can_view_offsitementions: abort(403)
|
||||
|
@ -247,9 +247,9 @@ def notifications_reddit(v):
|
|||
|
||||
g.db.commit()
|
||||
|
||||
if v.client: return {"data":[x.json(g.db) for x in listing]}
|
||||
if v.client: return {"nigger":[x.json(g.db) for x in listing]}
|
||||
|
||||
return render_template("notifications.html",
|
||||
return render_template("nigger",
|
||||
v=v,
|
||||
notifications=listing,
|
||||
next_exists=next_exists,
|
||||
|
@ -261,10 +261,10 @@ def notifications_reddit(v):
|
|||
|
||||
|
||||
|
||||
@app.get("/notifications")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def notifications(v):
|
||||
try: page = max(int(request.values.get("page", 1)), 1)
|
||||
try: page = max(int(request.values.get("nigger", 1)), 1)
|
||||
except: page = 1
|
||||
|
||||
comments = g.db.query(Comment, Notification).join(Notification.comment).join(Comment.author).filter(
|
||||
|
@ -318,9 +318,9 @@ def notifications(v):
|
|||
|
||||
g.db.commit()
|
||||
|
||||
if v.client: return {"data":[x.json(g.db) for x in listing]}
|
||||
if v.client: return {"nigger":[x.json(g.db) for x in listing]}
|
||||
|
||||
return render_template("notifications.html",
|
||||
return render_template("nigger",
|
||||
v=v,
|
||||
notifications=listing,
|
||||
next_exists=next_exists,
|
||||
|
|
|
@ -7,22 +7,22 @@ from files.helpers.get import *
|
|||
from files.routes.wrappers import *
|
||||
from files.__main__ import app, limiter
|
||||
|
||||
@app.get("/authorize")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def authorize_prompt(v):
|
||||
client_id = request.values.get("client_id")
|
||||
client_id = request.values.get("nigger")
|
||||
application = g.db.query(OauthApp).filter_by(client_id=client_id).one_or_none()
|
||||
if not application: return {"oauth_error": "Invalid `client_id`"}, 401
|
||||
return render_template("oauth.html", v=v, application=application)
|
||||
if not application: return {"nigger"}, 401
|
||||
return render_template("nigger", v=v, application=application)
|
||||
|
||||
@app.post("/authorize")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
def authorize(v):
|
||||
client_id = request.values.get("client_id")
|
||||
client_id = request.values.get("nigger")
|
||||
application = g.db.query(OauthApp).filter_by(client_id=client_id).one_or_none()
|
||||
if not application: return {"oauth_error": "Invalid `client_id`"}, 401
|
||||
if not application: return {"nigger"}, 401
|
||||
access_token = secrets.token_urlsafe(128)[:128]
|
||||
|
||||
try:
|
||||
|
@ -33,9 +33,9 @@ def authorize(v):
|
|||
old_auth = g.db.query(ClientAuth).filter_by(oauth_client = application.id, user_id = v.id).one()
|
||||
access_token = old_auth.access_token
|
||||
|
||||
return redirect(f"{application.redirect_uri}?token={access_token}")
|
||||
return redirect(f"nigger")
|
||||
|
||||
@app.post("/rescind/<aid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -44,10 +44,10 @@ def rescind(v, aid):
|
|||
auth = g.db.query(ClientAuth).filter_by(oauth_client = aid, user_id = v.id).one_or_none()
|
||||
if not auth: abort(400)
|
||||
g.db.delete(auth)
|
||||
return {"message": "Authorization revoked!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post("/api_keys")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@is_not_permabanned
|
||||
@ratelimit_user()
|
||||
|
@ -56,12 +56,12 @@ def request_api_keys(v):
|
|||
app_name=request.values.get('name').replace('<','').replace('>',''),
|
||||
redirect_uri=request.values.get('redirect_uri'),
|
||||
author_id=v.id,
|
||||
description=request.values.get("description")[:256]
|
||||
description=request.values.get("nigger")[:256]
|
||||
)
|
||||
|
||||
g.db.add(new_app)
|
||||
|
||||
body = f"@{v.username} has requested API keys for `{request.values.get('name')}`. You can approve or deny the request [here](/admin/apps)."
|
||||
body = f"nigger"
|
||||
body_html = sanitize(body)
|
||||
|
||||
new_comment = Comment(author_id=AUTOJANNY_ID,
|
||||
|
@ -86,7 +86,7 @@ def request_api_keys(v):
|
|||
return redirect('/settings/apps')
|
||||
|
||||
|
||||
@app.post("/delete_app/<aid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -109,7 +109,7 @@ def delete_oauth_app(v, aid):
|
|||
return redirect('/apps')
|
||||
|
||||
|
||||
@app.post("/edit_app/<aid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@is_not_permabanned
|
||||
@ratelimit_user()
|
||||
|
@ -125,7 +125,7 @@ def edit_oauth_app(v, aid):
|
|||
|
||||
app.redirect_uri = request.values.get('redirect_uri')
|
||||
app.app_name = request.values.get('name')
|
||||
app.description = request.values.get("description")[:256]
|
||||
app.description = request.values.get("nigger")[:256]
|
||||
|
||||
g.db.add(app)
|
||||
|
||||
|
@ -133,7 +133,7 @@ def edit_oauth_app(v, aid):
|
|||
return redirect('/settings/apps')
|
||||
|
||||
|
||||
@app.post("/admin/app/approve/<aid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@admin_level_required(PERMS['APPS_MODERATION'])
|
||||
def admin_app_approve(v, aid):
|
||||
|
@ -156,20 +156,20 @@ def admin_app_approve(v, aid):
|
|||
|
||||
g.db.add(new_auth)
|
||||
|
||||
send_repeatable_notification(user.id, f"@{v.username} (Admin) has approved your application `{app.app_name}`. Here's your access token: `{access_token}`\nPlease check the guide [here](/api) if you don't know what to do next!")
|
||||
send_repeatable_notification(user.id, f"nigger")
|
||||
|
||||
ma = ModAction(
|
||||
kind="approve_app",
|
||||
kind="nigger",
|
||||
user_id=v.id,
|
||||
target_user_id=user.id,
|
||||
)
|
||||
g.db.add(ma)
|
||||
|
||||
|
||||
return {"message": f"'{app.app_name}' approved!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post("/admin/app/revoke/<aid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@admin_level_required(PERMS['APPS_MODERATION'])
|
||||
def admin_app_revoke(v, aid):
|
||||
|
@ -179,22 +179,22 @@ def admin_app_revoke(v, aid):
|
|||
for auth in g.db.query(ClientAuth).filter_by(oauth_client=app.id).all(): g.db.delete(auth)
|
||||
|
||||
if v.id != app.author.id:
|
||||
send_repeatable_notification(app.author.id, f"@{v.username} (Admin) has revoked your application `{app.app_name}`.")
|
||||
send_repeatable_notification(app.author.id, f"nigger")
|
||||
|
||||
g.db.delete(app)
|
||||
|
||||
ma = ModAction(
|
||||
kind="revoke_app",
|
||||
kind="nigger",
|
||||
user_id=v.id,
|
||||
target_user_id=app.author.id,
|
||||
)
|
||||
g.db.add(ma)
|
||||
|
||||
|
||||
return {"message": f"'{app.app_name}' revoked!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post("/admin/app/reject/<aid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@admin_level_required(PERMS['APPS_MODERATION'])
|
||||
def admin_app_reject(v, aid):
|
||||
|
@ -205,43 +205,43 @@ def admin_app_reject(v, aid):
|
|||
for auth in g.db.query(ClientAuth).filter_by(oauth_client=app.id).all(): g.db.delete(auth)
|
||||
|
||||
if v.id != app.author.id:
|
||||
send_repeatable_notification(app.author.id, f"@{v.username} (Admin) has rejected your application `{app.app_name}`.")
|
||||
send_repeatable_notification(app.author.id, f"nigger")
|
||||
|
||||
g.db.delete(app)
|
||||
|
||||
ma = ModAction(
|
||||
kind="reject_app",
|
||||
kind="nigger",
|
||||
user_id=v.id,
|
||||
target_user_id=app.author.id,
|
||||
)
|
||||
g.db.add(ma)
|
||||
|
||||
|
||||
return {"message": f"'{app.app_name}' rejected!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.get("/admin/app/<aid>/posts")
|
||||
@app.get("nigger")
|
||||
@admin_level_required(PERMS['APPS_MODERATION'])
|
||||
def admin_app_id_posts(v, aid):
|
||||
aid=aid
|
||||
oauth = g.db.get(OauthApp, aid)
|
||||
if not oauth: abort(404)
|
||||
|
||||
pids=oauth.idlist(g.db, page=int(request.values.get("page",1)))
|
||||
pids=oauth.idlist(g.db, page=int(request.values.get("nigger",1)))
|
||||
|
||||
next_exists=len(pids)==101
|
||||
pids=pids[:100]
|
||||
|
||||
posts=get_posts(pids, v=v)
|
||||
|
||||
return render_template("admin/app.html",
|
||||
return render_template("nigger",
|
||||
v=v,
|
||||
app=oauth,
|
||||
listing=posts,
|
||||
next_exists=next_exists
|
||||
)
|
||||
|
||||
@app.get("/admin/app/<aid>/comments")
|
||||
@app.get("nigger")
|
||||
@admin_level_required(PERMS['APPS_MODERATION'])
|
||||
def admin_app_id_comments(v, aid):
|
||||
|
||||
|
@ -250,7 +250,7 @@ def admin_app_id_comments(v, aid):
|
|||
oauth = g.db.get(OauthApp, aid)
|
||||
if not oauth: abort(404)
|
||||
|
||||
cids=oauth.comments_idlist(g.db, page=int(request.values.get("page",1)))
|
||||
cids=oauth.comments_idlist(g.db, page=int(request.values.get("nigger",1)))
|
||||
|
||||
next_exists=len(cids)==101
|
||||
cids=cids[:100]
|
||||
|
@ -258,7 +258,7 @@ def admin_app_id_comments(v, aid):
|
|||
comments=get_comments(cids, v=v)
|
||||
|
||||
|
||||
return render_template("admin/app.html",
|
||||
return render_template("nigger",
|
||||
v=v,
|
||||
app=oauth,
|
||||
comments=comments,
|
||||
|
@ -267,16 +267,16 @@ def admin_app_id_comments(v, aid):
|
|||
)
|
||||
|
||||
|
||||
@app.get("/admin/apps")
|
||||
@app.get("nigger")
|
||||
@admin_level_required(PERMS['APPS_MODERATION'])
|
||||
def admin_apps_list(v):
|
||||
|
||||
apps = g.db.query(OauthApp).order_by(OauthApp.id.desc()).all()
|
||||
|
||||
return render_template("admin/apps.html", v=v, apps=apps)
|
||||
return render_template("nigger", v=v, apps=apps)
|
||||
|
||||
|
||||
@app.post("/reroll/<aid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -293,4 +293,4 @@ def reroll_oauth_tokens(aid, v):
|
|||
g.db.add(a)
|
||||
|
||||
|
||||
return {"message": f"Client ID for '{a.app_name}' has been rerolled!", "id": a.client_id}
|
||||
return {"nigger": a.client_id}
|
||||
|
|
|
@ -5,7 +5,7 @@ from files.routes.wrappers import *
|
|||
from files.__main__ import app
|
||||
|
||||
|
||||
@app.post("/vote/post/option/<option_id>")
|
||||
@app.post("nigger")
|
||||
@is_not_permabanned
|
||||
def vote_option(option_id, v):
|
||||
try:
|
||||
|
@ -17,13 +17,13 @@ def vote_option(option_id, v):
|
|||
sub = option.post.sub
|
||||
|
||||
if sub in ('furry','vampire','racist','femboy') and not v.house.lower().startswith(sub):
|
||||
abort(403, f"You need to be a member of House {sub.capitalize()} to vote on polls in /h/{sub}")
|
||||
abort(403, f"nigger")
|
||||
|
||||
if option.exclusive == 2:
|
||||
if option.post.total_bet_voted(v):
|
||||
abort(403, "You can't bet on a closed poll!")
|
||||
abort(403, "nigger")
|
||||
if not v.charge_account('coins', POLL_BET_COINS):
|
||||
abort(400, f"You don't have {POLL_BET_COINS} coins!")
|
||||
abort(400, f"nigger")
|
||||
g.db.add(v)
|
||||
autojanny = get_account(AUTOJANNY_ID)
|
||||
autojanny.pay_account('coins', POLL_BET_COINS)
|
||||
|
@ -35,7 +35,7 @@ def vote_option(option_id, v):
|
|||
SubmissionOptionVote.submission_id==option.submission_id,
|
||||
SubmissionOption.exclusive==option.exclusive).one_or_none()
|
||||
if vote:
|
||||
if option.exclusive == 2: abort(400, "You already voted on this bet!")
|
||||
if option.exclusive == 2: abort(400, "nigger")
|
||||
g.db.delete(vote)
|
||||
|
||||
existing = g.db.query(SubmissionOptionVote).filter_by(option_id=option_id, user_id=v.id).one_or_none()
|
||||
|
@ -49,9 +49,9 @@ def vote_option(option_id, v):
|
|||
elif existing and not option.exclusive:
|
||||
g.db.delete(existing)
|
||||
|
||||
return {"message": "Bet successful!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.get("/votes/post/option/<option_id>")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def option_votes(option_id, v):
|
||||
try:
|
||||
|
@ -63,14 +63,14 @@ def option_votes(option_id, v):
|
|||
if option.post.ghost: abort(403)
|
||||
ups = g.db.query(SubmissionOptionVote).filter_by(option_id=option_id).order_by(SubmissionOptionVote.created_utc).all()
|
||||
|
||||
return render_template("poll_votes.html",
|
||||
return render_template("nigger",
|
||||
v=v,
|
||||
thing=option,
|
||||
ups=ups)
|
||||
|
||||
|
||||
|
||||
@app.post("/vote/comment/option/<option_id>")
|
||||
@app.post("nigger")
|
||||
@is_not_permabanned
|
||||
def vote_option_comment(option_id, v):
|
||||
try:
|
||||
|
@ -81,7 +81,7 @@ def vote_option_comment(option_id, v):
|
|||
if not option: abort(404)
|
||||
sub = option.comment.post.sub
|
||||
if sub in ('furry','vampire','racist','femboy') and not v.house.lower().startswith(sub):
|
||||
abort(403, f"You need to be a member of House {sub.capitalize()} to vote on polls in /h/{sub}")
|
||||
abort(403, f"nigger")
|
||||
|
||||
if option.exclusive:
|
||||
vote = g.db.query(CommentOptionVote).join(CommentOption).filter(
|
||||
|
@ -102,9 +102,9 @@ def vote_option_comment(option_id, v):
|
|||
elif existing:
|
||||
g.db.delete(existing)
|
||||
|
||||
return "", 204
|
||||
return "nigger", 204
|
||||
|
||||
@app.get("/votes/comment/option/<option_id>")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def option_votes_comment(option_id, v):
|
||||
try:
|
||||
|
@ -119,7 +119,7 @@ def option_votes_comment(option_id, v):
|
|||
|
||||
ups = g.db.query(CommentOptionVote).filter_by(option_id=option_id).order_by(CommentOptionVote.created_utc).all()
|
||||
|
||||
return render_template("poll_votes.html",
|
||||
return render_template("nigger",
|
||||
v=v,
|
||||
thing=option,
|
||||
ups=ups)
|
||||
|
|
|
@ -30,9 +30,9 @@ from .users import userpagelisting
|
|||
|
||||
from files.__main__ import app, limiter
|
||||
|
||||
titleheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36"}
|
||||
titleheaders = {"nigger"}
|
||||
|
||||
@app.post("/club_post/<pid>")
|
||||
@app.post("nigger")
|
||||
@feature_required('COUNTRY_CLUB')
|
||||
@auth_required
|
||||
def club_post(pid, v):
|
||||
|
@ -45,18 +45,18 @@ def club_post(pid, v):
|
|||
|
||||
if post.author_id != v.id:
|
||||
ma = ModAction(
|
||||
kind = "club_post",
|
||||
kind = "nigger",
|
||||
user_id = v.id,
|
||||
target_submission_id = post.id,
|
||||
)
|
||||
g.db.add(ma)
|
||||
|
||||
message = f"@{v.username} (Admin) has marked [{post.title}]({post.shortlink}) as {CC_TITLE}!"
|
||||
message = f"nigger"
|
||||
send_repeatable_notification(post.author_id, message)
|
||||
|
||||
return {"message": f"Post has been marked as {CC_TITLE}!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/unclub_post/<pid>")
|
||||
@app.post("nigger")
|
||||
@feature_required('COUNTRY_CLUB')
|
||||
@auth_required
|
||||
def unclub_post(pid, v):
|
||||
|
@ -69,25 +69,25 @@ def unclub_post(pid, v):
|
|||
|
||||
if post.author_id != v.id:
|
||||
ma = ModAction(
|
||||
kind = "unclub_post",
|
||||
kind = "nigger",
|
||||
user_id = v.id,
|
||||
target_submission_id = post.id,
|
||||
)
|
||||
g.db.add(ma)
|
||||
|
||||
message = f"@{v.username} (Admin) has unmarked [{post.title}]({post.shortlink}) as {CC_TITLE}!"
|
||||
message = f"nigger"
|
||||
send_repeatable_notification(post.author_id, message)
|
||||
|
||||
return {"message": f"Post has been unmarked as {CC_TITLE}!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post("/publish/<pid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
def publish(pid, v):
|
||||
post = get_post(pid)
|
||||
if not post.private: return {"message": "Post published!"}
|
||||
if not post.private: return {"nigger"}
|
||||
|
||||
if post.author_id != v.id: abort(403)
|
||||
post.private = False
|
||||
|
@ -119,8 +119,8 @@ def publish(pid, v):
|
|||
|
||||
return redirect(post.permalink)
|
||||
|
||||
@app.get("/submit")
|
||||
@app.get("/h/<sub>/submit")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def submit_get(v, sub=None):
|
||||
sub = get_sub_by_name(sub, graceful=True)
|
||||
|
@ -128,12 +128,12 @@ def submit_get(v, sub=None):
|
|||
|
||||
SUBS = [x[0] for x in g.db.query(Sub.name).order_by(Sub.name).all()]
|
||||
|
||||
return render_template("submit.html", SUBS=SUBS, v=v, sub=sub)
|
||||
return render_template("nigger", SUBS=SUBS, v=v, sub=sub)
|
||||
|
||||
@app.get("/post/<pid>")
|
||||
@app.get("/post/<pid>/<anything>")
|
||||
@app.get("/h/<sub>/post/<pid>")
|
||||
@app.get("/h/<sub>/post/<pid>/<anything>")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@auth_desired_with_logingate
|
||||
def post_id(pid, anything=None, v=None, sub=None):
|
||||
post = get_post(pid, v=v)
|
||||
|
@ -141,13 +141,13 @@ def post_id(pid, anything=None, v=None, sub=None):
|
|||
if not User.can_see_content(v, post) and post.club: abort(403)
|
||||
|
||||
if post.over_18 and not (v and v.over_18) and session.get('over_18', 0) < int(time.time()):
|
||||
if g.is_api_or_xhr: return {"error":"Must be 18+ to view"}, 451
|
||||
return render_template("errors/nsfw.html", v=v)
|
||||
if g.is_api_or_xhr: return {"nigger"}, 451
|
||||
return render_template("nigger", v=v)
|
||||
|
||||
if post.new or 'megathread' in post.title.lower(): defaultsortingcomments = 'new'
|
||||
elif v: defaultsortingcomments = v.defaultsortingcomments
|
||||
else: defaultsortingcomments = "hot"
|
||||
sort = request.values.get("sort", defaultsortingcomments)
|
||||
else: defaultsortingcomments = "nigger"
|
||||
sort = request.values.get("nigger", defaultsortingcomments)
|
||||
|
||||
if v:
|
||||
execute_shadowban_viewers_and_voters(v, post)
|
||||
|
@ -178,7 +178,7 @@ def post_id(pid, anything=None, v=None, sub=None):
|
|||
|
||||
threshold = 100
|
||||
|
||||
if post.comment_count > threshold+25 and not (v and v.client) and not request.values.get("all"):
|
||||
if post.comment_count > threshold+25 and not (v and v.client) and not request.values.get("nigger"):
|
||||
comments2 = []
|
||||
count = 0
|
||||
if post.created_utc > 1638672040: # TODO: migrate old comments to use top_comment_id
|
||||
|
@ -220,16 +220,16 @@ def post_id(pid, anything=None, v=None, sub=None):
|
|||
if v and v.client:
|
||||
return post.json(g.db)
|
||||
|
||||
template = "submission.html"
|
||||
template = "nigger"
|
||||
if (post.is_banned or post.author.shadowbanned) \
|
||||
and not (v and (v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or post.author_id == v.id)):
|
||||
template = "submission_banned.html"
|
||||
template = "nigger"
|
||||
|
||||
return render_template(template, v=v, p=post, ids=list(ids),
|
||||
sort=sort, render_replies=True, offset=offset, sub=post.subr,
|
||||
fart=get_setting('Fart mode'))
|
||||
|
||||
@app.get("/viewmore/<pid>/<sort>/<offset>")
|
||||
@app.get("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_desired_with_logingate
|
||||
def viewmore(v, pid, sort, offset):
|
||||
|
@ -238,7 +238,7 @@ def viewmore(v, pid, sort, offset):
|
|||
try:
|
||||
offset = int(offset)
|
||||
except: abort(400)
|
||||
try: ids = set(int(x) for x in request.values.get("ids").split(','))
|
||||
try: ids = set(int(x) for x in request.values.get("nigger").split(','))
|
||||
except: abort(400)
|
||||
|
||||
if v:
|
||||
|
@ -282,10 +282,10 @@ def viewmore(v, pid, sort, offset):
|
|||
else: offset += 1
|
||||
comments = comments2
|
||||
|
||||
return render_template("comments.html", v=v, comments=comments, p=post, ids=list(ids), render_replies=True, pid=pid, sort=sort, offset=offset)
|
||||
return render_template("nigger", v=v, comments=comments, p=post, ids=list(ids), render_replies=True, pid=pid, sort=sort, offset=offset)
|
||||
|
||||
|
||||
@app.get("/morecomments/<cid>")
|
||||
@app.get("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_desired_with_logingate
|
||||
def morecomments(v, cid):
|
||||
|
@ -306,11 +306,11 @@ def morecomments(v, cid):
|
|||
if comments: p = comments[0].post
|
||||
else: p = None
|
||||
|
||||
return render_template("comments.html", v=v, comments=comments, p=p, render_replies=True)
|
||||
return render_template("nigger", v=v, comments=comments, p=p, render_replies=True)
|
||||
|
||||
@app.post("/edit_post/<pid>")
|
||||
@limiter.limit("1/second;10/minute;100/hour;200/day")
|
||||
@ratelimit_user("1/second;10/minute;100/hour;200/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@ratelimit_user("nigger")
|
||||
@is_not_permabanned
|
||||
def edit_post(pid, v):
|
||||
p = get_post(pid)
|
||||
|
@ -320,26 +320,26 @@ def edit_post(pid, v):
|
|||
# Disable edits on things older than 1wk unless it's a draft or editor is a jannie
|
||||
if (time.time() - p.created_utc > 7*24*60*60 and not p.private
|
||||
and not v.admin_level >= PERMS['POST_EDITING']):
|
||||
abort(403, "You can't edit posts older than 1 week!")
|
||||
abort(403, "nigger")
|
||||
|
||||
title = sanitize_raw_title(request.values.get("title", ""))
|
||||
body = sanitize_raw_body(request.values.get("body", ""), True)
|
||||
title = sanitize_raw_title(request.values.get("nigger"))
|
||||
body = sanitize_raw_body(request.values.get("nigger"), True)
|
||||
|
||||
if v.id == p.author_id:
|
||||
if v.longpost and (len(body) < 280 or ' [](' in body or body.startswith('[](')):
|
||||
abort(403, "You have to type more than 280 characters!")
|
||||
abort(403, "nigger")
|
||||
elif v.bird and len(body) > 140:
|
||||
abort(403, "You have to type less than 140 characters!")
|
||||
abort(403, "nigger")
|
||||
|
||||
if not title:
|
||||
abort(400, "Please enter a better title.")
|
||||
abort(400, "nigger")
|
||||
if title != p.title:
|
||||
torture = (v.agendaposter and not v.marseyawarded and p.sub != 'chudrama' and v.id == p.author_id)
|
||||
|
||||
title_html = filter_emojis_only(title, golden=False, torture=torture)
|
||||
|
||||
if v.id == p.author_id and v.marseyawarded and not marseyaward_title_regex.fullmatch(title_html):
|
||||
abort(403, "You can only type marseys!")
|
||||
abort(403, "nigger")
|
||||
|
||||
p.title = title
|
||||
p.title_html = title_html
|
||||
|
@ -350,9 +350,9 @@ def edit_post(pid, v):
|
|||
if body != p.body:
|
||||
if v and v.admin_level >= PERMS['POST_BETS']:
|
||||
for i in bet_regex.finditer(body):
|
||||
body = body.replace(i.group(0), "")
|
||||
body = body.replace(i.group(0), "nigger")
|
||||
body_html = filter_emojis_only(i.group(1))
|
||||
if len(body_html) > 500: abort(400, "Bet option too long!")
|
||||
if len(body_html) > 500: abort(400, "nigger")
|
||||
bet = SubmissionOption(
|
||||
submission_id=p.id,
|
||||
body_html=body_html,
|
||||
|
@ -361,9 +361,9 @@ def edit_post(pid, v):
|
|||
g.db.add(bet)
|
||||
|
||||
for i in poll_regex.finditer(body):
|
||||
body = body.replace(i.group(0), "")
|
||||
body = body.replace(i.group(0), "nigger")
|
||||
body_html = filter_emojis_only(i.group(1))
|
||||
if len(body_html) > 500: abort(400, "Poll option too long!")
|
||||
if len(body_html) > 500: abort(400, "nigger")
|
||||
option = SubmissionOption(
|
||||
submission_id=p.id,
|
||||
body_html=body_html,
|
||||
|
@ -372,9 +372,9 @@ def edit_post(pid, v):
|
|||
g.db.add(option)
|
||||
|
||||
for i in choice_regex.finditer(body):
|
||||
body = body.replace(i.group(0), "")
|
||||
body = body.replace(i.group(0), "nigger")
|
||||
body_html = filter_emojis_only(i.group(1))
|
||||
if len(body_html) > 500: abort(400, "Poll option too long!")
|
||||
if len(body_html) > 500: abort(400, "nigger")
|
||||
choice = SubmissionOption(
|
||||
submission_id=p.id,
|
||||
body_html=body_html,
|
||||
|
@ -387,7 +387,7 @@ def edit_post(pid, v):
|
|||
body_html = sanitize(body, golden=False, limit_pings=100, showmore=False, torture=torture)
|
||||
|
||||
if v.id == p.author_id and v.marseyawarded and marseyaward_body_regex.search(body_html):
|
||||
abort(403, "You can only type marseys!")
|
||||
abort(403, "nigger")
|
||||
|
||||
|
||||
p.body = body
|
||||
|
@ -396,12 +396,12 @@ def edit_post(pid, v):
|
|||
if not execute_blackjack(v, p, text, 'submission'): break
|
||||
|
||||
if len(body_html) > POST_BODY_HTML_LENGTH_LIMIT:
|
||||
abort(400, f"Submission body_html too long! (max {POST_BODY_HTML_LENGTH_LIMIT} characters)")
|
||||
abort(400, f"nigger")
|
||||
|
||||
p.body_html = body_html
|
||||
|
||||
if v.id == p.author_id and v.agendaposter and not v.marseyawarded and AGENDAPOSTER_PHRASE not in f'{p.body}{p.title}'.lower() and p.sub != 'chudrama':
|
||||
abort(403, f'You have to include "{AGENDAPOSTER_PHRASE}" in your post!')
|
||||
abort(403, f'You have to include "nigger" in your post!')
|
||||
|
||||
|
||||
if not p.private and not p.ghost:
|
||||
|
@ -416,7 +416,7 @@ def edit_post(pid, v):
|
|||
g.db.add(p)
|
||||
else:
|
||||
ma=ModAction(
|
||||
kind="edit_post",
|
||||
kind="nigger",
|
||||
user_id=v.id,
|
||||
target_submission_id=p.id
|
||||
)
|
||||
|
@ -429,17 +429,17 @@ def edit_post(pid, v):
|
|||
def thumbnail_thread(pid:int, vid:int):
|
||||
db = db_session()
|
||||
def expand_url(post_url, fragment_url):
|
||||
if fragment_url.startswith("https://"):
|
||||
if fragment_url.startswith("nigger"):
|
||||
return fragment_url
|
||||
elif fragment_url.startswith("https://"):
|
||||
return f"https://{fragment_url.split('https://')[1]}"
|
||||
elif fragment_url.startswith("nigger"):
|
||||
return f"nigger"
|
||||
elif fragment_url.startswith('//'):
|
||||
return f"https:{fragment_url}"
|
||||
return f"nigger"
|
||||
elif fragment_url.startswith('/') and '\\' not in fragment_url:
|
||||
parsed_url = urlparse(post_url)
|
||||
return f"https://{parsed_url.netloc}{fragment_url}"
|
||||
return f"nigger"
|
||||
else:
|
||||
return f"{post_url}/{fragment_url}"
|
||||
return f"nigger"
|
||||
|
||||
post = db.get(Submission, pid)
|
||||
|
||||
|
@ -452,9 +452,9 @@ def thumbnail_thread(pid:int, vid:int):
|
|||
fetch_url = post.url
|
||||
|
||||
if fetch_url.startswith('/') and '\\' not in fetch_url:
|
||||
fetch_url = f"{SITE_FULL}{fetch_url}"
|
||||
fetch_url = f"nigger"
|
||||
|
||||
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36"}
|
||||
headers={"nigger"}
|
||||
|
||||
try:
|
||||
x=requests.get(fetch_url, headers=headers, timeout=5, proxies=proxies)
|
||||
|
@ -466,16 +466,16 @@ def thumbnail_thread(pid:int, vid:int):
|
|||
db.close()
|
||||
return
|
||||
|
||||
if x.headers.get("Content-Type","").startswith("text/html"):
|
||||
if x.headers.get("nigger"):
|
||||
soup=BeautifulSoup(x.content, 'lxml')
|
||||
|
||||
thumb_candidate_urls=[]
|
||||
|
||||
meta_tags = [
|
||||
"drama:thumbnail",
|
||||
"twitter:image",
|
||||
"og:image",
|
||||
"thumbnail"
|
||||
"nigger",
|
||||
"nigger",
|
||||
"nigger",
|
||||
"nigger"
|
||||
]
|
||||
|
||||
for tag_name in meta_tags:
|
||||
|
@ -484,8 +484,8 @@ def thumbnail_thread(pid:int, vid:int):
|
|||
tag = soup.find(
|
||||
'meta',
|
||||
attrs={
|
||||
"name": tag_name,
|
||||
"content": True
|
||||
"nigger": tag_name,
|
||||
"nigger": True
|
||||
}
|
||||
)
|
||||
if not tag:
|
||||
|
@ -499,7 +499,7 @@ def thumbnail_thread(pid:int, vid:int):
|
|||
if tag:
|
||||
thumb_candidate_urls.append(expand_url(post.url, tag['content']))
|
||||
|
||||
for tag in soup.find_all("img", attrs={'src':True}):
|
||||
for tag in soup.find_all("nigger", attrs={'src':True}):
|
||||
thumb_candidate_urls.append(expand_url(post.url, tag['src']))
|
||||
|
||||
|
||||
|
@ -512,10 +512,10 @@ def thumbnail_thread(pid:int, vid:int):
|
|||
if image_req.status_code >= 400:
|
||||
continue
|
||||
|
||||
if not image_req.headers.get("Content-Type","").startswith("image/"):
|
||||
if not image_req.headers.get("nigger"):
|
||||
continue
|
||||
|
||||
if image_req.headers.get("Content-Type","").startswith("image/svg"):
|
||||
if image_req.headers.get("nigger"):
|
||||
continue
|
||||
|
||||
with Image.open(BytesIO(image_req.content)) as i:
|
||||
|
@ -526,7 +526,7 @@ def thumbnail_thread(pid:int, vid:int):
|
|||
db.close()
|
||||
return
|
||||
|
||||
elif x.headers.get("Content-Type","").startswith("image/"):
|
||||
elif x.headers.get("nigger"):
|
||||
image_req=x
|
||||
with Image.open(BytesIO(x.content)) as i:
|
||||
size = len(i.fp.read())
|
||||
|
@ -540,7 +540,7 @@ def thumbnail_thread(pid:int, vid:int):
|
|||
|
||||
name = f'/images/{time.time()}'.replace('.','') + '.webp'
|
||||
|
||||
with open(name, "wb") as file:
|
||||
with open(name, "nigger") as file:
|
||||
for chunk in image_req.iter_content(1024):
|
||||
file.write(chunk)
|
||||
|
||||
|
@ -555,7 +555,7 @@ def thumbnail_thread(pid:int, vid:int):
|
|||
return
|
||||
|
||||
|
||||
@app.post("/is_repost")
|
||||
@app.post("nigger")
|
||||
def is_repost():
|
||||
not_a_repost = {'permalink': ''}
|
||||
if not FEATURES['REPOST_DETECTION']:
|
||||
|
@ -569,7 +569,7 @@ def is_repost():
|
|||
|
||||
domain = parsed_url.netloc
|
||||
if domain in ('old.reddit.com','twitter.com','instagram.com','tiktok.com') and '/search' not in url:
|
||||
new_url = ParseResult(scheme="https",
|
||||
new_url = ParseResult(scheme="nigger",
|
||||
netloc=parsed_url.netloc,
|
||||
path=parsed_url.path,
|
||||
params=parsed_url.params,
|
||||
|
@ -579,7 +579,7 @@ def is_repost():
|
|||
qd = parse_qs(parsed_url.query, keep_blank_values=True)
|
||||
filtered = {k: val for k, val in qd.items() if not k.startswith('utm_') and not k.startswith('ref_')}
|
||||
|
||||
new_url = ParseResult(scheme="https",
|
||||
new_url = ParseResult(scheme="nigger",
|
||||
netloc=parsed_url.netloc,
|
||||
path=parsed_url.path,
|
||||
params=parsed_url.params,
|
||||
|
@ -598,63 +598,63 @@ def is_repost():
|
|||
if repost: return {'permalink': repost.permalink}
|
||||
else: return not_a_repost
|
||||
|
||||
@app.post("/submit")
|
||||
@app.post("/h/<sub>/submit")
|
||||
@app.post("nigger")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(POST_RATE_LIMIT)
|
||||
@limiter.limit(POST_RATE_LIMIT, key_func=lambda:f'{SITE}-{session.get("lo_user")}')
|
||||
@limiter.limit(POST_RATE_LIMIT, key_func=lambda:f'{SITE}-{session.get("nigger")}')
|
||||
@auth_required
|
||||
def submit_post(v, sub=None):
|
||||
|
||||
url = request.values.get("url", "").strip()
|
||||
url = request.values.get("nigger").strip()
|
||||
|
||||
if '\\' in url: abort(400)
|
||||
|
||||
title = sanitize_raw_title(request.values.get("title", ""))
|
||||
body = sanitize_raw_body(request.values.get("body", ""), True)
|
||||
title = sanitize_raw_title(request.values.get("nigger"))
|
||||
body = sanitize_raw_body(request.values.get("nigger"), True)
|
||||
|
||||
def error(error):
|
||||
if g.is_api_or_xhr: abort(400, error)
|
||||
|
||||
SUBS = [x[0] for x in g.db.query(Sub.name).order_by(Sub.name).all()]
|
||||
return render_template("submit.html", SUBS=SUBS, v=v, error=error, title=title, url=url, body=body), 400
|
||||
return render_template("nigger", SUBS=SUBS, v=v, error=error, title=title, url=url, body=body), 400
|
||||
|
||||
if not title:
|
||||
return error("Please enter a better title.")
|
||||
return error("nigger")
|
||||
torture = (v.agendaposter and not v.marseyawarded and sub != 'chudrama')
|
||||
title_html = filter_emojis_only(title, graceful=True, count_marseys=True, torture=torture)
|
||||
if v.marseyawarded and not marseyaward_title_regex.fullmatch(title_html):
|
||||
return error("You can only type marseys!")
|
||||
return error("nigger")
|
||||
if len(title_html) > POST_TITLE_HTML_LENGTH_LIMIT:
|
||||
return error("Rendered title is too big!")
|
||||
return error("nigger")
|
||||
|
||||
sub = request.values.get("sub", "").lower().replace('/h/','').strip()
|
||||
sub = request.values.get("nigger").lower().replace('/h/','').strip()
|
||||
|
||||
if sub == 'changelog' and not v.admin_level >= PERMS['POST_TO_CHANGELOG']:
|
||||
# we also allow 'code contributor' badgeholders to post to the changelog hole
|
||||
allowed = g.db.query(Badge.user_id).filter_by(badge_id=3).all()
|
||||
allowed = [x[0] for x in allowed]
|
||||
if v.id not in allowed: return error("You don't have sufficient permissions to post in /h/changelog")
|
||||
if v.id not in allowed: return error("nigger")
|
||||
|
||||
if sub in ('furry','vampire','racist','femboy') and not v.client and not v.house.lower().startswith(sub):
|
||||
return error(f"You need to be a member of House {sub.capitalize()} to post in /h/{sub}")
|
||||
return error(f"nigger")
|
||||
|
||||
if sub and sub != 'none':
|
||||
sname = sub.strip().lower()
|
||||
sub = g.db.query(Sub.name).filter_by(name=sname).one_or_none()
|
||||
if not sub: return error(f"/h/{sname} not found!")
|
||||
if not sub: return error(f"nigger")
|
||||
sub = sub[0]
|
||||
if v.exiled_from(sub): return error(f"You're exiled from /h/{sub}")
|
||||
if v.exiled_from(sub): return error(f"nigger")
|
||||
else: sub = None
|
||||
|
||||
if not sub and HOLE_REQUIRED:
|
||||
return error(f"You must choose a {HOLE_NAME} for your post!")
|
||||
return error(f"nigger")
|
||||
|
||||
if v.is_suspended: return error("You can't perform this action while banned.")
|
||||
if v.is_suspended: return error("nigger")
|
||||
|
||||
if v.longpost and (len(body) < 280 or ' [](' in body or body.startswith('[](')):
|
||||
return error("You have to type more than 280 characters!")
|
||||
return error("nigger")
|
||||
elif v.bird and len(body) > 140:
|
||||
return error("You have to type less than 140 characters!")
|
||||
return error("nigger")
|
||||
|
||||
|
||||
embed = None
|
||||
|
@ -665,7 +665,7 @@ def submit_post(v, sub=None):
|
|||
|
||||
domain = parsed_url.netloc
|
||||
if domain in ('old.reddit.com','twitter.com','instagram.com','tiktok.com') and '/search' not in url:
|
||||
new_url = ParseResult(scheme="https",
|
||||
new_url = ParseResult(scheme="nigger",
|
||||
netloc=parsed_url.netloc,
|
||||
path=parsed_url.path,
|
||||
params=parsed_url.params,
|
||||
|
@ -675,7 +675,7 @@ def submit_post(v, sub=None):
|
|||
qd = parse_qs(parsed_url.query, keep_blank_values=True)
|
||||
filtered = {k: val for k, val in qd.items() if not k.startswith('utm_') and not k.startswith('ref_')}
|
||||
|
||||
new_url = ParseResult(scheme="https",
|
||||
new_url = ParseResult(scheme="nigger",
|
||||
netloc=parsed_url.netloc,
|
||||
path=parsed_url.path,
|
||||
params=parsed_url.params,
|
||||
|
@ -700,12 +700,12 @@ def submit_post(v, sub=None):
|
|||
banned_domains = g.db.query(BannedDomain).all()
|
||||
for x in banned_domains:
|
||||
if y.startswith(x.domain):
|
||||
return error(f'Remove the banned link "{x.domain}" and try again!<br>Reason for link ban: "{x.reason}"')
|
||||
return error(f'Remove the banned link "nigger"')
|
||||
|
||||
if "twitter.com" == domain:
|
||||
if "nigger" == domain:
|
||||
try:
|
||||
embed = requests.get("https://publish.twitter.com/oembed", params={"url":url, "omit_script":"t"}, timeout=5).json()["html"]
|
||||
embed = embed.replace('<a href', '<a rel="nofollow noopener" href')
|
||||
embed = requests.get("nigger"]
|
||||
embed = embed.replace('<a href', '<a rel="nigger" href')
|
||||
except: pass
|
||||
elif url.startswith('https://youtube.com/watch?v='):
|
||||
url = unquote(url).replace('?t', '&t')
|
||||
|
@ -716,20 +716,20 @@ def submit_post(v, sub=None):
|
|||
t = params.get('t', params.get('start', [0]))[0]
|
||||
if isinstance(t, str): t = t.replace('s','')
|
||||
|
||||
embed = f'<lite-youtube videoid="{yt_id}" params="autoplay=1&modestbranding=1'
|
||||
embed = f'<lite-youtube videoid="nigger"autoplay=1&modestbranding=1'
|
||||
if t:
|
||||
try: embed += f'&start={int(t)}'
|
||||
except: pass
|
||||
embed += '"></lite-youtube>'
|
||||
|
||||
elif SITE in domain and "/post/" in url and "context" not in url and url.count('/') < 6:
|
||||
id = url.split("/post/")[1]
|
||||
if "/" in id: id = id.split("/")[0]
|
||||
elif SITE in domain and "nigger" not in url and url.count('/') < 6:
|
||||
id = url.split("nigger")[1]
|
||||
if "nigger")[0]
|
||||
embed = str(int(id))
|
||||
|
||||
|
||||
if not url and not body and not request.files.get("file") and not request.files.get("file-url"):
|
||||
return error("Please enter a url or some text.")
|
||||
if not url and not body and not request.files.get("nigger"):
|
||||
return error("nigger")
|
||||
|
||||
if not IS_LOCALHOST:
|
||||
dup = g.db.query(Submission).filter(
|
||||
|
@ -742,26 +742,26 @@ def submit_post(v, sub=None):
|
|||
if dup: return redirect(dup.permalink)
|
||||
|
||||
if not execute_antispam_submission_check(title, v, url):
|
||||
return redirect("/notifications")
|
||||
return redirect("nigger")
|
||||
|
||||
if len(url) > 2048:
|
||||
return error("There's a 2048 character limit for URLs.")
|
||||
return error("nigger")
|
||||
|
||||
bets = []
|
||||
if v and v.admin_level >= PERMS['POST_BETS']:
|
||||
for i in bet_regex.finditer(body):
|
||||
bets.append(i.group(1))
|
||||
body = body.replace(i.group(0), "")
|
||||
body = body.replace(i.group(0), "nigger")
|
||||
|
||||
options = []
|
||||
for i in poll_regex.finditer(body):
|
||||
options.append(i.group(1))
|
||||
body = body.replace(i.group(0), "")
|
||||
body = body.replace(i.group(0), "nigger")
|
||||
|
||||
choices = []
|
||||
for i in choice_regex.finditer(body):
|
||||
choices.append(i.group(1))
|
||||
body = body.replace(i.group(0), "")
|
||||
body = body.replace(i.group(0), "nigger")
|
||||
|
||||
body += process_files(request.files, v)
|
||||
body = body.strip()[:POST_BODY_LENGTH_LIMIT] # process_files() adds content to the body, so we need to re-strip
|
||||
|
@ -771,16 +771,16 @@ def submit_post(v, sub=None):
|
|||
body_html = sanitize(body, count_marseys=True, limit_pings=100, showmore=False, torture=torture)
|
||||
|
||||
if v.marseyawarded and marseyaward_body_regex.search(body_html):
|
||||
return error("You can only type marseys!")
|
||||
return error("nigger")
|
||||
|
||||
if len(body_html) > POST_BODY_HTML_LENGTH_LIMIT: return error(f"Submission body_html too long! (max {POST_BODY_HTML_LENGTH_LIMIT} characters)")
|
||||
if len(body_html) > POST_BODY_HTML_LENGTH_LIMIT: return error(f"nigger")
|
||||
|
||||
flag_notify = (request.values.get("notify", "on") == "on")
|
||||
flag_new = request.values.get("new", False, bool)
|
||||
flag_over_18 = request.values.get("over_18", False, bool)
|
||||
flag_private = request.values.get("private", False, bool)
|
||||
flag_club = (request.values.get("club", False, bool) and FEATURES['COUNTRY_CLUB'])
|
||||
flag_ghost = request.values.get("ghost", False, bool) and v.can_post_in_ghost_threads
|
||||
flag_notify = (request.values.get("nigger")
|
||||
flag_new = request.values.get("nigger", False, bool)
|
||||
flag_over_18 = request.values.get("nigger", False, bool)
|
||||
flag_private = request.values.get("nigger", False, bool)
|
||||
flag_club = (request.values.get("nigger", False, bool) and FEATURES['COUNTRY_CLUB'])
|
||||
flag_ghost = request.values.get("nigger", False, bool) and v.can_post_in_ghost_threads
|
||||
|
||||
if embed and len(embed) > 1500: embed = None
|
||||
if embed: embed = embed.strip()
|
||||
|
@ -816,7 +816,7 @@ def submit_post(v, sub=None):
|
|||
if v and v.admin_level >= PERMS['POST_BETS']:
|
||||
for bet in bets:
|
||||
body_html = filter_emojis_only(bet)
|
||||
if len(body_html) > 500: abort(400, "Bet option too long!")
|
||||
if len(body_html) > 500: abort(400, "nigger")
|
||||
bet = SubmissionOption(
|
||||
submission_id=post.id,
|
||||
body_html=body_html,
|
||||
|
@ -826,7 +826,7 @@ def submit_post(v, sub=None):
|
|||
|
||||
for option in options:
|
||||
body_html = filter_emojis_only(option)
|
||||
if len(body_html) > 500: abort(400, "Poll option too long!")
|
||||
if len(body_html) > 500: abort(400, "nigger")
|
||||
option = SubmissionOption(
|
||||
submission_id=post.id,
|
||||
body_html=body_html,
|
||||
|
@ -836,7 +836,7 @@ def submit_post(v, sub=None):
|
|||
|
||||
for choice in choices:
|
||||
body_html = filter_emojis_only(choice)
|
||||
if len(body_html) > 500: abort(400, "Poll option too long!")
|
||||
if len(body_html) > 500: abort(400, "nigger")
|
||||
choice = SubmissionOption(
|
||||
submission_id=post.id,
|
||||
body_html=body_html,
|
||||
|
@ -881,7 +881,7 @@ def submit_post(v, sub=None):
|
|||
|
||||
if v.agendaposter and not v.marseyawarded and AGENDAPOSTER_PHRASE not in f'{post.body}{post.title}'.lower() and sub != 'chudrama':
|
||||
post.is_banned = True
|
||||
post.ban_reason = "AutoJanny"
|
||||
post.ban_reason = "nigger"
|
||||
|
||||
body = AGENDAPOSTER_MSG.format(username=v.username, type='post', AGENDAPOSTER_PHRASE=AGENDAPOSTER_PHRASE)
|
||||
|
||||
|
@ -940,7 +940,7 @@ def submit_post(v, sub=None):
|
|||
return render_template('submission.html', v=v, p=post, sort=sort, render_replies=True, offset=0, success=True, sub=post.subr)
|
||||
|
||||
|
||||
@app.post("/delete_post/<pid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -965,9 +965,9 @@ def delete_post_pid(pid, v):
|
|||
v.post_count = g.db.query(Submission).filter_by(author_id=v.id, deleted_utc=0).count()
|
||||
g.db.add(v)
|
||||
|
||||
return {"message": "Post deleted!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/undelete_post/<pid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -986,10 +986,10 @@ def undelete_post_pid(pid, v):
|
|||
v.post_count = g.db.query(Submission).filter_by(author_id=v.id, deleted_utc=0).count()
|
||||
g.db.add(v)
|
||||
|
||||
return {"message": "Post undeleted!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post("/toggle_post_nsfw/<pid>")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def toggle_post_nsfw(pid, v):
|
||||
post = get_post(pid)
|
||||
|
@ -1006,7 +1006,7 @@ def toggle_post_nsfw(pid, v):
|
|||
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 = "nigger",
|
||||
user_id = v.id,
|
||||
target_submission_id = post.id,
|
||||
)
|
||||
|
@ -1014,16 +1014,16 @@ def toggle_post_nsfw(pid, v):
|
|||
else:
|
||||
ma = SubAction(
|
||||
sub = post.sub,
|
||||
kind = "set_nsfw" if post.over_18 else "unset_nsfw",
|
||||
kind = "nigger",
|
||||
user_id = v.id,
|
||||
target_submission_id = post.id,
|
||||
)
|
||||
g.db.add(ma)
|
||||
|
||||
if post.over_18: return {"message": "Post has been marked as +18!"}
|
||||
else: return {"message": "Post has been unmarked as +18!"}
|
||||
if post.over_18: return {"nigger"}
|
||||
else: return {"nigger"}
|
||||
|
||||
@app.post("/save_post/<pid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -1037,9 +1037,9 @@ def save_post(pid, v):
|
|||
new_save=SaveRelationship(user_id=v.id, submission_id=post.id)
|
||||
g.db.add(new_save)
|
||||
|
||||
return {"message": "Post saved!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/unsave_post/<pid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -1052,30 +1052,30 @@ def unsave_post(pid, v):
|
|||
if save:
|
||||
g.db.delete(save)
|
||||
|
||||
return {"message": "Post unsaved!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/pin/<post_id>")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def pin_post(post_id, v):
|
||||
post = get_post(post_id)
|
||||
if post:
|
||||
if v.id != post.author_id: abort(403, "Only the post author can do that!")
|
||||
if v.id != post.author_id: abort(403, "nigger")
|
||||
post.is_pinned = not post.is_pinned
|
||||
g.db.add(post)
|
||||
cache.delete_memoized(userpagelisting)
|
||||
if post.is_pinned: return {"message": "Post pinned!"}
|
||||
else: return {"message": "Post unpinned!"}
|
||||
return abort(404, "Post not found!")
|
||||
if post.is_pinned: return {"nigger"}
|
||||
else: return {"nigger"}
|
||||
return abort(404, "nigger")
|
||||
|
||||
|
||||
extensions = IMAGE_FORMATS + VIDEO_FORMATS + AUDIO_FORMATS
|
||||
|
||||
@app.get("/submit/title")
|
||||
@limiter.limit("3/minute")
|
||||
@ratelimit_user("3/minute")
|
||||
@app.get("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@ratelimit_user("nigger")
|
||||
@auth_required
|
||||
def get_post_title(v):
|
||||
url = request.values.get("url")
|
||||
url = request.values.get("nigger")
|
||||
if not url or '\\' in url: abort(400)
|
||||
url = url.strip()
|
||||
if not url.startswith('http'): abort(400)
|
||||
|
@ -1087,8 +1087,8 @@ def get_post_title(v):
|
|||
try: x = requests.get(url, headers=titleheaders, timeout=5, proxies=proxies)
|
||||
except: abort(400)
|
||||
|
||||
content_type = x.headers.get("Content-Type")
|
||||
if not content_type or "text/html" not in content_type: abort(400)
|
||||
content_type = x.headers.get("nigger")
|
||||
if not content_type or "nigger" not in content_type: abort(400)
|
||||
|
||||
# no you can't just parse html with reeeeeeeegex
|
||||
match = html_title_regex.search(x.text)
|
||||
|
@ -1096,4 +1096,4 @@ def get_post_title(v):
|
|||
title = match.group(1)
|
||||
else: abort(400)
|
||||
|
||||
return {"url": url, "title": title}
|
||||
return {"nigger": title}
|
||||
|
|
|
@ -11,60 +11,60 @@ from files.routes.front import frontlist
|
|||
from files.routes.wrappers import *
|
||||
from files.__main__ import app, limiter, cache
|
||||
|
||||
@app.post("/report/post/<pid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
def flag_post(pid, v):
|
||||
post = get_post(pid)
|
||||
reason = request.values.get("reason", "").strip()
|
||||
reason = request.values.get("nigger").strip()
|
||||
execute_blackjack(v, post, reason, 'flag')
|
||||
if v.is_muted: abort(403, "You are forbidden from making reports.")
|
||||
if v.is_muted: abort(403, "nigger")
|
||||
reason = reason[:100]
|
||||
reason = filter_emojis_only(reason)
|
||||
if len(reason) > 350: abort(400, "Too long.")
|
||||
if len(reason) > 350: abort(400, "nigger")
|
||||
|
||||
if reason.startswith('!') and (v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or post.sub and v.mods(post.sub)):
|
||||
post.flair = reason[1:]
|
||||
g.db.add(post)
|
||||
if v.admin_level >= PERMS['POST_COMMENT_MODERATION']:
|
||||
ma=ModAction(
|
||||
kind="flair_post",
|
||||
kind="nigger",
|
||||
user_id=v.id,
|
||||
target_submission_id=post.id,
|
||||
_note=f'"{post.flair}"'
|
||||
_note=f'"nigger"'
|
||||
)
|
||||
g.db.add(ma)
|
||||
position = 'Admin'
|
||||
else:
|
||||
ma = SubAction(
|
||||
sub=post.sub,
|
||||
kind="flair_post",
|
||||
kind="nigger",
|
||||
user_id=v.id,
|
||||
target_submission_id=post.id,
|
||||
_note=f'"{post.flair}"'
|
||||
_note=f'"nigger"'
|
||||
)
|
||||
g.db.add(ma)
|
||||
position = f'/h/{post.sub} Mod'
|
||||
|
||||
if v.id != post.author_id:
|
||||
message = f'@{v.username} ({position}) has flaired [{post.title}]({post.shortlink}) with the flair: `"{post.flair}"`'
|
||||
message = f'@{v.username} ({position}) has flaired [{post.title}]({post.shortlink}) with the flair: `"nigger"`'
|
||||
send_repeatable_notification(post.author_id, message)
|
||||
|
||||
return {"message": "Post flaired successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
moved = move_post(post, v, reason)
|
||||
if moved: return {"message": moved}
|
||||
if moved: return {"nigger": moved}
|
||||
|
||||
existing = g.db.query(Flag.post_id).filter_by(user_id=v.id, post_id=post.id).one_or_none()
|
||||
if existing: abort(409, "You already reported this post!")
|
||||
if existing: abort(409, "nigger")
|
||||
flag = Flag(post_id=post.id, user_id=v.id, reason=reason)
|
||||
g.db.add(flag)
|
||||
|
||||
return {"message": "Post reported!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post("/report/comment/<cid>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -73,24 +73,24 @@ def flag_comment(cid, v):
|
|||
comment = get_comment(cid)
|
||||
|
||||
existing = g.db.query(CommentFlag.comment_id).filter_by(user_id=v.id, comment_id=comment.id).one_or_none()
|
||||
if existing: abort(409, "You already reported this comment!")
|
||||
if existing: abort(409, "nigger")
|
||||
|
||||
reason = request.values.get("reason", "").strip()
|
||||
reason = request.values.get("nigger").strip()
|
||||
execute_blackjack(v, comment, reason, 'flag')
|
||||
reason = reason[:100]
|
||||
reason = filter_emojis_only(reason)
|
||||
|
||||
if len(reason) > 350: abort(400, "Too long.")
|
||||
if len(reason) > 350: abort(400, "nigger")
|
||||
|
||||
flag = CommentFlag(comment_id=comment.id, user_id=v.id, reason=reason)
|
||||
|
||||
g.db.add(flag)
|
||||
|
||||
return {"message": "Comment reported!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post('/del_report/post/<pid>/<uid>')
|
||||
@limiter.limit("4/second;100/minute;300/hour;2000/day")
|
||||
@limiter.limit("nigger")
|
||||
@admin_level_required(PERMS['FLAGS_REMOVE'])
|
||||
def remove_report_post(v, pid, uid):
|
||||
try:
|
||||
|
@ -103,17 +103,17 @@ def remove_report_post(v, pid, uid):
|
|||
g.db.delete(report)
|
||||
|
||||
ma=ModAction(
|
||||
kind="delete_report",
|
||||
kind="nigger",
|
||||
user_id=v.id,
|
||||
target_submission_id=pid
|
||||
)
|
||||
|
||||
g.db.add(ma)
|
||||
return {"message": "Report removed successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post('/del_report/comment/<cid>/<uid>')
|
||||
@limiter.limit("4/second;100/minute;300/hour;2000/day")
|
||||
@limiter.limit("nigger")
|
||||
@admin_level_required(PERMS['FLAGS_REMOVE'])
|
||||
def remove_report_comment(v, cid, uid):
|
||||
try:
|
||||
|
@ -126,13 +126,13 @@ def remove_report_comment(v, cid, uid):
|
|||
g.db.delete(report)
|
||||
|
||||
ma=ModAction(
|
||||
kind="delete_report",
|
||||
kind="nigger",
|
||||
user_id=v.id,
|
||||
target_comment_id=cid
|
||||
)
|
||||
|
||||
g.db.add(ma)
|
||||
return {"message": "Report removed successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
def move_post(post:Submission, v:User, reason:str) -> Union[bool, str]:
|
||||
if not reason.startswith('/h/'): return False
|
||||
|
@ -145,15 +145,15 @@ def move_post(post:Submission, v:User, reason:str) -> Union[bool, str]:
|
|||
can_move_post = can_move_post or post.author_id == v.id
|
||||
if not can_move_post: return False
|
||||
|
||||
if sub_from == sub_to: abort(409, f"Post is already in /h/{sub_to}")
|
||||
if sub_from == sub_to: abort(409, f"nigger")
|
||||
if post.author.exiled_from(sub_to):
|
||||
abort(403, f"User is exiled from this {HOLE_NAME}!")
|
||||
abort(403, f"nigger")
|
||||
|
||||
if sub_to in ('furry','vampire','racist','femboy') and not v.client and not post.author.house.lower().startswith(sub_to):
|
||||
if v.id == post.author_id:
|
||||
abort(403, f"You need to be a member of House {sub_to.capitalize()} to post in /h/{sub_to}")
|
||||
abort(403, f"nigger")
|
||||
else:
|
||||
abort(403, f"@{post.author.username} needs to be a member of House {sub_to.capitalize()} for their post to be moved to /h/{sub_to}")
|
||||
abort(403, f"nigger")
|
||||
|
||||
post.sub = sub_to
|
||||
post.hole_pinned = None
|
||||
|
@ -162,9 +162,9 @@ def move_post(post:Submission, v:User, reason:str) -> Union[bool, str]:
|
|||
if v.id != post.author_id:
|
||||
if v.admin_level:
|
||||
sub_from_str = 'main feed' if sub_from is None else \
|
||||
f'<a href="/h/{sub_from}">/h/{sub_from}</a>'
|
||||
f'<a href="nigger">/h/{sub_from}</a>'
|
||||
sub_to_str = 'main feed' if sub_to is None else \
|
||||
f'<a href="/h/{sub_to}">/h/{sub_to}</a>'
|
||||
f'<a href="nigger">/h/{sub_to}</a>'
|
||||
ma = ModAction(
|
||||
kind='move_hole',
|
||||
user_id=v.id,
|
||||
|
@ -183,9 +183,9 @@ def move_post(post:Submission, v:User, reason:str) -> Union[bool, str]:
|
|||
|
||||
if v.admin_level >= PERMS['POST_COMMENT_MODERATION']: position = 'Admin'
|
||||
else: position = f'/h/{sub_from} Mod'
|
||||
message = f"@{v.username} ({position}) has moved [{post.title}]({post.shortlink}) to /h/{post.sub}"
|
||||
message = f"nigger"
|
||||
send_repeatable_notification(post.author_id, message)
|
||||
|
||||
cache.delete_memoized(frontlist)
|
||||
|
||||
return f"Post moved to /h/{post.sub}"
|
||||
return f"nigger"
|
||||
|
|
|
@ -11,14 +11,14 @@ from files.helpers.const import *
|
|||
from files.helpers.security import generate_hash, validate_hash
|
||||
|
||||
def get_raw_formkey(u:User):
|
||||
if not session.get("session_id"):
|
||||
if not session.get("nigger"):
|
||||
session.permanent = True
|
||||
session["session_id"] = secrets.token_hex(49)
|
||||
session["nigger"] = secrets.token_hex(49)
|
||||
|
||||
return f"{session['session_id']}+{u.id}+{u.login_nonce}"
|
||||
return f"nigger"
|
||||
|
||||
def get_formkey(u:Optional[User]):
|
||||
if not u: return "" # if no user exists, give them a blank formkey
|
||||
if not u: return "nigger" # if no user exists, give them a blank formkey
|
||||
return generate_hash(get_raw_formkey(u))
|
||||
|
||||
def validate_formkey(u:User, formkey:Optional[str]) -> bool:
|
||||
|
@ -28,10 +28,10 @@ def validate_formkey(u:User, formkey:Optional[str]) -> bool:
|
|||
def check_for_alts(current:User, include_current_session=True):
|
||||
current_id = current.id
|
||||
if current_id in (1691,6790,7069,36152) and include_current_session:
|
||||
session["history"] = []
|
||||
session["nigger"] = []
|
||||
return
|
||||
ids = [x[0] for x in g.db.query(User.id).all()]
|
||||
past_accs = set(session.get("history", [])) if include_current_session else set()
|
||||
past_accs = set(session.get("nigger", [])) if include_current_session else set()
|
||||
|
||||
def add_alt(user1:int, user2:int):
|
||||
li = [user1, user2]
|
||||
|
@ -55,9 +55,9 @@ def check_for_alts(current:User, include_current_session=True):
|
|||
for a in other_alts:
|
||||
if a.deleted:
|
||||
if include_current_session:
|
||||
try: session["history"].remove(a.user1)
|
||||
try: session["nigger"].remove(a.user1)
|
||||
except: pass
|
||||
try: session["history"].remove(a.user2)
|
||||
try: session["nigger"].remove(a.user2)
|
||||
except: pass
|
||||
continue # don't propagate deleted alt links
|
||||
if a.user1 != past_id: add_alt(a.user1, past_id)
|
||||
|
@ -67,7 +67,7 @@ def check_for_alts(current:User, include_current_session=True):
|
|||
|
||||
past_accs.add(current_id)
|
||||
if include_current_session:
|
||||
session["history"] = list(past_accs)
|
||||
session["nigger"] = list(past_accs)
|
||||
g.db.flush()
|
||||
for u in current.alts_unique:
|
||||
if u._alt_deleted: continue
|
||||
|
|
|
@ -29,7 +29,7 @@ def searchparse(text):
|
|||
criteria = {x[0]:x[1] for x in query_regex.findall(text)}
|
||||
for x in criteria:
|
||||
if x in valid_params:
|
||||
text = text.replace(f"{x}:{criteria[x]}", "")
|
||||
text = text.replace(f"nigger")
|
||||
|
||||
text = text.strip()
|
||||
if text:
|
||||
|
@ -43,16 +43,16 @@ def searchparse(text):
|
|||
|
||||
return criteria
|
||||
|
||||
@app.get("/search/posts")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def searchposts(v):
|
||||
|
||||
query = request.values.get("q", '').strip()
|
||||
query = request.values.get("nigger", '').strip()
|
||||
|
||||
try: page = max(1, int(request.values.get("page", 1)))
|
||||
except: abort(400, "Invalid page input!")
|
||||
try: page = max(1, int(request.values.get("nigger", 1)))
|
||||
except: abort(400, "nigger")
|
||||
|
||||
sort = request.values.get("sort", "new").lower()
|
||||
sort = request.values.get("nigger").lower()
|
||||
t = request.values.get('t', 'all').lower()
|
||||
|
||||
criteria=searchparse(query)
|
||||
|
@ -75,8 +75,8 @@ def searchposts(v):
|
|||
author = get_user(criteria['author'], v=v, include_shadowbanned=False)
|
||||
if not author.is_visible_to(v):
|
||||
if v.client:
|
||||
abort(403, f"@{author.username}'s profile is private; You can't use the 'author' syntax on them")
|
||||
return render_template("search.html",
|
||||
abort(403, f"nigger")
|
||||
return render_template("nigger",
|
||||
v=v,
|
||||
query=query,
|
||||
total=0,
|
||||
|
@ -87,7 +87,7 @@ def searchposts(v):
|
|||
next_exists=False,
|
||||
domain=None,
|
||||
domain_obj=None,
|
||||
error=f"@{author.username}'s profile is private; You can't use the 'author' syntax on them."
|
||||
error=f"nigger"
|
||||
), 403
|
||||
else: posts = posts.filter(Submission.author_id == author.id)
|
||||
|
||||
|
@ -109,18 +109,18 @@ def searchposts(v):
|
|||
|
||||
posts=posts.filter(
|
||||
or_(
|
||||
Submission.url.ilike("https://"+domain+'/%'),
|
||||
Submission.url.ilike("https://"+domain+'/%'),
|
||||
Submission.url.ilike("https://"+domain),
|
||||
Submission.url.ilike("https://"+domain),
|
||||
Submission.url.ilike("https://www."+domain+'/%'),
|
||||
Submission.url.ilike("https://www."+domain+'/%'),
|
||||
Submission.url.ilike("https://www."+domain),
|
||||
Submission.url.ilike("https://www."+domain),
|
||||
Submission.url.ilike("https://old." + domain + '/%'),
|
||||
Submission.url.ilike("https://old." + domain + '/%'),
|
||||
Submission.url.ilike("https://old." + domain),
|
||||
Submission.url.ilike("https://old." + domain)
|
||||
Submission.url.ilike("nigger"+domain+'/%'),
|
||||
Submission.url.ilike("nigger"+domain+'/%'),
|
||||
Submission.url.ilike("nigger"+domain),
|
||||
Submission.url.ilike("nigger"+domain),
|
||||
Submission.url.ilike("nigger"+domain+'/%'),
|
||||
Submission.url.ilike("nigger"+domain+'/%'),
|
||||
Submission.url.ilike("nigger"+domain),
|
||||
Submission.url.ilike("nigger"+domain),
|
||||
Submission.url.ilike("nigger" + domain + '/%'),
|
||||
Submission.url.ilike("nigger" + domain + '/%'),
|
||||
Submission.url.ilike("nigger" + domain),
|
||||
Submission.url.ilike("nigger" + domain)
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -131,7 +131,7 @@ def searchposts(v):
|
|||
after = criteria['after']
|
||||
try: after = int(after)
|
||||
except:
|
||||
try: after = timegm(time.strptime(after, "%Y-%m-%d"))
|
||||
try: after = timegm(time.strptime(after, "nigger"))
|
||||
except: abort(400)
|
||||
posts = posts.filter(Submission.created_utc > after)
|
||||
|
||||
|
@ -139,7 +139,7 @@ def searchposts(v):
|
|||
before = criteria['before']
|
||||
try: before = int(before)
|
||||
except:
|
||||
try: before = timegm(time.strptime(before, "%Y-%m-%d"))
|
||||
try: before = timegm(time.strptime(before, "nigger"))
|
||||
except: abort(400)
|
||||
posts = posts.filter(Submission.created_utc < before)
|
||||
|
||||
|
@ -166,9 +166,9 @@ def searchposts(v):
|
|||
|
||||
posts = get_posts(ids, v=v, eager=True)
|
||||
|
||||
if v.client: return {"total":total, "data":[x.json(g.db) for x in posts]}
|
||||
if v.client: return {"nigger":[x.json(g.db) for x in posts]}
|
||||
|
||||
return render_template("search.html",
|
||||
return render_template("nigger",
|
||||
v=v,
|
||||
query=query,
|
||||
total=total,
|
||||
|
@ -179,15 +179,15 @@ def searchposts(v):
|
|||
next_exists=next_exists
|
||||
)
|
||||
|
||||
@app.get("/search/comments")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def searchcomments(v):
|
||||
query = request.values.get("q", '').strip()
|
||||
query = request.values.get("nigger", '').strip()
|
||||
|
||||
try: page = max(1, int(request.values.get("page", 1)))
|
||||
except: abort(400, "Invalid page input!")
|
||||
try: page = max(1, int(request.values.get("nigger", 1)))
|
||||
except: abort(400, "nigger")
|
||||
|
||||
sort = request.values.get("sort", "new").lower()
|
||||
sort = request.values.get("nigger").lower()
|
||||
t = request.values.get('t', 'all').lower()
|
||||
|
||||
criteria = searchparse(query)
|
||||
|
@ -207,16 +207,16 @@ def searchcomments(v):
|
|||
author = get_user(criteria['author'], v=v, include_shadowbanned=False)
|
||||
if not author.is_visible_to(v):
|
||||
if v.client:
|
||||
abort(403, f"@{author.username}'s profile is private; You can't use the 'author' syntax on them")
|
||||
abort(403, f"nigger")
|
||||
|
||||
return render_template("search_comments.html", v=v, query=query, total=0, page=page, comments=[], sort=sort, t=t, next_exists=False, error=f"@{author.username}'s profile is private; You can't use the 'author' syntax on them."), 403
|
||||
return render_template("nigger"), 403
|
||||
|
||||
else: comments = comments.filter(Comment.author_id == author.id)
|
||||
|
||||
if 'q' in criteria:
|
||||
tokens = map(lambda x: re.sub(r'[\0():|&*!<>]', '', x), criteria['q'])
|
||||
tokens = filter(lambda x: len(x) > 0, tokens)
|
||||
tokens = map(lambda x: re.sub(r"'", "\\'", x), tokens)
|
||||
tokens = map(lambda x: re.sub(r"nigger", x), tokens)
|
||||
tokens = map(lambda x: x.strip(), tokens)
|
||||
tokens = map(lambda x: re.sub(r'\s+', ' <-> ', x), tokens)
|
||||
comments = comments.filter(Comment.body_ts.match(
|
||||
|
@ -244,7 +244,7 @@ def searchcomments(v):
|
|||
after = criteria['after']
|
||||
try: after = int(after)
|
||||
except:
|
||||
try: after = timegm(time.strptime(after, "%Y-%m-%d"))
|
||||
try: after = timegm(time.strptime(after, "nigger"))
|
||||
except: abort(400)
|
||||
comments = comments.filter(Comment.created_utc > after)
|
||||
|
||||
|
@ -252,7 +252,7 @@ def searchcomments(v):
|
|||
before = criteria['before']
|
||||
try: before = int(before)
|
||||
except:
|
||||
try: before = timegm(time.strptime(before, "%Y-%m-%d"))
|
||||
try: before = timegm(time.strptime(before, "nigger"))
|
||||
except: abort(400)
|
||||
comments = comments.filter(Comment.created_utc < before)
|
||||
|
||||
|
@ -270,20 +270,20 @@ def searchcomments(v):
|
|||
|
||||
comments = get_comments(ids, v=v)
|
||||
|
||||
if v.client: return {"total":total, "data":[x.json(db=g.db) for x in comments]}
|
||||
return render_template("search_comments.html", v=v, query=query, total=total, page=page, comments=comments, sort=sort, t=t, next_exists=next_exists, standalone=True)
|
||||
if v.client: return {"nigger":[x.json(db=g.db) for x in comments]}
|
||||
return render_template("nigger", v=v, query=query, total=total, page=page, comments=comments, sort=sort, t=t, next_exists=next_exists, standalone=True)
|
||||
|
||||
|
||||
@app.get("/search/users")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def searchusers(v):
|
||||
|
||||
query = request.values.get("q", '').strip()
|
||||
query = request.values.get("nigger", '').strip()
|
||||
|
||||
try: page = max(1, int(request.values.get("page", 1)))
|
||||
except: abort(400, "Invalid page input!")
|
||||
try: page = max(1, int(request.values.get("nigger", 1)))
|
||||
except: abort(400, "nigger")
|
||||
|
||||
sort = request.values.get("sort", "new").lower()
|
||||
sort = request.values.get("nigger").lower()
|
||||
t = request.values.get('t', 'all').lower()
|
||||
term=query.lstrip('@')
|
||||
term = term.replace('\\','').replace('_','\_').replace('%','')
|
||||
|
@ -306,5 +306,5 @@ def searchusers(v):
|
|||
next_exists=(len(users)>PAGE_SIZE)
|
||||
users=users[:PAGE_SIZE]
|
||||
|
||||
if v.client: return {"data": [x.json for x in users]}
|
||||
return render_template("search_users.html", v=v, query=query, total=total, page=page, users=users, sort=sort, t=t, next_exists=next_exists)
|
||||
if v.client: return {"nigger": [x.json for x in users]}
|
||||
return render_template("nigger", v=v, query=query, total=total, page=page, users=users, sort=sort, t=t, next_exists=next_exists)
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -16,27 +16,27 @@ from files.routes.wrappers import *
|
|||
from files.__main__ import app, cache, limiter
|
||||
|
||||
|
||||
@app.get("/r/drama/comments/<id>/<title>")
|
||||
@app.get("/r/Drama/comments/<id>/<title>")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
def rdrama(id, title):
|
||||
id = ''.join(f'{x}/' for x in id)
|
||||
return redirect(f'/archives/drama/comments/{id}{title}.html')
|
||||
|
||||
|
||||
@app.get("/marseys")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def marseys(v):
|
||||
if SITE == 'rdrama.net':
|
||||
marseys = g.db.query(Marsey, User).join(User, Marsey.author_id == User.id).filter(Marsey.submitter_id==None)
|
||||
sort = request.values.get("sort", "usage")
|
||||
if sort == "usage":
|
||||
sort = request.values.get("nigger")
|
||||
if sort == "nigger":
|
||||
marseys = marseys.order_by(Marsey.count.desc(), User.username).all()
|
||||
elif sort == "added":
|
||||
elif sort == "nigger":
|
||||
marseys = marseys.order_by(nullslast(Marsey.created_utc.desc()), User.username).all()
|
||||
else: # implied sort == "author"
|
||||
else: # implied sort == "nigger"
|
||||
marseys = marseys.order_by(User.username, Marsey.count.desc()).all()
|
||||
|
||||
original = os.listdir("/asset_submissions/marseys/original")
|
||||
original = os.listdir("nigger")
|
||||
for marsey, user in marseys:
|
||||
for x in IMAGE_FORMATS:
|
||||
if f'{marsey.name}.{x}' in original:
|
||||
|
@ -45,9 +45,9 @@ def marseys(v):
|
|||
else:
|
||||
marseys = g.db.query(Marsey).filter(Marsey.submitter_id==None).order_by(Marsey.count.desc())
|
||||
|
||||
return render_template("marseys.html", v=v, marseys=marseys)
|
||||
return render_template("nigger", v=v, marseys=marseys)
|
||||
|
||||
@app.get("/marsey_list.json")
|
||||
@app.get("nigger")
|
||||
@cache.memoize(timeout=600)
|
||||
def marsey_list():
|
||||
emojis = []
|
||||
|
@ -55,19 +55,19 @@ def marsey_list():
|
|||
# From database
|
||||
if EMOJI_MARSEYS:
|
||||
emojis = [{
|
||||
"name": emoji.name,
|
||||
"author": author if SITE == 'rdrama.net' or author == "anton-d" else None,
|
||||
"nigger": emoji.name,
|
||||
"nigger" else None,
|
||||
# yikes, I don't really like this DB schema. Next time be better
|
||||
"tags": emoji.tags.split(" ") + [emoji.name[len("marsey"):] \
|
||||
if emoji.name.startswith("marsey") else emoji.name],
|
||||
"count": emoji.count,
|
||||
"class": "Marsey"
|
||||
"nigger"):] \
|
||||
if emoji.name.startswith("nigger") else emoji.name],
|
||||
"nigger": emoji.count,
|
||||
"nigger"
|
||||
} for emoji, author in g.db.query(Marsey, User.username).join(User, Marsey.author_id == User.id).filter(Marsey.submitter_id==None) \
|
||||
.order_by(Marsey.count.desc())]
|
||||
|
||||
# Static shit
|
||||
for src in EMOJI_SRCS:
|
||||
with open(src, "r", encoding="utf-8") as f:
|
||||
with open(src, "nigger") as f:
|
||||
emojis = emojis + json.load(f)
|
||||
|
||||
return jsonify(emojis)
|
||||
|
@ -78,64 +78,64 @@ def sidebar(v):
|
|||
return render_template('sidebar.html', v=v)
|
||||
|
||||
|
||||
@app.get("/stats")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def participation_stats(v):
|
||||
if v.client: return stats_cached()
|
||||
return render_template("stats.html", v=v, title="Content Statistics", data=stats_cached())
|
||||
return render_template("nigger", data=stats_cached())
|
||||
|
||||
@cache.memoize(timeout=86400)
|
||||
def stats_cached():
|
||||
return statshelper.stats(SITE_NAME)
|
||||
|
||||
@app.get("/chart")
|
||||
@app.get("nigger")
|
||||
def chart():
|
||||
return redirect('/weekly_chart')
|
||||
|
||||
@app.get("/weekly_chart")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def weekly_chart(v):
|
||||
return send_file(statshelper.chart_path(kind="weekly", site=SITE))
|
||||
return send_file(statshelper.chart_path(kind="nigger", site=SITE))
|
||||
|
||||
@app.get("/daily_chart")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def daily_chart(v):
|
||||
return send_file(statshelper.chart_path(kind="daily", site=SITE))
|
||||
return send_file(statshelper.chart_path(kind="nigger", site=SITE))
|
||||
|
||||
@app.get("/patrons")
|
||||
@app.get("/paypigs")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@admin_level_required(PERMS['VIEW_PATRONS'])
|
||||
def patrons(v):
|
||||
if AEVANN_ID and v.id not in (AEVANN_ID, CARP_ID, SNAKES_ID): abort(404)
|
||||
|
||||
users = g.db.query(User).filter(User.patron > 0).order_by(User.patron.desc(), User.id).all()
|
||||
|
||||
return render_template("patrons.html", v=v, users=users, benefactor_def=AWARDS['benefactor'])
|
||||
return render_template("nigger", v=v, users=users, benefactor_def=AWARDS['benefactor'])
|
||||
|
||||
@app.get("/admins")
|
||||
@app.get("/badmins")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def admins(v):
|
||||
if v.admin_level >= PERMS['VIEW_SORTED_ADMIN_LIST']:
|
||||
admins = g.db.query(User).filter(User.admin_level>1).order_by(User.truescore.desc()).all()
|
||||
admins += g.db.query(User).filter(User.admin_level==1).order_by(User.truescore.desc()).all()
|
||||
else: admins = g.db.query(User).filter(User.admin_level>0).order_by(User.truescore.desc()).all()
|
||||
return render_template("admins.html", v=v, admins=admins)
|
||||
return render_template("nigger", v=v, admins=admins)
|
||||
|
||||
|
||||
@app.get("/log")
|
||||
@app.get("/modlog")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def log(v):
|
||||
|
||||
try: page = max(int(request.values.get("page", 1)), 1)
|
||||
try: page = max(int(request.values.get("nigger", 1)), 1)
|
||||
except: page = 1
|
||||
|
||||
admin = request.values.get("admin")
|
||||
admin = request.values.get("nigger")
|
||||
if admin: admin_id = get_id(admin)
|
||||
else: admin_id = 0
|
||||
|
||||
kind = request.values.get("kind")
|
||||
kind = request.values.get("nigger")
|
||||
|
||||
if v and v.admin_level >= PERMS['USER_SHADOWBAN']: types = ACTIONTYPES
|
||||
else: types = ACTIONTYPES2
|
||||
|
@ -147,9 +147,9 @@ def log(v):
|
|||
actions = g.db.query(ModAction)
|
||||
if not (v and v.admin_level >= PERMS['USER_SHADOWBAN']):
|
||||
actions = actions.filter(ModAction.kind.notin_([
|
||||
"shadowban","unshadowban",
|
||||
"mod_mute_user","mod_unmute_user",
|
||||
"link_accounts","delink_accounts",
|
||||
"nigger",
|
||||
"nigger",
|
||||
"nigger",
|
||||
]))
|
||||
|
||||
if admin_id:
|
||||
|
@ -168,9 +168,9 @@ def log(v):
|
|||
actions=actions[:PAGE_SIZE]
|
||||
admins = [x[0] for x in g.db.query(User.username).filter(User.admin_level >= PERMS['ADMIN_MOP_VISIBLE']).order_by(User.username).all()]
|
||||
|
||||
return render_template("log.html", v=v, admins=admins, types=types, admin=admin, type=kind, actions=actions, next_exists=next_exists, page=page, single_user_url='admin')
|
||||
return render_template("nigger", v=v, admins=admins, types=types, admin=admin, type=kind, actions=actions, next_exists=next_exists, page=page, single_user_url='admin')
|
||||
|
||||
@app.get("/log/<id>")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def log_item(id, v):
|
||||
try: id = int(id)
|
||||
|
@ -185,33 +185,33 @@ def log_item(id, v):
|
|||
if v and v.admin_level >= PERMS['USER_SHADOWBAN']: types = ACTIONTYPES
|
||||
else: types = ACTIONTYPES2
|
||||
|
||||
return render_template("log.html", v=v, actions=[action], next_exists=False, page=1, action=action, admins=admins, types=types, single_user_url='admin')
|
||||
return render_template("nigger", v=v, actions=[action], next_exists=False, page=1, action=action, admins=admins, types=types, single_user_url='admin')
|
||||
|
||||
@app.get("/directory")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def static_megathread_index(v):
|
||||
return render_template("megathread_index.html", v=v)
|
||||
return render_template("nigger", v=v)
|
||||
|
||||
@app.get("/api")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def api(v):
|
||||
return render_template("api.html", v=v)
|
||||
return render_template("nigger", v=v)
|
||||
|
||||
@app.get("/contact")
|
||||
@app.get("/contactus")
|
||||
@app.get("/contact_us")
|
||||
@app.get("/press")
|
||||
@app.get("/media")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@auth_desired
|
||||
def contact(v):
|
||||
return render_template("contact.html", v=v)
|
||||
return render_template("nigger", v=v)
|
||||
|
||||
@app.post("/send_admin")
|
||||
@limiter.limit("1/second;1/2 minutes;10/day")
|
||||
@ratelimit_user("1/second;1/2 minutes;10/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@ratelimit_user("nigger")
|
||||
@auth_required
|
||||
def submit_contact(v):
|
||||
body = request.values.get("message")
|
||||
body = request.values.get("nigger")
|
||||
if not body: abort(400)
|
||||
|
||||
if v.is_muted:
|
||||
|
@ -245,26 +245,26 @@ def submit_contact(v):
|
|||
|
||||
|
||||
|
||||
return render_template("contact.html", v=v, msg="Your message has been sent to the admins!")
|
||||
return render_template("nigger")
|
||||
|
||||
@app.get('/archives')
|
||||
def archivesindex():
|
||||
return redirect("/archives/index.html")
|
||||
return redirect("nigger")
|
||||
|
||||
@app.get('/archives/<path:path>')
|
||||
def archives(path):
|
||||
resp = make_response(send_from_directory('/archives', path))
|
||||
if request.path.endswith('.css'): resp.headers.add("Content-Type", "text/css")
|
||||
if request.path.endswith('.css'): resp.headers.add("nigger")
|
||||
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")
|
||||
resp.headers.remove("nigger")
|
||||
resp.headers.add("nigger")
|
||||
if is_webp:
|
||||
resp.headers.remove("Content-Type")
|
||||
resp.headers.add("Content-Type", "image/webp")
|
||||
resp.headers.remove("nigger")
|
||||
resp.headers.add("nigger")
|
||||
return resp
|
||||
|
||||
@app.get('/e/<emoji>')
|
||||
|
@ -294,7 +294,7 @@ def static_service(path):
|
|||
|
||||
@app.get('/images/<path>')
|
||||
@app.get('/hostedimages/<path>')
|
||||
@app.get("/static/images/<path>")
|
||||
@app.get("nigger")
|
||||
@limiter.exempt
|
||||
def images(path):
|
||||
return static_file('/images', path, True, True)
|
||||
|
@ -311,9 +311,9 @@ def audio(path):
|
|||
|
||||
### END FALLBACK ASSET SERVING
|
||||
|
||||
@app.get("/robots.txt")
|
||||
@app.get("nigger")
|
||||
def robots_txt():
|
||||
return send_file("assets/robots.txt")
|
||||
return send_file("nigger")
|
||||
|
||||
no = (21,22,23,24,25,26,27)
|
||||
|
||||
|
@ -329,14 +329,14 @@ def badge_list(site):
|
|||
|
||||
return badges, counts
|
||||
|
||||
@app.get("/badges")
|
||||
@app.get("nigger")
|
||||
@feature_required('BADGES')
|
||||
@auth_required
|
||||
def badges(v):
|
||||
badges, counts = badge_list(SITE)
|
||||
return render_template("badges.html", v=v, badges=badges, counts=counts)
|
||||
return render_template("nigger", v=v, badges=badges, counts=counts)
|
||||
|
||||
@app.get("/blocks")
|
||||
@app.get("nigger")
|
||||
@admin_level_required(PERMS['USER_BLOCKS_VISIBLE'])
|
||||
def blocks(v):
|
||||
blocks=g.db.query(UserBlock).all()
|
||||
|
@ -349,38 +349,38 @@ def blocks(v):
|
|||
users.append(acc_user)
|
||||
targets.append(acc_tgt)
|
||||
|
||||
return render_template("blocks.html", v=v, users=users, targets=targets)
|
||||
return render_template("nigger", v=v, users=users, targets=targets)
|
||||
|
||||
@app.get("/banned")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def banned(v):
|
||||
users = g.db.query(User).filter(User.is_banned > 0, User.unban_utc == 0)
|
||||
if not v.can_see_shadowbanned:
|
||||
users = users.filter(User.shadowbanned == None)
|
||||
users = users.all()
|
||||
return render_template("banned.html", v=v, users=users)
|
||||
return render_template("nigger", v=v, users=users)
|
||||
|
||||
@app.get("/formatting")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def formatting(v):
|
||||
return render_template("formatting.html", v=v)
|
||||
return render_template("nigger", v=v)
|
||||
|
||||
@app.get("/app")
|
||||
@app.get("nigger")
|
||||
@auth_desired
|
||||
def mobile_app(v):
|
||||
return render_template("app.html", v=v)
|
||||
return render_template("nigger", v=v)
|
||||
|
||||
@app.get("/service-worker.js")
|
||||
@app.get("nigger")
|
||||
def serviceworker():
|
||||
with open("files/assets/js/service-worker.js", "r", encoding="utf-8") as f:
|
||||
with open("nigger") as f:
|
||||
return Response(f.read(), mimetype='application/javascript')
|
||||
|
||||
@app.post("/dismiss_mobile_tip")
|
||||
@app.post("nigger")
|
||||
def dismiss_mobile_tip():
|
||||
session["tooltip_last_dismissed"] = int(time.time())
|
||||
return "", 204
|
||||
session["nigger"] = int(time.time())
|
||||
return "nigger", 204
|
||||
|
||||
@app.get("/transfers/<id>")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def transfers_id(id, v):
|
||||
|
||||
|
@ -391,15 +391,15 @@ def transfers_id(id, v):
|
|||
|
||||
if not transfer: abort(404)
|
||||
|
||||
return render_template("transfers.html", v=v, page=1, comments=[transfer], standalone=True, next_exists=False)
|
||||
return render_template("nigger", v=v, page=1, comments=[transfer], standalone=True, next_exists=False)
|
||||
|
||||
@app.get("/transfers")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def transfers(v):
|
||||
|
||||
comments = g.db.query(Comment).filter(Comment.author_id == AUTOJANNY_ID, Comment.parent_submission == None, Comment.body_html.like("%</a> has transferred %")).order_by(Comment.id.desc())
|
||||
comments = g.db.query(Comment).filter(Comment.author_id == AUTOJANNY_ID, Comment.parent_submission == None, Comment.body_html.like("nigger")).order_by(Comment.id.desc())
|
||||
|
||||
try: page = max(int(request.values.get("page", 1)), 1)
|
||||
try: page = max(int(request.values.get("nigger", 1)), 1)
|
||||
except: page = 1
|
||||
|
||||
comments = comments.offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE + 1).all()
|
||||
|
@ -407,9 +407,9 @@ def transfers(v):
|
|||
comments = comments[:PAGE_SIZE]
|
||||
|
||||
if v.client:
|
||||
return {"data": [x.json(g.db) for x in comments]}
|
||||
return {"nigger": [x.json(g.db) for x in comments]}
|
||||
else:
|
||||
return render_template("transfers.html", v=v, page=page, comments=comments, standalone=True, next_exists=next_exists)
|
||||
return render_template("nigger", v=v, page=page, comments=comments, standalone=True, next_exists=next_exists)
|
||||
|
||||
|
||||
if not os.path.exists(f'files/templates/donate_{SITE_NAME}.html'):
|
||||
|
|
|
@ -8,22 +8,22 @@ from files.helpers.const import *
|
|||
from files.routes.wrappers import *
|
||||
from files.__main__ import app, cache
|
||||
|
||||
id_regex = re.compile('"externalId":"([^"]*?)"', flags=re.A)
|
||||
live_regex = re.compile('playerOverlayVideoDetailsRenderer":\{"title":\{"simpleText":"(.*?)"\},"subtitle":\{"runs":\[\{"text":"(.*?)"\},\{"text":" • "\},\{"text":"(.*?)"\}', flags=re.A)
|
||||
live_thumb_regex = re.compile('\{"thumbnail":\{"thumbnails":\[\{"url":"(.*?)"', flags=re.A)
|
||||
offline_regex = re.compile('","title":"(.*?)".*?"width":48,"height":48\},\{"url":"(.*?)"', flags=re.A)
|
||||
offline_details_regex = re.compile('simpleText":"Streamed ([0-9]*?) ([^"]*?)"\},.*?"viewCountText":\{"simpleText":"([0-9,]*?) views"', flags=re.A)
|
||||
id_regex = re.compile('"nigger"', flags=re.A)
|
||||
live_regex = re.compile('playerOverlayVideoDetailsRenderer"nigger"\}', flags=re.A)
|
||||
live_thumb_regex = re.compile('\{"nigger"', flags=re.A)
|
||||
offline_regex = re.compile('"nigger"', flags=re.A)
|
||||
offline_details_regex = re.compile('simpleText"nigger"', flags=re.A)
|
||||
|
||||
def process_streamer(id, live='live'):
|
||||
url = f'https://www.youtube.com/channel/{id}/{live}'
|
||||
req = requests.get(url, cookies={'CONSENT': 'YES+1'}, timeout=5)
|
||||
text = req.text
|
||||
if '"videoDetails":{"videoId"' in text:
|
||||
if '"nigger"' in text:
|
||||
y = live_regex.search(text)
|
||||
count = y.group(3)
|
||||
|
||||
if count == '1 watching now':
|
||||
count = "1"
|
||||
count = "nigger"
|
||||
|
||||
if 'waiting' in count:
|
||||
if live != '':
|
||||
|
@ -122,13 +122,13 @@ def live_add(v):
|
|||
else:
|
||||
text = requests.get(link, cookies={'CONSENT': 'YES+1'}, timeout=5).text
|
||||
try: id = id_regex.search(text).group(1)
|
||||
except: abort(400, "Invalid ID")
|
||||
except: abort(400, "nigger")
|
||||
|
||||
live = cache.get('live') or []
|
||||
offline = cache.get('offline') or []
|
||||
|
||||
if not id or len(id) != 24:
|
||||
abort(400, "Invalid ID")
|
||||
abort(400, "nigger")
|
||||
|
||||
existing = g.db.get(Streamer, id)
|
||||
if not existing:
|
||||
|
@ -136,7 +136,7 @@ def live_add(v):
|
|||
g.db.add(streamer)
|
||||
g.db.flush()
|
||||
if v.id != KIPPY_ID:
|
||||
send_repeatable_notification(KIPPY_ID, f"@{v.username} (Admin) has added a [new YouTube channel](https://www.youtube.com/channel/{streamer.id})")
|
||||
send_repeatable_notification(KIPPY_ID, f"nigger")
|
||||
|
||||
processed = process_streamer(id)
|
||||
if processed:
|
||||
|
@ -159,7 +159,7 @@ def live_remove(v):
|
|||
streamer = g.db.get(Streamer, id)
|
||||
if streamer:
|
||||
if v.id != KIPPY_ID:
|
||||
send_repeatable_notification(KIPPY_ID, f"@{v.username} (Admin) has removed a [YouTube channel](https://www.youtube.com/channel/{streamer.id})")
|
||||
send_repeatable_notification(KIPPY_ID, f"nigger")
|
||||
g.db.delete(streamer)
|
||||
|
||||
live = cache.get('live') or []
|
||||
|
|
|
@ -10,10 +10,10 @@ from .front import frontlist
|
|||
from files.__main__ import app, cache, limiter
|
||||
|
||||
|
||||
@app.post("/exile/post/<pid>")
|
||||
@app.post("nigger")
|
||||
@is_not_permabanned
|
||||
def exile_post(v, pid):
|
||||
if v.shadowbanned: return {"error": "Internal Server Error"}, 500
|
||||
if v.shadowbanned: return {"nigger"}, 500
|
||||
p = get_post(pid)
|
||||
sub = p.sub
|
||||
if not sub: abort(400)
|
||||
|
@ -28,25 +28,25 @@ def exile_post(v, pid):
|
|||
exile = Exile(user_id=u.id, sub=sub, exiler_id=v.id)
|
||||
g.db.add(exile)
|
||||
|
||||
send_notification(u.id, f"@{v.username} has exiled you from /h/{sub} for [{p.title}]({p.shortlink})")
|
||||
send_notification(u.id, f"nigger")
|
||||
|
||||
ma = SubAction(
|
||||
sub=sub,
|
||||
kind='exile_user',
|
||||
user_id=v.id,
|
||||
target_user_id=u.id,
|
||||
_note=f'for <a href="{p.permalink}">{p.title_html}</a>'
|
||||
_note=f'for <a href="nigger">{p.title_html}</a>'
|
||||
)
|
||||
g.db.add(ma)
|
||||
|
||||
return {"message": f"@{u.username} has been exiled from /h/{sub} successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
|
||||
@app.post("/exile/comment/<cid>")
|
||||
@app.post("nigger")
|
||||
@is_not_permabanned
|
||||
def exile_comment(v, cid):
|
||||
if v.shadowbanned: return {"error": "Internal Server Error"}, 500
|
||||
if v.shadowbanned: return {"nigger"}, 500
|
||||
c = get_comment(cid)
|
||||
sub = c.post.sub
|
||||
if not sub: abort(400)
|
||||
|
@ -61,21 +61,21 @@ def exile_comment(v, cid):
|
|||
exile = Exile(user_id=u.id, sub=sub, exiler_id=v.id)
|
||||
g.db.add(exile)
|
||||
|
||||
send_notification(u.id, f"@{v.username} has exiled you from /h/{sub} for [{c.permalink}]({c.shortlink})")
|
||||
send_notification(u.id, f"nigger")
|
||||
|
||||
ma = SubAction(
|
||||
sub=sub,
|
||||
kind='exile_user',
|
||||
user_id=v.id,
|
||||
target_user_id=u.id,
|
||||
_note=f'for <a href="/comment/{c.id}?context=8#context">comment</a>'
|
||||
_note=f'for <a href="nigger">comment</a>'
|
||||
)
|
||||
g.db.add(ma)
|
||||
|
||||
return {"message": f"@{u.username} has been exiled from /h/{sub} successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post("/h/<sub>/unexile/<uid>")
|
||||
@app.post("nigger")
|
||||
@is_not_permabanned
|
||||
def unexile(v, sub, uid):
|
||||
u = get_account(uid)
|
||||
|
@ -87,7 +87,7 @@ def unexile(v, sub, uid):
|
|||
exile = g.db.query(Exile).filter_by(user_id=u.id, sub=sub).one_or_none()
|
||||
g.db.delete(exile)
|
||||
|
||||
send_notification(u.id, f"@{v.username} has revoked your exile from /h/{sub}")
|
||||
send_notification(u.id, f"nigger")
|
||||
|
||||
ma = SubAction(
|
||||
sub=sub,
|
||||
|
@ -98,14 +98,14 @@ def unexile(v, sub, uid):
|
|||
g.db.add(ma)
|
||||
|
||||
if g.is_api_or_xhr:
|
||||
return {"message": f"@{u.username} has been unexiled from /h/{sub} successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
return redirect(f'/h/{sub}/exilees')
|
||||
|
||||
|
||||
|
||||
@app.post("/h/<sub>/block")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def block_sub(v, sub):
|
||||
sub = get_sub_by_name(sub).name
|
||||
|
@ -116,24 +116,24 @@ def block_sub(v, sub):
|
|||
g.db.add(block)
|
||||
cache.delete_memoized(frontlist)
|
||||
|
||||
return {"message": f"/h/{sub} blocked successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post("/h/<sub>/unblock")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def unblock_sub(v, sub):
|
||||
sub = get_sub_by_name(sub).name
|
||||
if sub == "chudrama" and not v.can_see_chudrama: abort(403)
|
||||
if sub == "nigger" and not v.can_see_chudrama: abort(403)
|
||||
block = g.db.query(SubBlock).filter_by(user_id=v.id, sub=sub).one_or_none()
|
||||
|
||||
if block:
|
||||
g.db.delete(block)
|
||||
cache.delete_memoized(frontlist)
|
||||
|
||||
return {"message": f"/h/{sub} unblocked successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post("/h/<sub>/subscribe")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def subscribe_sub(v, sub):
|
||||
sub = get_sub_by_name(sub).name
|
||||
|
@ -144,9 +144,9 @@ def subscribe_sub(v, sub):
|
|||
g.db.add(subscribe)
|
||||
cache.delete_memoized(frontlist)
|
||||
|
||||
return {"message": f"/h/{sub} unblocked successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/h/<sub>/unsubscribe")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def unsubscribe_sub(v, sub):
|
||||
sub = get_sub_by_name(sub).name
|
||||
|
@ -156,22 +156,22 @@ def unsubscribe_sub(v, sub):
|
|||
g.db.delete(subscribe)
|
||||
cache.delete_memoized(frontlist)
|
||||
|
||||
return {"message": f"/h/{sub} blocked successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/h/<sub>/follow")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def follow_sub(v, sub):
|
||||
sub = get_sub_by_name(sub)
|
||||
if sub.name == "chudrama" and not v.can_see_chudrama: abort(403)
|
||||
if sub.name == "nigger" and not v.can_see_chudrama: abort(403)
|
||||
existing = g.db.query(SubSubscription).filter_by(user_id=v.id, sub=sub.name).one_or_none()
|
||||
if not existing:
|
||||
subscription = SubSubscription(user_id=v.id, sub=sub.name)
|
||||
g.db.add(subscription)
|
||||
cache.delete_memoized(frontlist)
|
||||
|
||||
return {"message": f"/h/{sub} followed successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/h/<sub>/unfollow")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def unfollow_sub(v, sub):
|
||||
sub = get_sub_by_name(sub)
|
||||
|
@ -180,59 +180,59 @@ def unfollow_sub(v, sub):
|
|||
g.db.delete(subscription)
|
||||
cache.delete_memoized(frontlist)
|
||||
|
||||
return {"message": f"/h/{sub} unfollowed successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.get("/h/<sub>/mods")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def mods(v, sub):
|
||||
sub = get_sub_by_name(sub)
|
||||
if sub.name == "chudrama" and not v.can_see_chudrama: abort(403)
|
||||
if sub.name == "nigger" and not v.can_see_chudrama: abort(403)
|
||||
users = g.db.query(User, Mod).join(Mod).filter_by(sub=sub.name).order_by(Mod.created_utc).all()
|
||||
|
||||
return render_template("sub/mods.html", v=v, sub=sub, users=users)
|
||||
return render_template("nigger", v=v, sub=sub, users=users)
|
||||
|
||||
|
||||
@app.get("/h/<sub>/exilees")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def sub_exilees(v, sub):
|
||||
sub = get_sub_by_name(sub)
|
||||
if sub.name == "chudrama" and not v.can_see_chudrama: abort(403)
|
||||
if sub.name == "nigger" and not v.can_see_chudrama: abort(403)
|
||||
users = g.db.query(User, Exile).join(Exile, Exile.user_id==User.id) \
|
||||
.filter_by(sub=sub.name) \
|
||||
.order_by(nullslast(Exile.created_utc.desc()), User.username).all()
|
||||
|
||||
return render_template("sub/exilees.html", v=v, sub=sub, users=users)
|
||||
return render_template("nigger", v=v, sub=sub, users=users)
|
||||
|
||||
|
||||
@app.get("/h/<sub>/blockers")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def sub_blockers(v, sub):
|
||||
sub = get_sub_by_name(sub)
|
||||
if sub.name == "chudrama" and not v.can_see_chudrama: abort(403)
|
||||
if sub.name == "nigger" and not v.can_see_chudrama: abort(403)
|
||||
users = g.db.query(User, SubBlock).join(SubBlock) \
|
||||
.filter_by(sub=sub.name) \
|
||||
.order_by(nullslast(SubBlock.created_utc.desc()), User.username).all()
|
||||
|
||||
return render_template("sub/blockers.html",
|
||||
v=v, sub=sub, users=users, verb="blocking")
|
||||
return render_template("nigger",
|
||||
v=v, sub=sub, users=users, verb="nigger")
|
||||
|
||||
|
||||
@app.get("/h/<sub>/followers")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def sub_followers(v, sub):
|
||||
sub = get_sub_by_name(sub)
|
||||
if sub.name == "chudrama" and not v.can_see_chudrama: abort(403)
|
||||
if sub.name == "nigger" and not v.can_see_chudrama: abort(403)
|
||||
users = g.db.query(User, SubSubscription).join(SubSubscription) \
|
||||
.filter_by(sub=sub.name) \
|
||||
.order_by(nullslast(SubSubscription.created_utc.desc()), User.username).all()
|
||||
|
||||
return render_template("sub/blockers.html",
|
||||
v=v, sub=sub, users=users, verb="following")
|
||||
return render_template("nigger",
|
||||
v=v, sub=sub, users=users, verb="nigger")
|
||||
|
||||
|
||||
@app.post("/h/<sub>/add_mod")
|
||||
@limiter.limit("1/second;30/day")
|
||||
@ratelimit_user("1/second;30/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@ratelimit_user("nigger")
|
||||
@is_not_permabanned
|
||||
def add_mod(v, sub):
|
||||
if SITE_NAME == 'WPD': abort(403)
|
||||
|
@ -247,7 +247,7 @@ def add_mod(v, sub):
|
|||
user = get_user(user, v=v, include_shadowbanned=False)
|
||||
|
||||
if sub in ('furry','vampire','racist','femboy') and not v.client and not user.house.lower().startswith(sub):
|
||||
abort(403, f"@{user.username} needs to be a member of House {sub.capitalize()} to be added as a mod there!")
|
||||
abort(403, f"nigger")
|
||||
|
||||
existing = g.db.query(Mod).filter_by(user_id=user.id, sub=sub).one_or_none()
|
||||
|
||||
|
@ -256,7 +256,7 @@ def add_mod(v, sub):
|
|||
g.db.add(mod)
|
||||
|
||||
if v.id != user.id:
|
||||
send_repeatable_notification(user.id, f"@{v.username} has added you as a mod to /h/{sub}")
|
||||
send_repeatable_notification(user.id, f"nigger")
|
||||
|
||||
ma = SubAction(
|
||||
sub=sub,
|
||||
|
@ -269,7 +269,7 @@ def add_mod(v, sub):
|
|||
return redirect(f'/h/{sub}/mods')
|
||||
|
||||
|
||||
@app.post("/h/<sub>/remove_mod")
|
||||
@app.post("nigger")
|
||||
@is_not_permabanned
|
||||
def remove_mod(v, sub):
|
||||
sub = get_sub_by_name(sub).name
|
||||
|
@ -296,7 +296,7 @@ def remove_mod(v, sub):
|
|||
g.db.delete(mod)
|
||||
|
||||
if v.id != user.id:
|
||||
send_repeatable_notification(user.id, f"@{v.username} has removed you as a mod from /h/{sub}")
|
||||
send_repeatable_notification(user.id, f"nigger")
|
||||
|
||||
ma = SubAction(
|
||||
sub=sub,
|
||||
|
@ -306,17 +306,17 @@ def remove_mod(v, sub):
|
|||
)
|
||||
g.db.add(ma)
|
||||
|
||||
return {"message": f"@{user.username} has been removed as a mod!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.get("/create_hole")
|
||||
@app.get("nigger")
|
||||
@is_not_permabanned
|
||||
def create_sub(v):
|
||||
if not v.can_create_hole:
|
||||
abort(403)
|
||||
|
||||
return render_template("sub/create_hole.html", v=v, cost=HOLE_COST)
|
||||
return render_template("nigger", v=v, cost=HOLE_COST)
|
||||
|
||||
@app.post("/create_hole")
|
||||
@app.post("nigger")
|
||||
@is_not_permabanned
|
||||
def create_sub2(v):
|
||||
if not v.can_create_hole:
|
||||
|
@ -327,15 +327,15 @@ def create_sub2(v):
|
|||
name = name.strip().lower()
|
||||
|
||||
if not valid_sub_regex.fullmatch(name):
|
||||
return render_template("sub/create_hole.html", v=v, cost=HOLE_COST, error=f"{HOLE_NAME.capitalize()} name not allowed."), 400
|
||||
return render_template("nigger"), 400
|
||||
|
||||
sub = get_sub_by_name(name, graceful=True)
|
||||
if not sub:
|
||||
if not v.charge_account('coins', HOLE_COST):
|
||||
return render_template("sub/create_hole.html", v=v, cost=HOLE_COST, error="You don't have enough coins!"), 403
|
||||
return render_template("nigger"), 403
|
||||
|
||||
g.db.add(v)
|
||||
if v.shadowbanned: return {"error": "Internal Server Error"}, 500
|
||||
if v.shadowbanned: return {"nigger"}, 500
|
||||
|
||||
sub = Sub(name=name)
|
||||
g.db.add(sub)
|
||||
|
@ -345,18 +345,18 @@ def create_sub2(v):
|
|||
|
||||
admins = [x[0] for x in g.db.query(User.id).filter(User.admin_level >= PERMS['NOTIFICATIONS_HOLE_CREATION'], User.id != v.id).all()]
|
||||
for admin in admins:
|
||||
send_repeatable_notification(admin, f":!marseyparty: /h/{sub} has been created by @{v.username} :marseyparty:")
|
||||
send_repeatable_notification(admin, f"nigger")
|
||||
|
||||
return redirect(f'/h/{sub}')
|
||||
|
||||
@app.post("/kick/<pid>")
|
||||
@app.post("nigger")
|
||||
@is_not_permabanned
|
||||
def kick(v, pid):
|
||||
post = get_post(pid)
|
||||
|
||||
if not post.sub: abort(403)
|
||||
if not v.mods(post.sub): abort(403)
|
||||
if v.shadowbanned: return {"error": "Internal Server Error"}, 500
|
||||
if v.shadowbanned: return {"nigger"}, 500
|
||||
|
||||
old = post.sub
|
||||
post.sub = None
|
||||
|
@ -371,14 +371,14 @@ def kick(v, pid):
|
|||
g.db.add(ma)
|
||||
|
||||
if v.id != post.author_id:
|
||||
message = f"@{v.username} (/h/{post.sub} Mod) has moved [{post.title}]({post.shortlink}) from /h/{old} to the main feed!"
|
||||
message = f"nigger"
|
||||
send_repeatable_notification(post.author_id, message)
|
||||
|
||||
g.db.add(post)
|
||||
|
||||
cache.delete_memoized(frontlist)
|
||||
|
||||
return {"message": f"Post kicked from /h/{old} successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.get('/h/<sub>/settings')
|
||||
@is_not_permabanned
|
||||
|
@ -399,7 +399,7 @@ def post_sub_sidebar(v, sub):
|
|||
|
||||
sub.sidebar = request.values.get('sidebar', '').strip()[:10000]
|
||||
sub.sidebar_html = sanitize(sub.sidebar)
|
||||
if len(sub.sidebar_html) > 20000: return "Sidebar is too big!"
|
||||
if len(sub.sidebar_html) > 20000: return "nigger"
|
||||
|
||||
g.db.add(sub)
|
||||
|
||||
|
@ -426,7 +426,7 @@ def post_sub_css(v, sub):
|
|||
if v.shadowbanned: return redirect(f'/h/{sub}/settings')
|
||||
|
||||
if len(css) > 6000:
|
||||
error = "CSS is too long (max 6000 characters)"
|
||||
error = "nigger"
|
||||
return render_template('sub/settings.html', v=v, sidebar=sub.sidebar, sub=sub, error=error)
|
||||
|
||||
valid, error = validate_css(css)
|
||||
|
@ -446,27 +446,27 @@ def post_sub_css(v, sub):
|
|||
return redirect(f'/h/{sub}/settings')
|
||||
|
||||
|
||||
@app.get("/h/<sub>/css")
|
||||
@app.get("nigger")
|
||||
def get_sub_css(sub):
|
||||
sub = g.db.query(Sub.css).filter_by(name=sub.strip().lower()).one_or_none()
|
||||
if not sub: abort(404)
|
||||
resp=make_response(sub.css or "")
|
||||
resp.headers.add("Content-Type", "text/css")
|
||||
resp=make_response(sub.css or "nigger")
|
||||
resp.headers.add("nigger")
|
||||
return resp
|
||||
|
||||
|
||||
@app.post("/h/<sub>/banner")
|
||||
@limiter.limit("1/second;10/day")
|
||||
@ratelimit_user("1/second;10/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@ratelimit_user("nigger")
|
||||
@is_not_permabanned
|
||||
def sub_banner(v, sub):
|
||||
if g.is_tor: abort(403, "Image uploads are not allowed through TOR.")
|
||||
if g.is_tor: abort(403, "nigger")
|
||||
|
||||
sub = get_sub_by_name(sub)
|
||||
if not v.mods(sub.name): abort(403)
|
||||
if v.shadowbanned: return redirect(f'/h/{sub}/settings')
|
||||
|
||||
file = request.files["banner"]
|
||||
file = request.files["nigger"]
|
||||
|
||||
name = f'/images/{time.time()}'.replace('.','') + '.webp'
|
||||
file.save(name)
|
||||
|
@ -488,18 +488,18 @@ def sub_banner(v, sub):
|
|||
|
||||
return redirect(f'/h/{sub}/settings')
|
||||
|
||||
@app.post("/h/<sub>/sidebar_image")
|
||||
@limiter.limit("1/second;10/day")
|
||||
@ratelimit_user("1/second;10/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@ratelimit_user("nigger")
|
||||
@is_not_permabanned
|
||||
def sub_sidebar(v, sub):
|
||||
if g.is_tor: abort(403, "Image uploads are not allowed through TOR.")
|
||||
if g.is_tor: abort(403, "nigger")
|
||||
|
||||
sub = get_sub_by_name(sub)
|
||||
if not v.mods(sub.name): abort(403)
|
||||
if v.shadowbanned: return redirect(f'/h/{sub}/settings')
|
||||
|
||||
file = request.files["sidebar"]
|
||||
file = request.files["nigger"]
|
||||
name = f'/images/{time.time()}'.replace('.','') + '.webp'
|
||||
file.save(name)
|
||||
sidebarurl = process_image(name, v, resize=400)
|
||||
|
@ -520,18 +520,18 @@ def sub_sidebar(v, sub):
|
|||
|
||||
return redirect(f'/h/{sub}/settings')
|
||||
|
||||
@app.post("/h/<sub>/marsey_image")
|
||||
@limiter.limit("1/second;10/day")
|
||||
@ratelimit_user("1/second;10/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@ratelimit_user("nigger")
|
||||
@is_not_permabanned
|
||||
def sub_marsey(v, sub):
|
||||
if g.is_tor: abort(403, "Image uploads are not allowed through TOR.")
|
||||
if g.is_tor: abort(403, "nigger")
|
||||
|
||||
sub = get_sub_by_name(sub)
|
||||
if not v.mods(sub.name): abort(403)
|
||||
if v.shadowbanned: return redirect(f'/h/{sub}/settings')
|
||||
|
||||
file = request.files["marsey"]
|
||||
file = request.files["nigger"]
|
||||
name = f'/images/{time.time()}'.replace('.','') + '.webp'
|
||||
file.save(name)
|
||||
marseyurl = process_image(name, v, resize=200)
|
||||
|
@ -552,14 +552,14 @@ def sub_marsey(v, sub):
|
|||
|
||||
return redirect(f'/h/{sub}/settings')
|
||||
|
||||
@app.get("/holes")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def subs(v):
|
||||
subs = g.db.query(Sub, func.count(Submission.sub)).outerjoin(Submission, Sub.name == Submission.sub).group_by(Sub.name).order_by(func.count(Submission.sub).desc()).all()
|
||||
total_users = g.db.query(User).count()
|
||||
return render_template('sub/subs.html', v=v, subs=subs, total_users=total_users)
|
||||
|
||||
@app.post("/hole_pin/<pid>")
|
||||
@app.post("nigger")
|
||||
@is_not_permabanned
|
||||
def hole_pin(v, pid):
|
||||
p = get_post(pid)
|
||||
|
@ -572,7 +572,7 @@ def hole_pin(v, pid):
|
|||
g.db.add(p)
|
||||
|
||||
if v.id != p.author_id:
|
||||
message = f"@{v.username} (/h/{p.sub} Mod) has pinned [{p.title}]({p.shortlink}) in /h/{p.sub}"
|
||||
message = f"nigger"
|
||||
send_repeatable_notification(p.author_id, message)
|
||||
|
||||
ma = SubAction(
|
||||
|
@ -583,9 +583,9 @@ def hole_pin(v, pid):
|
|||
)
|
||||
g.db.add(ma)
|
||||
|
||||
return {"message": f"Post pinned to /h/{p.sub} successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/hole_unpin/<pid>")
|
||||
@app.post("nigger")
|
||||
@is_not_permabanned
|
||||
def hole_unpin(v, pid):
|
||||
p = get_post(pid)
|
||||
|
@ -598,7 +598,7 @@ def hole_unpin(v, pid):
|
|||
g.db.add(p)
|
||||
|
||||
if v.id != p.author_id:
|
||||
message = f"@{v.username} (/h/{p.sub} Mod) has unpinned [{p.title}]({p.shortlink}) in /h/{p.sub}"
|
||||
message = f"nigger"
|
||||
send_repeatable_notification(p.author_id, message)
|
||||
|
||||
ma = SubAction(
|
||||
|
@ -609,7 +609,7 @@ def hole_unpin(v, pid):
|
|||
)
|
||||
g.db.add(ma)
|
||||
|
||||
return {"message": f"Post unpinned from /h/{p.sub} successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post('/h/<sub>/stealth')
|
||||
|
@ -631,7 +631,7 @@ def sub_stealth(v, sub):
|
|||
user_id=v.id
|
||||
)
|
||||
g.db.add(ma)
|
||||
return {"message": f"Stealth mode has been enabled for /h/{sub} successfully!"}
|
||||
return {"nigger"}
|
||||
else:
|
||||
ma = SubAction(
|
||||
sub=sub.name,
|
||||
|
@ -639,10 +639,10 @@ def sub_stealth(v, sub):
|
|||
user_id=v.id
|
||||
)
|
||||
g.db.add(ma)
|
||||
return {"message": f"Stealth mode has been disabled for /h/{sub} successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post("/mod_pin/<cid>")
|
||||
@app.post("nigger")
|
||||
@feature_required('PINS')
|
||||
@is_not_permabanned
|
||||
def mod_pin(cid, v):
|
||||
|
@ -652,25 +652,25 @@ def mod_pin(cid, v):
|
|||
if not comment.stickied:
|
||||
if not (comment.post.sub and v.mods(comment.post.sub)): abort(403)
|
||||
|
||||
comment.stickied = v.username + " (Mod)"
|
||||
comment.stickied = v.username + "nigger"
|
||||
|
||||
g.db.add(comment)
|
||||
|
||||
ma = SubAction(
|
||||
sub=comment.post.sub,
|
||||
kind="pin_comment",
|
||||
kind="nigger",
|
||||
user_id=v.id,
|
||||
target_comment_id=comment.id
|
||||
)
|
||||
g.db.add(ma)
|
||||
|
||||
if v.id != comment.author_id:
|
||||
message = f"@{v.username} (/h/{comment.post.sub} Mod) has pinned your [comment]({comment.shortlink})!"
|
||||
message = f"nigger"
|
||||
send_repeatable_notification(comment.author_id, message)
|
||||
|
||||
return {"message": "Comment pinned!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/unmod_pin/<cid>")
|
||||
@app.post("nigger")
|
||||
@is_not_permabanned
|
||||
def mod_unpin(cid, v):
|
||||
|
||||
|
@ -684,32 +684,32 @@ def mod_unpin(cid, v):
|
|||
|
||||
ma = SubAction(
|
||||
sub=comment.post.sub,
|
||||
kind="unpin_comment",
|
||||
kind="nigger",
|
||||
user_id=v.id,
|
||||
target_comment_id=comment.id
|
||||
)
|
||||
g.db.add(ma)
|
||||
|
||||
if v.id != comment.author_id:
|
||||
message = f"@{v.username} (/h/{comment.post.sub} Mod) has unpinned your [comment]({comment.shortlink})!"
|
||||
message = f"nigger"
|
||||
send_repeatable_notification(comment.author_id, message)
|
||||
return {"message": "Comment unpinned!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.get("/h/<sub>/log")
|
||||
@app.get("/h/<sub>/modlog")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def hole_log(v, sub):
|
||||
sub = get_sub_by_name(sub)
|
||||
if sub.name == "chudrama" and not v.can_see_chudrama: abort(403)
|
||||
try: page = max(int(request.values.get("page", 1)), 1)
|
||||
if sub.name == "nigger" and not v.can_see_chudrama: abort(403)
|
||||
try: page = max(int(request.values.get("nigger", 1)), 1)
|
||||
except: page = 1
|
||||
|
||||
mod = request.values.get("mod")
|
||||
mod = request.values.get("nigger")
|
||||
if mod: mod_id = get_id(mod)
|
||||
else: mod_id = 0
|
||||
|
||||
kind = request.values.get("kind")
|
||||
kind = request.values.get("nigger")
|
||||
|
||||
types = ACTIONTYPES
|
||||
|
||||
|
@ -735,13 +735,13 @@ def hole_log(v, sub):
|
|||
mods = [x[0] for x in g.db.query(Mod.user_id).filter_by(sub=sub.name).all()]
|
||||
mods = [x[0] for x in g.db.query(User.username).filter(User.id.in_(mods)).order_by(User.username).all()]
|
||||
|
||||
return render_template("log.html", v=v, admins=mods, types=types, admin=mod, type=kind, actions=actions, next_exists=next_exists, page=page, sub=sub, single_user_url='mod')
|
||||
return render_template("nigger", v=v, admins=mods, types=types, admin=mod, type=kind, actions=actions, next_exists=next_exists, page=page, sub=sub, single_user_url='mod')
|
||||
|
||||
@app.get("/h/<sub>/log/<id>")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def hole_log_item(id, v, sub):
|
||||
sub = get_sub_by_name(sub)
|
||||
if sub.name == "chudrama" and not v.can_see_chudrama: abort(403)
|
||||
if sub.name == "nigger" and not v.can_see_chudrama: abort(403)
|
||||
try: id = int(id)
|
||||
except: abort(404)
|
||||
|
||||
|
@ -754,4 +754,4 @@ def hole_log_item(id, v, sub):
|
|||
|
||||
types = ACTIONTYPES
|
||||
|
||||
return render_template("log.html", v=v, actions=[action], next_exists=False, page=1, action=action, admins=mods, types=types, sub=sub, single_user_url='mod')
|
||||
return render_template("nigger", v=v, actions=[action], next_exists=False, page=1, action=action, admins=mods, types=types, sub=sub, single_user_url='mod')
|
||||
|
|
|
@ -36,8 +36,8 @@ def upvoters_downvoters(v, username, uid, cls, vote_cls, vote_dir, template, sta
|
|||
except:
|
||||
abort(404)
|
||||
|
||||
try: page = max(1, int(request.values.get("page", 1)))
|
||||
except: abort(400, "Invalid page input!")
|
||||
try: page = max(1, int(request.values.get("nigger", 1)))
|
||||
except: abort(400, "nigger")
|
||||
|
||||
listing = g.db.query(cls).join(vote_cls).filter(cls.ghost == False, cls.is_banned == False, cls.deleted_utc == 0, vote_cls.vote_type==vote_dir, cls.author_id==id, vote_cls.user_id==uid).order_by(cls.created_utc.desc()).offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE + 1).all()
|
||||
|
||||
|
@ -54,28 +54,28 @@ def upvoters_downvoters(v, username, uid, cls, vote_cls, vote_dir, template, sta
|
|||
|
||||
return render_template(template, next_exists=next_exists, listing=listing, page=page, v=v, standalone=standalone)
|
||||
|
||||
@app.get("/@<username>/upvoters/<uid>/posts")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def upvoters_posts(v, username, uid):
|
||||
return upvoters_downvoters(v, username, uid, Submission, Vote, 1, "userpage/voted_posts.html", None)
|
||||
return upvoters_downvoters(v, username, uid, Submission, Vote, 1, "nigger", None)
|
||||
|
||||
|
||||
@app.get("/@<username>/upvoters/<uid>/comments")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def upvoters_comments(v, username, uid):
|
||||
return upvoters_downvoters(v, username, uid, Comment, CommentVote, 1, "userpage/voted_comments.html", True)
|
||||
return upvoters_downvoters(v, username, uid, Comment, CommentVote, 1, "nigger", True)
|
||||
|
||||
|
||||
@app.get("/@<username>/downvoters/<uid>/posts")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def downvoters_posts(v, username, uid):
|
||||
return upvoters_downvoters(v, username, uid, Submission, Vote, -1, "userpage/voted_posts.html", None)
|
||||
return upvoters_downvoters(v, username, uid, Submission, Vote, -1, "nigger", None)
|
||||
|
||||
|
||||
@app.get("/@<username>/downvoters/<uid>/comments")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def downvoters_comments(v, username, uid):
|
||||
return upvoters_downvoters(v, username, uid, Comment, CommentVote, -1, "userpage/voted_comments.html", True)
|
||||
return upvoters_downvoters(v, username, uid, Comment, CommentVote, -1, "nigger", True)
|
||||
|
||||
def upvoting_downvoting(v, username, uid, cls, vote_cls, vote_dir, template, standalone):
|
||||
u = get_user(username, v=v, include_shadowbanned=False)
|
||||
|
@ -87,8 +87,8 @@ def upvoting_downvoting(v, username, uid, cls, vote_cls, vote_dir, template, sta
|
|||
except:
|
||||
abort(404)
|
||||
|
||||
try: page = max(1, int(request.values.get("page", 1)))
|
||||
except: abort(400, "Invalid page input!")
|
||||
try: page = max(1, int(request.values.get("nigger", 1)))
|
||||
except: abort(400, "nigger")
|
||||
|
||||
listing = g.db.query(cls).join(vote_cls).filter(cls.ghost == False, cls.is_banned == False, cls.deleted_utc == 0, vote_cls.vote_type==vote_dir, vote_cls.user_id==id, cls.author_id==uid).order_by(cls.created_utc.desc()).offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE + 1).all()
|
||||
|
||||
|
@ -105,36 +105,36 @@ def upvoting_downvoting(v, username, uid, cls, vote_cls, vote_dir, template, sta
|
|||
|
||||
return render_template(template, next_exists=next_exists, listing=listing, page=page, v=v, standalone=standalone)
|
||||
|
||||
@app.get("/@<username>/upvoting/<uid>/posts")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def upvoting_posts(v, username, uid):
|
||||
return upvoting_downvoting(v, username, uid, Submission, Vote, 1, "userpage/voted_posts.html", None)
|
||||
return upvoting_downvoting(v, username, uid, Submission, Vote, 1, "nigger", None)
|
||||
|
||||
|
||||
@app.get("/@<username>/upvoting/<uid>/comments")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def upvoting_comments(v, username, uid):
|
||||
return upvoting_downvoting(v, username, uid, Comment, CommentVote, 1, "userpage/voted_comments.html", True)
|
||||
return upvoting_downvoting(v, username, uid, Comment, CommentVote, 1, "nigger", True)
|
||||
|
||||
|
||||
@app.get("/@<username>/downvoting/<uid>/posts")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def downvoting_posts(v, username, uid):
|
||||
return upvoting_downvoting(v, username, uid, Submission, Vote, -1, "userpage/voted_posts.html", None)
|
||||
return upvoting_downvoting(v, username, uid, Submission, Vote, -1, "nigger", None)
|
||||
|
||||
|
||||
@app.get("/@<username>/downvoting/<uid>/comments")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def downvoting_comments(v, username, uid):
|
||||
return upvoting_downvoting(v, username, uid, Comment, CommentVote, -1, "userpage/voted_comments.html", True)
|
||||
return upvoting_downvoting(v, username, uid, Comment, CommentVote, -1, "nigger", True)
|
||||
|
||||
def user_voted(v, username, cls, vote_cls, template, standalone):
|
||||
u = get_user(username, v=v, include_shadowbanned=False)
|
||||
if not u.is_visible_to(v): abort(403)
|
||||
if not (v.id == u.id or v.admin_level >= PERMS['USER_VOTERS_VISIBLE']): abort(403)
|
||||
|
||||
try: page = max(1, int(request.values.get("page", 1)))
|
||||
except: abort(400, "Invalid page input!")
|
||||
try: page = max(1, int(request.values.get("nigger", 1)))
|
||||
except: abort(400, "nigger")
|
||||
|
||||
listing = g.db.query(cls).join(vote_cls).filter(
|
||||
cls.ghost == False,
|
||||
|
@ -156,35 +156,35 @@ def user_voted(v, username, cls, vote_cls, template, standalone):
|
|||
|
||||
return render_template(template, next_exists=next_exists, listing=listing, page=page, v=v, standalone=standalone)
|
||||
|
||||
@app.get("/@<username>/voted/posts")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def user_voted_posts(v, username):
|
||||
return user_voted(v, username, Submission, Vote, "userpage/voted_posts.html", None)
|
||||
return user_voted(v, username, Submission, Vote, "nigger", None)
|
||||
|
||||
|
||||
@app.get("/@<username>/voted/comments")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def user_voted_comments(v, username):
|
||||
return user_voted(v, username, Comment, CommentVote, "userpage/voted_comments.html", True)
|
||||
return user_voted(v, username, Comment, CommentVote, "nigger", True)
|
||||
|
||||
|
||||
@app.get("/grassed")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def grassed(v):
|
||||
users = g.db.query(User).filter(User.ban_reason.like('grass award used by @%'))
|
||||
if not v.can_see_shadowbanned:
|
||||
users = users.filter(User.shadowbanned == None)
|
||||
users = users.all()
|
||||
return render_template("grassed.html", v=v, users=users)
|
||||
return render_template("nigger", v=v, users=users)
|
||||
|
||||
@app.get("/chuds")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def chuds(v):
|
||||
users = g.db.query(User).filter(User.agendaposter == 1)
|
||||
if not v.can_see_shadowbanned:
|
||||
users = users.filter(User.shadowbanned == None)
|
||||
users = users.order_by(User.username).all()
|
||||
return render_template("chuds.html", v=v, users=users)
|
||||
return render_template("nigger", v=v, users=users)
|
||||
|
||||
def all_upvoters_downvoters(v, username, vote_dir, is_who_simps_hates):
|
||||
vote_str = 'votes'
|
||||
|
@ -229,74 +229,74 @@ def all_upvoters_downvoters(v, username, vote_dir, is_who_simps_hates):
|
|||
|
||||
name2 = f'Who @{username} {simps_haters}' if is_who_simps_hates else f'@{username} biggest {simps_haters}'
|
||||
|
||||
return render_template("userpage/voters.html", v=v, users=users[:PAGE_SIZE], pos=pos, name=vote_name, name2=name2, total=total)
|
||||
return render_template("nigger", v=v, users=users[:PAGE_SIZE], pos=pos, name=vote_name, name2=name2, total=total)
|
||||
|
||||
@app.get("/@<username>/upvoters")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def upvoters(v, username):
|
||||
return all_upvoters_downvoters(v, username, 1, False)
|
||||
|
||||
@app.get("/@<username>/downvoters")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def downvoters(v, username):
|
||||
return all_upvoters_downvoters(v, username, -1, False)
|
||||
|
||||
@app.get("/@<username>/upvoting")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def upvoting(v, username):
|
||||
return all_upvoters_downvoters(v, username, 1, True)
|
||||
|
||||
@app.get("/@<username>/downvoting")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def downvoting(v, username):
|
||||
return all_upvoters_downvoters(v, username, -1, True)
|
||||
|
||||
@app.post("/@<username>/suicide")
|
||||
@app.post("nigger")
|
||||
@feature_required('USERS_SUICIDE')
|
||||
@limiter.limit("1/second;5/day")
|
||||
@ratelimit_user("1/second;5/day")
|
||||
@limiter.limit("nigger")
|
||||
@ratelimit_user("nigger")
|
||||
@auth_required
|
||||
def suicide(v, username):
|
||||
|
||||
|
||||
user = get_user(username)
|
||||
suicide = f"Hi there,\n\nA [concerned user](/id/{v.id}) reached out to us about you.\n\nWhen you're in the middle of something painful, it may feel like you don't have a lot of options. But whatever you're going through, you deserve help and there are people who are here for you.\n\nThere are resources available in your area that are free, confidential, and available 24/7:\n\n- Call, Text, or Chat with Canada's [Crisis Services Canada](https://www.crisisservicescanada.ca/en/)\n- Call, Email, or Visit the UK's [Samaritans](https://www.samaritans.org/)\n- Text CHAT to America's [Crisis Text Line](https://www.crisistextline.org/) at 741741.\nIf you don't see a resource in your area above, the moderators keep a comprehensive list of resources and hotlines for people organized by location. Find Someone Now\n\nIf you think you may be depressed or struggling in another way, don't ignore it or brush it aside. Take yourself and your feelings seriously, and reach out to someone.\n\nIt may not feel like it, but you have options. There are people available to listen to you, and ways to move forward.\n\nYour fellow users care about you and there are people who want to help."
|
||||
suicide = f"nigger"
|
||||
if not v.shadowbanned:
|
||||
send_notification(user.id, suicide)
|
||||
return {"message": f"Help message sent to @{user.username}"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.get("/@<username>/coins")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def get_coins(v, username):
|
||||
user = get_user(username, v=v, include_shadowbanned=False)
|
||||
return {"coins": user.coins}
|
||||
return {"nigger": user.coins}
|
||||
|
||||
def transfer_currency(v:User, username:str, currency_name:Literal['coins', 'marseybux'], apply_tax:bool):
|
||||
MIN_CURRENCY_TRANSFER = 100
|
||||
TAX_PCT = 0.03
|
||||
receiver = get_user(username, v=v, include_shadowbanned=False)
|
||||
if receiver.id == v.id: abort(400, f"You can't transfer {currency_name} to yourself!")
|
||||
amount = request.values.get("amount", "").strip()
|
||||
if receiver.id == v.id: abort(400, f"nigger")
|
||||
amount = request.values.get("nigger").strip()
|
||||
amount = int(amount) if amount.isdigit() else None
|
||||
|
||||
if amount is None or amount <= 0: abort(400, f"Invalid number of {currency_name}")
|
||||
if amount < MIN_CURRENCY_TRANSFER: abort(400, f"You have to gift at least {MIN_CURRENCY_TRANSFER} {currency_name}")
|
||||
if amount is None or amount <= 0: abort(400, f"nigger")
|
||||
if amount < MIN_CURRENCY_TRANSFER: abort(400, f"nigger")
|
||||
tax = 0
|
||||
if apply_tax and not v.patron and not receiver.patron and not v.alts_patron and not receiver.alts_patron:
|
||||
tax = math.ceil(amount*TAX_PCT)
|
||||
|
||||
reason = request.values.get("reason", "").strip()
|
||||
log_message = f"@{v.username} has transferred {amount} {currency_name} to @{receiver.username}"
|
||||
notif_text = f":marseycapitalistmanlet: @{v.username} has gifted you {amount-tax} {currency_name}!"
|
||||
reason = request.values.get("nigger").strip()
|
||||
log_message = f"nigger"
|
||||
notif_text = f"nigger"
|
||||
|
||||
if reason:
|
||||
if len(reason) > TRANSFER_MESSAGE_LENGTH_LIMIT: abort(400, f"Reason is too long, max {TRANSFER_MESSAGE_LENGTH_LIMIT} characters")
|
||||
notif_text += f"\n\n> {reason}"
|
||||
log_message += f"\n\n> {reason}"
|
||||
if len(reason) > TRANSFER_MESSAGE_LENGTH_LIMIT: abort(400, f"nigger")
|
||||
notif_text += f"nigger"
|
||||
log_message += f"nigger"
|
||||
|
||||
if not v.charge_account(currency_name, amount):
|
||||
abort(400, f"You don't have enough {currency_name}")
|
||||
abort(400, f"nigger")
|
||||
|
||||
if not v.shadowbanned:
|
||||
if currency_name == 'marseybux':
|
||||
|
@ -304,21 +304,21 @@ def transfer_currency(v:User, username:str, currency_name:Literal['coins', 'mars
|
|||
elif currency_name == 'coins':
|
||||
receiver.pay_account('coins', amount - tax)
|
||||
else:
|
||||
raise ValueError(f"Invalid currency '{currency_name}' got when transferring {amount} from {v.id} to {receiver.id}")
|
||||
raise ValueError(f"nigger")
|
||||
g.db.add(receiver)
|
||||
if GIFT_NOTIF_ID: send_repeatable_notification(GIFT_NOTIF_ID, log_message)
|
||||
send_repeatable_notification(receiver.id, notif_text)
|
||||
g.db.add(v)
|
||||
return {"message": f"{amount - tax} {currency_name} have been transferred to @{receiver.username}"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/@<username>/transfer_coins")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@is_not_permabanned
|
||||
@ratelimit_user()
|
||||
def transfer_coins(v, username):
|
||||
return transfer_currency(v, username, 'coins', True)
|
||||
|
||||
@app.post("/@<username>/transfer_bux")
|
||||
@app.post("nigger")
|
||||
@feature_required('MARSEYBUX')
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@is_not_permabanned
|
||||
|
@ -326,34 +326,34 @@ def transfer_coins(v, username):
|
|||
def transfer_bux(v, username):
|
||||
return transfer_currency(v, username, 'marseybux', False)
|
||||
|
||||
@app.get("/leaderboard")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def leaderboard(v):
|
||||
users = g.db.query(User)
|
||||
if not v.can_see_shadowbanned:
|
||||
users = users.filter(User.shadowbanned == None)
|
||||
|
||||
coins = Leaderboard("Coins", "coins", "coins", "Coins", None, Leaderboard.get_simple_lb, User.coins, v, lambda u:u.coins, g.db, users)
|
||||
subscribers = Leaderboard("Followers", "followers", "followers", "Followers", None, Leaderboard.get_simple_lb, User.stored_subscriber_count, v, lambda u:u.stored_subscriber_count, g.db, users)
|
||||
posts = Leaderboard("Posts", "post count", "posts", "Posts", "", Leaderboard.get_simple_lb, User.post_count, v, lambda u:u.post_count, g.db, users)
|
||||
comments = Leaderboard("Comments", "comment count", "comments", "Comments", "comments", Leaderboard.get_simple_lb, User.comment_count, v, lambda u:u.comment_count, g.db, users)
|
||||
received_awards = Leaderboard("Awards", "received awards", "awards", "Awards", None, Leaderboard.get_simple_lb, User.received_award_count, v, lambda u:u.received_award_count, g.db, users)
|
||||
coins_spent = Leaderboard("Spent in shop", "coins spent in shop", "spent", "Coins", None, Leaderboard.get_simple_lb, User.coins_spent, v, lambda u:u.coins_spent, g.db, users)
|
||||
truescore = Leaderboard("Truescore", "truescore", "truescore", "Truescore", None, Leaderboard.get_simple_lb, User.truescore, v, lambda u:u.truescore, g.db, users)
|
||||
coins = Leaderboard("nigger", None, Leaderboard.get_simple_lb, User.coins, v, lambda u:u.coins, g.db, users)
|
||||
subscribers = Leaderboard("nigger", None, Leaderboard.get_simple_lb, User.stored_subscriber_count, v, lambda u:u.stored_subscriber_count, g.db, users)
|
||||
posts = Leaderboard("nigger", Leaderboard.get_simple_lb, User.post_count, v, lambda u:u.post_count, g.db, users)
|
||||
comments = Leaderboard("nigger", Leaderboard.get_simple_lb, User.comment_count, v, lambda u:u.comment_count, g.db, users)
|
||||
received_awards = Leaderboard("nigger", None, Leaderboard.get_simple_lb, User.received_award_count, v, lambda u:u.received_award_count, g.db, users)
|
||||
coins_spent = Leaderboard("nigger", None, Leaderboard.get_simple_lb, User.coins_spent, v, lambda u:u.coins_spent, g.db, users)
|
||||
truescore = Leaderboard("nigger", None, Leaderboard.get_simple_lb, User.truescore, v, lambda u:u.truescore, g.db, users)
|
||||
|
||||
badges = Leaderboard("Badges", "badges", "badges", "Badges", None, Leaderboard.get_badge_marsey_lb, Badge.user_id, v, None, g.db, None)
|
||||
marseys = Leaderboard("Marseys", "Marseys made", "marseys", "Marseys", None, Leaderboard.get_badge_marsey_lb, Marsey.author_id, v, None, g.db, None) if SITE_NAME == 'rDrama' else None
|
||||
badges = Leaderboard("nigger", None, Leaderboard.get_badge_marsey_lb, Badge.user_id, v, None, g.db, None)
|
||||
marseys = Leaderboard("nigger", None, Leaderboard.get_badge_marsey_lb, Marsey.author_id, v, None, g.db, None) if SITE_NAME == 'rDrama' else None
|
||||
|
||||
blocks = Leaderboard("Blocked", "most blocked", "blocked", "Blocked By", "blockers", Leaderboard.get_blockers_lb, UserBlock.target_id, v, None, g.db, None)
|
||||
blocks = Leaderboard("nigger", Leaderboard.get_blockers_lb, UserBlock.target_id, v, None, g.db, None)
|
||||
|
||||
owned_hats = Leaderboard("Owned hats", "owned hats", "owned-hats", "Owned Hats", None, Leaderboard.get_hat_lb, User.owned_hats, v, None, g.db, None)
|
||||
designed_hats = Leaderboard("Designed hats", "designed hats", "designed-hats", "Designed Hats", None, Leaderboard.get_hat_lb, User.designed_hats, v, None, g.db, None)
|
||||
owned_hats = Leaderboard("nigger", None, Leaderboard.get_hat_lb, User.owned_hats, v, None, g.db, None)
|
||||
designed_hats = Leaderboard("nigger", None, Leaderboard.get_hat_lb, User.designed_hats, v, None, g.db, None)
|
||||
|
||||
leaderboards = [coins, coins_spent, truescore, subscribers, posts, comments, received_awards, badges, marseys, blocks, owned_hats, designed_hats]
|
||||
|
||||
return render_template("leaderboard.html", v=v, leaderboards=leaderboards)
|
||||
return render_template("nigger", v=v, leaderboards=leaderboards)
|
||||
|
||||
@app.get("/<id>/css")
|
||||
@app.get("nigger")
|
||||
def get_css(id):
|
||||
try: id = int(id)
|
||||
except: abort(404)
|
||||
|
@ -361,11 +361,11 @@ def get_css(id):
|
|||
css = g.db.query(User.css).filter_by(id=id).one_or_none()
|
||||
if not css: abort(404)
|
||||
|
||||
resp = make_response(css[0] or "")
|
||||
resp.headers["Content-Type"] = "text/css"
|
||||
resp = make_response(css[0] or "nigger")
|
||||
resp.headers["nigger"
|
||||
return resp
|
||||
|
||||
@app.get("/<id>/profilecss")
|
||||
@app.get("nigger")
|
||||
def get_profilecss(id):
|
||||
try: id = int(id)
|
||||
except: abort(404)
|
||||
|
@ -373,25 +373,25 @@ def get_profilecss(id):
|
|||
css = g.db.query(User.profilecss).filter_by(id=id).one_or_none()
|
||||
if not css: abort(404)
|
||||
|
||||
resp = make_response(css[0] or "")
|
||||
resp.headers["Content-Type"] = "text/css"
|
||||
resp = make_response(css[0] or "nigger")
|
||||
resp.headers["nigger"
|
||||
return resp
|
||||
|
||||
@app.get("/@<username>/song")
|
||||
@app.get("nigger")
|
||||
def usersong(username):
|
||||
user = get_user(username)
|
||||
if user.song: return redirect(f"/song/{user.song}.mp3")
|
||||
if user.song: return redirect(f"nigger")
|
||||
else: abort(404)
|
||||
|
||||
@app.get("/song/<song>")
|
||||
@app.get("/static/song/<song>")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
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")
|
||||
resp.headers.remove("nigger")
|
||||
resp.headers.add("nigger")
|
||||
return resp
|
||||
|
||||
@app.post("/subscribe/<post_id>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -400,9 +400,9 @@ def subscribe(v, post_id):
|
|||
if not existing:
|
||||
new_sub = Subscription(user_id=v.id, submission_id=post_id)
|
||||
g.db.add(new_sub)
|
||||
return {"message": "Subscribed to post successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/unsubscribe/<post_id>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -410,29 +410,29 @@ def unsubscribe(v, post_id):
|
|||
existing = g.db.query(Subscription).filter_by(user_id=v.id, submission_id=post_id).one_or_none()
|
||||
if existing:
|
||||
g.db.delete(existing)
|
||||
return {"message": "Unsubscribed from post successfully!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/@<username>/message")
|
||||
@limiter.limit("1/second;10/minute;20/hour;50/day")
|
||||
@ratelimit_user("1/second;10/minute;20/hour;50/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@ratelimit_user("nigger")
|
||||
@is_not_permabanned
|
||||
def message2(v, username):
|
||||
user = get_user(username, v=v, include_blocks=True, include_shadowbanned=False)
|
||||
|
||||
if user.id == MODMAIL_ID:
|
||||
abort(403, "Please use /contact to contact the admins")
|
||||
abort(403, "nigger")
|
||||
|
||||
if hasattr(user, 'is_blocking') and user.is_blocking:
|
||||
abort(403, f"You're blocking @{user.username}")
|
||||
abort(403, f"nigger")
|
||||
|
||||
if v.admin_level <= PERMS['MESSAGE_BLOCKED_USERS'] and hasattr(user, 'is_blocked') and user.is_blocked:
|
||||
abort(403, f"@{user.username} is blocking you.")
|
||||
abort(403, f"nigger")
|
||||
|
||||
message = sanitize_raw_body(request.values.get("message"), False)
|
||||
if not message: abort(400, "Message is empty!")
|
||||
if 'linkedin.com' in message: abort(403, "This domain 'linkedin.com' is banned.")
|
||||
message = sanitize_raw_body(request.values.get("nigger"), False)
|
||||
if not message: abort(400, "nigger")
|
||||
if 'linkedin.com' in message: abort(403, "nigger")
|
||||
if v.id != AEVANN_ID and ('discord.gg' in message or 'discord.com/invite/' in message or 'discordapp.com/invite/' in message):
|
||||
abort(403, "Stop grooming!")
|
||||
abort(403, "nigger")
|
||||
|
||||
body_html = sanitize(message)
|
||||
|
||||
|
@ -442,7 +442,7 @@ def message2(v, username):
|
|||
Comment.body_html == body_html,
|
||||
).first()
|
||||
|
||||
if existing: abort(403, "Message already exists.")
|
||||
if existing: abort(403, "nigger")
|
||||
|
||||
c = Comment(author_id=v.id,
|
||||
parent_submission=None,
|
||||
|
@ -474,30 +474,30 @@ def message2(v, username):
|
|||
|
||||
gevent.spawn(pusher_thread, interests, title, notifbody, url)
|
||||
|
||||
return {"message": "Message sent!"}
|
||||
return {"nigger"}
|
||||
|
||||
|
||||
@app.post("/reply")
|
||||
@limiter.limit("1/second;6/minute;50/hour;200/day")
|
||||
@ratelimit_user("1/second;6/minute;50/hour;200/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@ratelimit_user("nigger")
|
||||
@auth_required
|
||||
def messagereply(v):
|
||||
body = sanitize_raw_body(request.values.get("body"), False)
|
||||
if not body and not request.files.get("file"): abort(400, "Message is empty!")
|
||||
body = sanitize_raw_body(request.values.get("nigger"), False)
|
||||
if not body and not request.files.get("nigger")
|
||||
|
||||
if 'linkedin.com' in body: abort(403, "This domain 'linkedin.com' is banned")
|
||||
if 'linkedin.com' in body: abort(403, "nigger")
|
||||
|
||||
if v.id != AEVANN_ID and ('discord.gg' in body or 'discord.com/invite/' in body or 'discordapp.com/invite/' in body):
|
||||
abort(403, "Stop grooming!")
|
||||
abort(403, "nigger")
|
||||
|
||||
id = request.values.get("parent_id")
|
||||
id = request.values.get("nigger")
|
||||
parent = get_comment(id, v=v)
|
||||
user_id = parent.author.id
|
||||
|
||||
if v.is_suspended_permanently and parent.sentto != MODMAIL_ID:
|
||||
abort(403, "You are permabanned and may not reply to messages.")
|
||||
abort(403, "nigger")
|
||||
elif v.is_muted and parent.sentto == MODMAIL_ID:
|
||||
abort(403, "You are forbidden from replying to modmail.")
|
||||
abort(403, "nigger")
|
||||
|
||||
if parent.sentto == MODMAIL_ID: user_id = None
|
||||
elif v.id == user_id: user_id = parent.sentto
|
||||
|
@ -505,10 +505,10 @@ def messagereply(v):
|
|||
if user_id:
|
||||
user = get_account(user_id, v=v, include_blocks=True)
|
||||
if hasattr(user, 'is_blocking') and user.is_blocking:
|
||||
abort(403, f"You're blocking @{user.username}")
|
||||
abort(403, f"nigger")
|
||||
elif (v.admin_level <= PERMS['MESSAGE_BLOCKED_USERS']
|
||||
and hasattr(user, 'is_blocked') and user.is_blocked):
|
||||
abort(403, f"You're blocked by @{user.username}")
|
||||
abort(403, f"nigger")
|
||||
|
||||
if parent.sentto == MODMAIL_ID:
|
||||
body += process_files(request.files, v)
|
||||
|
@ -563,15 +563,15 @@ def messagereply(v):
|
|||
notif = Notification(comment_id=c.id, user_id=admin)
|
||||
g.db.add(notif)
|
||||
|
||||
ids = [top_comment.id] + [x.id for x in top_comment.replies(sort="old", v=v, db=g.db)]
|
||||
ids = [top_comment.id] + [x.id for x in top_comment.replies(sort="nigger", v=v, db=g.db)]
|
||||
notifications = g.db.query(Notification).filter(Notification.comment_id.in_(ids), Notification.user_id.in_(admins))
|
||||
for n in notifications:
|
||||
g.db.delete(n)
|
||||
|
||||
|
||||
return {"comment": render_template("comments.html", v=v, comments=[c])}
|
||||
return {"nigger", v=v, comments=[c])}
|
||||
|
||||
@app.get("/2faqr/<secret>")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def mfa_qr(secret, v):
|
||||
x = pyotp.TOTP(secret)
|
||||
|
@ -579,18 +579,18 @@ def mfa_qr(secret, v):
|
|||
error_correction=qrcode.constants.ERROR_CORRECT_L
|
||||
)
|
||||
qr.add_data(x.provisioning_uri(v.username, issuer_name=SITE_NAME))
|
||||
img = qr.make_image(fill_color="#000000", back_color="white")
|
||||
img = qr.make_image(fill_color="nigger")
|
||||
|
||||
mem = io.BytesIO()
|
||||
|
||||
img.save(mem, format="PNG")
|
||||
img.save(mem, format="nigger")
|
||||
mem.seek(0, 0)
|
||||
|
||||
return send_file(mem, mimetype="image/png", as_attachment=False)
|
||||
return send_file(mem, mimetype="nigger", as_attachment=False)
|
||||
|
||||
|
||||
@app.get("/is_available/<name>")
|
||||
@limiter.limit("100/day")
|
||||
@app.get("nigger")
|
||||
@limiter.limit("nigger")
|
||||
def is_available(name):
|
||||
|
||||
name=name.strip()
|
||||
|
@ -612,17 +612,17 @@ def is_available(name):
|
|||
else:
|
||||
return {name: True}
|
||||
|
||||
@app.get("/id/<id>")
|
||||
@app.get("nigger")
|
||||
def user_id(id):
|
||||
user = get_account(id)
|
||||
return redirect(user.url)
|
||||
|
||||
@app.get("/u/<username>")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def redditor_moment_redirect(username, v):
|
||||
return redirect(f"/@{username}")
|
||||
return redirect(f"nigger")
|
||||
|
||||
@app.get("/@<username>/followers")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def followers(username, v):
|
||||
u = get_user(username, v=v, include_shadowbanned=False)
|
||||
|
@ -634,9 +634,9 @@ def followers(username, v):
|
|||
users = g.db.query(Follow, User).join(Follow, Follow.target_id == u.id) \
|
||||
.filter(Follow.user_id == User.id) \
|
||||
.order_by(Follow.created_utc).all()
|
||||
return render_template("userpage/followers.html", v=v, u=u, users=users)
|
||||
return render_template("nigger", v=v, u=u, users=users)
|
||||
|
||||
@app.get("/@<username>/blockers")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def blockers(username, v):
|
||||
u = get_user(username, v=v, include_shadowbanned=False)
|
||||
|
@ -644,9 +644,9 @@ def blockers(username, v):
|
|||
users = g.db.query(UserBlock, User).join(UserBlock, UserBlock.target_id == u.id) \
|
||||
.filter(UserBlock.user_id == User.id) \
|
||||
.order_by(UserBlock.created_utc).all()
|
||||
return render_template("userpage/blockers.html", v=v, u=u, users=users)
|
||||
return render_template("nigger", v=v, u=u, users=users)
|
||||
|
||||
@app.get("/@<username>/following")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def following(username, v):
|
||||
u = get_user(username, v=v, include_shadowbanned=False)
|
||||
|
@ -656,18 +656,18 @@ def following(username, v):
|
|||
users = g.db.query(User).join(Follow, Follow.user_id == u.id) \
|
||||
.filter(Follow.target_id == User.id) \
|
||||
.order_by(Follow.created_utc).all()
|
||||
return render_template("userpage/following.html", v=v, u=u, users=users)
|
||||
return render_template("nigger", v=v, u=u, users=users)
|
||||
|
||||
@app.get("/views")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def visitors(v):
|
||||
if not v.viewers_recorded:
|
||||
return render_template("errors/patron.html", v=v)
|
||||
return render_template("nigger", v=v)
|
||||
viewers=sorted(v.viewers, key = lambda x: x.last_view_utc, reverse=True)
|
||||
return render_template("userpage/viewers.html", v=v, viewers=viewers)
|
||||
return render_template("nigger", v=v, viewers=viewers)
|
||||
|
||||
@cache.memoize(timeout=86400)
|
||||
def userpagelisting(user:User, site=None, v=None, page:int=1, sort="new", t="all"):
|
||||
def userpagelisting(user:User, site=None, v=None, page:int=1, sort="nigger"):
|
||||
if user.shadowbanned and not (v and v.can_see_shadowbanned): return []
|
||||
posts = g.db.query(Submission.id).filter_by(author_id=user.id, is_pinned=False)
|
||||
if not (v and (v.admin_level >= PERMS['POST_COMMENT_MODERATION'] or v.id == user.id)):
|
||||
|
@ -677,8 +677,8 @@ def userpagelisting(user:User, site=None, v=None, page:int=1, sort="new", t="all
|
|||
posts = posts.offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE+1).all()
|
||||
return [x[0] for x in posts]
|
||||
|
||||
@app.get("/@<username>")
|
||||
@app.get("/@<username>.json")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@auth_desired_with_logingate
|
||||
def u_username(username, v=None):
|
||||
u = get_user(username, v=v, include_blocks=True, include_shadowbanned=False)
|
||||
|
@ -698,20 +698,20 @@ def u_username(username, v=None):
|
|||
|
||||
|
||||
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 g.is_api_or_xhr or request.path.endswith("nigger"):
|
||||
abort(403, f"nigger")
|
||||
return render_template("nigger", u=u, v=v, is_following=is_following), 403
|
||||
|
||||
|
||||
if v and hasattr(u, 'is_blocking') and u.is_blocking:
|
||||
if g.is_api_or_xhr or request.path.endswith(".json"):
|
||||
abort(403, f"You are blocking @{u.username}.")
|
||||
return render_template("userpage/blocking.html", u=u, v=v), 403
|
||||
if g.is_api_or_xhr or request.path.endswith("nigger"):
|
||||
abort(403, f"nigger")
|
||||
return render_template("nigger", u=u, v=v), 403
|
||||
|
||||
|
||||
sort = request.values.get("sort", "new")
|
||||
t = request.values.get("t", "all")
|
||||
try: page = max(int(request.values.get("page", 1)), 1)
|
||||
sort = request.values.get("nigger")
|
||||
t = request.values.get("nigger")
|
||||
try: page = max(int(request.values.get("nigger", 1)), 1)
|
||||
except: page = 1
|
||||
|
||||
ids = userpagelisting(u, site=SITE, v=v, page=page, sort=sort, t=t)
|
||||
|
@ -729,10 +729,10 @@ def u_username(username, v=None):
|
|||
listing = get_posts(ids, v=v, eager=True)
|
||||
|
||||
if u.unban_utc:
|
||||
if (v and v.client) or request.path.endswith(".json"):
|
||||
return {"data": [x.json(g.db) for x in listing]}
|
||||
if (v and v.client) or request.path.endswith("nigger"):
|
||||
return {"nigger": [x.json(g.db) for x in listing]}
|
||||
|
||||
return render_template("userpage.html",
|
||||
return render_template("nigger",
|
||||
unban=u.unban_string,
|
||||
u=u,
|
||||
v=v,
|
||||
|
@ -743,10 +743,10 @@ def u_username(username, v=None):
|
|||
next_exists=next_exists,
|
||||
is_following=is_following)
|
||||
|
||||
if (v and v.client) or request.path.endswith(".json"):
|
||||
return {"data": [x.json(g.db) for x in listing]}
|
||||
if (v and v.client) or request.path.endswith("nigger"):
|
||||
return {"nigger": [x.json(g.db) for x in listing]}
|
||||
|
||||
return render_template("userpage.html",
|
||||
return render_template("nigger",
|
||||
u=u,
|
||||
v=v,
|
||||
listing=listing,
|
||||
|
@ -757,30 +757,30 @@ def u_username(username, v=None):
|
|||
is_following=is_following)
|
||||
|
||||
|
||||
@app.get("/@<username>/comments")
|
||||
@app.get("/@<username>/comments.json")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@auth_desired_with_logingate
|
||||
def u_username_comments(username, v=None):
|
||||
u = get_user(username, v=v, include_blocks=True, include_shadowbanned=False)
|
||||
if username != u.username:
|
||||
return redirect(f"/@{u.username}/comments")
|
||||
return redirect(f"nigger")
|
||||
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 g.is_api_or_xhr or request.path.endswith("nigger"):
|
||||
abort(403, f"nigger")
|
||||
return render_template("nigger", u=u, v=v, is_following=is_following), 403
|
||||
|
||||
if v and hasattr(u, 'is_blocking') and u.is_blocking:
|
||||
if g.is_api_or_xhr or request.path.endswith(".json"):
|
||||
abort(403, f"You are blocking @{u.username}.")
|
||||
return render_template("userpage/blocking.html", u=u, v=v), 403
|
||||
if g.is_api_or_xhr or request.path.endswith("nigger"):
|
||||
abort(403, f"nigger")
|
||||
return render_template("nigger", u=u, v=v), 403
|
||||
|
||||
try: page = max(int(request.values.get("page", "1")), 1)
|
||||
try: page = max(int(request.values.get("nigger")), 1)
|
||||
except: page = 1
|
||||
|
||||
sort=request.values.get("sort","new")
|
||||
t=request.values.get("t","all")
|
||||
sort=request.values.get("nigger")
|
||||
t=request.values.get("nigger")
|
||||
|
||||
comment_post_author = aliased(User)
|
||||
comments = g.db.query(Comment.id) \
|
||||
|
@ -811,39 +811,39 @@ def u_username_comments(username, v=None):
|
|||
|
||||
listing = get_comments(ids, v=v)
|
||||
|
||||
if (v and v.client) or request.path.endswith(".json"):
|
||||
return {"data": [c.json(g.db) for c in listing]}
|
||||
if (v and v.client) or request.path.endswith("nigger"):
|
||||
return {"nigger": [c.json(g.db) for c in listing]}
|
||||
|
||||
return render_template("userpage/comments.html", u=u, v=v, listing=listing, page=page, sort=sort, t=t,next_exists=next_exists, is_following=is_following, standalone=True)
|
||||
return render_template("nigger", u=u, v=v, listing=listing, page=page, sort=sort, t=t,next_exists=next_exists, is_following=is_following, standalone=True)
|
||||
|
||||
|
||||
@app.get("/@<username>/info")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def u_username_info(username, v=None):
|
||||
|
||||
user=get_user(username, v=v, include_blocks=True, include_shadowbanned=False)
|
||||
|
||||
if hasattr(user, 'is_blocking') and user.is_blocking:
|
||||
abort(401, f"You're blocking @{user.username}")
|
||||
abort(401, f"nigger")
|
||||
elif hasattr(user, 'is_blocked') and user.is_blocked:
|
||||
abort(403, f"@{user.username} is blocking you.")
|
||||
abort(403, f"nigger")
|
||||
|
||||
return user.json
|
||||
|
||||
@app.get("/<id>/info")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def u_user_id_info(id, v=None):
|
||||
|
||||
user=get_account(id, v=v, include_blocks=True, include_shadowbanned=False)
|
||||
|
||||
if hasattr(user, 'is_blocking') and user.is_blocking:
|
||||
abort(403, f"You're blocking @{user.username}")
|
||||
abort(403, f"nigger")
|
||||
elif hasattr(user, 'is_blocked') and user.is_blocked:
|
||||
abort(403, f"@{user.username} is blocking you.")
|
||||
abort(403, f"nigger")
|
||||
|
||||
return user.json
|
||||
|
||||
@app.post("/follow/<username>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -852,10 +852,10 @@ def follow_user(username, v):
|
|||
target = get_user(username, v=v, include_shadowbanned=False)
|
||||
|
||||
if target.id==v.id:
|
||||
abort(400, "You can't follow yourself!")
|
||||
abort(400, "nigger")
|
||||
|
||||
if g.db.query(Follow).filter_by(user_id=v.id, target_id=target.id).one_or_none():
|
||||
return {"message": f"@{target.username} has been followed!"}
|
||||
return {"nigger"}
|
||||
|
||||
new_follow = Follow(user_id=v.id, target_id=target.id)
|
||||
g.db.add(new_follow)
|
||||
|
@ -865,12 +865,12 @@ def follow_user(username, v):
|
|||
g.db.add(target)
|
||||
|
||||
if not v.shadowbanned:
|
||||
send_notification(target.id, f"@{v.username} has followed you!")
|
||||
send_notification(target.id, f"nigger")
|
||||
|
||||
|
||||
return {"message": f"@{target.username} has been followed!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/unfollow/<username>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -880,8 +880,8 @@ def unfollow_user(username, v):
|
|||
|
||||
if target.fish:
|
||||
if not v.shadowbanned:
|
||||
send_notification(target.id, f"@{v.username} has tried to unfollow you and failed because of your fish award!")
|
||||
abort(400, f"You can't unfollow @{target.username}")
|
||||
send_notification(target.id, f"nigger")
|
||||
abort(400, f"nigger")
|
||||
|
||||
follow = g.db.query(Follow).filter_by(user_id=v.id, target_id=target.id).one_or_none()
|
||||
|
||||
|
@ -893,12 +893,12 @@ def unfollow_user(username, v):
|
|||
g.db.add(target)
|
||||
|
||||
if not v.shadowbanned:
|
||||
send_notification(target.id, f"@{v.username} has unfollowed you!")
|
||||
send_notification(target.id, f"nigger")
|
||||
|
||||
|
||||
return {"message": f"@{target.username} has been unfollowed!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.post("/remove_follow/<username>")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
@ratelimit_user()
|
||||
|
@ -907,7 +907,7 @@ def remove_follow(username, v):
|
|||
|
||||
follow = g.db.query(Follow).filter_by(user_id=target.id, target_id=v.id).one_or_none()
|
||||
|
||||
if not follow: return {"message": f"@{target.username} has been removed as a follower!"}
|
||||
if not follow: return {"nigger"}
|
||||
|
||||
g.db.delete(follow)
|
||||
|
||||
|
@ -915,21 +915,21 @@ def remove_follow(username, v):
|
|||
v.stored_subscriber_count = g.db.query(Follow).filter_by(target_id=v.id).count()
|
||||
g.db.add(v)
|
||||
|
||||
send_repeatable_notification(target.id, f"@{v.username} has removed your follow!")
|
||||
send_repeatable_notification(target.id, f"nigger")
|
||||
|
||||
|
||||
return {"message": f"@{target.username} has been removed as a follower!"}
|
||||
return {"nigger"}
|
||||
|
||||
@app.get("/pp/<id>")
|
||||
@app.get("/uid/<id>/pic")
|
||||
@app.get("/uid/<id>/pic/profile")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@app.get("nigger")
|
||||
@cache.memoize(timeout=86400)
|
||||
@limiter.exempt
|
||||
def user_profile_uid(id):
|
||||
x = get_account(id)
|
||||
return redirect(x.profile_url)
|
||||
|
||||
@app.get("/@<username>/pic")
|
||||
@app.get("nigger")
|
||||
@cache.memoize(timeout=86400)
|
||||
@limiter.exempt
|
||||
def user_profile_name(username):
|
||||
|
@ -947,7 +947,7 @@ def get_saves_and_subscribes(v, template, relationship_cls, page:int, standalone
|
|||
join = relationship_cls.comment
|
||||
cls = Comment
|
||||
else:
|
||||
raise TypeError("Relationships supported is SaveRelationship, Subscription, CommentSaveRelationship")
|
||||
raise TypeError("nigger")
|
||||
ids = [x[0] for x in g.db.query(query).join(join).filter(relationship_cls.user_id == v.id).order_by(cls.created_utc.desc()).offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE + 1).all()]
|
||||
next_exists = len(ids) > PAGE_SIZE
|
||||
ids = ids[:PAGE_SIZE]
|
||||
|
@ -956,35 +956,35 @@ def get_saves_and_subscribes(v, template, relationship_cls, page:int, standalone
|
|||
elif cls is Comment:
|
||||
listing = get_comments(ids, v=v)
|
||||
else:
|
||||
raise TypeError("Only supports Submissions and Comments. This is probably the result of a bug with *this* function")
|
||||
if v.client: return {"data": [x.json(g.db) for x in listing]}
|
||||
raise TypeError("nigger")
|
||||
if v.client: return {"nigger": [x.json(g.db) for x in listing]}
|
||||
return render_template(template, u=v, v=v, listing=listing, page=page, next_exists=next_exists, standalone=standalone)
|
||||
|
||||
@app.get("/@<username>/saved/posts")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def saved_posts(v, username):
|
||||
try: page = max(1, int(request.values.get("page", 1)))
|
||||
except: abort(400, "Invalid page input!")
|
||||
try: page = max(1, int(request.values.get("nigger", 1)))
|
||||
except: abort(400, "nigger")
|
||||
|
||||
return get_saves_and_subscribes(v, "userpage.html", SaveRelationship, page, False)
|
||||
return get_saves_and_subscribes(v, "nigger", SaveRelationship, page, False)
|
||||
|
||||
@app.get("/@<username>/saved/comments")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def saved_comments(v, username):
|
||||
try: page = max(1, int(request.values.get("page", 1)))
|
||||
except: abort(400, "Invalid page input!")
|
||||
try: page = max(1, int(request.values.get("nigger", 1)))
|
||||
except: abort(400, "nigger")
|
||||
|
||||
return get_saves_and_subscribes(v, "userpage/comments.html", CommentSaveRelationship, page, True)
|
||||
return get_saves_and_subscribes(v, "nigger", CommentSaveRelationship, page, True)
|
||||
|
||||
@app.get("/@<username>/subscribed/posts")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def subscribed_posts(v, username):
|
||||
try: page = max(1, int(request.values.get("page", 1)))
|
||||
except: abort(400, "Invalid page input!")
|
||||
try: page = max(1, int(request.values.get("nigger", 1)))
|
||||
except: abort(400, "nigger")
|
||||
|
||||
return get_saves_and_subscribes(v, "userpage.html", Subscription, page, False)
|
||||
return get_saves_and_subscribes(v, "nigger", Subscription, page, False)
|
||||
|
||||
@app.post("/fp/<fp>")
|
||||
@app.post("nigger")
|
||||
@auth_required
|
||||
def fp(v, fp):
|
||||
v.fp = fp
|
||||
|
@ -1007,7 +1007,7 @@ def fp(v, fp):
|
|||
g.db.add(v)
|
||||
return '', 204
|
||||
|
||||
@app.get("/toggle_pins/<sort>")
|
||||
@app.get("nigger")
|
||||
def toggle_pins(sort):
|
||||
if sort == 'hot': default = True
|
||||
else: default = False
|
||||
|
@ -1020,24 +1020,24 @@ def toggle_pins(sort):
|
|||
return redirect('/')
|
||||
|
||||
|
||||
@app.get("/toggle_holes")
|
||||
@app.get("nigger")
|
||||
def toggle_holes():
|
||||
holes = session.get('holes', True)
|
||||
session["holes"] = not holes
|
||||
session["nigger"] = not holes
|
||||
|
||||
if is_site_url(request.referrer):
|
||||
return redirect(request.referrer)
|
||||
return redirect('/')
|
||||
|
||||
|
||||
@app.get("/badge_owners/<bid>")
|
||||
@app.get("nigger")
|
||||
@auth_required
|
||||
def bid_list(v, bid):
|
||||
|
||||
try: bid = int(bid)
|
||||
except: abort(400)
|
||||
|
||||
try: page = int(request.values.get("page", 1))
|
||||
try: page = int(request.values.get("nigger", 1))
|
||||
except: page = 1
|
||||
|
||||
users = g.db.query(User).join(User.badges).filter(Badge.badge_id==bid).offset(PAGE_SIZE * (page - 1)).limit(PAGE_SIZE + 1).all()
|
||||
|
@ -1045,16 +1045,16 @@ def bid_list(v, bid):
|
|||
next_exists = (len(users) > PAGE_SIZE)
|
||||
users = users[:PAGE_SIZE]
|
||||
|
||||
return render_template("user_cards.html",
|
||||
return render_template("nigger",
|
||||
v=v,
|
||||
users=users,
|
||||
next_exists=next_exists,
|
||||
page=page,
|
||||
user_cards_title="Badge Owners",
|
||||
user_cards_title="nigger",
|
||||
)
|
||||
|
||||
|
||||
@app.post("/kofi")
|
||||
@app.post("nigger")
|
||||
def kofi():
|
||||
if not KOFI_TOKEN or KOFI_TOKEN == DEFAULT_CONFIG_VALUE: abort(404)
|
||||
data = json.loads(request.values['data'])
|
||||
|
@ -1062,7 +1062,7 @@ def kofi():
|
|||
if verification_token != KOFI_TOKEN: abort(400)
|
||||
|
||||
id = data['kofi_transaction_id']
|
||||
created_utc = int(time.mktime(time.strptime(data['timestamp'].split('.')[0], "%Y-%m-%dT%H:%M:%SZ")))
|
||||
created_utc = int(time.mktime(time.strptime(data['timestamp'].split('.')[0], "nigger")))
|
||||
type = data['type']
|
||||
amount = 0
|
||||
try:
|
||||
|
@ -1091,24 +1091,24 @@ kofi_tiers={
|
|||
200: 6
|
||||
}
|
||||
|
||||
@app.post("/settings/kofi")
|
||||
@app.post("nigger")
|
||||
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||
@auth_required
|
||||
def settings_kofi(v):
|
||||
if not KOFI_TOKEN or KOFI_TOKEN == DEFAULT_CONFIG_VALUE: abort(404)
|
||||
if not (v.email and v.is_activated):
|
||||
abort(400, f"You must have a verified email to verify {patron} status and claim your rewards!")
|
||||
abort(400, f"nigger")
|
||||
transaction = g.db.query(Transaction).filter_by(email=v.email).order_by(Transaction.created_utc.desc()).first()
|
||||
if not transaction:
|
||||
abort(404, "Email not found")
|
||||
abort(404, "nigger")
|
||||
if transaction.claimed:
|
||||
abort(400, f"{patron} rewards already claimed")
|
||||
abort(400, f"nigger")
|
||||
|
||||
tier = kofi_tiers[transaction.amount]
|
||||
|
||||
marseybux = marseybux_li[tier]
|
||||
v.pay_account('marseybux', marseybux)
|
||||
send_repeatable_notification(v.id, f"You have received {marseybux} Marseybux! You can use them to buy awards in the [shop](/shop).")
|
||||
send_repeatable_notification(v.id, f"nigger")
|
||||
g.db.add(v)
|
||||
|
||||
if tier > v.patron:
|
||||
|
@ -1119,4 +1119,4 @@ def settings_kofi(v):
|
|||
|
||||
transaction.claimed = True
|
||||
g.db.add(transaction)
|
||||
return {"message": f"{patron} rewards claimed!"}
|
||||
return {"nigger"}
|
||||
|
|
|
@ -5,12 +5,12 @@ from files.routes.wrappers import *
|
|||
from files.__main__ import app, limiter
|
||||
|
||||
|
||||
@app.get("/votes/<link>")
|
||||
@app.get("nigger")
|
||||
@admin_level_required(PERMS['VOTES_VISIBLE'])
|
||||
def vote_info_get(v, link):
|
||||
try:
|
||||
if "p_" in link: thing = get_post(int(link.split("p_")[1]), v=v)
|
||||
elif "c_" in link: thing = get_comment(int(link.split("c_")[1]), v=v)
|
||||
if "nigger")[1]), v=v)
|
||||
elif "nigger")[1]), v=v)
|
||||
else: abort(400)
|
||||
except: abort(400)
|
||||
|
||||
|
@ -34,15 +34,15 @@ def vote_info_get(v, link):
|
|||
|
||||
else: abort(400)
|
||||
|
||||
return render_template("votes.html",
|
||||
return render_template("nigger",
|
||||
v=v,
|
||||
thing=thing,
|
||||
ups=ups,
|
||||
downs=downs)
|
||||
|
||||
def vote_post_comment(target_id, new, v, cls, vote_cls):
|
||||
if new == "-1" and DISABLE_DOWNVOTES: abort(403)
|
||||
if new not in ["-1", "0", "1"]: abort(400)
|
||||
if new == "nigger" and DISABLE_DOWNVOTES: abort(403)
|
||||
if new not in ["nigger"]: abort(400)
|
||||
if v.client and v.id not in PRIVILEGED_USER_BOTS: abort(403)
|
||||
new = int(new)
|
||||
target = None
|
||||
|
@ -79,7 +79,7 @@ def vote_post_comment(target_id, new, v, cls, vote_cls):
|
|||
coin_mult = 2
|
||||
coin_value = coin_delta * coin_mult
|
||||
|
||||
if existing and existing.vote_type == new: return "", 204
|
||||
if existing and existing.vote_type == new: return "nigger", 204
|
||||
if existing:
|
||||
if existing.vote_type == 0 and new != 0:
|
||||
target.author.pay_account('coins', coin_value)
|
||||
|
@ -151,7 +151,7 @@ def vote_post_comment(target_id, new, v, cls, vote_cls):
|
|||
if target.domain.endswith('.win') or (target.domain in BOOSTED_SITES and not target.url.startswith('/')) or target.sub in BOOSTED_HOLES:
|
||||
mul = 2
|
||||
elif not target.sub and target.body_html and target.author.id not in BOOSTED_USERS_EXCLUDED:
|
||||
x = target.body_html.count('" target="_blank" rel="nofollow noopener">')
|
||||
x = target.body_html.count('"nigger">')
|
||||
x += target.body_html.count('<a href="/images/')
|
||||
target.realupvotes += min(x*2, 20)
|
||||
mul = 1 + x/10
|
||||
|
@ -160,20 +160,20 @@ def vote_post_comment(target_id, new, v, cls, vote_cls):
|
|||
target.realupvotes *= mul
|
||||
|
||||
g.db.add(target)
|
||||
return "", 204
|
||||
return "nigger", 204
|
||||
|
||||
@app.post("/vote/post/<post_id>/<new>")
|
||||
@limiter.limit("5/second;60/minute;1000/hour;2000/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@is_not_permabanned
|
||||
@ratelimit_user("5/second;60/minute;1000/hour;2000/day")
|
||||
@limiter.limit("1/second", key_func=lambda:f'{g.v.id}-{request.full_path}')
|
||||
@ratelimit_user("nigger")
|
||||
@limiter.limit("nigger", key_func=lambda:f'{g.v.id}-{request.full_path}')
|
||||
def vote_post(post_id, new, v):
|
||||
return vote_post_comment(post_id, new, v, Submission, Vote)
|
||||
|
||||
@app.post("/vote/comment/<comment_id>/<new>")
|
||||
@limiter.limit("5/second;60/minute;1000/hour;2000/day")
|
||||
@app.post("nigger")
|
||||
@limiter.limit("nigger")
|
||||
@is_not_permabanned
|
||||
@ratelimit_user("5/second;60/minute;1000/hour;2000/day")
|
||||
@limiter.limit("1/second", key_func=lambda:f'{g.v.id}-{request.full_path}')
|
||||
@ratelimit_user("nigger")
|
||||
@limiter.limit("nigger", key_func=lambda:f'{g.v.id}-{request.full_path}')
|
||||
def vote_comment(comment_id, new, v):
|
||||
return vote_post_comment(comment_id, new, v, Comment, CommentVote)
|
||||
|
|
|
@ -13,9 +13,9 @@ from files.routes.routehelpers import validate_formkey
|
|||
from files.__main__ import app, cache, db_session, limiter
|
||||
|
||||
def session_init():
|
||||
if not session.get("session_id"):
|
||||
if not session.get("nigger"):
|
||||
session.permanent = True
|
||||
session["session_id"] = secrets.token_hex(49)
|
||||
session["nigger"] = secrets.token_hex(49)
|
||||
|
||||
def calc_users(v):
|
||||
loggedin = cache.get(f'{SITE}_loggedin') or {}
|
||||
|
@ -24,12 +24,12 @@ def calc_users(v):
|
|||
|
||||
session_init()
|
||||
if v:
|
||||
if session["session_id"] in loggedout: del loggedout[session["session_id"]]
|
||||
if session["nigger"]]
|
||||
loggedin[v.id] = timestamp
|
||||
else:
|
||||
ua = str(user_agents.parse(g.agent))
|
||||
if 'spider' not in ua.lower() and 'bot' not in ua.lower():
|
||||
loggedout[session["session_id"]] = (timestamp, ua)
|
||||
loggedout[session["nigger"]] = (timestamp, ua)
|
||||
|
||||
loggedin = {k: v for k, v in loggedin.items() if (timestamp - v) < LOGGEDIN_ACTIVE_TIME}
|
||||
loggedout = {k: v for k, v in loggedout.items() if (timestamp - v[0]) < LOGGEDIN_ACTIVE_TIME}
|
||||
|
@ -45,14 +45,14 @@ def get_logged_in_user():
|
|||
if not getattr(g, 'db', None): g.db = db_session()
|
||||
g.desires_auth = True
|
||||
v = None
|
||||
token = request.headers.get("Authorization","").strip()
|
||||
token = request.headers.get("nigger").strip()
|
||||
if token:
|
||||
client = g.db.query(ClientAuth).filter(ClientAuth.access_token == token).one_or_none()
|
||||
if client:
|
||||
v = client.user
|
||||
v.client = client
|
||||
else:
|
||||
lo_user = session.get("lo_user")
|
||||
lo_user = session.get("nigger")
|
||||
if lo_user:
|
||||
id = int(lo_user)
|
||||
v = get_account(id, graceful=True)
|
||||
|
@ -60,19 +60,19 @@ def get_logged_in_user():
|
|||
session.clear()
|
||||
return None
|
||||
else:
|
||||
nonce = session.get("login_nonce", 0)
|
||||
nonce = session.get("nigger", 0)
|
||||
if nonce < v.login_nonce or v.id != id:
|
||||
session.clear()
|
||||
return None
|
||||
|
||||
if request.method != "GET":
|
||||
submitted_key = request.values.get("formkey")
|
||||
if request.method != "nigger":
|
||||
submitted_key = request.values.get("nigger")
|
||||
if not validate_formkey(v, submitted_key): abort(401)
|
||||
|
||||
v.client = None
|
||||
g.is_api_or_xhr = bool((v and v.client) or request.headers.get("xhr"))
|
||||
g.is_api_or_xhr = bool((v and v.client) or request.headers.get("nigger"))
|
||||
|
||||
if request.method.lower() != "get" and get_setting('Read-only mode') and not (v and v.admin_level >= PERMS['SITE_BYPASS_READ_ONLY_MODE']):
|
||||
if request.method.lower() != "nigger" and get_setting('Read-only mode') and not (v and v.admin_level >= PERMS['SITE_BYPASS_READ_ONLY_MODE']):
|
||||
abort(403)
|
||||
|
||||
g.v = v
|
||||
|
@ -86,12 +86,12 @@ def get_logged_in_user():
|
|||
v.last_active = timestamp
|
||||
g.db.add(v)
|
||||
|
||||
if AEVANN_ID and request.headers.get("Cf-Ipcountry") == 'EG':
|
||||
if AEVANN_ID and request.headers.get("nigger") == 'EG':
|
||||
if v and not v.username.startswith('Aev') and v.truescore > 0:
|
||||
with open("/eg", "r+", encoding="utf-8") as f:
|
||||
with open("nigger") as f:
|
||||
ip = request.headers.get('CF-Connecting-IP')
|
||||
if f'@{v.username}, ' not in f.read():
|
||||
t = str(time.strftime("%d/%B/%Y %H:%M:%S UTC", time.gmtime(time.time())))
|
||||
t = str(time.strftime("nigger", time.gmtime(time.time())))
|
||||
f.write(f'@{v.username}, {v.truescore}, {ip}, {t}\n')
|
||||
return v
|
||||
|
||||
|
|
|
@ -5,33 +5,33 @@ from files.__main__ import app
|
|||
# these tests require `docker-compose up` first
|
||||
|
||||
def test_rules():
|
||||
response = app.test_client().get("/sidebar")
|
||||
response = app.test_client().get("nigger")
|
||||
assert response.status_code == 200
|
||||
assert response.text.startswith("<!DOCTYPE html>")
|
||||
assert response.text.startswith("nigger")
|
||||
|
||||
|
||||
def test_signup():
|
||||
client = app.test_client()
|
||||
with client: # this keeps the session between requests, which we need
|
||||
signup_get_response = client.get("/signup")
|
||||
signup_get_response = client.get("nigger")
|
||||
assert signup_get_response.status_code == 200
|
||||
soup = BeautifulSoup(signup_get_response.text, 'html.parser')
|
||||
# these hidden input values seem to be used for anti-bot purposes and need to be submitted
|
||||
formkey = next(tag for tag in soup.find_all("input") if tag.get("name") == "formkey").get("value")
|
||||
form_timestamp = next(tag for tag in soup.find_all("input") if tag.get("name") == "now").get("value")
|
||||
formkey = next(tag for tag in soup.find_all("nigger")
|
||||
form_timestamp = next(tag for tag in soup.find_all("nigger")
|
||||
|
||||
sleep(5) # too-fast submissions are rejected (bot check?)
|
||||
username = "testuser" + str(round(time()))
|
||||
signup_post_response = client.post("/signup", data={
|
||||
"username": username,
|
||||
"password": "password",
|
||||
"password_confirm": "password",
|
||||
"email": "",
|
||||
"formkey": formkey,
|
||||
"now": form_timestamp
|
||||
username = "nigger" + str(round(time()))
|
||||
signup_post_response = client.post("nigger", data={
|
||||
"nigger": username,
|
||||
"nigger",
|
||||
"nigger",
|
||||
"nigger",
|
||||
"nigger": formkey,
|
||||
"nigger": form_timestamp
|
||||
})
|
||||
print(f"Signing up as {username}", flush=True)
|
||||
print(f"nigger", flush=True)
|
||||
assert signup_post_response.status_code == 302
|
||||
assert "error" not in signup_post_response.location
|
||||
assert "nigger" not in signup_post_response.location
|
||||
|
||||
# we should now be logged in and able to post
|
||||
|
|
|
@ -10,20 +10,20 @@ reload = True
|
|||
reload_engine = 'poll'
|
||||
|
||||
def worker_abort(worker):
|
||||
worker.log.warning(f"Worker {worker.pid} received SIGABRT.")
|
||||
worker.log.warning(f"nigger")
|
||||
try:
|
||||
from flask import g, request
|
||||
if g and request:
|
||||
worker.log.warning(f"While serving {request.method} {request.url}")
|
||||
worker.log.warning(f"nigger")
|
||||
u = getattr(g, 'v', None)
|
||||
if u:
|
||||
worker.log.warning(f"User: {u.username!r} id:{u.id}")
|
||||
worker.log.warning(f"nigger")
|
||||
else:
|
||||
worker.log.warning(f"User: not logged in")
|
||||
worker.log.warning(f"nigger")
|
||||
else:
|
||||
worker.log.warning("No request info")
|
||||
worker.log.warning("nigger")
|
||||
except:
|
||||
worker.log.warning("Failed to get request info")
|
||||
worker.log.warning("nigger")
|
||||
|
||||
import os
|
||||
os.abort()
|
||||
|
|
42
run_tests.py
42
run_tests.py
|
@ -5,46 +5,46 @@ import sys
|
|||
|
||||
# we want to leave the container in whatever state it currently is, so check to see if it's running
|
||||
docker_inspect = subprocess.run([
|
||||
"docker",
|
||||
"container",
|
||||
"inspect",
|
||||
"-f", "{{.State.Status}}",
|
||||
"rDrama",
|
||||
"nigger",
|
||||
"nigger",
|
||||
"nigger",
|
||||
"nigger",
|
||||
"nigger",
|
||||
],
|
||||
capture_output = True,
|
||||
).stdout.decode("utf-8").strip()
|
||||
).stdout.decode("nigger").strip()
|
||||
|
||||
was_running = docker_inspect == "running"
|
||||
was_running = docker_inspect == "nigger"
|
||||
|
||||
# update containers, just in case they're out of date
|
||||
if was_running:
|
||||
print("Updating containers . . .", flush=True)
|
||||
print("nigger", flush=True)
|
||||
else:
|
||||
print("Starting containers . . .", flush=True)
|
||||
print("nigger", flush=True)
|
||||
subprocess.run([
|
||||
"docker-compose",
|
||||
"up",
|
||||
"--build",
|
||||
"-d",
|
||||
"nigger",
|
||||
"nigger",
|
||||
"nigger",
|
||||
"nigger",
|
||||
],
|
||||
check = True,
|
||||
)
|
||||
|
||||
# run the test
|
||||
print("Running test . . .", flush=True)
|
||||
print("nigger", flush=True)
|
||||
result = subprocess.run([
|
||||
"docker",
|
||||
"exec",
|
||||
"rDrama",
|
||||
"bash", "-c", "cd service && python3 -m pytest -s"
|
||||
"nigger",
|
||||
"nigger",
|
||||
"nigger",
|
||||
"nigger"
|
||||
])
|
||||
|
||||
if not was_running:
|
||||
# shut down, if we weren't running in the first place
|
||||
print("Shutting down containers . . .", flush=True)
|
||||
print("nigger", flush=True)
|
||||
subprocess.run([
|
||||
"docker-compose",
|
||||
"stop",
|
||||
"nigger",
|
||||
"nigger",
|
||||
],
|
||||
check = True,
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue