Ayer, mi código estaba perfectamente bien. Todo estaba funcionando... y iba muy bien. De repente, este error:
TypeError: __new__() got an unexpected keyword argument 'deny_new'
aparece en mi consola PyCharm. Lo busqué en Internet, pero solo encontré preguntas similares con cero respuestas. Espero que la comunidad de stackoverflow pueda ayudarme. No cambié mi código, todo lo que hice fue intentar alojar mi bot en heroku y no salió bien. Y después de mis primeros intentos, me rendí. Pero descubrí que mi bot comenzó a volverse loco y ya no podía ejecutarlo :<. ¿Alguien más ha experimentado esto y sabe cómo solucionarlo? ACTUALIZAR Acabo de descubrir que, por alguna razón, solo funciona en mi servidor de prueba, pero no en ningún otro servidor.
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'
Lo probé con un archivo y bot diferente y obtuve los mismos resultados, esto es como un problema con discord.py. Este es literalmente mi código completo.
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')
Discord impulsó un nuevo cambio que cambia el objeto de sobrescritura.
Simplemente reinstale la última versión de Discord.py
python3 -m pip install -U discord.py
Eso es todo.
Una opción alternativa, si está atascado con una versión anterior de discord.py
y prefiere no tener que actualizar más de 10k líneas de código en este momento, es el siguiente parche rápido y sucio que se me ocurrió basado en este compromiso :
--- 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.
(nota: esto difiere de discord.py 0.16.7
. Puede ser ligeramente diferente según la versión de discord.py
que esté ejecutando).
Debo enfatizar que esto es un truco en el mejor de los casos, y no hay garantías de cuánto tiempo seguirá funcionando. Además, no hay garantías de que Discord no introduzca repentinamente algún otro cambio de API aleatorio que romperá el antiguo discord.py
de formas nuevas e interesantes. Usted (como yo) realmente debería actualizar su código para cumplir con el discord.py
más nuevo. Solo presento esta solución alternativa porque sospecho que se encuentra en la misma situación que yo (que las cosas se rompan repentinamente y necesite volver a ponerlas en funcionamiento AHORA MISMO, pero no tiene tiempo para actualizar rápidamente más de 10k líneas de código para solucionar este problema.
Acabo de tener este problema y ahora lo solucioné, y esto es lo que hice (esto funcionó para mi computadora portátil con Windows):
pip uninstall discord.py pip install discord.py py -3 -m pip install -U discord.py
También estoy ejecutando un bot de discordia en una Raspberry Pi y así es como lo arreglé:
pip uninstall discord.py pip install discord.py python3 -m pip install -U discord.py
Creo que usted puede estar experimentando el mismo problema que yo. Tenía "discord" instalado en lugar de "discord.py". Pude cambiar mis requisitos.txt para usar "discord.py" en lugar de "discord".
discord.py==1.3.4
Quiero aclarar la respuesta. En una raspberry pi, de alguna manera tenía instalado discord.py para el usuario pi y para root, y eran versiones diferentes en diferentes lugares. Esto me causó mucha confusión; No tenía idea de que tenía dos copias, y no tengo idea de cómo llegar a solo 1, lo que preferiría. Pero los comandos que lo hacen funcionar para root son:
sudo -i pip3 uninstall discord.py pip3 install discord.py python3 -m pip install -U discord.py
Entonces, y solo entonces, pude ejecutar mi bot de Discord desde /etc/rc.local, y para que eso funcionara, tuve que hacer esto en /etc/rc.local:
(sleep 30; python3 /home/pi/applications/myBot.py &) &
Por alguna razón, la sugerencia habitual de dormir 10 NO funcionó, y esto es en un pi 4 sin que suceda mucho más al inicio.