Discord.py

input()

a marqué ce sujet comme résolu.

Bonjour,

Je me suis récemment lancer à la construction d’un bot discord en python, je me suis dis que je pourrais m’améliorer au niveau de ce langage.

Cependant, je recontre un problème. En effet mon code (ci-dessous) génère une erreur au niveau de la syntaxe "invalid syntax".

 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import discord
import asyncio
import os.path
import json

client = discord.Client()

pseudo = input("")

from riotwatcher import RiotWatcher

watcher = RiotWatcher('api-key')
my_region = 'euw1'
me = watcher.summoner.by_name(my_region, pseudo)
game = watcher.match.matchlist_by_account("euw1", me["accountId"])
print(me)

def get_match(watcher, matchId):
    if os.path.isfile("matchs/"+str(matchId)+".json"):
        with open("matchs/"+str(matchId)+".json", "r") as file:
            data = file.read()
            jsonvalue = json.loads(data)
    else:
        jsonvalue = watcher.match.by_id(my_region, matchId)
        with open("matchs/"+str(matchId)+".json", "w") as file:
            file.write(json.dumps(jsonvalue))
    return jsonvalue

def full_history(watcher, name):
    guy = watcher.summoner.by_name(my_region, name)
    matchlist = watcher.match.matchlist_by_account(my_region, guy["accountId"])
    c = 1
    #Nombre de victoires
    wins = 0
    #On parcourt la liste de matchs
    for match in matchlist["matches"]:
        print("{0} / {1}".format(c, matchlist["totalGames"]))
        c += 1
        #On récupère les données du match
        m = get_match(watcher, match["gameId"])
        #On détermine qui est le joueur, pour cela on parcours les joueurs
        for i in range(len(m["participantIdentities"])):
            if m["participantIdentities"][i]["player"]["accountId"] == guy["accountId"]:
                index = m["participantIdentities"][i]["participantId"]
        #Les Ids vont de 1 à 10. 1,2,3,4,5 sont la team 1, 6,7,8,9,10 sont la team 2
        if m["teams"][index // 6]["win"] == "Win": #index // 6  renverra 0 pour 1à5, et 1 pour 6à10
            wins += 1
    #Total de games - wins = nombre de défaites
    defeats = matchlist["totalGames"] - wins
    return [wins, defeats]


wins, defeats = full_history(watcher,  me["name"]) ###
t = str(round(wins / game["totalGames"] * 100, 2))  ###

@client.event
async def on_message(message):
    if message.content.startswith('!stats'):
        await client.send_message(message.channel, pseudo + " à un total de " + "{0} wins {1} looses." .format(wins, defeats) + " Son winrate est de " + t + "%")###
    elif message.content.startswith('!lol'):
        await client.send_message(message.channel, t)

    if message.content.lower().startswith('!stata' + pseudo):
        embed = discord.Embed(
            color=0xe67e22,
            description="Stats of " + pseudo
        )
        embed.set_author(
            name= pseudo + " Stats",
            url="http://youtube.com/"
        )
        embed.add_field(
            name= pseudo + " Wins: ",
            value="Wins : " + pseudo + " à un total de " + "{0} wins " .format(wins, defeats) + "\n",
            inline=True
        )
        embed.add_field(
            name= pseudo + " Loses: ",
            value="Loses : " pseudo +  " à un total de " + "{1} défaites " .format(wins, defeats) + "\n",
            inline=True
        )
        embed.add_field(
            name= pseudo + " Winrate: ",
            value="Winrate :" + pseudo " possède un ratio de " + t + "%\n",
            inline=True
        )
        embed.set_footer(
            text="Signé le bot diabolique :)"
        )
        embed.set_thumbnail(
            url="https://image.noelshack.com/fichiers/2017/40/1/1506980052-deku.jpg"
        )

        await client.send_message(message.channel, embed=embed)

client.run('token')

`

L’erreur est "invalid syntax" j’ai relu plusieurs fois le code mais sans rien trouvé :/

Est-ce la valeur pseudo que j’ai mal défini ?

Merci et bonne journée/soirée

+0 -0

Hello,

C’est la ligne 79 qui pose problème :

1
value="Loses : " pseudo +  " à un total de " + "{1} défaites " .format(wins, defeats) + "\n",

Il manque un + avant pseudo. Essaie d’avoir de meilleures informations de déboguage à l’avenir.

Quel est ton environnement ?

P.S. : j’en profite pour faire ma petite publicité pour mon bot discord : https://github.com/Ge0/cacophony

Hello,

C’est la ligne 79 qui pose problème :

1
value="Loses : " pseudo +  " à un total de " + "{1} défaites " .format(wins, defeats) + "\n",

Il manque un + avant pseudo. Essaie d’avoir de meilleures informations de déboguage à l’avenir.

Quel est ton environnement ?

P.S. : j’en profite pour faire ma petite publicité pour mon bot discord : https://github.com/Ge0/cacophony

Ge0

Non, j’ai toujours la même erreur :/ Je vais voir ton bot :)

EDIT: L’erreur ne viendrait pas de input() ? Enfait, j’aimerais que l’utilisateur entre la commande !stata <pseudo> et que le bot réponds.

EDIT 2 : ’E0001:invalid syntax (<string>, line 83)’ at: ’83,1’

Donc cela doit être un problème d’intendations, j’ai essayé divers intendations, regardé des codes sur le net pour voir si le code était correct, et je ne vois vraiment pas d’erreur :/

+0 -0

Tu as la même erreur à la ligne 83 qu’à la ligne 79.

backmachine

Oui, j’avais remarqué mais je voulais pas edit pour la troisième fois ou refaire un post.

J’ai un autre problème. En effet, rien ne se passe lorsque je fais la commande <!stata "pseudo entré grâce au input"> alors que le bot devrait normalement se mettre à calculer le nombre de wins, loose du pseudo indiqué grâce au input("").

 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import discord
import asyncio
import os.path
import json

client = discord.Client()


from riotwatcher import RiotWatcher


pseudo = input("")
watcher = RiotWatcher('<api-key>')
my_region = 'euw1'
me = watcher.summoner.by_name(my_region, pseudo)
game = watcher.match.matchlist_by_account("euw1", me["accountId"])
print(me)

def get_match(watcher, matchId):
    if os.path.isfile("matchs/"+str(matchId)+".json"):
        with open("matchs/"+str(matchId)+".json", "r") as file:
            data = file.read()
            jsonvalue = json.loads(data)
    else:
        jsonvalue = watcher.match.by_id(my_region, matchId)
        with open("matchs/"+str(matchId)+".json", "w") as file:
            file.write(json.dumps(jsonvalue))
    return jsonvalue

def full_history(watcher, name):
    guy = watcher.summoner.by_name(my_region, name)
    matchlist = watcher.match.matchlist_by_account(my_region, guy["accountId"])
    c = 1
    #Nombre de victoires
    wins = 0
    #On parcourt la liste de matchs
    for match in matchlist["matches"]:
        print("{0} / {1}".format(c, matchlist["totalGames"]))
        c += 1
        #On récupère les données du match
        m = get_match(watcher, match["gameId"])
        #On détermine qui est le joueur, pour cela on parcours les joueurs
        for i in range(len(m["participantIdentities"])):
            if m["participantIdentities"][i]["player"]["accountId"] == guy["accountId"]:
                index = m["participantIdentities"][i]["participantId"]
        #Les Ids vont de 1 à 10. 1,2,3,4,5 sont la team 1, 6,7,8,9,10 sont la team 2
        if m["teams"][index // 6]["win"] == "Win": #index // 6  renverra 0 pour 1à5, et 1 pour 6à10
            wins += 1
    #Total de games - wins = nombre de défaites
    defeats = matchlist["totalGames"] - wins
    return [wins, defeats]


wins, defeats = full_history(watcher,  me["name"]) ###
t = str(round(wins / game["totalGames"] * 100, 2))  ###

@client.event
async def on_message(message):
    if message.content.startswith('!stats'):
        await client.send_message(message.channel, pseudo + " à un total de " + "{0} wins {1} looses." .format(wins, defeats) + " Son winrate est de " + t + "%")###
    elif message.content.startswith('!lol'):
        await client.send_message(message.channel, t)

    if message.content.lower().startswith('!stata ' + pseudo):
        embed = discord.Embed(
            color=0xe67e22,
            description="Stats of " + pseudo
        )
        embed.set_author(
            name= pseudo + " Stats",
            url="http://youtube.com/"
        )
        embed.add_field(
            name= pseudo + " Wins: ",
            value="Wins : " + pseudo + " à un total de " + "{1} wins " .format(wins, defeats) + "\n",
            inline=True
        )
        embed.add_field(
            name= pseudo + " Loses: ",
            value="Loses : " + pseudo +  " à un total de " + "{0} défaites " .format(wins, defeats) + "\n",
            inline=True
        )
        embed.add_field(
            name= pseudo + " Winrate: ",
            value="Winrate :" + pseudo + " possède un ratio de " + t+ "%\n",
            inline=True
        )
        embed.set_footer(
            text="Signé le bot diabolique :)"
        )
        embed.set_thumbnail(
            url="https://image.noelshack.com/fichiers/2017/40/1/1506980052-deku.jpg"
        )

        await client.send_message(message.channel, embed=embed)

client.run('token')

`
+0 -0
1
value="Wins : " + pseudo + " à un total de " + "{1} wins " .format(wins, defeats) + "\n",
1
value="Wins : {} à un total de {} wins and {} defeats\n" .format(pseudo, wins, defeats),

Ca serait bien d’avoir l’erreur aussi…

KFC

Re et désolé du retard de ma réponse…

Alors je veux bien, mais le bot ne se lance pas je ne parviens pas à savoir pourquoi… j’ai re-créer un bot, changer le token dans le code mais rien n’y fait :/

EDIT: J’ai remarqué que lorsque j’écrivais un pseudo dans la console, j’obtenais ceci : https://image.noelshack.com/fichiers/2017/40/7/1507483342-capture.png

Donc c’est normal, lorsque le bot discord s’allumer ça faisait aussi ça. Le problème maintenant c’est que le bot discord s’allume pas et je ne parviens pas à voir d’erreur.

 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import discord
import asyncio
import os.path
import json

client = discord.Client()


from riotwatcher import RiotWatcher


pseudo = input("")
watcher = RiotWatcher('apikey')
my_region = 'euw1'
me = watcher.summoner.by_name(my_region, pseudo)
game = watcher.match.matchlist_by_account("euw1", me["accountId"])
print(me)

def get_match(watcher, matchId):
    if os.path.isfile("matchs/"+str(matchId)+".json"):
        with open("matchs/"+str(matchId)+".json", "r") as file:
            data = file.read()
            jsonvalue = json.loads(data)
    else:
        jsonvalue = watcher.match.by_id(my_region, matchId)
        with open("matchs/"+str(matchId)+".json", "w") as file:
            file.write(json.dumps(jsonvalue))
    return jsonvalue

def full_history(watcher, name):
    guy = watcher.summoner.by_name(my_region, name)
    matchlist = watcher.match.matchlist_by_account(my_region, guy["accountId"])
    c = 1
    #Nombre de victoires
    wins = 0
    #On parcourt la liste de matchs
    for match in matchlist["matches"]:
        print("{0} / {1}".format(c, matchlist["totalGames"]))
        c += 1
        #On récupère les données du match
        m = get_match(watcher, match["gameId"])
        #On détermine qui est le joueur, pour cela on parcours les joueurs
        for i in range(len(m["participantIdentities"])):
            if m["participantIdentities"][i]["player"]["accountId"] == guy["accountId"]:
                index = m["participantIdentities"][i]["participantId"]
        #Les Ids vont de 1 à 10. 1,2,3,4,5 sont la team 1, 6,7,8,9,10 sont la team 2
        if m["teams"][index // 6]["win"] == "Win": #index // 6  renverra 0 pour 1à5, et 1 pour 6à10
            wins += 1
    #Total de games - wins = nombre de défaites
    defeats = matchlist["totalGames"] - wins
    return [wins, defeats]


wins, defeats = full_history(watcher,  me["name"]) ###
t = str(round(wins / game["totalGames"] * 100, 2))  ###

@client.event
async def on_message(message):
    if message.content.startswith('!stats'):
        await client.send_message(message.channel, pseudo + " à un total de " + "{0} wins {1} looses." .format(wins, defeats) + " Son winrate est de " + t + "%")###
    elif message.content.startswith('!lol'):
        await client.send_message(message.channel, t)

    if message.content.lower().startswith('!stata ' + pseudo):
        embed = discord.Embed(
            color=0xe67e22,
            description="Stats of " + pseudo
        )
        embed.set_author(
            name= pseudo + " Stats",
            url="http://youtube.com/"
        )
        embed.add_field(
            name= pseudo + " Wins: ",
            value="Wins : " + pseudo + " à un total de " + "{1} wins " .format(wins, defeats) + "\n",
            inline=True
        )
        embed.add_field(
            name= pseudo + " Loses: ",
            value="Loses : " + pseudo +  " à un total de " + "{0} défaites " .format(wins, defeats) + "\n",
            inline=True
        )
        embed.add_field(
            name= pseudo + " Winrate: ",
            value= "Winrate :" + pseudo + " possède un ratio de " + t + "%\n" .format(pseudo, t),
            inline=True
        )
        embed.set_footer(
            text="Signé le bot diabolique :)"
        )
        embed.set_thumbnail(
            url="https://image.noelshack.com/fichiers/2017/40/1/1506980052-deku.jpg"
        )

        await client.send_message(message.channel, embed=embed)

client.run('token')

`
+0 -0

Tu utilises quels outils pour ne pas voir d’erreur quand ton bot se lance ?

Je me doute que mon message paraîtra hors sujet voire un peu cru et ça n’est pas le but de te brusquer, mais tu devrais soit changer d’outil, soit apprendre à les maîtriser avant de poser tes questions sur ce forum. Ici, malheureusement, ça n’est pas un forum de support, mais un forum d’aide.

Si tu veux que l’on t’aide à te dépatouiller et surtout si tu souhaites progresser, ça n’est pas en disant en permanence ça marche pas je sais pas pourquoi tout en faisant un copier/coller de ton code source complet que nous t’aiderons.

De notre côté, on est obligé de copier/coller ton code dans un script temporaire pour le lancer manuellement sur notre machine et obtenir l’erreur. C’est laborieux. C’est à toi de faire ça.

Si tu travailles sous Windows, tu peux tout à fait utiliser python via la ligne de commande pour exécuter ton script normalement et récupérer la ou les erreurs qui posent problème.

Edit : tu as un ` qui traîne à la fin de ton code source. J’espère qu’il ne traîne pas dans ton fichier.

+0 -0

Tu utilises quels outils pour ne pas voir d’erreur quand ton bot se lance ?

Je me doute que mon message paraîtra hors sujet voire un peu cru et ça n’est pas le but de te brusquer, mais tu devrais soit changer d’outil, soit apprendre à les maîtriser avant de poser tes questions sur ce forum. Ici, malheureusement, ça n’est pas un forum de support, mais un forum d’aide.

Si tu veux que l’on t’aide à te dépatouiller et surtout si tu souhaites progresser, ça n’est pas en disant en permanence ça marche pas je sais pas pourquoi tout en faisant un copier/coller de ton code source complet que nous t’aiderons.

De notre côté, on est obligé de copier/coller ton code dans un script temporaire pour le lancer manuellement sur notre machine et obtenir l’erreur. C’est laborieux. C’est à toi de faire ça.

Si tu travailles sous Windows, tu peux tout à fait utiliser python via la ligne de commande pour exécuter ton script normalement et récupérer la ou les erreurs qui posent problème.

Edit : tu as un ` qui traîne à la fin de ton code source. J’espère qu’il ne traîne pas dans ton fichier.

Ge0

J’utilise Visual Studio Code.

Je prends compte de ce que tu me dis, je vais faire des efforts à ce niveau là.

Quand tu dis changer d’outil, tu parle d’éditeur de texte ?

J’ai aussi exécuter mon fichier via la console mais aucune erreur :/ Lorsque tu dis que c’est à moi de faire ça, j’en suis conscient et je le sais très bien (même si me le rappeller me remet bien en tête qu’il faut se débrouiller) et c’est la première fois que je n’arrive pas à obtenir une erreur.

J’ai essayé avec Sublime Text, Visual Studio Code, python, IDLE (Python Shell) mais vraiment aucune erreur :/

Non, le ` n’est pas dans mon code source j’ai relu mon code plusieurs fois, je pense que c’est un bug de zds car j’ai essayé de l’enlever via un edit mais je n’y suis pas parvenue :p

En tout cas merci de votre aide, je tiens compte de ces remarques et je vais m’améliorer de ce point de vue-là !

Merci et bonne journée/soirée !

+0 -0

Quand tu dis changer d’outil, tu parle d’éditeur de texte ?

Je pense notamment à ta capture d’écran : https://image.noelshack.com/fichiers/2017/40/2/1507044287-capture.png

On dirait que tu utilises un logiciel vieux de 20 ans… Pourquoi ne pas lancer ton script directement en ligne de commande ?

Ge0

J’utilisais l’editeur de python (Python Shell). Et j’utilise aussi le cmd de Windows.

+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