示例#1
0
 def _do_execute(self, command):
     if len(command.args) == 0:
         seed = seedgen.get_new_seed()
         yield from self._sm.client.send_message(command.channel, 'Seed generated for {0}: {1}'.format(command.author.mention, seed))
     elif len(command.args) == 1:
         try:
             num_seeds = max(0, min(MAX_NUM_SEEDS_TO_GENERATE, int(command.args[0])))
             seedstr = ''
             for i in range(num_seeds):
                 seedstr += '{}, '.format(seedgen.get_new_seed())
             if seedstr:
                 yield from self._sm.client.send_message(command.author, 'Generated {0} seeds: {1}.'.format(num_seeds, seedstr[:-2]))
         except ValueError:
             pass
示例#2
0
 def _do_execute(self, command):
     if self._room.is_race_admin(command.author):
         if self._room.race.race_info.seeded and not self._room.race.race_info.seed_fixed:
             self._room.race.race_info.seed = seedgen.get_new_seed()
             yield from self._room.write('Changed seed to {}.'.format(self._room.race.race_info.seed))
             yield from self._room.update_leaderboard()
         else:
             yield from self._room.write('Cannot reseed this race; it is not a randomly seeded race. Use `.changerules -s` to change this.')
示例#3
0
    def race_channel_command(self, room_channel, message):
        args = message.content.split()
        command = args.pop(0).replace(config.BOT_COMMAND_PREFIX, '', 1)

        read_permit = discord.Permissions.none()
        read_permit.read_messages = True

        #.add : Add users
        if command == 'add':
            mentioned_user = False
            for member in message.mentions:
                asyncio.ensure_future(self._client.edit_channel_permissions(room_channel, member, allow=read_permit))
                mentioned_user = True

            if not mentioned_user:
                not_found = ''
                for username in args:
                    found_user = False
                    for member in self._server.members:
                        if member.name == username:
                            asyncio.ensure_future(self._client.edit_channel_permissions(room_channel, member, allow=read_permit))
                            found_user = True
                    if not found_user:
                        not_found += username + ' '

                if not_found:
                    yield from self._write(room_channel, "Couldn't find users: {}".format(not_found))

        #.cleanup : Delete this room
        elif command == 'cleanup':
            room_list = [room for room in self._room_list if room != room_channel]
            asyncio.ensure_future(self._client.delete_channel(room_channel))

        #.randomseed : Generate a new random seed
        elif command == 'randomseed':
            seed = seedgen.get_new_seed()
            yield from self._write(message.channel, 'Seed generated: {1}'.format(message.author.mention, seed))   

        #.remove : Remove users
        elif command == 'remove':
            mentioned_user = False
            for member in message.mentions:
                asyncio.ensure_future(self._client.edit_channel_permissions(room_channel, member, deny=read_permit))
                mentioned_user = True

            if not mentioned_user:
                not_found = ''
                for username in args:
                    found_user = False
                    for member in self._server.members:
                        if member.name == username:
                            asyncio.ensure_future(self._client.edit_channel_permissions(room_channel, member, deny=read_permit))
                            found_user = True
                    if not found_user:
                        not_found += username + ' '

                if not_found:
                    self._write(room_channel, "Couldn't find users: {}".format(not_found))
示例#4
0
def parse_args_modify(args, race_info):
    set_seed = False    #keep track of whether we've found args for each field
    set_seeded = False  
    set_char = False
    set_desc = False
    set_sd = False
    set_fp = False

    while args:
        next_cmd_args = clparse.pop_command(args)
        if not next_cmd_args:
            next_cmd_args.append(args[0])
            args.pop(0)
            
        if _parse_seed(next_cmd_args, race_info):
            if set_seed:
                return None
            else:
                set_seed = True
        elif _parse_seeded(next_cmd_args, race_info):
            if set_seeded:
                return None
            else:
                set_seeded = True
        elif _parse_char(next_cmd_args, race_info):
            if set_char:
                return None
            else:
                set_char = True
##        elif parse_sudden_death(args, race_info):
##            if set_sd:
##                return False
##            else:
##                set_seeded = True
##        elif parse_flagplant(args, race_info):
##            if set_fp:
##                return False
##            else:
##                set_seeded = True
        elif _parse_desc(next_cmd_args, race_info):
            if set_desc:
                return None
            else:
                set_desc = True
        else:
            return None

    if race_info.seeded:
        race_info.seed_fixed = set_seed
        if not set_seed:
            race_info.seed = seedgen.get_new_seed()
    elif set_seed and set_seeded: #user set a seed and asked for unseeded, so throw up our hands
        return None
    elif set_seed:
        race_info.seeded = True

    return race_info    
示例#5
0
 def get_new_raceinfo():
     to_return = RaceInfo()
     to_return.seed_fixed = False
     to_return.seeded = True
     to_return.character = 'Cadence'
     to_return.descriptor = 'Condor Race'
     to_return.sudden_death = False
     to_return.flagplant = False
     to_return.seed = seedgen.get_new_seed()
     return to_return
示例#6
0
 def get_new_raceinfo():
     to_return = RaceInfo()
     to_return.seed_fixed = False
     to_return.seeded = True
     to_return.character = 'Cadence'
     to_return.descriptor = 'Condor Race'
     to_return.sudden_death = False
     to_return.flagplant = False
     to_return.seed = seedgen.get_new_seed()
     return to_return
示例#7
0
 def copy(self):
     the_copy = RaceInfo()
     the_copy.seed = self.seed if self.seed_fixed else seedgen.get_new_seed()
     the_copy.seed_fixed = self.seed_fixed
     the_copy.seeded = self.seeded
     the_copy.character = self.character
     the_copy.descriptor = self.descriptor
     the_copy.sudden_death = self.sudden_death
     the_copy.flagplant = self.flagplant
     return the_copy
示例#8
0
文件: daily.py 项目: incnone/necrobot
    def get_seed(self, daily_number):
        params = (daily_number, self._type.id)

        for row in self.necrodb.get_daily_seed(params):
            return row[0]

        #if we made it here, there was no entry in the table, so make one
        today_seed = seedgen.get_new_seed()
        values = (daily_number, self._type.id, today_seed, 0,)
        self.necrodb.create_daily(values)
        return today_seed
示例#9
0
文件: daily.py 项目: incnone/necrobot
    def register_message(self, daily_number, message_id):
        params = (daily_number, self._type.id)
        for row in self.necrodb.get_daily_seed(params):
            #if here, there was an entry in the table, so we will update it
            values = (message_id, daily_number, self._type.id)
            self.necrodb.update_daily(values)
            return

        #else, there was no entry, so make one
        today_seed = seedgen.get_new_seed()
        values = (daily_number, self._type.id, today_seed, message_id,)
        self.necrodb.create_daily(values)
示例#10
0
    def register_message(self, daily_number, message_id):
        param = (daily_number, self._type.id)
        for row in self._db_conn.execute("SELECT seed FROM daily_data WHERE daily_id=? AND type=?", param):
            #if here, there was an entry in the table, so we will update it
            values = (message_id, daily_number, self._type.id)
            self._db_conn.execute("UPDATE daily_data SET msg_id=? WHERE daily_id=? AND type=?", values)
            self._db_conn.commit()
            return

        #else, there was no entry, so make one
        today_seed = seedgen.get_new_seed()
        values = (daily_number, self._type.id, today_seed, message_id,)
        self._db_conn.execute("INSERT INTO daily_data (daily_id, type, seed, msg_id) VALUES (?,?,?,?)", values)
        self._db_conn.commit()
示例#11
0
    def get_seed(self, daily_number):
        db_cursor = self._db_conn.cursor()
        param = (daily_number, self._type.id)
        db_cursor.execute("SELECT seed FROM daily_data WHERE daily_id=? AND type=?", param)

        for row in db_cursor:
            return row[0]

        #if we made it here, there was no entry in the table, so make one
        today_seed = seedgen.get_new_seed()
        values = (daily_number, self._type.id, today_seed, 0,)
        db_cursor.execute("INSERT INTO daily_data (daily_id, type, seed, msg_id) VALUES (?,?,?,?)", values)
        self._db_conn.commit()
        return today_seed
示例#12
0
    def main_channel_command(self, message):
        args = message.content.split()
        command = args.pop(0).replace(config.BOT_COMMAND_PREFIX, '', 1)

        #.help : Quick help reference
        if command == 'help':
            bot_cmd_str = 'In this channel only:\n'
            yield from self._write_now(message.channel, bot_cmd_str + HELP_BOTCOMMANDS)
            race_chnl_str = 'In race channels only:\n'
            yield from self._write_now(message.channel, race_chnl_str + HELP_RACE_CHANNELS)

        #.make : Create race room
        elif command == 'make':
            yield from self.make_room()
            
        #.randomseed : Generate a new random seed
        elif command == 'randomseed':
            seed = seedgen.get_new_seed()
            yield from self._write(message.channel, 'Seed generated: {1}'.format(message.author.mention, seed))       

        elif command == 'info':
            yield from self._write(message.channel, CffdBot.infostr())