from snek.system.service import BaseService class ChannelService(BaseService): mapper_name = "channel" async def create( self, label, created_by_uid, description=None, tag=None, is_private=False, is_listed=True, ): if label[0] != "#" and is_listed: label = f"#{label}" count = await self.count(deleted_at=None) if not tag and not count: tag = "public" model = await self.new() model["label"] = label model["description"] = description model["tag"] = tag model["created_by_uid"] = created_by_uid model["is_private"] = is_private model["is_listed"] = is_listed if await self.save(model): return model raise Exception(f"Failed to create channel: {model.errors}.") async def ensure_public_channel(self, created_by_uid): model = await self.get(is_listed=True, tag="public") is_moderator = False if not model: is_moderator = True model = await self.create( "public", created_by_uid=created_by_uid, is_listed=True, tag="public" ) await self.app.services.channel_member.create( model["uid"], created_by_uid, is_moderator=is_moderator, is_read_only=False, is_muted=False, is_banned=False, ) return model