Partage
  • Partager sur Facebook
  • Partager sur Twitter

Bot discord.py ne détecte que lui

17 novembre 2020 à 19:40:55

Bonjour, 

Après des heures de recherches, je n'arrive pas à régler ce problème:

Quand j'essaie de détecter toutes les personnes se trouvant dans un salon ou dans le serveur tout-cours mon bot ne retourne que lui.

J'ai essayé du code que j'ai trouvé sur internet mais ça fait toujours pareil.

exemples :

for guild in bot.guilds:
    for member in guild.members:
        print(member)

et

for i in bot.get_all_members():
    print(i.name)



renvoi:

le_giga_bot#1221
le_giga_bot#1221
le_giga_bot#1221

le code complet est :

# import les modules
import discord
import time
from discord.ext import commands
from logsmanager import *
import sys
from inputt import *
import os
import threading
from discord import Member
from discord.ext.commands import has_permissions, MissingPermissions
import pyautogui
import pip
from PIL import Image
from win10toast import ToastNotifier
from notif import notif


nbr = startlogs()[1]
start = True
print("\n\n---------------------------  " + str(datenow()) + "  ---------------------------\n")



print(str(datenow()) + "   préparation du bot ...")
printlog("préparation du bot ...", nbr)

printlog("création du bot ...", nbr)
print(str(datenow()) + "   création du bot ...")
bot = commands.Bot(command_prefix=">")

printlog("configuration du bot ...", nbr)
print(str(datenow()) + "   configuration du bot ...")

print(str(datenow()) + "   configuration des salons vocaux ...")
printlog("configuration des salons vocaux ...", nbr)

voicechannel = discord.voice_client


@bot.event
async def on_ready():
    print(str(datenow()) + "   bot lancé : " + str(bot))
    await bot.change_presence(status=discord.Status.idle, activity=discord.Game(" salut ! Je suis un bot !"))
    printlog("bot lancé : " + str(bot), nbr)

#
# @bot.event
# async def on_command_error(ctx, error):
#     if isinstance(error, commands.MissingRole):
#         await ctx.send(str(ctx.message.author) + " : Vous n'avez pas le role nécéssaire ! ")
#         print(str(datenow()) + "   " + str(ctx.message.author) + " à utilisé une commande interdite !")
#         printlog(str(ctx.message.author) + " à utilisé une commande interdite !", nbr)
#         return True
#     elif isinstance(error, commands.CommandNotFound):
#         print(str(datenow()) + "   " + str(ctx.message.author) + " à utilisé une commande érronée !")
#         printlog(str(ctx.message.author) + " à utilisé une commande érronée !", nbr)
#         await ctx.send("Cette commande n'existe pas !")
#         return True
#     else:
#         print("erreur !")


@bot.event
async def on_member_join(member):
    role = discord.utils.get(member, name="joueur")
    await member.add_roles(member, role)


printlog("création de la commande >ping...", nbr)
print(str(datenow()) + "   création de la commande >ping...")


@bot.command()
async def ping(ctx):
    print(str(datenow()) + "   Commande >ping utilisé par : " + str(ctx.message.author))
    printlog("Commande >ping utilisé par : " + str(ctx.message.author), nbr)
    time1 = time.perf_counter()
    await ctx.trigger_typing()
    time2 = time.perf_counter()
    ping = round((time2 - time1) * 1000)
    await ctx.send(f"pong :ping_pong: : " + str(ping) + " milisecondes")
    print("pong : " + str(ping) + " milisecondes")
    printlog("pong : " + str(ping) + " milisecondes", nbr)


printlog("création de la commande >clear...", nbr)
print(str(datenow()) + "   création de la commande >clear...")


@commands.has_role("Admin")
@bot.command(pass_context=True)
async def clear(ctx, amount=1000):
    print(str(datenow()) + "   Commande >clear utilisé par : " + str(ctx.message.author))
    printlog("Commande >clear utilisé par : " + str(ctx.message.author), nbr)
    i = 5
    while not i == 0:
        await ctx.send("clear dans : " + str(i) + " secondes")
        printlog("clear dans : " + str(i) + " secondes", nbr)
        print(str(datenow()) + "clear dans " + str(i) + " secondes", nbr)
        time.sleep(1)
        i = i - 1
    channel = ctx.message.channel
    messages = []
    async for messagez in channel.history(limit=int(amount)):
        messages.append(messagez)
    await channel.delete_messages(messages)
    time.sleep(0.5)
    await ctx.send("clear fini !")
    printlog("clear fini !", nbr)
    print(str(datenow()) + "   clear fini !")


@bot.command()
@commands.has_role("Admin")
async def stopbot(ctx):
    await ctx.send("arret du bot ...")
    print(str(datenow()) + "   Commande >stopbot utilisé par : " + str(ctx.message.author))
    printlog("Commande >stopbot utilisé par : " + str(ctx.message.author), nbr)
    printlog("arret du bot ...", nbr)
    print(str(datenow()) + "   arret du bot ...")
    await bot.close()

bot.remove_command("help")


@bot.command()
async def ghelp(ctx):
    print(str(datenow()) + "   Commande >help utilisé par : " + str(ctx.message.author))
    printlog("Commande >help utilisé par : " + str(ctx.message.author), nbr)
    ctx.send("""admin""")


ctxv = None


@bot.command()
async def init(ctx):
    global ctxv
    ctxv = ctx

def getplayerRole(ctx):
    roles = ctx.guild.roles
    for role in roles:
        if role.name == "Players":
            return role

async def mutechanel(ctx, voicechannell):
    while True:
        pyautogui.PAUSE = 1
        pyautogui.FAILSAFE = True
        try:
            if (not pyautogui.locateOnScreen(r'whoistheimpostor.png') is None) or (not pyautogui.locateOnScreen(r'exitbtn.png') is None) or (not pyautogui.locateOnScreen(r'backbtn.png') is None) or (not pyautogui.locateOnScreen(r'whiteplayer.png') is None) or (not pyautogui.locateOnScreen(r'quit.png') is None) or (not pyautogui.locateOnScreen(r'kick.png') is None) or (not pyautogui.locateOnScreen(r'cancelbtn.png') is None):
                await voicechannell.set_permissions(getplayerRole(ctx), speak=True, connect=True, view_channel=True, stream=False)
                print("yes")
            else:
                print("no")
                await voicechannell.set_permissions(getplayerRole(ctx), speak=False, connect=True, view_channel=True, stream=False)
        except discord.ext.commands.errors.CommandInvokeError or OSError:
            pass


@bot.command()
async def connect_partie(ctx):
    global voicechannel
    try:
        member: discord.Member = ctx.author
        voicechannel = discord.utils.get(ctx.guild.channels, name='partie')
        await voicechannel.connect()
    except discord.ext.commands.errors.CommandInvokeError:
        pass
    for i in bot.get_all_members():
        print(i.name)
    await mutechanel(ctx, voicechannel)





printlog("lancement du bot ...", nbr)
print(str(datenow()) + "   lancement du bot ...")
jeton = "tocken secret"
# th1 = threading.Thread(target=get_level_state)
th2 = threading.Thread(target=lambda: bot.run(jeton))
#
# th1.start()
th2.start()
#
# th1.join()
th2.join()

print("bot éteint")
printlog("bot éteint", nbr)

(ne faites pas attention aux imports inutiles)

Merci,

Yannis300307


-
Edité par yannis300307 18 novembre 2020 à 14:46:36

  • Partager sur Facebook
  • Partager sur Twitter

Bonjour je suis un humain ! Enfin peut-être que nous vivons dans un univers virtuel et que

ce qu'on croit être, n'est pas ??!!!!

5 décembre 2020 à 10:44:04

Des idées ?
  • Partager sur Facebook
  • Partager sur Twitter

Bonjour je suis un humain ! Enfin peut-être que nous vivons dans un univers virtuel et que

ce qu'on croit être, n'est pas ??!!!!

15 février 2021 à 12:17:41

Bonjour, J'ai le met pb avec ceci 

for members in bot.guilds.get_role(id).members:
    print(members)

et 

for guild in bot.guilds:
    for member in guild.members:
        print(member)

Je ne comprend pas non plus d'ou vient le soucis j'ai passez les permission du bot sur "Admin" mais ça n'a rien changer


  • Partager sur Facebook
  • Partager sur Twitter
18 février 2021 à 13:45:08

up !
  • Partager sur Facebook
  • Partager sur Twitter

Bonjour je suis un humain ! Enfin peut-être que nous vivons dans un univers virtuel et que

ce qu'on croit être, n'est pas ??!!!!

1 juin 2021 à 13:42:20

J'ai cherché sur un autre site : StackOverflow (c'est en anglais)

Et donc le truc c'est juste qu'il faut mettre :

intents = discord.Intents.all()
client = discord.Client(intents=intents)

Voilà voilà

-
Edité par Soblito 1 juin 2021 à 14:27:07

  • Partager sur Facebook
  • Partager sur Twitter
1 juin 2021 à 14:27:29

et comme ça ?
for u in bot.users:
    print(u.name)
  • Partager sur Facebook
  • Partager sur Twitter
1 juin 2021 à 15:05:49

J'ai cherché sur un autre site : StackOverflow (c'est en anglais)

Et donc le truc c'est juste qu'il faut mettre :

intents = discord.Intents.all()
client = discord.Client(intents=intents)

Voilà voilà

  • Partager sur Facebook
  • Partager sur Twitter
5 juillet 2021 à 14:59:14

Slt,

Par défaut le bot n'a pas accès aux membres d'un serveur,

pour lui donner tous les accès(ceux de base + présences + membres),

il faut à la fois:

(1) activer les intents dans le programme:

par exemple à la ligne:

bot = commands.Bot(command_prefix=">")

mettre:

bot = commands.Bot(command_prefix=">", intents=discord.Intents.all())

(2) activer les intents sur le site:

il faut aller dans l'application sur: https://discord.com/developers/applications

aller dans l'onglet bot et activer "Presence Intent" et "Server Members Intent":

[comme il y est marqué activer ces derniers nécessitera une vérification du bot si déployé à grande échelle (100+ serveurs)]

Bonne continuation

------

plus d'info sur les utilisations des intents(par exemple pour seulement en activer une partie): https://discordpy.readthedocs.io/en/stable/api.html#intents



-
Edité par YaroX 5 juillet 2021 à 15:01:26

  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2021 à 13:15:00

Merci de ta raiponce mais cela fait un moment que je n'ai pas travaillé sur le bot. Néanmoins, Cela pourra être pratique pour les personnes voulant le faire.

Cordialement

  • Partager sur Facebook
  • Partager sur Twitter

Bonjour je suis un humain ! Enfin peut-être que nous vivons dans un univers virtuel et que

ce qu'on croit être, n'est pas ??!!!!

7 février 2024 à 14:53:45 - Message modéré pour le motif suivant : Merci de créer votre propre sujet


7 février 2024 à 15:13:58

@MaelMohamed Bonjour, merci de ne pas squatter le sujet des autres, créer votre propre sujet dans le respect des règles du forum à savoir qu'il nous faut la description de votre problème et le code que vous avez écrit inséré sur le forum à l'aide de l'outil d'intégration de code soit le bouton code </>.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Liens conseillés

Je ferme ici.

  • Partager sur Facebook
  • Partager sur Twitter