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

Posted

技术标签:

【中文标题】Discord.py 错误:TypeError:__new__() 得到了一个意外的关键字参数“deny_new”【英文标题】:Discord.py error: TypeError: __new__() got an unexpected keyword argument 'deny_new' 【发布时间】:2020-11-15 11:27:26 【问题描述】:

昨天,我的代码非常好。一切都在运行……而且进展顺利。突然,这个错误:

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

在我的 PyCharm 控制台中弹出。我已经在互联网上查找过,但我只发现了一个类似的问题,答案为零。我希望***社区能够帮助我。我没有更改我的代码,我所做的只是尝试将我的机器人托管在 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')

【问题讨论】:

github.com/Rapptz/discord.py/issues/5109 如何查看我的 discord.py 版本? 大多数模块都有类似discord.__version__ 由于某种原因,它只能像新服务器或其他东西一样工作。或者也许不是那么受欢迎的服务器。昨天还好好的,不知道怎么回事 【参考方案1】:

Discord 推送了一个更改覆盖对象的新更改。

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

python3 -m pip install -U discord.py

就是这样。

【讨论】:

这没有帮助,至少在树莓派上是这样。但是我注意到它仅在我使用 sudo 运行时才会失败(当我将代码设置为系统服务时会发生这种情况),而不是在我自己运行时。它是否发现了一些不同的东西,我该如何解决? 是的,出于某种原因,更新对 rpi 没有帮助 我的RaspberryOS系统只有在手动卸载并重新安装后才能工作:pip3 uninstall discord.py; pip3 install discord.py 我已经在根据 pip (1.4.0) 使用最新版本,但仍然收到此错误。 更新不和谐导致我现在每次尝试导入它时都会出错。 (在 python 3.6.8 上 discord.py 导入 yarl 时出现类型错误)【参考方案2】:

如果您坚持使用旧版本的 discord.py 并且不想现在更新 10k+ 行代码,另一个选择是我基于 this commit 提出的以下快速而肮脏的补丁:

--- 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+ 行代码来解决这个问题。强>

【讨论】:

我只需将deny_new 和allow_new 添加到该命名元组就可以正常工作,而不是像您那样制作整个类。【参考方案3】:

我刚刚遇到了这个问题,刚刚修复了它,这就是我所做的(这适用于我运行 Windows 的笔记本电脑):

pip uninstall discord.py
pip install discord.py
py -3 -m pip install -U discord.py

我还在 Raspberry Pi 上运行了一个不和谐机器人,这就是我修复它的方法:

pip uninstall discord.py
pip install discord.py
python3 -m pip install -U discord.py

【讨论】:

对我来说,pip默认为python2,我必须指定pip3。什么版本的 raspbian?【参考方案4】:

我想澄清答案。 在树莓派上,我不知何故为用户 pi 和 root 安装了 discord.py——它们在不同的地方是不同的版本。这让我很困惑;我不知道我有两个副本,我不知道如何减少到只有 1 个,我更喜欢。但是让它为 root 工作的命令是:

sudo -i
pip3 uninstall discord.py
pip3 install discord.py
python3 -m pip install -U discord.py

只有这样我才能从 /etc/rc.local 运行我的 discord 机器人,而为了让它工作,我必须在 /etc/rc.local 中执行此操作:

(sleep 30; python3 /home/pi/applications/myBot.py &) &

无论出于何种原因,睡眠 10 的通常建议不起作用,这是在 pi 4 上,启动时没有太多其他事情发生。

【讨论】:

【参考方案5】:

我想你可能遇到了和我一样的问题。我安装了“discord”而不是“discord.py”。我能够将我的 requirements.txt 更改为使用“discord.py”而不是“discord”。

discord.py==1.3.4

【讨论】:

以上是关于Discord.py 错误:TypeError:__new__() 得到了一个意外的关键字参数“deny_new”的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: Message 类型的对象不是 JSON 可序列化的 |不和谐.py

在 discord.py wait_for 上带有 check() 的 TypeError

TypeError:func()缺少1个必需的位置参数:从discord.py中的不同文件夹导入函数时为'self'

如何使用 discord.py 创建颜色角色

Discord.py 如何在另一个命令中调用另一个命令?

Discord.py 如何从不和谐消息中读取 int 并将其作为变量发送到嵌入中