Пример #1
0
    async def seed(self, ctx, codigo_do_jogo: GameConverter()):
        game = codigo_do_jogo

        with self.db.Session() as session:
            weekly = self.db.get_open_weekly(session, game)
            if weekly is None:
                raise SeedBotException("A semanal de %s não está aberta." % game)

            if datetime.now() >= weekly.submission_end:
                raise SeedBotException("As submissões para a semanal de %s foram encerradas." % game)

            author = ctx.author
            entry = self.db.get_player_entry(session, weekly, author.id)
            if entry is None:
                registered = self.db.get_registered_entry(session, author.id)
                if registered is not None:
                    game = registered.weekly.game
                    raise SeedBotException(
                        "Você deve registrar o seu tempo ou desistir da semanal de %s antes de participar de outra. " % game
                    )
                self.db.register_player(session, weekly, author.id, get_discord_name(author))
            elif entry.status != EntryStatus.REGISTERED:
                raise SeedBotException(
                    "Você já participou da semanal de %s. Caso tenha concluído a seed mas ainda não enviou o seu VOD, você pode fazê-lo utilizando o comando %svod" % (game, ctx.prefix)
                )

            embed = embeds.seed_embed(weekly, self.instructions)
            await ctx.author.send(embed=embed)
            logger.info("The seed for %s was sent to %s", game, get_discord_name(author))
Пример #2
0
    async def time(self, ctx, tempo: TimeConverter("%H:%M:%S", "H:MM:SS")):
        time = tempo

        with self.db.Session() as session:
            author_id = ctx.author.id
            entry = self.db.get_registered_entry(session, author_id)
            if entry is None:
                raise SeedBotException("Você já registrou seu tempo ou não está participando de uma semanal aberta.")

            if datetime.now() >= entry.weekly.submission_end:
                raise SeedBotException("As submissões de tempo para a semanal de %s foram encerradas." % entry.weekly.game)

            if len(ctx.message.attachments) != 1:
                raise SeedBotException(
                    "Você deve enviar o print mostrando a tela final do jogo e o seu timer juntamente com este comando."
                )

            self.db.submit_time(session, entry.weekly, author_id, time, ctx.message.attachments[0].url)
            await ctx.message.reply(
                "Seu tempo de %s na semanal de %s foi registrado! Não esqueça de submeter o seu VOD através do comando "
                "'%svod' até %s às %s." % (
                    time.strftime("%H:%M:%S"),
                    entry.weekly.game,
                    ctx.prefix,
                    entry.weekly.submission_end.strftime("%d/%m/%Y"),
                    entry.weekly.submission_end.strftime("%H:%M")
                )
            )
            logger.info(
                "The time and print for %s was received from %s.", entry.weekly.game, get_discord_name(ctx.author))
Пример #3
0
    async def forfeit(self, ctx, *, ok: str = None):
        with self.db.Session() as session:
            author_id = ctx.author.id
            entry = self.db.get_registered_entry(session, author_id)
            if entry is None:
                raise SeedBotException("Você já registrou seu tempo ou não está participando de uma semanal.")

            if ok is None or str.lower(ok) != "ok":
                raise SeedBotException(
                    "Confirme sua desistência da semanal de %s ação enviando o comando '%s%s ok' aqui." % (entry.weekly.game, ctx.prefix, ctx.invoked_with)
                )

            self.db.forfeit_player(session, entry.weekly, author_id)
            await ctx.message.reply("Você não está mais participando da semanal de %s." % entry.weekly.game)
            logger.info("%s has forfeited from %s.", get_discord_name(ctx.author), entry.weekly.game)
Пример #4
0
    def get_hash(self, game, hash_str):
        if game is Games.MMR:
            if not SeedHashHandler._url_matcher.match(hash_str):
                raise SeedBotException("O código de verificação de %s deve ser a URL da imagem." % game)
            return hash_str

        if game is Games.OOTR or game is Games.ALTTPR:
            return self.build_emoji_hash(game, hash_str)

        return hash_str
Пример #5
0
    async def weeklyclose(self, ctx, codigo_do_jogo: GameConverter()):
        game = codigo_do_jogo
        self.monitor_checker.check(ctx.author, game)

        with self.db.Session() as session:
            weekly = self.db.get_open_weekly(session, game)
            if weekly is None:
                raise SeedBotException("A semanal de %s não está aberta." % game)

            self.db.close_weekly(session, weekly)
            await ctx.message.reply("Semanal de %s fechada com sucesso!" % game)
            logger.info("The weekly for %s was closed.", game)
Пример #6
0
    async def vod(self, ctx, codigo_do_jogo: GameConverter(), url_do_vod: str):
        game = codigo_do_jogo
        vod_url = url_do_vod

        with self.db.Session() as session:
            weekly = self.db.get_open_weekly(session, game)
            if weekly is None:
                raise SeedBotException("Não há uma semanal de %s em andamento." % game)

            author_id = ctx.author.id
            entry = self.db.get_player_entry(session, weekly, author_id)
            if entry is None:
                raise SeedBotException("Você ainda não solicitou a seed da semanal de %s." % game)

            if entry.status == EntryStatus.REGISTERED:
                raise SeedBotException("Você deve submeter o seu tempo através do comando '%stime' antes de enviar o seu VOD." % ctx.prefix)
            elif entry.status == EntryStatus.DNF:
                raise SeedBotException("Você não está mais participando desta semanal.")

            self.db.submit_vod(session, weekly, author_id, vod_url)
            await ctx.message.reply("VOD recebido com sucesso! Agradecemos a sua participação!")
            logger.info("The VOD for %s was received from %s.", entry.weekly.game, get_discord_name(ctx.author))
Пример #7
0
    async def entries(self, ctx, codigo_do_jogo: GameConverter()):
        game = codigo_do_jogo
        self.monitor_checker.check(ctx.author, game)

        with self.db.Session() as session:
            weekly = self.db.get_open_weekly(session, game)
            if weekly is None:
                raise SeedBotException("Não há uma semanal de %s em andamento." % game)

            reply = ""
            for e in weekly.entries:
                reply += "Player: %s\nStatus: %s\n" % (e.discord_name, e.status.name)
                if e.status in [EntryStatus.TIME_SUBMITTED, EntryStatus.DONE]:
                    reply += "Tempo: %s\nPrint: <%s>\n" % (e.finish_time, e.print_url)
                if e.status == EntryStatus.DONE:
                    reply += "VOD: <%s>\n" % e.vod_url
                reply += "\n"
            if len(reply) > 0:
                await ctx.message.reply(reply)
            else:
                await ctx.message.reply("Nenhuma entrada resgistrada.")
Пример #8
0
    async def weeklycreate(
            self,
            ctx,
            codigo_do_jogo: GameConverter,
            url_da_seed,
            codigo_de_verificacao: str,
            limite_para_envios: DatetimeConverter("%d/%m/%Y-%H:%M", "dd/mm/aaaa-HH:MM")
    ):
        game = codigo_do_jogo
        seed_url = url_da_seed
        hash_str = self.hash_handler.get_hash(game, codigo_de_verificacao)
        submission_end = limite_para_envios
        self.monitor_checker.check(ctx.author, game)

        with self.db.Session() as session:
            weekly = self.db.get_open_weekly(session, game)
            if weekly is not None:
                raise SeedBotException("Há uma semanal aberta para %s. Feche-a primeiro antes de criar uma nova." % game)

            self.db.create_weekly(session, game, seed_url, hash_str, submission_end)
            await ctx.message.reply("Semanal de %s criada com sucesso!" % game)
            logger.info("A new weekly for %s was created.", game)
Пример #9
0
 def _get_emoji(game, item):
     try:
         return SeedHashHandler._get_map()[game][SeedHashHandler._translate(item)]
     except KeyError:
         raise SeedBotException("Não foi possível encontrar o emoji para '%s'." % item)
Пример #10
0
    def check(self, user, game):
        if not self.is_monitor(user):
            raise SeedBotException("Este comando deve ser executado apenas por monitores.")

        if not self.is_monitor(user, game):
            raise SeedBotException("Você não é monitor de %s." % game)