2022-07-02 06:48:04 +00:00
|
|
|
from files.classes import *
|
2022-12-11 23:44:34 +00:00
|
|
|
from files.helpers.config.const import *
|
2022-11-15 09:19:08 +00:00
|
|
|
from files.helpers.get import *
|
|
|
|
from files.routes.wrappers import *
|
2022-07-02 06:48:04 +00:00
|
|
|
from files.__main__ import app
|
|
|
|
|
|
|
|
|
2022-12-29 10:39:10 +00:00
|
|
|
@app.post("/vote/post/option/<int:option_id>")
|
2023-02-27 05:33:45 +00:00
|
|
|
@limiter.limit('1/second', scope=rpath)
|
2023-04-02 06:52:26 +00:00
|
|
|
@limiter.limit('1/second', scope=rpath, key_func=get_ID)
|
2023-07-13 13:50:46 +00:00
|
|
|
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
|
|
|
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
2023-09-14 16:49:46 +00:00
|
|
|
@auth_required
|
2022-08-11 04:05:23 +00:00
|
|
|
def vote_option(option_id, v):
|
2022-10-16 09:51:42 +00:00
|
|
|
try:
|
|
|
|
option_id = int(option_id)
|
|
|
|
except:
|
|
|
|
abort(404)
|
2023-06-07 23:26:32 +00:00
|
|
|
option = g.db.get(PostOption, option_id)
|
2022-07-02 06:48:04 +00:00
|
|
|
if not option: abort(404)
|
2023-10-07 17:55:50 +00:00
|
|
|
hole = option.parent.hole
|
2022-09-05 22:30:44 +00:00
|
|
|
|
2023-10-07 17:55:50 +00:00
|
|
|
if hole in {'furry','vampire','racist','femboy','edgy'} and not v.house.lower().startswith(hole):
|
|
|
|
abort(403, f"You need to be a member of House {hole.capitalize()} to vote on polls in /h/{hole}")
|
2022-09-05 22:30:44 +00:00
|
|
|
|
2022-08-26 21:53:17 +00:00
|
|
|
if option.exclusive == 2:
|
2023-03-12 17:36:35 +00:00
|
|
|
if option.parent.total_bet_voted(v):
|
2023-02-28 16:56:22 +00:00
|
|
|
abort(403, "You can't participate in a closed bet!")
|
2024-01-12 08:12:35 +00:00
|
|
|
if not v.charge_account('coins/marseybux', POLL_BET_COINS)[0]:
|
2023-03-07 05:27:21 +00:00
|
|
|
abort(400, f"You don't have {POLL_BET_COINS} coins or marseybux!")
|
2023-03-16 06:27:58 +00:00
|
|
|
g.db.add(v)
|
2022-08-26 21:53:17 +00:00
|
|
|
|
2022-07-02 06:48:04 +00:00
|
|
|
if option.exclusive:
|
2023-06-07 23:26:32 +00:00
|
|
|
vote = g.db.query(PostOptionVote).join(PostOption).filter(
|
|
|
|
PostOptionVote.user_id==v.id,
|
|
|
|
PostOptionVote.post_id==option.parent_id,
|
|
|
|
PostOption.exclusive==option.exclusive).all()
|
2022-07-02 06:48:04 +00:00
|
|
|
if vote:
|
2022-10-11 13:01:39 +00:00
|
|
|
if option.exclusive == 2: abort(400, "You already voted on this bet!")
|
2023-02-28 16:56:22 +00:00
|
|
|
for x in vote:
|
2023-03-16 06:27:58 +00:00
|
|
|
g.db.delete(x)
|
2022-07-02 06:48:04 +00:00
|
|
|
|
2023-08-25 21:08:49 +00:00
|
|
|
g.db.flush()
|
2023-06-07 23:26:32 +00:00
|
|
|
existing = g.db.query(PostOptionVote).filter_by(option_id=option_id, user_id=v.id).one_or_none()
|
2022-07-02 06:48:04 +00:00
|
|
|
if not existing:
|
2023-06-07 23:26:32 +00:00
|
|
|
vote = PostOptionVote(
|
2022-07-02 06:48:04 +00:00
|
|
|
option_id=option_id,
|
|
|
|
user_id=v.id,
|
2023-06-07 23:26:32 +00:00
|
|
|
post_id=option.parent_id,
|
2022-07-02 06:48:04 +00:00
|
|
|
)
|
2023-03-16 06:27:58 +00:00
|
|
|
g.db.add(vote)
|
2022-08-26 21:53:17 +00:00
|
|
|
elif existing and not option.exclusive:
|
2023-03-16 06:27:58 +00:00
|
|
|
g.db.delete(existing)
|
2022-07-02 06:48:04 +00:00
|
|
|
|
2022-11-21 01:13:31 +00:00
|
|
|
return {"message": "Bet successful!"}
|
2022-07-02 06:48:04 +00:00
|
|
|
|
2022-12-29 10:39:10 +00:00
|
|
|
@app.post("/vote/comment/option/<int:option_id>")
|
2023-02-27 05:33:45 +00:00
|
|
|
@limiter.limit('1/second', scope=rpath)
|
2023-04-02 06:52:26 +00:00
|
|
|
@limiter.limit('1/second', scope=rpath, key_func=get_ID)
|
2023-07-13 13:50:46 +00:00
|
|
|
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
|
|
|
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
2023-09-14 16:49:46 +00:00
|
|
|
@auth_required
|
2022-08-11 04:05:23 +00:00
|
|
|
def vote_option_comment(option_id, v):
|
2022-10-16 09:51:42 +00:00
|
|
|
try:
|
|
|
|
option_id = int(option_id)
|
|
|
|
except:
|
|
|
|
abort(404)
|
2023-03-16 06:27:58 +00:00
|
|
|
option = g.db.get(CommentOption, option_id)
|
2022-07-02 06:48:04 +00:00
|
|
|
if not option: abort(404)
|
2023-05-03 14:22:21 +00:00
|
|
|
|
2023-06-23 13:46:42 +00:00
|
|
|
if option.parent.parent_post:
|
2023-10-07 17:55:50 +00:00
|
|
|
hole = option.parent.post.hole
|
2023-05-03 14:22:21 +00:00
|
|
|
else:
|
2023-10-07 17:55:50 +00:00
|
|
|
hole = None
|
2023-05-03 14:22:21 +00:00
|
|
|
|
2023-10-07 17:55:50 +00:00
|
|
|
if hole in {'furry','vampire','racist','femboy','edgy'} and not v.house.lower().startswith(hole):
|
|
|
|
abort(403, f"You need to be a member of House {hole.capitalize()} to vote on polls in /h/{hole}")
|
2022-09-05 22:30:44 +00:00
|
|
|
|
2023-03-12 17:36:35 +00:00
|
|
|
if option.exclusive == 2:
|
|
|
|
if option.parent.total_bet_voted(v):
|
|
|
|
abort(403, "You can't participate in a closed bet!")
|
2024-01-12 08:12:35 +00:00
|
|
|
if not v.charge_account('coins/marseybux', POLL_BET_COINS)[0]:
|
2023-03-12 17:36:35 +00:00
|
|
|
abort(400, f"You don't have {POLL_BET_COINS} coins or marseybux!")
|
2023-03-16 06:27:58 +00:00
|
|
|
g.db.add(v)
|
2023-03-12 17:36:35 +00:00
|
|
|
|
2022-07-02 06:48:04 +00:00
|
|
|
if option.exclusive:
|
2023-03-16 06:27:58 +00:00
|
|
|
vote = g.db.query(CommentOptionVote).join(CommentOption).filter(
|
2022-07-02 06:48:04 +00:00
|
|
|
CommentOptionVote.user_id==v.id,
|
2023-03-12 19:21:22 +00:00
|
|
|
CommentOptionVote.comment_id==option.parent_id,
|
2023-03-12 19:18:08 +00:00
|
|
|
CommentOption.exclusive==option.exclusive).all()
|
2022-07-02 06:48:04 +00:00
|
|
|
if vote:
|
2023-03-12 17:36:35 +00:00
|
|
|
if option.exclusive == 2: abort(400, "You already voted on this bet!")
|
|
|
|
for x in vote:
|
2023-03-16 06:27:58 +00:00
|
|
|
g.db.delete(x)
|
2022-07-02 06:48:04 +00:00
|
|
|
|
2023-08-25 21:08:49 +00:00
|
|
|
g.db.flush()
|
2023-03-16 06:27:58 +00:00
|
|
|
existing = g.db.query(CommentOptionVote).filter_by(option_id=option_id, user_id=v.id).one_or_none()
|
2022-07-02 06:48:04 +00:00
|
|
|
if not existing:
|
|
|
|
vote = CommentOptionVote(
|
|
|
|
option_id=option_id,
|
|
|
|
user_id=v.id,
|
2023-02-28 22:09:16 +00:00
|
|
|
comment_id=option.parent_id,
|
2022-07-02 06:48:04 +00:00
|
|
|
)
|
2023-03-16 06:27:58 +00:00
|
|
|
g.db.add(vote)
|
2022-07-02 06:48:04 +00:00
|
|
|
elif existing:
|
2023-03-16 06:27:58 +00:00
|
|
|
g.db.delete(existing)
|
2022-07-02 06:48:04 +00:00
|
|
|
|
2023-03-12 17:36:35 +00:00
|
|
|
return {"message": "Bet successful!"}
|
|
|
|
|
|
|
|
|
|
|
|
@app.get("/votes/post/option/<int:option_id>")
|
2023-07-13 13:50:46 +00:00
|
|
|
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
|
|
|
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
2023-03-12 17:36:35 +00:00
|
|
|
@auth_required
|
|
|
|
def option_votes(option_id, v):
|
|
|
|
try:
|
|
|
|
option_id = int(option_id)
|
|
|
|
except:
|
|
|
|
abort(404)
|
2023-06-07 23:26:32 +00:00
|
|
|
option = g.db.get(PostOption, option_id)
|
2023-03-12 17:36:35 +00:00
|
|
|
if not option: abort(404)
|
|
|
|
|
|
|
|
if option.parent.ghost and v.admin_level < PERMS['SEE_GHOST_VOTES']:
|
|
|
|
abort(403)
|
|
|
|
|
2023-06-07 23:26:32 +00:00
|
|
|
ups = g.db.query(PostOptionVote).filter_by(option_id=option_id).order_by(PostOptionVote.created_utc).all()
|
2023-03-12 17:36:35 +00:00
|
|
|
|
2023-08-11 13:15:34 +00:00
|
|
|
user_ids = [x[0] for x in g.db.query(PostOptionVote.user_id).filter_by(option_id=option_id)]
|
2023-03-16 06:27:58 +00:00
|
|
|
total_ts = g.db.query(func.sum(User.truescore)).filter(User.id.in_(user_ids)).scalar()
|
2023-03-12 17:36:35 +00:00
|
|
|
total_ts = format(total_ts, ",") if total_ts else '0'
|
|
|
|
|
2023-10-15 14:53:37 +00:00
|
|
|
if v.admin_level >= PERMS['VIEW_PATRONS']:
|
|
|
|
patrons = [x[0] for x in g.db.query(User.patron).filter(User.id.in_(user_ids), User.patron > 1)]
|
|
|
|
total_patrons = len(patrons)
|
|
|
|
total_money = 0
|
|
|
|
for tier in patrons:
|
|
|
|
total_money += TIER_TO_MONEY[tier]
|
2023-03-12 17:36:35 +00:00
|
|
|
else:
|
|
|
|
total_patrons = None
|
2023-10-15 14:53:37 +00:00
|
|
|
total_money = 0
|
2023-03-12 17:36:35 +00:00
|
|
|
|
|
|
|
return render_template("poll_votes.html",
|
|
|
|
v=v,
|
2023-10-29 12:13:05 +00:00
|
|
|
option=option,
|
2023-03-12 17:36:35 +00:00
|
|
|
ups=ups,
|
|
|
|
total_ts=total_ts,
|
|
|
|
total_patrons=total_patrons,
|
2023-10-15 14:53:37 +00:00
|
|
|
total_money=total_money,
|
2023-03-12 17:36:35 +00:00
|
|
|
)
|
|
|
|
|
2022-07-02 06:48:04 +00:00
|
|
|
|
2022-12-29 10:39:10 +00:00
|
|
|
@app.get("/votes/comment/option/<int:option_id>")
|
2023-07-13 13:50:46 +00:00
|
|
|
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
|
|
|
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
2022-07-02 06:48:04 +00:00
|
|
|
@auth_required
|
|
|
|
def option_votes_comment(option_id, v):
|
2022-10-16 09:51:42 +00:00
|
|
|
try:
|
|
|
|
option_id = int(option_id)
|
|
|
|
except:
|
|
|
|
abort(404)
|
2023-03-16 06:27:58 +00:00
|
|
|
option = g.db.get(CommentOption, option_id)
|
2022-07-02 06:48:04 +00:00
|
|
|
|
|
|
|
if not option: abort(404)
|
|
|
|
|
2023-03-12 17:36:35 +00:00
|
|
|
if option.parent.ghost and v.admin_level < PERMS['SEE_GHOST_VOTES']:
|
2023-03-01 00:01:26 +00:00
|
|
|
abort(403)
|
2022-07-14 23:21:52 +00:00
|
|
|
|
2023-03-16 06:27:58 +00:00
|
|
|
ups = g.db.query(CommentOptionVote).filter_by(option_id=option_id).order_by(CommentOptionVote.created_utc).all()
|
2022-07-02 06:48:04 +00:00
|
|
|
|
2023-08-11 13:15:34 +00:00
|
|
|
user_ids = [x[0] for x in g.db.query(CommentOptionVote.user_id).filter_by(option_id=option_id)]
|
2023-03-16 06:27:58 +00:00
|
|
|
total_ts = g.db.query(func.sum(User.truescore)).filter(User.id.in_(user_ids)).scalar()
|
2022-12-14 17:28:31 +00:00
|
|
|
total_ts = format(total_ts, ",") if total_ts else '0'
|
|
|
|
|
2023-10-15 14:53:37 +00:00
|
|
|
if v.admin_level >= PERMS['VIEW_PATRONS']:
|
|
|
|
patrons = [x[0] for x in g.db.query(User.patron).filter(User.id.in_(user_ids), User.patron > 1)]
|
|
|
|
total_patrons = len(patrons)
|
|
|
|
total_money = 0
|
|
|
|
for tier in patrons:
|
|
|
|
total_money += TIER_TO_MONEY[tier]
|
2022-12-14 17:28:31 +00:00
|
|
|
else:
|
|
|
|
total_patrons = None
|
2023-10-15 14:53:37 +00:00
|
|
|
total_money = 0
|
2022-12-14 17:28:31 +00:00
|
|
|
|
2022-07-02 06:48:04 +00:00
|
|
|
return render_template("poll_votes.html",
|
2022-09-04 23:15:37 +00:00
|
|
|
v=v,
|
2023-10-29 12:13:05 +00:00
|
|
|
option=option,
|
2022-12-14 17:28:31 +00:00
|
|
|
ups=ups,
|
|
|
|
total_ts=total_ts,
|
|
|
|
total_patrons=total_patrons,
|
2023-10-15 14:53:37 +00:00
|
|
|
total_money=total_money,
|
2022-12-14 17:28:31 +00:00
|
|
|
)
|