forked from rDrama/rDrama
do this https://rdrama.net/post/18459/marseycapywalking-megathread-for-bugs-and-suggestions/5906726#context
parent
bcde6c9650
commit
a3681d2204
|
@ -442,6 +442,10 @@ class User(Base):
|
||||||
if self.admin_level >= PERMS['MODS_EVERY_GROUP']: return True
|
if self.admin_level >= PERMS['MODS_EVERY_GROUP']: return True
|
||||||
return bool(g.db.query(GroupMembership.user_id).filter_by(user_id=self.id, group_name=group.name, is_mod=True).one_or_none())
|
return bool(g.db.query(GroupMembership.user_id).filter_by(user_id=self.id, group_name=group.name, is_mod=True).one_or_none())
|
||||||
|
|
||||||
|
@lazy
|
||||||
|
def is_member_of_group(self, group):
|
||||||
|
return bool(g.db.query(GroupMembership.user_id).filter_by(user_id=self.id, group_name=group.name).one_or_none())
|
||||||
|
|
||||||
@lazy
|
@lazy
|
||||||
def exiler_username(self, hole):
|
def exiler_username(self, hole):
|
||||||
exile = g.db.query(Exile).options(load_only(Exile.exiler_id)).filter_by(user_id=self.id, hole=hole).one_or_none()
|
exile = g.db.query(Exile).options(load_only(Exile.exiler_id)).filter_by(user_id=self.id, hole=hole).one_or_none()
|
||||||
|
|
|
@ -266,3 +266,40 @@ def group_remove_mod(v, group_name, user_id):
|
||||||
send_repeatable_notification(membership.user_id, f"@{v.username} (!{group}'s owner) has removed you as a mod!")
|
send_repeatable_notification(membership.user_id, f"@{v.username} (!{group}'s owner) has removed you as a mod!")
|
||||||
|
|
||||||
return {"message": f'You have removed @{membership.user.username} as a mod successfully!'}
|
return {"message": f'You have removed @{membership.user.username} as a mod successfully!'}
|
||||||
|
|
||||||
|
|
||||||
|
@app.post("/!<group_name>/usurp")
|
||||||
|
@limiter.limit('1/second', scope=rpath)
|
||||||
|
@limiter.limit('1/second', scope=rpath, key_func=get_ID)
|
||||||
|
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400)
|
||||||
|
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
|
||||||
|
@auth_required
|
||||||
|
def group_usurp(v, group_name):
|
||||||
|
group_name = group_name.strip().lower()
|
||||||
|
|
||||||
|
group = g.db.get(Group, group_name)
|
||||||
|
if not group: abort(404)
|
||||||
|
|
||||||
|
if not v.is_member_of_group(group):
|
||||||
|
abort(403, "Only members of groups can usurp them!")
|
||||||
|
|
||||||
|
search_html = f'''%src="/pp/{group.owner_id}">@%</a> (<a href="/!{group.name}" rel="nofollow">!{group.name}</a>'s owner) has % your application!</p>%'''
|
||||||
|
|
||||||
|
one_month_ago = time.time() - 2629800
|
||||||
|
|
||||||
|
is_active = g.db.query(Comment.id).filter(
|
||||||
|
Comment.author_id == AUTOJANNY_ID,
|
||||||
|
Comment.parent_post == None,
|
||||||
|
Comment.body_html.like(search_html),
|
||||||
|
Comment.created_utc > one_month_ago,
|
||||||
|
).first()
|
||||||
|
|
||||||
|
if is_active:
|
||||||
|
abort(403, f"@{group.owner.username} has reviewed a membership application in the past month, so you can't usurp them!")
|
||||||
|
|
||||||
|
send_repeatable_notification(group.owner_id, f"@{v.username} has usurped control of !{group.name} from you. This was possible because you spent more than a month not reviewing membership applications. Be active next time sweaty :!marseycheeky:")
|
||||||
|
|
||||||
|
group.owner_id = v.id
|
||||||
|
g.db.add(group)
|
||||||
|
|
||||||
|
return {"message": f'You have usurped control of !{group.name} successfully!'}
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
<th>Applied on</th>
|
<th>Applied on</th>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if v.mods_group(group) %}
|
{% if v.is_member_of_group(group) %}
|
||||||
<th class="disable-sort-click"></th>
|
<th class="disable-sort-click"></th>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -39,12 +39,12 @@
|
||||||
{% for membership in memberships %}
|
{% for membership in memberships %}
|
||||||
<tr id="{{membership.user_id}}">
|
<tr id="{{membership.user_id}}">
|
||||||
<td id="counter-{{membership.user_id}}">{{loop.index}}</td>
|
<td id="counter-{{membership.user_id}}">{{loop.index}}</td>
|
||||||
{% set owner = membership.user_id == group.owner_id %}
|
{% set is_owner = membership.user_id == group.owner_id %}
|
||||||
<td {% if owner %}class="unbreakable"{% endif %}>
|
<td {% if is_owner %}class="unbreakable"{% endif %}>
|
||||||
{% with user=membership.user %}
|
{% with user=membership.user %}
|
||||||
{% include "user_in_table.html" %}
|
{% include "user_in_table.html" %}
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
{% if owner %}
|
{% if is_owner %}
|
||||||
<img class="mx-2 group-owner" data-bs-toggle="tooltip" alt="Owner" title="Owner" src="{{SITE_FULL_IMAGES}}/e/marseykingretard.webp">
|
<img class="mx-2 group-owner" data-bs-toggle="tooltip" alt="Owner" title="Owner" src="{{SITE_FULL_IMAGES}}/e/marseykingretard.webp">
|
||||||
{% elif membership.is_mod %}
|
{% elif membership.is_mod %}
|
||||||
<img class="mx-2 group-mod" data-bs-toggle="tooltip" alt="Mod" title="Mod" src="{{SITE_FULL_IMAGES}}/e/marseyjanny.webp">
|
<img class="mx-2 group-mod" data-bs-toggle="tooltip" alt="Mod" title="Mod" src="{{SITE_FULL_IMAGES}}/e/marseyjanny.webp">
|
||||||
|
@ -57,8 +57,8 @@
|
||||||
<td id="time-{{membership.user_id}}" data-time="{{membership.created_utc}}"></td>
|
<td id="time-{{membership.user_id}}" data-time="{{membership.created_utc}}"></td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if v.mods_group(group) %}
|
<td>
|
||||||
<td>
|
{% if v.mods_group(group) %}
|
||||||
{% if v.id == group.owner_id and v.id != membership.user_id %}
|
{% if v.id == group.owner_id and v.id != membership.user_id %}
|
||||||
<div id="mod-{{membership.user_id}}" class="mb-2 {% if name == 'applications' %}d-none{% endif %}">
|
<div id="mod-{{membership.user_id}}" class="mb-2 {% if name == 'applications' %}d-none{% endif %}">
|
||||||
<button id="add-mod-{{membership.user_id}}" type="button" class="btn btn-success btn-block {% if membership.is_mod %}d-none{% endif %}" data-nonce="{{g.nonce}}" data-onclick="postToastSwitch(this,'/!{{group.name}}/{{membership.user_id}}/add_mod','add-mod-{{membership.user_id}}','remove-mod-{{membership.user_id}}','d-none')">Add as Mod</button>
|
<button id="add-mod-{{membership.user_id}}" type="button" class="btn btn-success btn-block {% if membership.is_mod %}d-none{% endif %}" data-nonce="{{g.nonce}}" data-onclick="postToastSwitch(this,'/!{{group.name}}/{{membership.user_id}}/add_mod','add-mod-{{membership.user_id}}','remove-mod-{{membership.user_id}}','d-none')">Add as Mod</button>
|
||||||
|
@ -76,8 +76,12 @@
|
||||||
<button type="button" class="btn btn-success btn-block" data-nonce="{{g.nonce}}" data-onclick="approve_membership(this,'{{group}}','{{membership.user_id}}')">Approve</button>
|
<button type="button" class="btn btn-success btn-block" data-nonce="{{g.nonce}}" data-onclick="approve_membership(this,'{{group}}','{{membership.user_id}}')">Approve</button>
|
||||||
<button type="button" class="btn btn-danger btn-block" data-nonce="{{g.nonce}}" data-onclick="reject_membership(this,'{{group}}','{{membership.user_id}}')">Reject</button>
|
<button type="button" class="btn btn-danger btn-block" data-nonce="{{g.nonce}}" data-onclick="reject_membership(this,'{{group}}','{{membership.user_id}}')">Reject</button>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
{% endif %}
|
||||||
{% endif %}
|
|
||||||
|
{% if v.is_member_of_group(group) and is_owner and v.id != group.owner_id %}
|
||||||
|
<button type="button" class="btn btn-danger btn-block" data-nonce="{{g.nonce}}" data-onclick="areyousure(this)" data-areyousure="postToastReload(this,'/!{{group}}/usurp')">Usurp</button>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
</div>
|
</div>
|
||||||
<p class="mt-2 mr-1" style="float: right"><b>Cost</b>: {{cost}} coins or marseybux</p>
|
<p class="mt-2 mr-1" style="float: right"><b>Cost</b>: {{cost}} coins or marseybux</p>
|
||||||
</div>
|
</div>
|
||||||
|
<p class="text-danger mt-2">Warning: ping groups can get usurped from their owners if they spend more than a month not reviewing membership applications.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue