Browse Source

[commands] Ensure handlers are copied even during update.

Fix #2001
pull/2014/head
Rapptz 6 years ago
parent
commit
64d749a13f
  1. 27
      discord/ext/commands/core.py

27
discord/ext/commands/core.py

@ -262,26 +262,29 @@ class Command(_BaseCommand):
"""
self.__init__(self.callback, **dict(self.__original_kwargs__, **kwargs))
def copy(self):
"""Creates a copy of this :class:`Command`."""
ret = self.__class__(self.callback, **self.__original_kwargs__)
ret._before_invoke = self._before_invoke
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()
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:
ret.on_error = self.on_error
other.on_error = self.on_error
except AttributeError:
pass
return ret
return other
def copy(self):
"""Creates a copy of this :class:`Command`."""
ret = self.__class__(self.callback, **self.__original_kwargs__)
return self._ensure_assignment_on_copy(ret)
def _update_copy(self, kwargs):
if kwargs:
copy = self.__class__(self.callback, **kwargs)
copy.update(**self.__original_kwargs__)
return copy
return self._ensure_assignment_on_copy(copy)
else:
return self.copy()

Loading…
Cancel
Save