Skip to content

Commit

Permalink
add rt.gg stream overrider
Browse files Browse the repository at this point in the history
  • Loading branch information
tcprescott committed Dec 24, 2023
1 parent 4060dc4 commit b3fbb15
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 0 deletions.
8 changes: 8 additions & 0 deletions alttprbot/models/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,14 @@ class RTGGAnnouncerMessages(Model):
message_id = fields.BigIntField(null=False)
room_name = fields.CharField(50)

class RTGGOverrideWhitelist(Model):
id = fields.IntField(pk=True)
racetime_id = fields.CharField(50, null=False)
category = fields.CharField(50, null=False)
created = fields.DatetimeField(auto_now_add=True)
updated = fields.DatetimeField(auto_now=True)
reason = fields.CharField(200, null=True)
expires = fields.DatetimeField(null=True)

class SrlRaces(Model):
class Meta:
Expand Down
33 changes: 33 additions & 0 deletions alttprbot_racetime/handlers/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,24 @@ async def race_data(self, data):
await models.RTGGUnlistedRooms.filter(room_name=self.data.get('name')).delete()
self.unlisted = unlisted

# TODO: this should be implemented in the base class
async def override_stream(self, user):
"""
Override the streaming requirements for a user.
`user` should be the hashid of the user.
"""
await self.ws.send_json({
'action': 'override_stream',
'data': {
'user': user
}
})
self.logger.info('[%(race)s] overrode stream for %(user)s' % {
'race': self.data.get('name'),
'user': user
})

async def error(self, data):
await self.send_message(f"Command raised exception: {','.join(data.get('errors'))}")
# raise Exception(data.get('errors'))
Expand Down Expand Up @@ -327,3 +345,18 @@ async def ex_promote(self, args, message):
racetime_id = message.get('user', {}).get('id', None)
if await self.tournament.can_gatekeep(racetime_id):
await self.add_monitor(racetime_id)

async def ex_override(self, args, message):
racetime_id = message.get('user', {}).get('id', None)
racetime_category = self.data['category']['slug']
whitelisted_user = await models.RTGGOverrideWhitelist.get_or_none(racetime_id=racetime_id, category=racetime_category)

if whitelisted_user is None:
await self.send_message("You do not have permission to override the stream requirement for this category. Please contact a category owner if you need this to be changed.")
return

if whitelisted_user.expires is not None and whitelisted_user.expires < datetime.utcnow():
await self.send_message("Your streaming exemption has expired. Please contact a category owner if you need this to be renewed.")
return

await self.override_stream(racetime_id)
19 changes: 19 additions & 0 deletions migrations/models/88_20231223212428_update.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from tortoise import BaseDBAsyncClient


async def upgrade(db: BaseDBAsyncClient) -> str:
return """
CREATE TABLE IF NOT EXISTS `rtggoverridewhitelist` (
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`racetime_id` VARCHAR(50) NOT NULL,
`category` VARCHAR(50) NOT NULL,
`created` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`updated` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
`reason` VARCHAR(200),
`expires` DATETIME(6)
) CHARACTER SET utf8mb4;"""


async def downgrade(db: BaseDBAsyncClient) -> str:
return """
DROP TABLE IF EXISTS `rtggoverridewhitelist`;"""

0 comments on commit b3fbb15

Please sign in to comment.