diff --git a/fouras.py b/fouras.py index d2ab75a..bec9a9d 100644 --- a/fouras.py +++ b/fouras.py @@ -23,7 +23,7 @@ client.riddles = [] client.answers = [] client.rhyme_keys = {} client.rhyme_strings = {} -client.cooldown = 0 +client.cooldown = {} client.ongoing_riddles = {} def load_riddles(): @@ -106,11 +106,11 @@ def format_message(current_riddle): else: return "Énigme {0}:\n{1}".format(current_riddle['index'] + 1, formatted_riddle) -def get_last_word(ch:str)->str: - truncated = ch.split(None)[-1] +def get_last_word(ch:str)->str: + truncated = ch while True: - if len(truncated) == 1 or truncated[-1].isnumeric(): - return False + if len(truncated) < 2 or truncated[-1].isnumeric(): + return '' if truncated[-1].isalpha() and truncated[-2].isalpha(): break truncated = truncated[:-1] @@ -122,6 +122,14 @@ def poil_auquel(ch:str)->str: return random.choice(client.rhyme_strings[key]) return '' +async def channel_name(channel): + if isinstance(channel, discord.DMChannel): + dm_channel = await client.fetch_channel(channel.id) + return '[DM={0}]'.format(dm_channel.recipient.name) + else: + return '[Server={0}] => [Channel={1}]'.format(channel.guild.name, channel.name) + + @client.event async def on_ready(): load_riddles() @@ -173,16 +181,15 @@ async def on_message(message): if message_content == 'debug fouras': dump = {} - dump['poil_au_cooldown'] = client.cooldown - time.time() + cooldowns = {} + for key, value in client.cooldown.items(): + cooldowns[channel_name(key)] = value - time.time() + dump['poil_au_cooldown'] = client.cooldown for key, value in client.ongoing_riddles.items(): dump_channel = value dump_channel.pop("message", None) dump_channel['answer'] = '||{0}||'.format(dump_channel['answer']) - if isinstance(key, discord.DMChannel): - dm_channel = await client.fetch_channel(key.id) - dump['[DM={0}]'.format(dm_channel.recipient.name)] = dump_channel - else: - dump['[Server={0}] => [Channel={1}]'.format(key.guild.name, key.name)] = dump_channel + dump[channel_name(key)] = dump_channel await message.author.send(json.dumps(dump, ensure_ascii=False, indent=4)) return @@ -221,12 +228,15 @@ async def on_message(message): last_word = get_last_word(message_content) if last_word: - poil = poil_auquel(message_content) - if poil and time.time() - client.cooldown > 0: + poil = poil_auquel(last_word) + cooldown = 0 + if message.channel in client.cooldown: + cooldown = client.cooldown[message.channel] + if poil and time.time() - cooldown > 0: wait_time = random.randint(0, 900) if bool(random.getrandbits(1)): wait_time = random.randint(900, 10800) - client.cooldown = time.time() + wait_time + client.cooldown[message.channel] = time.time() + wait_time await message.channel.send(poil) return