Beispiel #1
0
 def point(self):
     s = _('word_point')+'\n'
     s += '{}: {}\\{} \n{}: {}\\{}'.format(
         _('team', team = self.team_red.name), self.grid_table.get_red_point(), self.grid_table.number_red,
         _('team', team=self.team_blue.name), self.grid_table.get_blue_point(), self.grid_table.number_blue
     )
     return s
Beispiel #2
0
 def join(self, member):
     if self.status != Status.JOINABLE:
         raise NotAllowedCommand(_('error_joinable'))
     if self.get_team_member(member) is None:
         self.auto_join(member)
     else:
         raise NotAllowedCommand(_('error_already_joined', team=self.get_team_member(member).name))
Beispiel #3
0
    def show(self, member, word):
        if self.status == Status.PLAY:
            if member.id in self.current_turn.members.keys():
                found, color = self.grid_table.show(word)
                if not found:
                    raise NotAllowedCommand(_('error_word_not_found', word=word))
                elif color == ColorGame.ASSASSIN:
                    self.status = Status.STOPPED
                    self.winner = self.next_turn

                    return ActionResult.FINISH
                elif self.verify_victory_condition() is None:
                    if color != self.current_turn.color:
                        self.current_turn, self.next_turn = self.next_turn, self.current_turn
                        return ActionResult.NOT_GUESS
                    else:
                        return ActionResult.GUESS
                else:
                    self.winner = self.verify_victory_condition()
                    self.status = Status.STOPPED
                    return ActionResult.FINISH
            else:
                raise NotAllowedCommand(_('error_team_not_allowed', team=self.current_turn.name))
        else:
            raise NotAllowedCommand(_('error_not_started'))
Beispiel #4
0
 def leave(self, member):
     if self.status != Status.JOINABLE:
         raise NotAllowedCommand(_('error_joinable'))
     team = self.get_team_member(member)
     if team is not None:
         team.leave(member)
     else:
         raise NotAllowedCommand(_('error_not_join'))
Beispiel #5
0
 def pass_turn(self, member):
     if self.status == Status.PLAY:
         if member.id in self.current_turn.members.keys():
             self.current_turn, self.next_turn = self.next_turn, self.current_turn
         else:
             raise NotAllowedCommand(_('error_team_not_allowed', team=self.current_turn.name))
     else:
         raise NotAllowedCommand(_('error_not_started'))
Beispiel #6
0
 def print_members(self):
     s = _('team', team=self.name) + '\n'
     if self.master is not None:
         s += self.master.name + ' ({})\n'.format(_('master'))
     for m in self.members.keys():
         if self.master is None or m != self.master.id:
             s += self.members[m].name + ' ({})\n'.format(_('spy'))
     return s + '\n'
Beispiel #7
0
 async def addtag(self, ctx, tag, lang, *, member: discord.Member = None):
     if not isinstance(ctx.message.channel, discord.DMChannel):
         await ctx.send(_('error_addtag_private'))
     else:
         try:
             member = member or ctx.author
             self.db.add_tag(tag, lang)
             await ctx.send(_('tag_added', tag=tag))
         except NotAllowedCommand as err:
             await ctx.send(err.message)
Beispiel #8
0
 def play(self, tag):
     if self.status != Status.JOINABLE:
         raise NotAllowedCommand(_('error_joinable'))
     elif not self.has_masters():
         raise NotAllowedCommand(_('error_need_two_master'))
     else:
         self.status = Status.PLAY
         self.grid_table = WordTable()
         self.grid_table.generate_words(tag)
         self.current_turn = self.team_red
         self.next_turn = self.team_blue
Beispiel #9
0
 def change_team(self, member):
     if self.status != Status.JOINABLE:
         raise NotAllowedCommand(_('error_joinable'))
     if member.id in self.team_red.members.keys():
         self.team_red.leave(member)
         self.team_blue.join(member)
     elif member.id in self.team_blue.members.keys():
         self.team_blue.leave(member)
         self.team_red.join(member)
     else:
         raise NotAllowedCommand(_('error_not_join'))
Beispiel #10
0
 def join_team_as_master(self, member):
     if self.team_red.master is not None and self.team_blue.master is not None:
         raise NotAllowedCommand(_('error_master_already_set'))
     if self.team_red.master is None and member.id not in self.team_blue.members.keys():
         self.team_red.set_master(member)
         return self.team_red.name
     elif self.team_blue.master is None and member.id not in self.team_red.members.keys():
         self.team_blue.set_master(member)
         return self.team_blue.name
     else:
         raise NotAllowedCommand(_('error_master_other_team'))
Beispiel #11
0
    async def stopword(self, ctx, *, member: discord.Member = None):

        if not isinstance(ctx.message.channel, discord.DMChannel):
            await ctx.send(_('error_stopword_private'))
        else:
            try:
                member = member or ctx.author
                self.user_tag.pop(member.id, None)
                await ctx.send(_('stop_word'))
            except NotAllowedCommand as err:
                await ctx.send(err.message)
Beispiel #12
0
 async def listtags(self, ctx, *, member: discord.Member = None):
     try:
         member = member or ctx.author
         tags = self.db.get_tags()
         if len(tags) == 0:
             s = _('tags_empty')
         else:
             s = _('tags_available') + '\n'
             for (tag, lang) in tags:
                 s += '{} ({})\n'.format(tag, lang)
         await ctx.send(s)
     except NotAllowedCommand as err:
         await ctx.send(err.message)
Beispiel #13
0
    async def addword(self, ctx, tag, *, member: discord.Member = None):

        if not isinstance(ctx.message.channel, discord.DMChannel):
            await ctx.send(_('error_addword_private'))
        else:
            try:
                member = member or ctx.author
                if self.db.get_tag_id(tag) is not None:
                    self.user_tag[member.id] = tag
                    await ctx.send(_('tag_adding', tag=tag))
                else:
                    raise NotAllowedCommand(_('error_tag_not_exists', tag=tag))
            except NotAllowedCommand as err:
                await ctx.send(err.message)
Beispiel #14
0
 async def show(self, ctx, word, *, member: discord.Member = None):
     """Set the user as captain of a team"""
     try:
         member = member or ctx.author
         res = self.show_word(ctx.message.author.guild, ctx.message.channel, member, word)
         if res == ActionResult.FINISH:
             name = self.game_helper.matches[(ctx.message.author.guild.id, ctx.message.channel.id)].winner.name
             await ctx.send(_('end_game', team=name))
         elif res == ActionResult.GUESS:
             await ctx.send(_('word_guessed', word=word))
         else:
             await ctx.send(_('word_not_guessed', word=word))
         await self.send_images(ctx)
     except NotAllowedCommand as err:
         await ctx.send(err.message)
Beispiel #15
0
 def start(self):
     if self.status == Status.JOINABLE:
         raise NotAllowedCommand(_('error_started'))
     else:
         self.status = Status.JOINABLE
         self.team_red = Team(ColorGame.RED, 'Red')
         self.team_blue = Team(ColorGame.BLUE, 'Blue')
Beispiel #16
0
 async def send_images(self, ctx):
     words = self.game_helper.matches[(
         ctx.message.author.guild.id,
         ctx.message.channel.id)].grid_table.words
     next_team = self.game_helper.matches[(
         ctx.message.author.guild.id,
         ctx.message.channel.id)].current_turn.name
     spies_image = [discord.File(ImageGenerator().generate(words, False))]
     await ctx.send(
         _('turn', team=next_team) + '\n' +
         self.game_helper.matches[(ctx.message.author.guild.id,
                                   ctx.message.channel.id)].point(),
         files=spies_image)
     master_red = self.game_helper.matches[(
         ctx.message.author.guild.id,
         ctx.message.channel.id)].team_red.master
     master_blue = self.game_helper.matches[(
         ctx.message.author.guild.id,
         ctx.message.channel.id)].team_blue.master
     if master_red is not None:
         masters_image = [
             discord.File(ImageGenerator().generate(words, True))
         ]
         await master_red.send(files=masters_image)
     if master_blue is not None:
         masters_image = [
             discord.File(ImageGenerator().generate(words, True))
         ]
         await master_blue.send(files=masters_image)
Beispiel #17
0
 async def master(self, ctx, *, member: discord.Member = None):
     """Set the user as captain of a team"""
     try:
         member = member or ctx.author
         self.join_as_master(ctx.message.author.guild, ctx.message.channel, member)
         await ctx.send(_('join_game_as_master', user=member.name))
         await ctx.send(self.game_helper.matches[(ctx.message.author.guild.id, ctx.message.channel.id)].print_members())
     except NotAllowedCommand as err:
         await ctx.send(err.message)
Beispiel #18
0
    async def stop(self, ctx, *, member: discord.Member = None):
        """ Stop the game

            """
        print(ctx.message)
        try:
            self.game_helper.stop(ctx.message.guild.id, ctx.message.channel.id)
            member = member or ctx.author
            await ctx.send(_('stop_game', user=member.name))
        except NotAllowedCommand as err:
            await ctx.send(err.message)
Beispiel #19
0
    async def start(self, ctx, *, member: discord.Member = None):
        """ start a game in which player can join with join command.

        """
        print(ctx.message)
        try:
            self.game_helper.start(ctx.message.author.guild, ctx.message.channel)
            member = member or ctx.author
            await ctx.send(_('start_game', user=member.name))
        except NotAllowedCommand as err:
            await ctx.send(err.message)
Beispiel #20
0
    async def play(self, ctx, tag, *, member: discord.Member = None):
        """ The game start and is not joinable anymore

        """
        print(ctx.message)
        try:
            self.game_helper.play(ctx.message.guild.id, ctx.message.channel.id, tag)
            member = member or ctx.author
            await ctx.send(_('play_game', user=member.name, tag=tag))
            await self.send_images(ctx)
        except NotAllowedCommand as err:
            await ctx.send(err.message)
Beispiel #21
0
    async def leave(self, ctx, *, member: discord.Member = None):
        """leave the game. Allowed only if the game is JOINABLE

        """
        print(ctx.message)
        try:
            self.game_helper.leave(ctx.message.guild.id, ctx.message.channel.id, ctx.author)
            member = member or ctx.author
            await ctx.send(_('leave_game', user=member.name))
            await ctx.send(self.game_helper.matches[(ctx.message.author.guild.id, ctx.message.channel.id)].print_members())
        except NotAllowedCommand as err:
            await ctx.send(err.message)
Beispiel #22
0
    async def word_listener(self, ctx, *, member: discord.Member = None):

        if ctx.author == self.bot.user:
            return
        member = member or ctx.author
        if isinstance(ctx.channel,
                      discord.DMChannel) and member.id in self.user_tag.keys(
                      ) and ctx.content[0] != '!':
            words = ctx.content.split('\n')
            #for each word in words, upperize the first letter
            words = [(lambda x: x[0].upper() + x[1:])(w) for w in words]
            self.db.add_words(words, self.user_tag[member.id])
            await ctx.send(_('words_added'))
Beispiel #23
0
 async def _pass(self, ctx, *, member: discord.Member = None):
     try:
         member = member or ctx.author
         self.pass_turn(ctx.message.author.guild, ctx.message.channel,
                        member)
         next_team = self.game_helper.matches[(
             ctx.message.author.guild.id,
             ctx.message.channel.id)].current_turn.name
         await ctx.send(
             _('turn', team=next_team) + '\n' +
             self.game_helper.matches[(ctx.message.author.guild.id,
                                       ctx.message.channel.id)].point())
     except NotAllowedCommand as err:
         await ctx.send(err.message)
Beispiel #24
0
    def join_as_master(self, member):
        """Joins the member to one team if available

           Args:
               member: A member instance

           Returns:
               A string with the name of the team

           Raises:
               NotAllowedCommand: An error occured when there are not spaces to be master available
           """
        if self.status != Status.JOINABLE:
            raise NotAllowedCommand(_('error_joinable'))
        else:
            return self.join_team_as_master(member)
Beispiel #25
0
 def play(self, guild_id, channel_id, tag):
     if (guild_id, channel_id) in self.matches.keys():
         self.matches[(guild_id, channel_id)].play(tag)
     else:
         raise NotAllowedCommand(_('error_not_started'))
Beispiel #26
0
 def pass_turn(self, guild, channel, member):
     if (guild.id, channel.id) in self.game_helper.matches.keys():
         return self.game_helper.matches[(guild.id,
                                          channel.id)].pass_turn(member)
     else:
         raise NotAllowedCommand(_('error_not_started'))
Beispiel #27
0
 def show_word(self, guild, channel, member, word):
     if (guild.id, channel.id) in self.game_helper.matches.keys():
         return self.game_helper.matches[(guild.id,
                                          channel.id)].show(member, word)
     else:
         raise NotAllowedCommand(_('error_not_started'))
Beispiel #28
0
 def stop(self):
     if self.status == Status.NOT_STARTED or self.status == Status.STOPPED:
         raise NotAllowedCommand(_('error_not_started'))
     else:
         self.status = Status.STOPPED
Beispiel #29
0
 def print_members(self):
     s = _('members') + ':\n'
     s += self.team_red.print_members()
     s += self.team_blue.print_members()
     return s
Beispiel #30
0
 def stop(self, guild_id, channel_id):
     if (guild_id, channel_id) in self.matches.keys():
         self.matches[(guild_id, channel_id)].stop()
     else:
         raise NotAllowedCommand(_('error_not_started'))