Discord.py 错误:TypeError: __new__() 得到了一个意外的关键字参数 'deny_new'

新手上路,请多包涵

昨天,我的代码完全没问题。一切都在运行……而且进展顺利。突然出现这个错误:

 TypeError: __new__() got an unexpected keyword argument 'deny_new'

在我的 PyCharm 控制台中弹出。我在网上查过,但我只发现了一个类似的问题,答案为零。我希望 stackoverflow 社区能够帮助我。我没有更改我的代码,我所做的只是尝试将我的机器人托管在 heroku 上,但并不顺利。在我最初的几次尝试之后,我放弃了。但是,我发现我的机器人开始变得疯狂,我无法再运行它了:<。有没有其他人经历过这个并且知道如何解决它? 更新 我刚刚发现,出于某种原因,它只适用于我的测试服务器,但不适用于任何其他服务器。

 Traceback (most recent call last):
  File "C:/Users/danie/PyCharmProjects/skybot/skybotgaming.py", line 21, in <module>
    client.run('TOKEN')
  File "C:\Users\danie\anaconda3\envs\discordbottest\lib\site-packages\discord\client.py", line 640, in run
    return future.result()
  File "C:\Users\danie\anaconda3\envs\discordbottest\lib\site-packages\discord\client.py", line 621, in runner
    await self.start(*args, **kwargs)
  File "C:\Users\danie\anaconda3\envs\discordbottest\lib\site-packages\discord\client.py", line 585, in start
    await self.connect(reconnect=reconnect)
  File "C:\Users\danie\anaconda3\envs\discordbottest\lib\site-packages\discord\client.py", line 499, in connect
    await self._connect()
  File "C:\Users\danie\anaconda3\envs\discordbottest\lib\site-packages\discord\client.py", line 463, in _connect
    await self.ws.poll_event()
  File "C:\Users\danie\anaconda3\envs\discordbottest\lib\site-packages\discord\gateway.py", line 471, in poll_event
    await self.received_message(msg)
  File "C:\Users\danie\anaconda3\envs\discordbottest\lib\site-packages\discord\gateway.py", line 425, in received_message
    func(data)
  File "C:\Users\danie\anaconda3\envs\discordbottest\lib\site-packages\discord\state.py", line 750, in parse_guild_create
    guild = self._get_create_guild(data)
  File "C:\Users\danie\anaconda3\envs\discordbottest\lib\site-packages\discord\state.py", line 725, in _get_create_guild
    guild._from_data(data)
  File "C:\Users\danie\anaconda3\envs\discordbottest\lib\site-packages\discord\guild.py", line 297, in _from_data
    self._sync(guild)
  File "C:\Users\danie\anaconda3\envs\discordbottest\lib\site-packages\discord\guild.py", line 328, in _sync
    self._add_channel(CategoryChannel(guild=self, data=c, state=self._state))
  File "C:\Users\danie\anaconda3\envs\discordbottest\lib\site-packages\discord\channel.py", line 726, in __init__
    self._update(guild, data)
  File "C:\Users\danie\anaconda3\envs\discordbottest\lib\site-packages\discord\channel.py", line 737, in _update
    self._fill_overwrites(data)
  File "C:\Users\danie\anaconda3\envs\discordbottest\lib\site-packages\discord\abc.py", line 294, in _fill_overwrites
    self._overwrites.append(_Overwrites(id=overridden_id, **overridden))
TypeError: __new__() got an unexpected keyword argument 'deny_new'

我用不同的文件和机器人尝试了它,我得到了相同的结果,这就像 discord.py 的问题。这实际上是我的全部代码

import discord
import random
from discord.ext import commands
import asyncio
client = commands.Bot(command_prefix='{')
client.remove_command('help')

@client.event
async def on_ready():
    print("Signed in")

@client.command()
async def dm(ctx):
    await ctx.author.send("What up chump?")

client.run('TOKEN')

原文由 Daniel Tam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 572
2 个回答

Discord 推出了一项更改覆盖对象的新更改。

只需重新安装最新版本的 Discord.py

 python3 -m pip install -U discord.py

而已。

原文由 Amit Ghosh 发布,翻译遵循 CC BY-SA 4.0 许可协议

另一种选择是,如果您坚持使用旧版本的 discord.py 并且不想立即更新 10k+ 行代码,那么我基于 此提交 提出了以下快速而肮脏的补丁:

 --- channel.py.old  2017-02-27 15:02:23.000000000 -0800
+++ channel.py  2020-07-22 02:44:03.000000000 -0700
@@ -27,13 +27,28 @@
 from . import utils
 from .permissions import Permissions, PermissionOverwrite
 from .enums import ChannelType
-from collections import namedtuple
 from .mixins import Hashable
 from .role import Role
 from .user import User
 from .member import Member

-Overwrites = namedtuple('Overwrites', 'id allow deny type')
+class Overwrites:
+    __slots__ = ('id', 'allow', 'deny', 'type')
+
+    def __init__(self, **kwargs):
+        self.id = kwargs.pop('id')
+        self.allow = kwargs.pop('allow', 0)
+        self.deny = kwargs.pop('deny', 0)
+        self.type = kwargs.pop('type')
+
+    def _asdict(self):
+        return {
+            'id': self.id,
+            'allow': self.allow,
+            'deny': self.deny,
+            'type': self.type,
+        }
+

 class Channel(Hashable):
     """Represents a Discord server channel.

(注意:这与 discord.py 0.16.7 不同。它可能会略有不同,具体取决于你运行的 discord.py 的版本。)

我必须强调,这充其量只是一种黑客攻击,无法保证它会继续工作多久。此外,无法保证 Discord 不会突然引入一些其他随机 API 更改,这些更改会以新颖有趣的方式破坏旧版本 discord.py 。您(像我一样)真的应该更新您的代码以符合更新的 discord.py 。我只提出这个解决方法,因为我怀疑你和我处于同样的情况(事情突然中断,需要立即恢复并运行,但没有时间快速更新 10k+ 行代码来解决这个问题。

原文由 Donald Burr 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题