Beispiel #1
0
 def power(self, me, victim):
     if me.undead == True:
         return Mailbox().respond(
             "You're undead! You can't use your powers!", me.channel)
     if me.uses > 0 and me.frozen == False:
         if me.id == victim.id:
             return Mailbox().respond(
                 "Whether suicide is an option or not is for you to find out. However, it is not in this game. Try again, please.",
                 me.channel)
         for player in Game_Control().participants:
             if player.id == victim.id and player.role.name not in [
                     "Spectator", "Dead"
             ]:
                 mail = Mailbox().log(
                     "The **Barber** <@{}> has chosen to assassinate".
                     format(me.id))
                 if player.souls > 0:
                     mail.log_add(
                         " <@{}>, a soulless **{}** who happened to have a soul protecting them."
                         .format(player.id, player.role.name))
                     mail.respond(
                         "Though you thought you had cut up your target nicely enough, it seems they have somehow survived! Too bad...",
                         me.channel)
                     return mail
                 if player.role.name == "Immortal":
                     mail.log_add(
                         " <@{}>. This failed, as the **Immortal** does  not die to a mere **Barber**."
                         .format(player.id))
                     mail.respond(
                         "Though you thought you had cut up your target nicely enough, it seems they have somehow survived! Too bad...",
                         me.channel)
                     return mail
                 mail.log_add(" <@{}>, the town's favourite **{}**.")
                 mail.story(barber_kill_story(me.id, player.id))
                 mail.spam(">kill <@{}> {} 1".format(
                     player.id, player.emoji))
                 return mail
         return Mailbox().respond(
             "Hmmm, it seems like I wasn't able to find the person you were looking for, sorry.",
             me.channel)
     return Mailbox().respond(
         "Sorry, bud! Now is not the time to use your powers!", me.channel)
Beispiel #2
0
    def power(self, me, victim):
        if me.undead == True:
            return Mailbox().respond(
                "I'm sorry, man! Aura Tellers lose their powers once they turn undead!",
                me.channel)
        if me.uses > 0:
            if me.id == victim.id:
                return Mailbox().respond(
                    "I'm sorry, buddy! Suicide is not an option. Choose again!",
                    me.channel)

            for player in Game_Control().participants:
                if victim.id == player.id and player.role.name not in [
                        "Spectator", "Dead"
                ]:
                    me.uses += -1
                    if player.role.name in [
                            "Werewolf", "Bloody Butcher", "Hell Hound",
                            "Infected Wolf", "Sacred Wolf", "White Werewolf",
                            "Wolf's Cub"
                    ]:
                        mail = Mailbox().respond(
                            "{} - <@{}> appears to you as a **Threat**!".
                            format(player.emoji, player.id), me.channel)
                        mail.respond(
                            "This means they're part of the wolf pack!",
                            me.channel)
                        return mail.log(
                            "The **Aura Teller** <@{}> has inspected <@{}>, a **{}**, and discovered them as a threat!"
                            .format(me.id, player.id, player.role.name))
                    Mailbox().respond(
                        "{} - <@{}> does **not** appear to you as a threat.".
                        format(player.emoji, player.id), me.channel)
                    return mail.log(
                        "The **Aura Teller** <@{0}> has inspected <@{1}>. As <@{1}> is a **{2}**, they did not appear as a threat to them."
                        .format(me.id, player.id, player.role.name))
            return Mailbox().respond(
                "Sorry, who could tell that I couldn't find your target?",
                me.channel)
        return Mailbox().respond(
            "Sorry, buddy. You can't use your powers right now.", me.channel)
Beispiel #3
0
def start_game():
    """This function is triggered at the start of the game. If successful, the function returns a Mailbox.
    If unsuccessful, the function still returns a Mailbox, but will also confirm the error in the console."""

    # Make sure there isn't already a game going on!
    if dy.get_stage() != "NA":
        print("ERROR: According to " + dy.dynamic_config +
              ", there's already a game going on!")
        return Mailbox().respond(
            "I'm sorry! A game cannot be started while there's another one going on already!"
        )

    # Choose the roles out of the given role-pool
    role_pool = []
    for choice in view_roles():
        for i in range(choice.amount):
            role_pool.append(choice.role)

    if len(db.player_list()) > len(role_pool):
        print(
            "The game cannot be started while there are less roles available than that there are participants signed up."
        )
        return Mailbox().respond("Not enough roles to distribute available!",
                                 True)

    # If there are enough roles available, make a selection, evaluate the selection, and, if accepted, distribute the roles.
    if not pos.valid_distribution(role_pool, True):
        return Mailbox().respond(
            "I am sorry, but I cannot use an invalid distribution to start the game!",
            True)

    answer = Mailbox(True)

    attempts = 0
    while attempts < 1000:
        attempts += 1
        chosen_roles = random.sample(role_pool, len(db.player_list()))

        if pos.valid_distribution(chosen_roles, True) == True:

            answer.create_cc("Graveyard", 0, [], [], True)
            answer.create_cc("Market", 0, [], [], True)
            answer.create_cc("Reporter", 0, [], [], True)

            # Assign the roles to all users.
            user_list = db.player_list()

            for i in range(len(user_list)):
                user_id = user_list[i]
                user_role = chosen_roles[i]

                db_set(user_id, 'role', user_role)
                db_set(user_id, 'fakerole', user_role)
                db_set(user_id, 'channel', config.game_log)

                answer.log(
                    "{} - <@{}> has received the role of the `{}`!".format(
                        db_get(user_id, 'emoji'), user_id, user_role))
                answer.dm(
                    "This message is giving you your role for season `{}` of the *Werewolves* game.\n\n"
                    .format(config.season), user_id)
                answer.dm_add('Your role is `{}`.\n\n'.format(user_role))
                answer.dm_add(
                    "**You are not allowed to share a screenshot of this message!** "
                )
                answer.dm_add(
                    "You can claim whatever you want about your role, but you may under **NO** "
                )
                answer.dm_add(
                    "circumstances show this message in any way to any other participants.\n"
                )
                answer.dm_add(
                    "We hope you are happy with the role you gained, and we hope you'll enjoy the game as much as we do.\n\n"
                )
                answer.dm_add("Good luck... 🌕")

                if user_role in pos.personal_secrets:
                    answer.create_sc(user_id, user_role)
                if user_role in pos.shared_secrets:
                    answer.add_to_sc(user_id, user_role)

                if user_role == "Cult Member":
                    answer.add_to_sc(user_id, "Cult Leader")
                if user_role in pos.wolf_pack:
                    answer.add_to_sc(user_id, "Werewolf")
                if user_role == "Bloody Butcher":
                    answer.add_to_sc(user_id, "Butcher")
                if user_role == "Devil":
                    answer.add_to_sc(user_id, "Demon")
                if user_role == "Vampire":
                    answer.add_to_sc(user_id, "Undead")
                if user_role == "Witch":
                    db_set(user_id, 'uses', 3)

            answer.story(
                'The current distribution is {}'.format(chosen_roles))  # TODO
            answer.story(
                'I know, I know. That looks ugly as hell. We\'re trying to make it look good!'
            )

            if "Flute Player" in chosen_roles:
                answer.create_cc("Flute_Victims", 0, [], [], True)

            # If the four horsemen are part of the game, assign numbers to all players.
            if "Horseman" in chosen_roles:
                nothorse_table = [
                    user_id for user_id in db.player_list()
                    if db_get(user_id, 'role') != 'Horseman'
                ]
                horse_table = [
                    user_id for user_id in db.player_list()
                    if db_get(user_id, 'role') == 'Horseman'
                ]

                nothorse_table.shuffle()
                horse_table.shuffle()

                for i in range(4):
                    db_set(horse_table[i], 'horseman', i + 1)

                for i in range(16):
                    db_set(nothorse_table[i], 'horseman', (i % 4) + 1)

            # Reset the day timer
            dy.reset_day()
            dy.set_stage('Night')

            return answer.respond(
                "Very well! The game will start tomorrow morning.")

    answer.respond("Timeout reached! Your distribution is too crazy!", True)
    return answer
Beispiel #4
0
def process(message, isGameMaster = False):

    user_id = message.author.id
    message_channel = message.channel.id
    user_role = db_get(user_id,'role')

    '''testcc'''
    # This function is merely a temporary one, to test if the cc creation command is working properly.
    if is_command(message,['cc','testcc','test_cc']):
        members = check.users(message)
        if len(message.content.split(' ')) == 1 or members == False:
            msg = "**Incorrect syntax:** `" + prefix + "cc <name> <user> <user> <user> ...`\n\nExample: `" + prefix + "cc the_cool_ones @Randium#6521`"
            msg += "\n\nThe bot understands both mentions and emojis linked to players."
            return [Mailbox().respond(msg,True)]
        name = message.content.split(' ')[1]
        return [Mailbox().create_cc(name,user_id,members)]
    if is_command(message,['cc','testcc','test_cc'],True):
        msg = "**Usage:** `" + prefix + "cc <name> <user> <user> <user> ...`\n\nExample: `" + prefix + "cc the_cool_ones @Randium#6521`"
        msg += "\n\nThe bot understands both mentions and emojis linked to players."
        return [Mailbox().respond(msg,True)]

    # =============================================================
    #
    #                         GAME MASTERS
    #
    # =============================================================
    if isGameMaster == True:

        '''addrole'''
        # Before the game starts, a list of roles is kept track of.
        # That list is the list of roles that will be dealt among the participants.
        # If the list is greater than the amount of participants, some random roles will be left out.
        # The game cannot start as long as this list is incomplete.
        if is_command(message,['addrole']):
            # TODO
            return todo()
        if is_command(message,['addrole'],True):
            # TODO
            return todo()

        '''assign'''
        # This command is used at the start of the game to assign all roles.
        # This will actually set their "fakerole" value, which will be transferred to their actual role once the game starts.
        if is_command(message,['assign']):
            role = check.roles(message,1)[0]
            user = check.users(message,1)[0]

            if role == False:
                return [Mailbox().respond("No role provided! Please provide us with a role!")]
            if user == False:
                return [Mailbox().respond("No user found! Please provide us with a user!")]

            db_set(user,'role',role)
            return [Mailbox().spam("You have successfully given <@{}> the role of the `{}`!".format(user,role))]

        if is_command(message,['assign'],True):
            msg = "**Usage:** `" + prefix + "assign <user> <role>`\n\nExample: `" + prefix
            msg += "assign @Randium#6521 Innocent`\nGame Master only command"
            return [Mailbox().spam(msg)]

        '''day'''
        # This command is used to initialize the day.
        if is_command(message,['day']):
            # TODO
            return todo()
        if is_command(message,['day'],True):
            # TODO
            return todo()

        '''open_signup'''
        # This command is started when a new game can be started.
        # Make sure the bot has reset itself beforehand.
        if is_command(message,['open_signup']):
            # TODO
            return todo()
        if is_command(message,['open_signup'],True):
            # TODO
            return todo()

        '''whois'''
        # This command reveals the role of a player.
        # To prevent spoilers, the response isn't made in the message's channel, but rather in the bot spam channel.
        if is_command(message,['whois']):
            user_table = check.users(message)
            identities = Mailbox()

            if user_table == False:
                return [Mailbox().respond("**ERROR:** No user provided!")]

            for user in user_table:
                emoji = db_get(user,'emoji')
                role = db_get(user,'role')
                if emoji == None or role == None:
                    identities.spam("**ERROR:** Could not find user <@{}> in database.".format(user))
                else:
                    msg = "{} - <@{}> has the role of the `{}`!".format(emoji,user,role)
                    identities.spam(msg)

            return [identities]

        if is_command(message,['whois'],True):
            msg = "**Usage:** `" + prefix + "whois <user1> <user2> ...`\n\n"
            msg += "Example: `" + prefix + "whois @Randium#6521`\nGame Master only command"
            return [Mailbox().respond(msg,True)]

    # =============================================================
    #
    #                         PARTICIPANTS
    #
    # =============================================================

    if isParticipant(user_id):

        '''add'''
        # This command allows users to add users to a conspiracy.
        # This command will not trigger if the user doesn't own the conspiracy channel.
        if is_command(message,['add']):
            members_to_add = check.users(message)
            if members_to_add == False:
                return [Mailbox().respond("I am sorry! I couldn't find the user you were looking for!",True)]
            if is_owner(user_id,message.channel.id) == False:
                return [Mailbox().respond("I\'m sorry, you can only use this in conspiracy channels where you are the owner!")]
            command = Mailbox()
            for x in members_to_add:
                command.edit_cc(x,channel_id,1)
            return [command.respond("Insert Randium's comment here")]

        if is_command(message,['add'],True):
            # TODO
            return todo()

        '''cc'''
        # This command allows users to create a conspiracy channel.
        if is_command(message, ['cc']):
            if len(message.content.split(' ')) < 2:
                    return [Mailbox().respond("**Invalid syntax:**\n\n`" + prefix + "cc <name> <user1> <user2> <user3> ...`\n\n**Example:** `" + prefix + "cc the_cool_guys @Randium#6521`")]

            channel_members = check.users(message)
            if channel_members == False:
                channel_members = []
            if user_id not in channel_members:
                channel_members.append(user_id)

            num_cc_owned = int(db_get(user_id,'ccs'))

            if num_cc_owned >= max_cc_per_user:
                answer = Mailbox().dm("You have reached the amount of conspiracy channels one may own!", user_id)
                return answer.dm("If you want more conspiracy channels, please request permission from one of the Game Masters.", user_id)

            db_set(user_id,'ccs',number_cc_owned + 1)
            return Mailbox.create_cc(message.content.split(' ')[1], user_id, channel_members)

        if is_command(message,['cc'],True):
            # TODO
            return todo()

        '''info'''
        # This command allows users to view information about a conspiracy channel.
        # Says the user must be in a cc if they're not.
        if is_command(message,['info']):
            guild = message.channel.guild
            try:
                owner_id = channel_get(message.channel.id,'owner')
            except:
                return[Mailbox().respond('Sorry, but it doesn\'t look like you\'re in a CC! If you are, please alert a Game Master as soon as possible.')]
            if owner_id != None:
                owner_object = guild.get_member(int(owner_id))
            embed = Embed(color=0x00cdcd, title='Conspiracy Channel Info')
            if owner_object != None and owner_id != None:
                embed.add_field(name='Channel Owner', value='<@' + owner_id + '>')
                embed.set_thumbnail(url=owner_object.avatar_url)
            elif owner_id == None:
                return [Mailbox().respond('Sorry, but it doesn\'t look like you\'re in a CC! If you are, please alert a Game Master as soon as possible.')]
            else:
                try:
                    owner_name = db_get(owner_id,'name')
                    if str(owner_name) == 'None':
                        owner_name = 'Sorry, an error was encountered. Please alert a Game Master.'
                except:
                    owner_name == 'Sorry, an error was encountered. Please alert a Game Master.'

                embed.add_field(name='Channel Owner', value=owner_name)

            embed.add_field(name='Channel Name', value=message.channel.name)
            embed.add_field(name='Participants', value='[Bob Roberts], [Dummy], [Randium], [BenTechy66], [Ed588]')
            embed.set_footer(text='Conspiracy Channel Information requested by ' + message.author.nick)
            return [Mailbox().embed(embed, message.channel.id)]
        if is_command(message,['info'],True):
            # TODO
            return todo()

        '''myrole'''
        # This command sends the user's role back to them in a DM.
        if is_command(message,['myrole']):
            return [Mailbox().dm("Your role is **{}**.".format(db_get(message.author.id,'role')), message.author.id,False,[db_get(message.author.id,'emoji')])]
        if is_command(message,['myrole'],True):
            # TODO
            return todo()

        '''remove'''
        # This command removes a given user from a conspiracy channel.
        # A user should not get removed if they're the channel owner.
        if is_command(message,['remove']):
            members_to_remove = check.users(message)
            if is_owner(user_id,channel_id) == False:
                return [Mailbox().respond("I\'m sorry, but you cannot use this command over here!")]
            command = Mailbox()
            for x in members_to_remove:
                if is_owner(x,channel_id) == True:
                    return [Mailbox().respond("The owner of a CC can\'t be removed! Please try again.")]
                command.edit_cc(x,channel_id,0)
            return [command.respond("Insert Randium's comment here")]

        if is_command(message,['remove'],True):
            # TODO
            return todo()

        # =======================================================
        #                ROLE SPECIFIC COMMANDS
        # =======================================================
        if personal_channel(user_id,message_channel) == True:

            '''give_amulet'''
            # This command can be executed by everyone, but only in one channel.
            # That's the amulet channel.
            # To be worked out how exactly.
            if is_command(message,['give_amulet']):
                # TODO
                return todo()
            if is_command(message,['give_amulet'],True):
                # TODO
                return todo()

            '''assassinate'''
            # Assassin's command; kill a victim
            if is_command(message,['assassinate','kill']) and user_role == "Assassin":
                # TODO
                return todo()
            if is_command(message,['assassinate','kill'],True) and user_role == "Assassin":
                # TODO
                return todo()

            '''aura'''
            # The command for aura tellers
            if is_command(message,['aura','tell','vision']) and user_role == "Aura Teller":
                # TODO
                return todo()
            if is_command(message,['aura','tell','vision'],True) and user_role == "Aura Teller":
                # TODO
                return todo()

            '''barber_kill'''
            # Barber kill - to assassinate a victim during the day
            if is_command(message,['assassinate','barber_kill','cut']) and user_role == "Barber":
                # TODO
                return todo()
            if is_command(message,['assassinate','barber_kill','cut'],True) and user_role == "Barber":
                # TODO
                return todo()

            '''seek'''
            # Crowd seeker's power
            if is_command(message,['crowd','seek']) and user_role == "Crowd Seeker":
                # TODO
                return todo()
            if is_command(message,['crowd','seek'],True) and user_role == "Crowd Seeker":
                # TODO
                return todo()

            '''kiss'''
            # Cupid's power to fall in love with someone.
            if is_command(message,['kiss','love','shoot']) and user_role == "Cupid":
                # TODO
                return todo()
            if is_command(message,['kiss','love','shoot'],True) and user_role == "Cupid":
                # TODO
                return todo()

            '''follow'''
            # The command that allows the dog to choose a side.
            if is_command(message,['bark','become','choose','follow']) and user_role == "Dog":
                # TODO
                return todo()
            if is_command(message,['bark','become','choose','follow'],True) and user_role == "Dog":
                # TODO
                return todo()

            '''execute'''
            # This command allows the executioner to choose a replacement target.
            if is_command(message,['choose','execute']) and user_role == "Executioner":
                # TODO
                return todo()
            if is_command(message,['choose','execute'],True) and user_role == "Executioner":
                # TODO
                return todo()

            '''undoom'''
            # The Exorcist's command.
            if is_command(message,['exercise','exorcise','undoom']) and user_role == "Exorcist":
                # TODO
                return todo()
            if is_command(message,['exercise','exorcise','undoom'],True) and user_role == "Exorcist":
                # TODO
                return todo()

            '''inspect'''
            # The fortune teller's command.
            if is_command(message,['forsee','inspect','see','tell']) and user_role == "Fortune Teller":
                # TODO
                return todo()
            if is_command(message,['forsee','inspect','see','tell'],True) and user_role == "Fortune Teller":
                # TODO
                return todo()

            '''silence'''
            # Grandma's command.
            if is_command(message,['knit','knot','silence']) and user_role == "Grandma":
                # TODO
                return todo()
            if is_command(message,['knit','knot','silence'],True) and user_role == "Grandma":
                # TODO
                return todo()

            '''hook'''
            # The hooker's command
            if is_command(message,['f**k','hook','sleep']) and user_role == "Hooker":
                # TODO
                return todo()
            if is_command(message,['f**k','hook','sleep'],True) and user_role == "Hooker":
                # TODO
                return todo()

            '''hunt'''
            # The huntress' command. Used to keep track of whom will be shot.
            if is_command(message,['hunt','shoot']) and user_role == "Huntress":
                # TODO
                return todo()
            if is_command(message,['hunt','shoot'],True) and user_role == "Huntress":
                # TODO
                return todo()

            '''unfreeze'''
            # The innkeeper's command
            if is_command(message,['melt','unfreeze']) and user_role == "Innkeeper":
                # TODO
                return todo()
            if is_command(message,['melt','unfreeze'],True) and user_role == "Innkeeper":
                # TODO
                return todo()

            '''copy'''
            # The Look-Alike's command
            if is_command(message,['copy','imitate','mirror','resemble']) and user_role == "Look-Alike":
                # TODO
                return todo()
            if is_command(message,['copy','imitate','mirror','resemble'],True) and user_role == "Look-Alike":
                # TODO
                return todo()

            '''holify'''
            # The Priest's command
            if is_command(message,['holify','sacrify','water']) and user_role == "Priest":
                # TODO
                return todo()
            if is_command(message,['holify','sacrify','water'],True) and user_role == "Priest":
                # TODO
                return todo()

            '''purify'''
            # The Priestess' command
            if is_command(message,['heal','light','purify','sacrify']) and user_role == "Priestess":
                # TODO
                return todo()
            if is_command(message,['heal','light','purify','sacrify'],True) and user_role == "Priestess":
                # TODO
                return todo()

            '''threaten'''
            # The Raven's command
            if is_command(message,['threaten','raven']) and user_role == "Raven":
                # TODO
                return todo()
            if is_command(message,['threaten','raven'],True) and user_role == "Raven":
                # TODO
                return todo()

            '''reveal'''
            # The Royal Knight's command
            if is_command(message,['end','prevent','reveal','stop']) and user_role == "Royal Knight":
                # TODO
                return todo()
            if is_command(message,['end','prevent','reveal','stop'],True) and user_role == "Royal Knight":
                # TODO
                return todo()

            '''life'''
            # The witch' command to use her life potion
            if is_command(message,['heal','life','save']) and user_role == "Witch":
                # TODO
                return todo()
            if is_command(message,['heal','life','save'],True) and user_role == "Witch":
                # TODO
                return todo()

            '''death'''
            # The witch' command to use her death potion
            if is_command(message,['death','kill','murder','poison']) and user_role == "Witch":
                # TODO
                return todo()
            if is_command(message,['death','kill','murder','poison'],True) and user_role == "Witch":
                # TODO
                return todo()

            '''çurse'''
            # The curse caster's command
            if is_command(message,['cast','corrupt','curse']) and user_role == "Curse Caster":
                # TODO
                return todo()
            if is_command(message,['cast','corrupt','curse'],True) and user_role == "Curse Caster":
                # TODO
                return todo()

            '''infect'''
            # The infected wolf's command
            if is_command(message,['cough','infect','sneeze','turn']) and user_role == "Infected Wolf":
                # TODO
                return todo()
            if is_command(message,['cough','infect','sneeze','turn'],True) and user_role == "Infected Wolf":
                # TODO
                return todo()

            '''devour'''
            # The Lone wolf's command
            if is_command(message,['chew','devour','eat','kill','munch']) and user_role == "Lone Wolf":
                # TODO
                return todo()
            if is_command(message,['chew','devour','eat','kill','munch'],True) and user_role == "Lone Wolf":
                # TODO
                return todo()

            '''disguise'''
            # The tanner's command
            if is_command(message,['change','cloth','disguise','hide']) and user_role == "Tanner":
                # TODO
                return todo()
            if is_command(message,['change','cloth','disguise','hide'],True) and user_role == "Tanner":
                # TODO
                return todo()

            '''inspect'''
            # The Warlock's command
            if is_command(message,['forsee','inspect','see','tell']) and user_role == "Priestess":
                # TODO
                return todo()
            if is_command(message,['forsee','inspect','see','tell'],True) and user_role == "Priestess":
                # TODO
                return todo()

            '''devour'''
            # The white werewolf's command
            if is_command(message,['chew','devour','eat','kill','munch']) and user_role == "White Werewolf":
                # TODO
                return todo()
            if is_command(message,['chew','devour','eat','kill','munch'],True) and user_role == "White Werewolf":
                # TODO
                return todo()

            '''wager'''
            # The devil's command
            if is_command(message,['choose','wager']) and user_role == "Devil":
                # TODO
                return todo()
            if is_command(message,['choose','wager'],True) and user_role == "Devil":
                # TODO
                return todo()

            '''enchant'''
            # The flute player's command
            if is_command(message,['enchant','flute']) and user_role == "Flute Player":
                # TODO
                return todo()
            if is_command(message,['enchant','flute'],True) and user_role == "Flute Player":
                # TODO
                return todo()

            '''unite'''
            # The horseman's command
            if is_command(message,['apocalypse','clean','unite']) and user_role == "Horseman":
                # TODO
                return todo()
            if is_command(message,['apocalypse','clean','unite'],True) and user_role == "Horseman":
                # TODO
                return todo()

            '''guess'''
            # The ice king's command to add a guess about a user to their list.
            # Note that this command could/should be usable at any time, as long as the submit command isn't
            if is_command(message,['add','guess','freeze']) and user_role == "Ice King":
                # TODO
                return todo()
            if is_command(message,['add','guess','freeze'],True) and user_role == "Ice King":
                # TODO
                return todo()

            '''submit'''
            # The ice king's command to submit the list of people of whom they have guessed their roles.
            if is_command(message,['guess_that','freeze_all','submit']) and user_role == "Ice King":
                # TODO
                return todo()
            if is_command(message,['guess_that','freeze_all','submit'],True) and user_role == "Ice King":
                # TODO
                return todo()

            '''powder'''
            # Powder a player
            if is_command(message,['creeper','powder']) and user_role == "Pyromancer":
                # TODO
                return todo()
            if is_command(message,['creeper','powder'],True) and user_role == "Pyromancer":
                # TODO
                return todo()

            '''abduct'''
            # To kidnap players
            if is_command(message,['abduct','add','kidnap','swamp']) and user_role == "The Thing":
                # TODO
                return todo()
            if is_command(message,['abduct','add','kidnap','swamp'],True) and user_role == "The Thing":
                # TODO
                return todo()

            '''create_swamp'''
            # To create a new swamp with all victims
            if is_command(message,['abduct_all','create_swamp','start_cliche_horror_movie']) and user_role == "The Thing":
                # TODO
                return todo()
            if is_command(message,['abduct_all','create_swamp','start_cliche_horror_movie'],True) and user_role == "The Thing":
                # TODO
                return todo()

    # =============================================================
    #
    #                         EVERYONE
    #
    # =============================================================

    '''age'''
    # Allows users to set their age.
    if is_command(message,['age']):
        # TODO
        return todo()
    if is_command(message,['age'],True):
        # TODO
        return todo()

    '''profile'''
    # This command allows one to view their own profile
    # When giving another player's name, view that player's profile
    if is_command(message,['profile']):
        # TODO
        return todo()
    if is_command(message,['profile'],True):
        # TODO
        return todo()

    '''signup'''
    # This command signs up the player with their given emoji, assuming there is no game going on.
    if is_command(message,['signup']):
        emojis = check.emojis(message)
        choice_emoji = ""

        if emojis == False:
            msg = "**Incorrect syntax:** `" + prefix + "signup <emoji>`\n\nExample: `" + prefix + "signup :smirk:`"
            return [Mailbox().respond(msg,True)]

        for emoji in emojis:
            if emoji_to_player(emoji) == None:
                choice_emoji = emoji
                break

        if isParticipant(user_id,True,True):
            if choice_emoji == "":
               return [Mailbox().respond("You are already signed up with the {} emoji! Also, your emoji was occupied.".format(db_get(user_id,'emoji')),True)]
            db_set(user_id,'emoji',choice_emoji)
            reaction = Mailbox().respond("You have successfully changed your emoji to the {} emoji!".format(choice_emoji))
            return [reaction.spam("<@{}> has changed their emoji to the {} emoji.".format(user_id,choice_emoji))]

        if emoji == "":
            if len(choice_emojis) == 1:
                return [Mailbox().respond("I am sorry! Your chosen emoji was already occupied.",True)]
            return [Mailbox().respond("I am sorry, but all of your given emojis were already occupied! Such bad luck.",True)]
        signup(user_id,message.author.name,choice_emoji)
        reaction = Mailbox().respond("You have successfully signed up with the {} emoji!".format(choice_emoji))
        return [reaction.spam("<@{}> has signed up with the {} emoji.".format(user_id,choice_emoji))]
    # Help command
    if is_command(message,['signup'],True):
        msg = "**Usage:** `" + prefix + "signup <emoji>`\n\nExample: `" + prefix + "signup :smirk:`"
        return [Mailbox().respond(msg,True)]

    if message.content.startswith(prefix):
        return [Mailbox().respond("Sorry bud, couldn't find what you were looking for.",True)]

    return []
Beispiel #5
0
def take_shot(message):
    global deadies
    global winners
    global challenger
    global acceptant
    global game_channel
    global bullet_number
    global bullet
    global timeout
    global rigged

    user = message.author
    channel = message.channel

    # Start a game.
    if challenger == None:
        for deadie in deadies:
            if deadie.user == user:
                return Mailbox().respond(
                    "Sorry, bud. Ya can't play if you're dead.", True)
        challenger = user
        game_channel = channel
        timeout = time.time()
        return Mailbox().respond(
            "<@{}> has grabbed the pistol and loaded a bullet in it! Who wants to play a dangerous game?"
            .format(user.id))

    # Redirect wrong channel
    if game_channel != channel:
        return Mailbox().respond(
            "I'm sorry! There's currently a game going on in <#{}>, go check it out!"
            .format(game_channel.id), True)

    # Do not play game with yourself
    if acceptant == None and user == challenger:
        return Mailbox().respond(
            "Not so fast! Wait for someone to accept your challenge!")

    # Accept a challenged game
    if acceptant == None and user != challenger:
        for deadie in deadies:
            if deadie.user == user:
                return Mailbox().respond(
                    "Sorry, bud. Ya can't play if you're dead.", True)
        acceptant = user
        timeout = time.time()
        bullet = random.randint(1, 6)
        bullet_number = 0
        return Mailbox().respond(
            "You take the pistol, give it a turn, then hand the pistol over to <@{}>! They will start!"
            .format(challenger.id))

    # Ignore non-participating players
    if user not in [challenger, acceptant]:
        for deadie in deadies:
            if deadie.user == user:
                return Mailbox().respond(
                    "You attempted to grab the pistol, but then you realised you were already dead!",
                    True)
        return Mailbox().respond(
            "The pistol was out of your reach. You failed to grab it.", True)

    # Hold the other from shooting twice.
    if user == acceptant:
        return Mailbox().respond(
            "It\'s not your turn! Wait for <@{}> to finish.".format(
                challenger.id))

    # Let the user shoot
    if user == challenger:
        bullet_number += 1
        if bullet == bullet_number:
            user = None
            victim = None

            for player in winners:
                if player.user == acceptant:
                    user = player
                if player.user == challenger:
                    victim = player
                    winners.remove(victim)

            if victim == None:
                victim = Ruser(challenger)
            if user == None:
                user = Ruser(acceptant)
                winners.append(user)

            if random.random() < 0.9 and not rigged:
                user.kill(victim)
                deadies.append(victim)

                answer = Mailbox().respond(
                    "You pull the trigger, and your brains get splattered all over the place.",
                    False, ['💀'])
                answer.respond("**{} WINS!**".format(user.user.display_name))
            else:
                rigged = False
                answer = Mailbox().respond(
                    "As you pull the trigger, you hear a **BANG**! But you only feel an empty shelf bop against your head."
                )
                answer.respond("Erm... that's awkward.")

            challenger = None
            acceptant = None
            game_channel = None

            bullet_number = 0
            bullet = 0
            timeout = 0

            return answer

        switch = challenger
        challenger = acceptant
        acceptant = switch
        timeout = time.time()
        return Mailbox().respond(
            "You pull the trigger, and you hear a small **CLICK!** It's <@{}>'s turn now."
            .format(challenger.id))

    return Mailbox().spam(
        "I got a strange event during the Russian Roulette! Can somebody check this out?"
    ).respond(
        "**ERROR:** Invalid if-statwments. Please report this to the Game Masters!"
    )
Beispiel #6
0
def surrender(need_for_check=True, user=None):
    global deadies
    global winners
    global challenger
    global acceptant
    global game_channel
    global bullet_number
    global bullet
    global timeout

    if need_for_check:
        if time.time() - timeout < 600:
            return Mailbox()

    if challenger == None:
        return Mailbox()

    if user != None and user != challenger:
        return Mailbox()

    if acceptant == None:
        if user == None:
            if time.time() - timeout > 600:
                answer = Mailbox().msg(
                    "It has taken too long for anyone to accept your challenge, <@{}>! If you're still here, please rejoin the challenge."
                    .format(challenger.id), game_channel.id)
                challenger = None
                game_channel = None
                return answer
            return Mailbox()
        game_channel = None
        challenger = None
        game_channel = None
        return Mailbox().respond(
            "<@{}> fired the round in the air, and put down the gun. Let's play this game later!"
            .format(user.id))

    print('Game reset!')

    # Reset the game
    user = None
    victim = None

    for player in winners:
        if player.user == acceptant:
            user = player
        if player.user == challenger:
            victim = player

    if victim == None:
        victim = Ruser(challenger)
        winners.append(victim)
    if user == None:
        user = Ruser(acceptant)
        winners.append(user)

    update_roulette_score(user.user.id, len(user))
    update_roulette_score(victim.user.id, len(victim))

    answer = Mailbox().respond(
        "It seems like <@{}> has chickened out! Boo!".format(victim.user.id),
        False, ['🍅'])
    answer.respond("**<@{}> WINS!**".format(user.user.id))

    challenger = None
    acceptant = None
    game_channel = None

    bullet_number = 0
    bullet = 0
    timeout = 0

    return answer
Beispiel #7
0
def process(message, isGameMaster=False, isAdmin=False, isPeasant=False):
    user_id = message.author.id
    message_channel = message.channel.id

    help_msg = "**List of commands:**\n"

    args = message.content.split(' ')

    # =============================================================
    #
    #                         BOT COMMANDS
    #
    # =============================================================
    if isPeasant == True:
        pass

    # =============================================================
    #
    #                         ADMINISTRATOR
    #
    # =============================================================
    if isAdmin == True:
        help_msg += "\n __Admin commands:__\n"

    elif is_command(message, ['delete_category','start']):
        return [Mailbox().respond(PERMISSION_MSG.format("Administrator"), True)]


    # =============================================================
    #
    #                         GAME MASTERS
    #
    # =============================================================
    if isGameMaster == True:
        help_msg += "\n__Game Master commands:__\n"

        if is_command(message, ['userinv','userinventory']):
            target = check.users(message)
            if not target:
                return [Mailbox().respond("**INVALID SYNTAX:**\nNo target provided!",True)]

            answer = Mailbox().spam("**__<@{}>'S BALANCE__**".format(target[0]))

            for item in items.jget("items"):
                if has_item(target[0],item["code"]):
                    answer.spam_add('\n{}x - **'.format(has_item(target[0],item["code"],False)) + item["name"] + '**')
            return [answer]
        if is_command(message, ['userinv','userinventory'], True):
            return todo()
        help_msg += "`" + prefix + "userinv` - View a user's inventory.\n"

    elif is_command(message, []):
        return [Mailbox().respond(PERMISSION_MSG.format("Game Master"), True)]

    # =============================================================
    #
    #                         PARTICIPANTS
    #
    # =============================================================

    if isParticipant(user_id):
        help_msg += "\n__Participant commands:__\n"

        user_undead = int(db_get(user_id,'undead'))

    elif is_command(message, []):
        return [Mailbox().respond(PERMISSION_MSG.format("Participant"), True)]


    # =============================================================
    #
    #                         EVERYONE
    #
    # =============================================================

    help_msg += '\n\n'

    '''buy'''
    if is_command(message, ['buy']):
        number = check.numbers(message)
        if not number:
            return [Mailbox().dm("No amount provided! Please provide me with a number!",True)]
        answer = [Mailbox().dm(shop.buy(user_id,number[0],message.author.name),user_id)]
    if is_command(message, ['buy'], True):
        msg = "**Usage:** Buy an item from the shop.\n\n`" + prefix + "buy <n>`\n\n"
        msg += "**Example:** `" + prefix + "buy 1`"
        return [Mailbox().respond(msg,True)]
    help_msg += "`" + prefix + "buy` - Buy item from the shop.\n"

    '''inventory'''
    if is_command(message, ['inv','inventory','bal','balance']):
        answer = Mailbox().dm("**__YOUR CURRENT BALANCE__**",user_id)
        for item in items.jget("items"):
            if has_item(user_id,item["code"]):
                answer.dm_add('\n{}x - **'.format(has_item(user_id,item["code"],False)) + item["name"] + '**')
        return [answer]
    if is_command(message, ['inv','inventory','bal','balance'], True):
        return todo()
    help_msg += "`" + prefix + "inventory` - View your inventory.\n"

    '''sell'''
    if is_command(message, ['sell']):
        number = check.numbers(message)
        if not number:
            return [Mailbox().dm("No amount provided! Please provide me with a number!",True)]
        answer = [Mailbox().dm(shop.sell(user_id,number[0],message.author.name),user_id)]
    if is_command(message, ['sell'], True):
        msg = "**Usage:** Sell an item from the shop.\n\n`" + prefix + "sell <n>`\n\n"
        msg += "**Example:** `" + prefix + "sell 1`"
        return [Mailbox().respond(msg,True)]
    help_msg += "`" + prefix + "sell` - Buy item from the shop.\n"

    '''shop'''
    if is_command(message, ['shop']):
        answer = Mailbox()

        for msg in shop.get_market_message():
            answer.respond(msg,True)
        
        return answer
    if is_command(message, ['shop']):
        msg = "**Usage:** View the Devil Bot's shop.\n\n`" + prefix + "shop`"
        return [Mailbox().respond(msg,True)]
    help_msg += "`" + prefix + "shop` - View the Devil's shop."

    help_msg += "\n\n__Item specific commands:__"

    '''attack'''
    if is_command(message, ['attack', 'dagger', 'kill']):
        pass # TODO

    '''disguise'''
    if is_command(message,['disguise','dis']):
        return [use_item(103,message)]
    if is_command(message,['disguise','dis'],True):
        msg = "**Usage:** Disguise a participant.\n\n`" + prefix + "disguise @Randium#6521 Innocent`\n\n"
        msg += "This command can only be used by participants. You can disguise yourself."
        return [Mailbox().respond(msg,True)]
    help_msg += "`" + prefix + "disguise` - Disguise a participant.\n"

    '''hide'''
    if is_command(message,['hide']):
        return [use_item(100,message)]
    if is_command(message,['disguise','dis'],True):
        msg = "**Usage:** Disguise a participant.\n\n`" + prefix + "disguise @Randium#6521 Innocent`\n\n"
        msg += "This command can only be used by participants. You can disguise yourself."
        return [Mailbox().respond(msg,True)]
    help_msg += "`" + prefix + "hide` - Become invisible for the night.\n"

    # --------------------------------------------------------------
    #                          HELP
    # --------------------------------------------------------------
    help_msg += "\n\n*If you have any more questions, feel free to ask any of the Game Masters!*"

    '''help'''
    if is_command(message,['help']) and is_command(message,['help'],True) == False:
        return [Mailbox().respond(help_msg,True)]
    if is_command(message,['help'],True):
        answer = Mailbox().respond("Hey there! `" + prefix + "help` will give you a list of commands that you can use.")
        answer.respond_add("\nIf you have any questions, feel free to ask any of the Game Masters!")
        return [answer]

    if message.content.startswith(prefix):
        return [Mailbox().respond("Sorry bud, couldn't find what you were looking for.", True)]

    return []