added "poil au" feature

This commit is contained in:
Anselme François 2023-06-16 12:23:11 +00:00
parent 7e83820ed0
commit 28be8ea7d5
2 changed files with 118 additions and 4 deletions

View File

@ -1,12 +1,13 @@
import discord
from discord.ext import tasks
from datetime import datetime, timedelta, timezone
from dotenv import load_dotenv
import discord
import os
import asyncio
from datetime import datetime, timedelta, timezone
import random
from dotenv import load_dotenv
import re
import json
import time
intents = discord.Intents.default()
intents.members = True
@ -20,6 +21,9 @@ token = os.getenv('DISCORD_TOKEN', "NO_TOKEN")
client.riddles = []
client.answers = []
client.rhyme_keys = {}
client.rhyme_strings = {}
client.cooldown = 0
client.ongoing_riddles = {}
def load_riddles():
@ -29,6 +33,30 @@ def load_riddles():
client.answers = [line.strip() for line in a_file.readlines()]
print('Loaded {0} riddles'.format(len(client.riddles)))
def load_rhymes():
with open('rhymes.txt', 'r', encoding='utf-8') as f:
data = f.read()
keys_start = data.index('[KEYS]') + len('[KEYS]\n')
keys_end = data.index('[RHYMES]')
keys_data = data[keys_start:keys_end].split('\n')
keys = {}
for key_data in keys_data:
if key_data:
k, v = key_data.split(":")
keys[k] = v.split(',')
rhymes_start = data.index('[RHYMES]') + len('[RHYMES]\n')
rhymes_data = data[rhymes_start:].split('\n')
rhymes = {}
for rhyme_data in rhymes_data:
if rhyme_data:
k, v = rhyme_data.split(":")
rhymes[k] = v.split(',')
client.rhyme_keys = keys
client.rhyme_strings = rhymes
def new_riddle(channel, index):
current_riddle = dict(index=index, nbClues=-1, riddle=client.riddles[index].strip(), answer=client.answers[index])
client.ongoing_riddles[channel] = current_riddle
@ -78,9 +106,26 @@ 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]
while True:
if len(truncated) == 1 or truncated[-1].isnumeric():
return False
if truncated[-1].isalpha() and truncated[-2].isalpha():
break
truncated = truncated[:-1]
return truncated
def poil_auquel(ch:str)->str:
for key in client.rhyme_keys:
if ch.endswith(tuple(client.rhyme_keys[key])):
return random.choice(client.rhyme_strings[key])
return ''
@client.event
async def on_ready():
load_riddles()
load_rhymes()
print('Logged in as {0.user}'.format(client))
@client.event
@ -121,8 +166,14 @@ async def on_message(message):
await message.channel.send('Loaded {0} riddles'.format(len(client.riddles)))
return
if message_content == 'debug':
if message_content == 'about fouras':
author_user = await client.fetch_user(151626081458192384)
await message.channel.send(f"Ce bot a été développé par {author_user.mention}\nCode Source : https://gitlab.epicsparrow.com/Anselme/perefouras\nAjouter ce bot à votre serveur : https://discord.com/api/oauth2/authorize?client_id=1110208055171367014&permissions=274877975552&scope=bot")
return
if message_content == 'debug fouras':
dump = {}
dump['poil_au_cooldown'] = client.cooldown - time.time()
for key, value in client.ongoing_riddles.items():
dump_channel = value
dump_channel.pop("message", None)
@ -167,6 +218,17 @@ async def on_message(message):
if nbClues >= len(answer):
finish_riddle(message.channel)
return
last_word = get_last_word(message_content)
if last_word:
poil = poil_auquel(message_content)
if poil and time.time() - client.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
await message.channel.send(poil)
return
# Initialise le client
client.run(token)

52
rhymes.txt Normal file
View File

@ -0,0 +1,52 @@
[KEYS]
E:eu,eux
OUS:ous,ousse,ouce,ousses,ouces
US:us,+
OU:ou,où,oo
O:au,aux,o,os,oh,ho
OL:ol,ols,ole,oles,olle,ollesaul,auls
OUL:oule,oules,oul,ouls
ULVE:ulve,ulves
OR:or,ors,ore,ores,aur,aurs
IER:ier,iers,ierre,ierres,ayé
IEN:ien,iens,ient
ET:et,é,er,è,ait,ais,ai,ez,ied,ieds
OI:oi,oie,ois,oit,oa
AN:an,ant,ants,en,ment,ments
ESSE:esse,esses,aisse,aisses
EL:el,els,elle,elles,aile,ailes
ACHE:ache,ach,ash
IN:in
TON:ton,tons,thons,thons
ON:on,ont,onts,ons,ond,onds
OUILLE:ouille
ATTE:atte,ate,ates,attes,âte,âtes,blyat
A:a,à,ah,ha
I:i,is,it
U:u,hu,uh
[RHYMES]
A:Poil au bras.
E:Poil aux cheveux.
I:Poil à la vessie.,Poil au zizi.
O:Poil au dos.
U:Poil au cul.
US:Poil à l'anus.
ET:Poil au nez.,Poil aux pieds.
IER:Poil au derrière.
IEN:Poil de chien.
ACHE:Poil de moustache.
OU:Poil au cou.,Poil au genou.
ULVE:Poil à la vulve.
OL:Poil aux guiboles.
OUL:Poil à la moule.,Poil aux boules.
OR:Poil au corps.
IN:Poil aux mains.
TON:Poil au menton.
ON:Poil au fion.
OI:Poil aux doigts.
AN:Poil aux dents.
OUILLE:Poil aux couilles.
OUS:Poil au pouce.
ATTE:Poil à la chatte.
ESSE:Poil aux fesses.
EL:Poil aux aisselles.