Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.1.1 - 2021-04-15¶
Fixed¶
Critical error (importing non-requied package) in
__main__.py
;Bad order in inscription messages if chambre and additional step.
2.1.0 - 2021-04-13¶
Added¶
New Actions System:
Extended Data model with tables
bdd.Utilisation
,bdd.BaseCiblage
,bdd.Ciblage
and enumsbdd.CibleType
,bdd.UtilEtat
,bdd.Vote
;New columns
bdd.BaseAction.decision_format
andbdd.Action.active
;New properties
bdd.BaseAction.temporalite
andbdd.Role.embed
to describe a role, used in!role
,!fillroles
andfeatures.IA.trigger_roles()
;New properties
bdd.Action.utilisation_ouverte
,bdd.Action.derniere_utilisation
,bdd.Action.decision
, andbdd.Action.is_open
/bdd.Action.is_waiting
(hybrid);New method
bdd.Joueur.action_vote()
;New hybrid properties
bdd.Joueur.est_vivant
andbdd.Joueur.est_mort
;New class methods
bdd.ActionTrigger.open()
andbdd.ActionTrigger.close()
;New function
features.voter_agir.get_cible()
, used by!vote
,!votemaire
,!voteloups
et!action
to handle user inputs;!cparti
now add « vote actions » to all players;
Task postponing now uses Discord-py webhooks:
dropped requirement for
discord-webhook
module;tasks now use
config.webhook
, created byLGBot.on_ready()
if not existing;new method
bdd.Tache.send_webhook()
;deleted
blocs.webhook
module and usage ofLGREZ_WEBHOOK_URL
environnement variable;
New boudoirs management system:
New tables
bdd.Boudoir
andbdd.Bouderie
;New group command
!boudoir
(with 8 subcommands) in new modulefeatures.chans
;New configuration option
config.boudoirs_category_name
, loaded byLGBot.on_ready()
,Updated
!help
and doc tools to handle group commands;
New command
!lore
using new Google Docs connection functionblocs.gsheets.get_doc_content()
;Miscellaneous:
New function
blocs.tools.boucle_query()
for generic database instance lookup interactions;New method
LGBot.check_and_prepare_objects()
(originally directly inLGBot.on_ready()
), called by Discord events concerning roles, channels, emojis and webhooks ;New customizable function
config.additional_inscription_step()
;blocs.tools.wait_for_react_clic()
andblocs.tools.yes_no()
: new kwargfirst_text
;New column
bdd.Role.actif
,!roles
,!fillroles
and IA now restricts to roles withactif = True
;New convenience function
bdd.base.autodoc_DynamicOneToMany()
for documenting dynamicly loaded one-to-many relationships;New option
nullable
forbdd.base.autodoc_ManyToOne()
;
Changed¶
Updated existing data classes attributes to link to new tables;
Made
bdd.Action.base
nullable and addedbdd.Action.vote
optionnal attributes to handle votes in a cleaner way (with instance initialization integrity check);Updated
features.open_close.recup_joueurs()
,!open
,!close
and!remind
;features.gestion_actions.delete_action()
now updatesbdd.Action.active
insteade of deleting the instance;features.voter_agir.export_vote()
signature changed;!plot
now uses new actions system instead of loading votes from the Gsheet:removed config options
tdb_votecond_column
,tdb_votantcond_column
,tdb_votemaire_column
andtdb_votantmaire_column
;it now automatically computes votes additions and modifications (Corbeau / Intrigant), using new config options
config.ajout_vote_baseaction
,config.n_ajouts_votes
,config.modif_vote_baseaction
;
!fillroles
now synchronisebdd.BaseCiblage
too (seeconfig.max_ciblages_per_action
) and post camps descriptions;Moved
!addhere
and!purge
fromfeatures.annexe
to new modulefeatures.chans
;Updated some string columns max lengths;
Made
__str__\ `
implementation specific for :class:.bdd.Role\ ``, :class:
.bdd.Camp, :class:
.bdd.BaseActionand :class:
.bdd.Joueur`.
Removed¶
Tables columns
bdd.Joueur._vote_condamne
,bdd.Joueur._vote_maire
,bdd.Joueur._vote_loups
,bdd.Action._decision
,bdd.BaseAction.changement_cible
;.blocs.webhook
module.
Fixed¶
features.voter_agir.export_vote()
(!vote*
et!action
): used hard-written sheet names istead ofconfig.db_votecond_sheet
,config.db_votemaire_sheet
,config.db_voteloups_sheet
andconfig.db_actions_sheet
;Documentation errors & typos.
2.0.0 - 2021-03-24¶
Major refactorings¶
Data management¶
blocs.bdd
moved tobdd
module and splitted inbdd.base
(base classes and utilities),bdd.enums
(enums, directly imported in.bdd
), andbdd.model_joueurs
,bdd.model_jeu
,bdd.model_actions
,bdd.model_ia
modules (data classes, directly imported inbdd
);Every data classes names changed to singular names (
bdd.Joueur
,bdd.Role
…);Implemented SQLAlchemy relationships and made foreign key arguments private (
Joueur.role
->Joueur._role_slug
,Joueur.role
= direct access toRole
object);Added custom metaclass
bdd.TableMeta
for class tables: more robust implementation ofTable.query
, and other convenience properties;Enhanced data classes with custom properties and classmethods:
bdd.Joueur.member()
,bdd.Joueur.private_chan()
,bdd.Joueur.from_member()
,bdd.Role.nom_complet()
,bdd.Role.default()
,bdd.Camp.default()
,bdd.Camp.discord_emoji()
,bdd.Camp.discord_emoji_or_none()
;Enhanced data classes with instances methods:
add()
,delete()
(global handy methods),bdd.Tache.add()
, and specificbdd.Tache.delete()
,bdd.Tache.register()
,bdd.Tache.cancel()
,bdd.Tache.execute()
;Use Enums when needed:
bdd.Statut
,bdd.ActionTrigger
,bdd.CandidHaroType
;bdd.__all__
contains all data classes (forimport *
).
Global namespace¶
New config
namespace module for:
Global variables: implemented system of readiness check on attributes (through new
blocs.ready_check
module), used for:Bot objects:
config.bot
(loaded byLGBot.run()
) andconfig.loop
(loaded byLGBot.on_ready()
),Server:
config.guild
(loaded byLGBot.on_ready()
),Database connection:
config.engine
andconfig.session
(loaded bybdd.connect()
),Discord objects:
config.Role
,config.Channel
,config.Emoji
classes store roles/channels/emojis the bot needs to work, registered as names (customizable) and then transformed in connected objects byLGBot.on_ready()
.
Customization:
Private channels creation:
config.private_chan_prefix
,config.private_chan_category_name
,Old
bot.config
keys:debut_saison
,demande_chambre
,chambre_mj
,output_liveness
.
Consequences:
LGBot is no more thread-safe: only one bot instance should run concurrently in an interpreter.
« Connected » arguments (
bot
,ctx
,loop
…) removed from several functions signatures, now usingconfig
attributes:blocs.tools.channel()
,role()
,member()
,emoji()
,log()
,yes_no()
,wait_for_message()
,boucle_message()
,wait_for_react_clic()
,choice()
,create_context()
;features.gestion_actions.add_action()
,delete_action()
,open_action()
,close_action()
;features.IA.process_IA()
,trigger_reactions()
,trigger_sub_reactions()
,trigger_gif()
;
Also added¶
bdd.Camp
table (and madebdd.Joueur.camp
andbdd.Role.camp
relationships);bdd.base.autodoc_Column()
,autodoc_OneToMany()
,autodoc_ManyToOne()
andautodoc_ManyToMany()
convenience functions to easily document bdd attributes;bdd.Tache.handler
convenience property;blocs.tools.en_pause()
helper function.
Also changed¶
bot.Special
cog moved to newfeatures.special
module.LGbot
one-command-at-a-time system moved to newblocs.one_command
module.Renamed
blocs.bdd.Tables
inlgrez.bdd.tables
, and made it auto-build by SQLAlchemy Declarative;Renamed
blocs.bdd.Base
inlgrez.bdd.base.TableBase
;<Table>.query
usesconfig.session
(raisesblocs.ready_check.NotReadyError
if not initialised);made
gestion_actions.get_actions
not async;Adapted
!roles
behavior to newCamp
table;Removed unused option
chan
fromfeatures.gestion_actions.open_action()
andclose_action()
;blocs.tools.next_occurence()
now relies ondebut_pause()
andfin_pause()
functions instead of hard-coded pause times;Updated the Configuration Assistant Tool (
__main__.py
) with some changes on Google Sheets script editor and other minor changes;Splitted API Reference in several doc pages, and other global documentation and codestyle improvements (source code now almost entirely PEP8-compliant).
Also removed¶
!modifIA
: removed option to edit both triggers and response;Made
blocs.bdd.BaseActionsRoles
private: use directlybdd.BaseAction.roles
andbdd.Role.base_actions
many-to-many relationship attributes);bdd.BaseAction
: removedbase_
arguments, not specific to the action (useaction.base.<arg>
instead);blocs.tools
: removedemoji_camp
,private_chan
andnom_role
functions (usebdd.Camp.discord_emoji
ordiscord_emoji_or_none
properties /bdd.Joueur.private_chan
property /bdd.Role.nom
attribute orbdd.Role.nom_complet
property instead);Removed
blocs.bdd_tools
module (use<Table>.columns
and<Table>.primary_col
properties,<Table>.find_nearest()
method, andfeatures.sync.transtype()
function instead);Removed
features.taches.add_task
,delete_task
,execute
functions (usebdd.Tache.add()
,delete()
andexecute()
methods instead);Removed
LGBot.config
attribute (uselgrez.config
module instead).
1.2.0 - 2020-12-18¶
Added¶
Commands:
!vivants
: new aliases!joueurs
and!vivant
/!morts
: new aliases!mort
.!post
(infeatures.communication.Communication
) to send a message to a specific channel.!panik
(inbot.Special
) to instantly kill the bot.!actions
(infeatures.informations.Informations
) to see and edit players actions [beta].!quiest
and!rolede
(infeatures.informations.Informations
) to see players with a given role and vice versa.!reactfals
(alias!rf
, infeatures.IA.GestionIA
) using new functionfeatures.IA.fetch_tenor
.!xkcd
(infeatures.annexe.Annexe
).
Bot behavior:
New IA rule: « A ou B » ==> « B » (
features.IA.trigger_a_ou_b
).!plot cond
: thumbnail of camp.!open cond
: send post on #haros and wipes.New liveness checking system: new method
LGBot.i_am_alive
writes every 60s current UTC time to a"alive.log"
(setLGBot.config["output_liveness"]
toTrue
to enable)
API usage:
Inscription: customize default chambre with
LGBot.config["chambre_mj"]
.blocs.tools.yes_no
: newadditionnal
option to add aditionnal emojis.
Changed¶
Commands:
!send
can now accept a player name (send to private chan).!plot cond
now shows faction (emoji) of killed player.!annoncemort
now announces if killed player is living-dead.!sync
now asks for confirmation before applying modifications.
Bot behavior:
Calling a command when already in a command now tries to stop running command and run afterwards instead of aborting.
Actions by emojis: only trigger in private chans.
Now sends a reminder every morning to always-usable actions.
API usage:
Renamed
features.IA.tenor
infeatures.IA.trigger_gif
(consistency).features.sync
: better management of modification with new classTDBModif
and of exceptions with new specific functionvalidate_sync
.tools.bdd_tools.find_nearest
: standardized first word comparison withmatch_first_word
option.!shell
: now using (new)blocs.realshell
module (based on (new dependency)asyncode
module) instead of (removed)blocs.pseudoshell
.
Other minor improvements.
Fixed¶
Fixed critical bug when changing
role
(through!sync
).features.taches
: fixed critical bug when too much tasks at the same times (Discord’s webhooks rate limits).Inscription: fixed critical bug when > 50 players.
Some docstrings corrections.
Other minor bugs.
1.1.0 - 2020-11-03¶
Added¶
New command
!annoncemort
(in new modulefeatures.communication
).Added
LGBot.config
to permit easier bot customization.Customize inscription with
LGBot.config["demande_chambre"]
and["debut_saison"]
.
!help
now shows bot version and commands outside of cogs.!open cond/maire
now wipes CandidHaros.!refill
now opens back permanent actions with new charges.Documentation now covers every public classes, functions and commands.
Changed¶
Made some functions private (leading
_
).Changed data attributes with leading underscores (like
Joueurs._chan_id
) with trailing underscores (Joueurs.chan_id_
).Data column
Joueurs.chambre
is now nullable.!fals
can now be used in non-private channels.blocs.bdd_tools.find_nearest
is no longer a coroutine.Some refactoring:
features.informations.emoji_camp
moved toblocs.tools.emoji_camp
.!plot
moved fromfeatures.actions_publiques
tofeatures.communication
.!send
and!embed
moved fromfeatures.annexe
tofeatures.communication
.!fillroles
moved fromfeatures.remplissage_bdd
(deleted) tofeatures.communication
.
Removed¶
Deleted command
!droptable
.Deleted module
features.remplissage_bdd
.
Fixed¶
Issue with bot intents: proprer access to member list.
Improved handling of BDD disconnections.
Critical bug with
!stop
and voting commands.!plot
now creates./figures
folder if not existing.blocs.tools.wait_for_react_clic
now handles correctly custom emojis.Configuration Assistant Tool: escape
\n
s inLGREZ_GCP_CREDENTIALS
.Other minor bug fixes and improvements.
1.0.3 - 2020-10-22¶
Added¶
Created this changelog
Added module and submodules docstrings and meta informations.
Created Sphinx documentation (beta) on lg-rez.readthedocs.io.
Changed¶
README improvements (badges!) and corrections.
Rewriting of bot.LGBot class and methods docstrings.
More PyPI classifiers.
Fixed¶
Relative links in PyPI project description now redirect to files on GitHub (not to a 404 page).
1.0.1 - 2020-10-20¶
Initial release.