Hier, mon code était parfaitement bien. Tout fonctionnait ... et ça allait très bien. Tout d'un coup, cette erreur:

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

Apparaît dans ma console PyCharm. Je l'ai recherché sur Internet, mais je n'ai trouvé que des questions similaires sans réponse. J'espère que la communauté stackoverflow pourra m'aider. Je n'ai pas changé mon code, j'ai simplement essayé d'héberger mon bot sur heroku, et ça ne s'est pas bien passé. Et après mes premières tentatives, j'ai abandonné. Mais j'ai découvert que mon bot était devenu fou et que je ne pouvais plus l'exécuter: <. Est-ce que quelqu'un d'autre a vécu cela et sait comment y remédier? MISE À JOUR Je viens de découvrir que pour une raison quelconque, cela ne fonctionne que sur mon serveur de test, mais pas sur les autres serveurs.

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'

Je l'ai essayé avec un fichier et un bot différents et j'ai obtenu les mêmes résultats, c'est comme un problème avec discord.py. C'est littéralement tout mon code

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')
50
Daniel Tam 22 juil. 2020 à 09:00

5 réponses

Meilleure réponse

Discord a poussé un nouveau changement qui change l'objet d'écrasement.

Réinstallez simplement la dernière version de Discord.py

python3 -m pip install -U discord.py

C'est ça.

63
Amit Ghosh 22 juil. 2020 à 07:52

Je veux clarifier la réponse. Sur un Raspberry Pi, j'avais installé discord.py pour l'utilisateur pi et pour root - et il s'agissait de versions différentes à différents endroits. Cela m'a causé beaucoup de confusion; Je n'avais aucune idée que j'avais deux exemplaires, et je ne sais pas comment descendre à seulement 1, ce que je préfère. Mais les commandes qui le font fonctionner pour root sont:

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

Alors et seulement alors pourrais-je exécuter mon bot discord depuis /etc/rc.local, et pour que cela fonctionne, je devais le faire dans /etc/rc.local:

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

Pour une raison quelconque, la suggestion habituelle de sleep 10 n'a PAS fonctionné, et c'est sur un pi 4 avec pas grand-chose d'autre au démarrage.

2
Scott M 12 août 2020 à 16:22

Je pense que vous rencontrez peut-être le même problème que moi. J'ai installé "discord" au lieu de "discord.py". J'ai pu modifier mon requirements.txt pour utiliser "discord.py" au lieu de "discord".

discord.py==1.3.4
0
Dharman 28 juil. 2020 à 01:57

Je viens d'avoir ce problème et je viens de le résoudre, et voici ce que j'ai fait (cela a fonctionné pour mon ordinateur portable exécutant Windows):

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

J'exécute également un bot discord sur un Raspberry Pi et voici comment je l'ai corrigé:

pip uninstall discord.py
pip install discord.py
python3 -m pip install -U discord.py
4
Connor Harvey 23 juil. 2020 à 01:38

Une autre option, si vous êtes coincé avec une ancienne version de discord.py et que vous préférez ne pas avoir à mettre à jour plus de 10 000 lignes de code maintenant, est le correctif rapide et sale suivant que j'ai proposé basé sur ce 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.

(Remarque: ceci est différent de discord.py 0.16.7. Cela peut être légèrement différent selon la version de discord.py que vous utilisez.)

Je dois souligner qu’il s’agit au mieux d’un piratage et qu’il n’ya aucune garantie quant à la durée de fonctionnement de cette solution. De plus, il n'y a aucune garantie que Discord n'introduira pas soudainement un autre changement d'API aléatoire qui brisera l'ancien discord.py de manière nouvelle et intéressante. Vous (comme moi) devez vraiment mettre à jour votre code pour vous conformer au plus récent discord.py. Je ne présente cette solution de contournement que car je soupçonne que vous êtes dans la même situation que moi (avoir des choses cassées soudainement et avoir besoin de remettre les choses en marche MAINTENANT mais pas le temps de mettre à jour rapidement plus de 10 000 lignes de code pour résoudre ce problème.

5
Donald Burr 22 juil. 2020 à 09:50