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