Fouras "poilau" feature is now less frequent, and more accurate
This commit is contained in:
parent
e75ee8d7cc
commit
4558fb2e1d
@ -15,6 +15,10 @@ class BaseModule:
|
|||||||
async def handle_message(self, message):
|
async def handle_message(self, message):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
async def get_guild_name(self, guildId) -> str:
|
||||||
|
guild = await self._client.fetch_guild(guildId)
|
||||||
|
return "[Server={0}]".format(guild.name)
|
||||||
|
|
||||||
async def get_channel_name(self, channel) -> str:
|
async def get_channel_name(self, channel) -> str:
|
||||||
if isinstance(channel, discord.DMChannel):
|
if isinstance(channel, discord.DMChannel):
|
||||||
dm_channel = await self._client.fetch_channel(channel.id)
|
dm_channel = await self._client.fetch_channel(channel.id)
|
||||||
|
@ -3,6 +3,7 @@ import random
|
|||||||
import re
|
import re
|
||||||
import json
|
import json
|
||||||
from unidecode import unidecode
|
from unidecode import unidecode
|
||||||
|
import appdirs
|
||||||
|
|
||||||
API_URL = "".join(
|
API_URL = "".join(
|
||||||
[
|
[
|
||||||
@ -32,12 +33,15 @@ INVALID_ID = """
|
|||||||
Numéro d'énigme invalide, merci de saisir un numéro entre 1 et {len}
|
Numéro d'énigme invalide, merci de saisir un numéro entre 1 et {len}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
RIDDLES_FILE = "riddles.txt"
|
||||||
|
ANSWERS_FILE = "answers.txt"
|
||||||
|
SAVE_FILE = appdirs.user_data_dir() + "/fouras_riddles.json"
|
||||||
|
|
||||||
class FourasModule(BaseModule):
|
class FourasModule(BaseModule):
|
||||||
def load(self):
|
def load(self):
|
||||||
with open("riddles.txt", "r", encoding=ENCODING) as r_file:
|
with open(RIDDLES_FILE, "r", encoding=ENCODING) as r_file:
|
||||||
self._client.riddles = r_file.read().split("\n\n")
|
self._client.riddles = r_file.read().split("\n\n")
|
||||||
with open("answers.txt", "r", encoding=ENCODING) as a_file:
|
with open(ANSWERS_FILE, "r", encoding=ENCODING) as a_file:
|
||||||
self._client.answers = [line.strip() for line in a_file.readlines()]
|
self._client.answers = [line.strip() for line in a_file.readlines()]
|
||||||
print(f"Loaded {len(self._client.riddles)} riddles")
|
print(f"Loaded {len(self._client.riddles)} riddles")
|
||||||
|
|
||||||
@ -47,6 +51,9 @@ class FourasModule(BaseModule):
|
|||||||
dump_channel = dict(value)
|
dump_channel = dict(value)
|
||||||
dump_channel["message"] = dump_channel["message"].id
|
dump_channel["message"] = dump_channel["message"].id
|
||||||
dump[key.id] = dump_channel
|
dump[key.id] = dump_channel
|
||||||
|
with open(SAVE_FILE, "w") as file:
|
||||||
|
json.dump(dump, file)
|
||||||
|
print('Saved fouras riddles state in file "{0}"'.format(SAVE_FILE))
|
||||||
return dump
|
return dump
|
||||||
|
|
||||||
def new_riddle(self, channel, index):
|
def new_riddle(self, channel, index):
|
||||||
|
@ -2,23 +2,32 @@ from .base import BaseModule
|
|||||||
import random
|
import random
|
||||||
import time
|
import time
|
||||||
import json
|
import json
|
||||||
|
import appdirs
|
||||||
|
|
||||||
RHYMES_FILE = "rhymes.txt"
|
RHYMES_FILE = "rhymes.json"
|
||||||
|
SAVE_FILE = appdirs.user_data_dir() + "/poilau_save.json"
|
||||||
|
|
||||||
|
|
||||||
class RhymesModule(BaseModule):
|
class RhymesModule(BaseModule):
|
||||||
rhymes: dict = {}
|
rhymes: list = []
|
||||||
cooldown: dict = {}
|
guild_config: dict = {}
|
||||||
|
|
||||||
def load(self):
|
def load(self):
|
||||||
with open("rhymes.json", "r") as f:
|
with open(RHYMES_FILE, "r") as f:
|
||||||
self.rhymes = json.load(f)
|
self.rhymes = json.load(f)
|
||||||
|
try:
|
||||||
|
with open(SAVE_FILE, "r") as file:
|
||||||
|
self.guild_config = json.load(file)
|
||||||
|
print('Loaded poilau save file "{0}"'.format(SAVE_FILE))
|
||||||
|
except FileNotFoundError:
|
||||||
|
print('No previous "{0}" save file found'.format(SAVE_FILE))
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
print('"{0}" is an invalid JSON file.'.format(SAVE_FILE))
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
dump = {}
|
with open(SAVE_FILE, "w") as file:
|
||||||
for key, value in self.cooldown.items():
|
json.dump(self.guild_config, file)
|
||||||
dump[key.id] = value - time.time()
|
print('Saved poilau state in file "{0}"'.format(SAVE_FILE))
|
||||||
return dump
|
|
||||||
|
|
||||||
def get_last_word(self, ch: str) -> str:
|
def get_last_word(self, ch: str) -> str:
|
||||||
truncated = ch
|
truncated = ch
|
||||||
@ -28,39 +37,50 @@ class RhymesModule(BaseModule):
|
|||||||
if truncated[-1].isalpha() and truncated[-2].isalpha():
|
if truncated[-1].isalpha() and truncated[-2].isalpha():
|
||||||
break
|
break
|
||||||
truncated = truncated[:-1]
|
truncated = truncated[:-1]
|
||||||
return truncated
|
truncated = truncated.split(' ')[-1]
|
||||||
|
if truncated.isalpha():
|
||||||
|
return truncated
|
||||||
|
else:
|
||||||
|
return ""
|
||||||
|
|
||||||
def poil_auquel(self, ch: str) -> str:
|
def poil_auquel(self, ch: str) -> str:
|
||||||
for key in self.rhymes:
|
for rhyme in self.rhymes:
|
||||||
if ch.endswith(tuple(self.rhymes[key]["keys"])):
|
if ch in rhyme["blacklist"]:
|
||||||
return random.choice(self.rhymes[key]["rhymes"])
|
return ""
|
||||||
|
if ch.endswith(tuple(rhyme["keys"])):
|
||||||
|
return random.choice(rhyme["rhymes"])
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
async def handle_message(self, message):
|
async def handle_message(self, message):
|
||||||
message_content = message.content.lower()
|
message_content = message.content.lower()
|
||||||
|
|
||||||
if message_content == "debug":
|
if message_content == "debug poilau":
|
||||||
dump = {}
|
if(message.author.id == 151626081458192384):
|
||||||
for key, value in self.cooldown.items():
|
dump = {}
|
||||||
channel_name = await self.get_channel_name(key)
|
for key, value in self.guild_config.items():
|
||||||
dump[channel_name] = value - time.time()
|
channel_name = await self.get_guild_name(key)
|
||||||
await message.author.send(
|
dump[channel_name] = value - time.time()
|
||||||
"```json\n{0}```".format(json.dumps(dump, ensure_ascii=False, indent=4))
|
await message.author.send(
|
||||||
)
|
"```json\n{0}```".format(json.dumps(dump, ensure_ascii=False, indent=4))
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
if message_content == "tg fouras" and message.guild:
|
||||||
|
self.guild_config[message.guild.id] = {43000,1.0}
|
||||||
|
await message.channel.send("ok :'(")
|
||||||
return
|
return
|
||||||
|
|
||||||
last_word = self.get_last_word(message_content)
|
last_word = self.get_last_word(message_content)
|
||||||
if message.author != self._client.user and last_word:
|
if message.author != self._client.user and message.guild and last_word:
|
||||||
poil = self.poil_auquel(last_word)
|
poil = self.poil_auquel(last_word)
|
||||||
# cooldown = 0
|
guild_config = self.guild_config.get(message.guild.id, {"cooldown": 0, "self-control": 1.0})
|
||||||
# if message.channel in self.cooldown:
|
if poil and time.time() - guild_config["cooldown"] > 0:
|
||||||
# cooldown = self.cooldown[message.channel]
|
if random.random() < guild_config["self-control"]:
|
||||||
cooldown = self.cooldown.get(message.channel, 0)
|
self.guild_config[message.guild.id]["self-control"] *= 0.9
|
||||||
|
return
|
||||||
if poil and time.time() - cooldown > 0:
|
|
||||||
wait_time = random.randint(0, 900)
|
wait_time = random.randint(0, 900)
|
||||||
if bool(random.getrandbits(1)):
|
if bool(random.getrandbits(1)):
|
||||||
wait_time = random.randint(900, 10800)
|
wait_time = random.randint(900, 10800)
|
||||||
self.cooldown[message.channel] = time.time() + wait_time
|
self.guild_config[message.guild.id] = {"cooldown": time.time() + wait_time, "self-control": 1.0}
|
||||||
await message.channel.send(poil)
|
await message.channel.send(poil)
|
||||||
return
|
return
|
||||||
|
198
rhymes.json
198
rhymes.json
@ -1,14 +1,53 @@
|
|||||||
{
|
[
|
||||||
"E": {
|
{
|
||||||
|
"sound": "E",
|
||||||
|
"blacklist": ["cheveux", "cheveu", "queue", "queues"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"eu",
|
"eu",
|
||||||
|
"eus",
|
||||||
"eux"
|
"eux"
|
||||||
],
|
],
|
||||||
"rhymes": [
|
"rhymes": [
|
||||||
"Poil aux cheveux."
|
"Poil aux cheveux.",
|
||||||
|
"Poil à la queue."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"OUS": {
|
{
|
||||||
|
"sound": "OUB",
|
||||||
|
"blacklist": ["zboub", "zboubs"],
|
||||||
|
"keys": [
|
||||||
|
"oub",
|
||||||
|
"oube",
|
||||||
|
"oob",
|
||||||
|
"oub"
|
||||||
|
],
|
||||||
|
"rhymes": [
|
||||||
|
"Poil aux zboub."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sound": "ETTE",
|
||||||
|
"blacklist": ["quéquette", "quéquettes"],
|
||||||
|
"keys": [
|
||||||
|
"ette",
|
||||||
|
"ett",
|
||||||
|
"èt",
|
||||||
|
"ète",
|
||||||
|
"ettes",
|
||||||
|
"etts",
|
||||||
|
"èts",
|
||||||
|
"ètes",
|
||||||
|
"êtes",
|
||||||
|
"aite",
|
||||||
|
"aites"
|
||||||
|
],
|
||||||
|
"rhymes": [
|
||||||
|
"Poil à la quéquette."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sound": "OUS",
|
||||||
|
"blacklist": ["pouce", "pouces"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"ous",
|
"ous",
|
||||||
"ousse",
|
"ousse",
|
||||||
@ -20,15 +59,21 @@
|
|||||||
"Poil au pouce."
|
"Poil au pouce."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"US": {
|
{
|
||||||
|
"sound": "US",
|
||||||
|
"blacklist": ["anus"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"us"
|
"us",
|
||||||
|
"usse",
|
||||||
|
"usses"
|
||||||
],
|
],
|
||||||
"rhymes": [
|
"rhymes": [
|
||||||
"Poil à l'anus."
|
"Poil à l'anus."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"OU": {
|
{
|
||||||
|
"sound": "OU",
|
||||||
|
"blacklist": ["cou", "genou", "genous"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"ou",
|
"ou",
|
||||||
"où",
|
"où",
|
||||||
@ -39,12 +84,16 @@
|
|||||||
"Poil au genou."
|
"Poil au genou."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"O": {
|
{
|
||||||
|
"sound": "O",
|
||||||
|
"blacklist": ["dos"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"au",
|
"au",
|
||||||
"aux",
|
"aux",
|
||||||
"o",
|
"o",
|
||||||
"os",
|
"os",
|
||||||
|
"ot",
|
||||||
|
"ots",
|
||||||
"oh",
|
"oh",
|
||||||
"ho"
|
"ho"
|
||||||
],
|
],
|
||||||
@ -52,21 +101,26 @@
|
|||||||
"Poil au dos."
|
"Poil au dos."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"OL": {
|
{
|
||||||
|
"sound": "OL",
|
||||||
|
"blacklist": ["guiboles", "guibole"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"ol",
|
"ol",
|
||||||
"ols",
|
"ols",
|
||||||
"ole",
|
"ole",
|
||||||
"oles",
|
"oles",
|
||||||
"olle",
|
"olle",
|
||||||
"ollesaul",
|
"olles",
|
||||||
|
"aul",
|
||||||
"auls"
|
"auls"
|
||||||
],
|
],
|
||||||
"rhymes": [
|
"rhymes": [
|
||||||
"Poil aux guiboles."
|
"Poil aux guiboles."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"OUL": {
|
{
|
||||||
|
"sound": "OUL",
|
||||||
|
"blacklist": ["moule", "moules", "boule", "boules"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"oule",
|
"oule",
|
||||||
"oules",
|
"oules",
|
||||||
@ -78,7 +132,9 @@
|
|||||||
"Poil aux boules."
|
"Poil aux boules."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"ULVE": {
|
{
|
||||||
|
"sound": "ULVE",
|
||||||
|
"blacklist": ["vulve", "vulves"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"ulve",
|
"ulve",
|
||||||
"ulves"
|
"ulves"
|
||||||
@ -87,85 +143,82 @@
|
|||||||
"Poil à la vulve."
|
"Poil à la vulve."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"OR": {
|
{
|
||||||
|
"sound": "IER",
|
||||||
|
"blacklist": ["derrière", "derrières"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"or",
|
"èr",
|
||||||
"ors",
|
"èrs",
|
||||||
"ore",
|
"ère",
|
||||||
"ores",
|
"ères",
|
||||||
"aur",
|
"erre",
|
||||||
"aurs"
|
"erres",
|
||||||
],
|
"ert"
|
||||||
"rhymes": [
|
|
||||||
"Poil au corps."
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"IER": {
|
|
||||||
"keys": [
|
|
||||||
"ier",
|
|
||||||
"iers",
|
|
||||||
"ierre",
|
|
||||||
"ierres",
|
|
||||||
"ayé"
|
|
||||||
],
|
],
|
||||||
"rhymes": [
|
"rhymes": [
|
||||||
"Poil au derrière."
|
"Poil au derrière."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"IEN": {
|
{
|
||||||
|
"sound": "IEN",
|
||||||
|
"blacklist": ["chien", "chiens"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"ien",
|
"ien",
|
||||||
"iens",
|
"iens"
|
||||||
"ient"
|
|
||||||
],
|
],
|
||||||
"rhymes": [
|
"rhymes": [
|
||||||
"Poil de chien."
|
"Poil de chien."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"ET": {
|
{
|
||||||
|
"sound": "ET",
|
||||||
|
"blacklist": ["nez", "pieds", "pied"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"et",
|
"et",
|
||||||
"é",
|
"é",
|
||||||
"è",
|
"ez"
|
||||||
"ait",
|
|
||||||
"ais",
|
|
||||||
"ai",
|
|
||||||
"ez",
|
|
||||||
"ied",
|
|
||||||
"ieds"
|
|
||||||
],
|
],
|
||||||
"rhymes": [
|
"rhymes": [
|
||||||
"Poil au nez.",
|
"Poil au nez.",
|
||||||
"Poil aux pieds."
|
"Poil aux pieds."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"OI": {
|
{
|
||||||
|
"sound": "OI",
|
||||||
|
"blacklist": ["doigts", "doigt"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"oi",
|
"oi",
|
||||||
"oie",
|
"oie",
|
||||||
"ois",
|
"ois",
|
||||||
"oit",
|
"oit",
|
||||||
|
"oix",
|
||||||
"oa"
|
"oa"
|
||||||
],
|
],
|
||||||
"rhymes": [
|
"rhymes": [
|
||||||
"Poil aux doigts."
|
"Poil aux doigts."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"AN": {
|
{
|
||||||
|
"sound": "AN",
|
||||||
|
"blacklist": ["dents", "dent"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"an",
|
|
||||||
"ant",
|
"ant",
|
||||||
"ants",
|
"ants",
|
||||||
"en",
|
|
||||||
"ment",
|
"ment",
|
||||||
"ments"
|
"ments",
|
||||||
|
"rends",
|
||||||
|
"rents"
|
||||||
],
|
],
|
||||||
"rhymes": [
|
"rhymes": [
|
||||||
"Poil aux dents. "
|
"Poil aux dents. "
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"ESSE": {
|
{
|
||||||
|
"sound": "ESSE",
|
||||||
|
"blacklist": ["fesses", "fesse"],
|
||||||
"keys": [
|
"keys": [
|
||||||
|
"ès",
|
||||||
|
"ess",
|
||||||
"esse",
|
"esse",
|
||||||
"esses",
|
"esses",
|
||||||
"aisse",
|
"aisse",
|
||||||
@ -175,8 +228,11 @@
|
|||||||
"Poil aux fesses."
|
"Poil aux fesses."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"EL": {
|
{
|
||||||
|
"sound": "EL",
|
||||||
|
"blacklist": ["aisselles", "aisselle"],
|
||||||
"keys": [
|
"keys": [
|
||||||
|
"èl",
|
||||||
"el",
|
"el",
|
||||||
"els",
|
"els",
|
||||||
"elle",
|
"elle",
|
||||||
@ -188,17 +244,22 @@
|
|||||||
"Poil aux aisselles."
|
"Poil aux aisselles."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"ACHE": {
|
{
|
||||||
|
"sound": "ACHE",
|
||||||
|
"blacklist": ["moustache", "moustaches"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"ache",
|
"ache",
|
||||||
"ach",
|
"ach",
|
||||||
"ash"
|
"ash",
|
||||||
|
"asch"
|
||||||
],
|
],
|
||||||
"rhymes": [
|
"rhymes": [
|
||||||
"Poil de moustache."
|
"Poil de moustache."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"IN": {
|
{
|
||||||
|
"sound": "IN",
|
||||||
|
"blacklist": ["main", "mains"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"ain",
|
"ain",
|
||||||
"ein"
|
"ein"
|
||||||
@ -207,20 +268,23 @@
|
|||||||
"Poil aux mains."
|
"Poil aux mains."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"TON": {
|
{
|
||||||
|
"sound": "TON",
|
||||||
|
"blacklist": ["menton", "mentons"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"ton",
|
"ton",
|
||||||
"tons",
|
"tons",
|
||||||
"thons",
|
"thon",
|
||||||
"thons"
|
"thons"
|
||||||
],
|
],
|
||||||
"rhymes": [
|
"rhymes": [
|
||||||
"Poil au menton."
|
"Poil au menton."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"ON": {
|
{
|
||||||
|
"sound": "ON",
|
||||||
|
"blacklist": ["fion", "fions"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"on",
|
|
||||||
"ont",
|
"ont",
|
||||||
"onts",
|
"onts",
|
||||||
"ons",
|
"ons",
|
||||||
@ -231,7 +295,9 @@
|
|||||||
"Poil au fion."
|
"Poil au fion."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"OUILLE": {
|
{
|
||||||
|
"sound": "OUILLE",
|
||||||
|
"blacklist": ["couille", "couilles"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"ouille",
|
"ouille",
|
||||||
"ouilles"
|
"ouilles"
|
||||||
@ -240,7 +306,9 @@
|
|||||||
"Poil aux couilles."
|
"Poil aux couilles."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"ATTE": {
|
{
|
||||||
|
"sound": "ATTE",
|
||||||
|
"blacklist": ["chatte", "chattes"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"atte",
|
"atte",
|
||||||
"ate",
|
"ate",
|
||||||
@ -254,7 +322,9 @@
|
|||||||
"Poil à la chatte."
|
"Poil à la chatte."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"A": {
|
{
|
||||||
|
"sound": "A",
|
||||||
|
"blacklist": ["bras"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"a",
|
"a",
|
||||||
"à",
|
"à",
|
||||||
@ -265,7 +335,9 @@
|
|||||||
"Poil au bras."
|
"Poil au bras."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"I": {
|
{
|
||||||
|
"sound": "I",
|
||||||
|
"blacklist": ["vessie", "zizi", "zizis"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"i",
|
"i",
|
||||||
"is",
|
"is",
|
||||||
@ -277,7 +349,9 @@
|
|||||||
"Poil au zizi."
|
"Poil au zizi."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"U": {
|
{
|
||||||
|
"sound": "U",
|
||||||
|
"blacklist": ["cul", "culs"],
|
||||||
"keys": [
|
"keys": [
|
||||||
"u",
|
"u",
|
||||||
"hu",
|
"hu",
|
||||||
@ -287,4 +361,4 @@
|
|||||||
"Poil au cul."
|
"Poil au cul."
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user