IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Appel d'un autre fichier


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 75
    Points : 35
    Points
    35
    Par défaut Appel d'un autre fichier
    Bonjour à tous,

    Un collègue et moi, nous nous sommes lancé un défi afin de créer un petit bot Discord pour notre team.
    Petite précision, nous débutons juste dans la programmation avec Python.
    Celui-ci fonctionne parfaitement mais le code est tout stocké dans un même fichier.
    Je souhaiterais pouvoir le scinder, pour pouvoir y travailler plus confortablement dessus, si nous venons à rajouter des fonctionnalités dans le futur.
    Avec l'aide de différents tutos, j'arrive à appeler une fonction "print" simple, mais je n'arrive pas à appeler la commande "clear"....

    Pourriez-vous me venir en aide et m'indiquer ce que j'ai mal fait dans le code?
    Je pense que j'ai du me mélanger les pinceaux

    Je vous mets en copie le code 2 fichiers.

    Le fichier bot.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    import re
    import datetime
    import os.path
    import discord
    import asyncio
    from discord.ext import commands
    from discord.utils import get
    from discord.ext.commands import Bot
     
    TOKEN = ''
    client = commands.Bot(command_prefix = '.')
     
    extensions =['clear']
     
    @client.event
    async def on_ready():
        print('Bot Online')
     
    if __name__ == '__main__':
        for extension in extensions:
            try:
                client.load_extension(extension)
            except Exception as error:
                print('{} cannot be loaded. [{}]'.format(extension, error))
     
    client.run(TOKEN)
    Le fichier clear.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    import discord
    from discord.ext import commands
     
    client = commands.Bot(command_prefix = '.')
     
    class Clear:
        def __init__(self, client):
            self.client = client
     
        @commands.command(pass_context=True)       
        async def clear(ctx, number):
            user_roles = [r.name.lower() for r in ctx.message.author.roles]
            if "modos" not in user_roles:
                return await client.say(":no_entry: "+ctx.message.author.mention+", tu n'as pas le droit d'exécuter cette commande... :no_entry:")
            pass
            mgs = []
            number = int(number) + 1
            numbervrai = number - 1
            async for x in client.logs_from(ctx.message.channel, limit = number):
                mgs.append(x)
            await client.delete_messages(mgs)
            await client.say(":recycle: "+str(numbervrai)+" Message(s) supprimé(s) par "+ctx.message.author.mention+" :recycle:")
     
    def setup(client):
        client.add_cog(Clear(client))
    Avec Visual Studio Code, j'ai async et ctx de surligné en rouge dans le fichier clear.py

    Cordialement.

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 830
    Points : 7 132
    Points
    7 132
    Par défaut
    Bonjour,

    Avec Visual Studio Code, j'ai async et ctx de surligné en rouge dans le fichier clear.py
    Quelle version de python as-tu ? asyncio existe que depuis la version 3.5...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 75
    Points : 35
    Points
    35
    Par défaut
    Bonjour,

    Quelle version de python as-tu ? asyncio existe que depuis la version 3.5...
    J'utilise la version 3.6.8 sur windows, car la dernière version poserait des soucis d'après ce que j'ai pu lire.
    Dans Visual Studio Code, j'ai installé l'extension Python 2019.1.0

    J'ai ajouté asyncio, car ça ne fonctionnait pas sans non plus

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par elsabio Voir le message
    Avec Visual Studio Code, j'ai async et ctx de surligné en rouge dans le fichier clear.py
    Soit çà fonctionne et Visual Studio ne reconnaît ces instructions là, soit çà plante et vous avez un message d'erreur à poster.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 75
    Points : 35
    Points
    35
    Par défaut
    vous avez un message d'erreur à poster.
    Dans le terminal, j'ai ces messages:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    AttributeError: 'Clear' object has no attribute 'message'
     
    The above exception was the direct cause of the following exception:
     
    Traceback (most recent call last):
      File "C:\Users\elsabio\AppData\Local\Programs\Python\Python36\lib\site-packages\discord\ext\commands\bot.py", line 846, in process_commands
        yield from command.invoke(ctx)
      File "C:\Users\elsabio\AppData\Local\Programs\Python\Python36\lib\site-packages\discord\ext\commands\core.py", line 374, in invoke
        yield from injected(*ctx.args, **ctx.kwargs)
      File "C:\Users\elsabio\AppData\Local\Programs\Python\Python36\lib\site-packages\discord\ext\commands\core.py", line 54, in wrapped
        raise CommandInvokeError(e) from e
    discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'Clear' object has no attribute 'message'
    et ces problèmes du fait que async et ctx soient souligné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Method should have "self" as first argument [ligne 11, 5]
    Instance of 'Clear' has no 'message' member [ligne 12, 47]
    Instance of 'Clear' has no 'message' member [ligne 14, 51]
    Instance of 'Clear' has no 'message' member [ligne 19, 41]
    Instance of 'Clear' has no 'message' member [ligne 22, 87]
    De plus, j'ai du mal à comprendre l'appel de fonction sous python.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Je dirais que si vous voulez utiliser une bibliothèque comme discord, des messages d'erreurs comme AttributeError: 'Clear' object has no attribute 'message' doivent vous être suffisamment familiers pour que vous sachiez quoi faire: ajouter l'attribut "message" en essayant de comprendre côté discord ce qu'il vient faire et d'où il vient (peut être que "Clear" doit être s/classe de... et çà c'est pas Python qui vous le dira).

    Citation Envoyé par elsabio Voir le message
    De plus, j'ai du mal à comprendre l'appel de fonction sous python.
    Alors, il faut commencer par le début alors et piocher dans la page des tutos un cours adapté à votre niveau et à vos besoins.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 75
    Points : 35
    Points
    35
    Par défaut
    il faut commencer par le début alors et piocher dans la page des tutos
    C'est ce que j'ai fait, mais je n'ai pas trouvé d'exemple ressemblant à mon cas.
    Peut être ai-je mal cherché.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par elsabio Voir le message
    C'est ce que j'ai fait, mais je n'ai pas trouvé d'exemple ressemblant à mon cas.
    Peut être ai-je mal cherché.
    Programmer c'est pas chercher un code à recopier, c'est comprendre comment l'écrire.... et s'acclimater avec les messages d'erreurs divers et variés que l'on rencontre en faisant les exercices.
    Si vous n'avez pas fait çà, vous ne savez même pas ou chercher en cas de problème... et vous en êtes réduit à recopier du code sans trop comprendre.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 75
    Points : 35
    Points
    35
    Par défaut
    Je suis entièrement d'accord, mais tout le monde ne fonctionne pas comme vous le dites. N'ayant qu'un besoin épisodique, regarder comment des exemples sont écrit, permet aussi d'en comprendre une partie, je vous l'accorde pas la majorité du fonctionnement.

  10. #10
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    Bonjour,

    J'utilise moi même discord.py et en premier lieu il faut savoir si tu utilise bien la version rewrite (visiblement oui tu utilise discord.commands)

    quelques conseils :
    - renomme ton instance de commands.Bot en bot (et non client)
    - n'utilise pas pass argument
    - utilise les check (@commands.has_role() au lieu de ta list comprehension
    - vérifie que l'utilisateur fait bien la commande sur une guilde et non en DM (@commands.guild_only())
    - utilise les converters avec les annotations de type.

    Tu utilise un mélange de rewrite et de async (la branche async de la lib est déprécié et non maintenue), et bien sur les 2 ne sont pas compatibles.

    voici un exemple de code pour la version rewrite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    import discord
    from discord.ext import commands
     
     
     
    class Clear:
    	"""
            Cogs pour clean des messages.
            """
    	def __init__(self, bot):
    		self.bot = bot
     
     
    	def __unload(self):
    		pass
     
     
    	async def on_ready(self):
    		pass
     
     
            @commands.command()
            @commands.guild_only()
            @commands.has_role("modos")
    	async def clean(self, ctx, number : int = 5):
    		"""
                    Permet de supprimer x messages (5 par défaut).
                    """
    		deleted_msg = await ctx.purge(limit=number+1)  # + 1 car le message de commande sera compté dans les messages supprimés.
    		await ctx.send(f"{len(deleted_msg)} messages supprimés.")
     
    def setup(bot):
    	bot.add_cog(Clear(bot))
    ps : si tu ne maitrise pas python tu va te manger salement avec discord.py

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 75
    Points : 35
    Points
    35
    Par défaut
    Je vais regarder ce que tu as proposé

    si tu ne maitrise pas python tu va te manger salement avec discord.py
    C'est bien le cas, je ne pensais pas que scinder en plusieurs fichier serait si fastidieux, mais je vais persévérer.
    J'aime aller au bout des choses.

    Il faut que j'arrive à comprendre le mécanisme.....

Discussions similaires

  1. Appel macro depuis autre fichier => ne s'accomplit pas
    Par dedam dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/04/2016, 21h30
  2. [XL-2010] Appel d'un autre fichier
    Par Compte temporaire dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/12/2015, 08h39
  3. [JAVA] Appeller fonction qui est dans un autre fichier
    Par Aspic dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/05/2007, 21h12
  4. appel d'une variable d'un autre fichier
    Par jmbonnaz dans le forum MATLAB
    Réponses: 1
    Dernier message: 18/04/2007, 11h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo