[commands] Ensure handlers are copied even during update.

Fix #2001
This commit is contained in:
Rapptz 2019-03-20 22:38:00 -04:00
parent 5fe1ab279a
commit 64d749a13f

View File

@ -262,26 +262,29 @@ class Command(_BaseCommand):
""" """
self.__init__(self.callback, **dict(self.__original_kwargs__, **kwargs)) self.__init__(self.callback, **dict(self.__original_kwargs__, **kwargs))
def _ensure_assignment_on_copy(self, other):
other._before_invoke = self._before_invoke
other._after_invoke = self._after_invoke
if self.checks != other.checks:
other.checks = self.checks.copy()
if self._buckets != other._buckets:
other._buckets = self._buckets.copy()
try:
other.on_error = self.on_error
except AttributeError:
pass
return other
def copy(self): def copy(self):
"""Creates a copy of this :class:`Command`.""" """Creates a copy of this :class:`Command`."""
ret = self.__class__(self.callback, **self.__original_kwargs__) ret = self.__class__(self.callback, **self.__original_kwargs__)
ret._before_invoke = self._before_invoke return self._ensure_assignment_on_copy(ret)
ret._after_invoke = self._after_invoke
if self.checks != ret.checks:
ret.checks = self.checks.copy()
if self._buckets != ret._buckets:
ret._buckets = self._buckets.copy()
try:
ret.on_error = self.on_error
except AttributeError:
pass
return ret
def _update_copy(self, kwargs): def _update_copy(self, kwargs):
if kwargs: if kwargs:
copy = self.__class__(self.callback, **kwargs) copy = self.__class__(self.callback, **kwargs)
copy.update(**self.__original_kwargs__) copy.update(**self.__original_kwargs__)
return copy return self._ensure_assignment_on_copy(copy)
else: else:
return self.copy() return self.copy()