- Notifications
You must be signed in to change notification settings - Fork5.7k
Description
Steps to reproduce
Add an object with a bot attribute to e.g.
chat_data
and persist itChange the bots token and restart the updater
Expected behaviour
The reloaded bot should have the new token.
Actual behaviour
The bot in the loadedchat_data
still has the old token. Similar for the other bot attributes
Proposed solution
Remove
__reduce__
fromBot
, as we don't want to encourage pickling botsAdd static methods
replace_bots(object)
andset_bots(objects, bot)
(or other naming) toBasePersistence
, wherereplace_bots
implements the logic to replace everyBot
instance in an object, be it a dict, a list, a custom object … with some special placeholderBOT_INSTANCE
or whatever andset_bots
in turn replacesBOT_INSTANCE
with the given bot. To makeget_*_data
andupdate_*_data
use those, we have several options:- Just call them in
get/update_
. Custom subclasses ofBasePersistence
will have to adjust. - Add a
__new__
method to make theget/update_
methods call the methods under the hood. that way custom subclasses don't need to change anything - Add methods
get/update_*_replace_bot
, which callset/replace_bots
and before/afterget/update_*
. Use those inUpdater
. This way, custom classes also don't need to be changed.
don't know, whats better …
- Just call them in
Alternatively to passing the bot to
set_bots
, we could addset_bot
toBasePersistence
so that we can useself.bot
inset_bot
. That would save us from having to passbot
toget_*
as well