problème de changement de nom ett d'icn serveur discord

changée guild name/icon avec un bot discord

Amaury a marqué ce sujet comme résolu.

bonjours j’ai retournée tout internet mais je n’ai rien trouvée je veux changée le nom et l’Icon d’un serveur discord avec mon bot mais rien ne marche

pour le nom du serveur ses bizzard car dans mon terminal de commande Visual studio code si me dit que sa marche ( voila le message qui s’affiche quand sa marche

"le nom {guild.name} a été changée en {serveur_name}"

donc se message s’affiche et ils u as AUCUNE erreur affiche en plus ( voila le code que j’utilise)

@client.command()
async def name(ctx):
  await ctx.message.delete()
  guild = ctx.guild
  await ctx.guild.edit(serveur_name="test")
  print (Fore.GREEN + f" le nom {guild.name} a été changée en {serveur_name}")

et pour changée l’icon sa me met se message d’erreur

Ignoring exception in command icon:
Traceback (most recent call last):
  File "C:\Python310\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "f:\tout les dossier\discord tools\les logiciel\les mien\test\main.py", line 39, in icon
    await ctx.guild.edit(ctx.guild.icon, icon=Atomic-Bomb.jpg)
NameError: name 'Atomic' is not defined

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Python310\lib\site-packages\discord\ext\commands\bot.py", line 939, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Python310\lib\site-packages\discord\ext\commands\core.py", line 863, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Python310\lib\site-packages\discord\ext\commands\core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: NameError: name 'Atomic' is not defined

et pour l’icon j’ai se code

@client.command()
async def icon(ctx):
  guild = ctx.guild
  await ctx.message.delete()
  with open('Atomic-Bomb.jpg', 'rb') as f:
      icon = f.read()
      await ctx.guild.edit(ctx.guild.icon, icon=Atomic-Bomb.jpg)

a oui et j’ai mit Atomic-Bomb.jpg dans le meme dossier que main.py et dans visual studio code j’ouvre directement le dossier et pas individuellement main.py et Atomic-Bomb.jpg

voila help pls ( c vrm urgent )

@Amaury — Mise en forme et coloration du code.

+0 -0

D’après l’historique du dernier message, le souci est réglé ? Ou son effacement indique que non ?

S’il n’est pas réglé, le souci premier est que tu as entré une chaîne de caractère en oubliant les guillemets. Tu l’as écrit directement, donc Python pense que tu fais appel à une variable, et c’est ce qu’il te dit : NameError: name 'Atomic' is not defined.

Mais je soupçonne un autre problème, car la méthode de discord.py attend des bytes pour redéfinir l’icône.

Dans ton code, ce qui représente le fichier c’est la variable f (car tu as écrit with open("...", "rb") as f), et ce qui représente les octets (bytes) de ton fichier, c’est icon (car défini par f.read() qui lit les octets du fichier). C’est donc ça, la variable icon qui contient les octets, qu’il faut passer à la méthode de Discord.py, et non un nom de fichier auquel tu aurais oublié les guillemets.

Quelque chose dans cet esprit.

@client.command()
async def icon(ctx):
  guild = ctx.guild
  await ctx.message.delete()
  with open('Atomic-Bomb.jpg', 'rb') as f:
      icon = f.read()
      await ctx.guild.edit(ctx.guild.icon, icon=icon)
+0 -0

Je t’invite à lire la documentation : elle précise qu’on ne doit pas lui donner comme premier argument ctx.guild.icon (ça vient d’où ?), mais uniquement préciser ce qu’on veut changer (des paramètres nommés, par exemple icon=…, mais il y en a plein d’autres listés sur le lien ci-dessus).

Donc, normalement, le retirer devrait fonctionner, si j’ai bien compris.

@client.command()
async def icon(ctx):
  guild = ctx.guild
  await ctx.message.delete()
  with open('Atomic-Bomb.jpg', 'rb') as f:
      icon = f.read()
      await ctx.guild.edit(icon=icon)

L’erreur vient d’une subtilité de la programmation orientée objets en Python. Ce qu’on appelle paramètre positionnel (positional argument), ce sont les paramètres de fonction qui n’ont pas de noms, et qu’on ne repère qu’à leur ordre, leur position, dans la liste des paramètres de la fonction.

Ici, tu en avais donné un alors qu’il n’en fallait pas. Python te dit qu’il y en a deux, car en programmation orientée objet, il passe implicitement la guilde à la fonction (car tu appelles une méthode d’un objet).

Si ce n’est pas clair pour toi, tu pourras lire ce cours sur la programmation orientée objet en Python, mais si tu es encore débutant·e, ce n’est pas prioritaire, je t’invite à déjà mieux comprendre les bases :) .

+0 -0

Je t’en prie, heureux d’avoir pu aider ! N’hésite pas à approfondir avec les ressources que j’ai donné dans le précédent post pour être plus à l’aise avec ce genre de notions, et donc plus autonome, à l’avenir :)

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte