Skip to content

Commit

Permalink
Ajout des trois commandes : name, description, pfp. Correction de que…
Browse files Browse the repository at this point in the history
…lques erreurs mineurs dans le programme.
  • Loading branch information
S2P-KB committed Jun 18, 2024
1 parent fb27a69 commit 00e7035
Showing 1 changed file with 71 additions and 19 deletions.
90 changes: 71 additions & 19 deletions Discord-Bot-main/Bot/UR-Bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,67 +3,119 @@
import DebugBot
from discord.ext import commands
import os

import aiohttp


load_dotenv()
TOKEN = os.getenv('TOKEN')


class UR_BOT(commands.Bot):

async def on_ready(self):
print('--- We have successfully loggged in as {0.user}'.format(self))


# Mettre à jour la présence du bot
await update_bot_presence()

async def on_message(self, message):

if message.author == self.user:
return
return

await DebugBot.debug_on_message(message);
await DebugBot.debug_on_message(message)

return await bot.process_commands(message)




intent = discord.Intents.default()
intent.members = True
intent.messages = True

bot = UR_BOT(command_prefix= DebugBot.event.BOT_PREFIX,intents=intent)
bot = UR_BOT(command_prefix=DebugBot.event.BOT_PREFIX, intents=intent)
bot.remove_command('help')


# Commande pour changer le pseudo du bot
@bot.command()
async def name(ctx, new_name: str):
server_id = ctx.guild.id

try:
guild = bot.get_guild(server_id)

if guild:
# Changer le pseudo du bot sur le serveur spécifié
await guild.me.edit(nick=new_name)
await ctx.send(f"Le pseudo du bot a bien été changé en {new_name}.")
else:
await ctx.send("Impossible de trouver le serveur spécifié.")

except discord.HTTPException as e:
await ctx.send("Une erreur s'est produite lors du changement de pseudo du bot. Veuillez regarder la console.")
print(e)


@bot.command(name="ping")
@commands.guild_only()
async def ping(ctx):
await DebugBot.debug_on_ping(ctx)
# Fonction qui met à jour automatiquement (et en permanence) le statut personnalisé du bot.
async def update_bot_presence():
activity = discord.Game(name=bot.description) # Ces deux lignes doivent être appelées en permanence par
await bot.change_presence(activity=activity) # La fonction on_ready. C'est pourquoi elles ne sont pas écrites
# dans la commande 'description'.


# Commande pour changer le statut personnalisé du bot.
@bot.command()
async def description(ctx, texte: str):
bot.description = texte
await update_bot_presence()
await ctx.send(f"La description du bot a été mise à jour. Pensez à la ré-écrire à chaque lancement du bot.")
# N. B : Ce serait idéal si l'utilisateur n'avait pas à entrer la commande à chaque lancement.


@bot.command()
async def pfp(ctx, *, url: commands.clean_content):
try:
server_id = ctx.guild.id
guild = bot.get_guild(server_id)

if guild:
# Récupération de l'image.
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp: # Malgré l'erreur, le code fonctionne toujours.
if resp.status != 200:
return await ctx.send("Impossible de télécharger l'image car elle contient un guillemet ou / et"
" des apostrophes.")

# La photo de profil prend la forme de l'image.
data = await resp.read()
await bot.user.edit(avatar=data)
await ctx.send("Photo de profil mise à jour. Redémarrez le bot pour voir le résultat.")
else:
await ctx.send("Impossible de trouver le serveur spécifié.")
except Exception as e:
await ctx.send(f"Une erreur s'est produite : '{str(e)}' n'est pas une URL valide.")


@bot.command(name="help")
async def help(ctx):
await DebugBot.debug_on_help(ctx)
await DebugBot.debug_on_help(ctx)


@bot.command(name="prez")
async def prez(ctx):
await DebugBot.debug_on_prez(ctx)
await DebugBot.debug_on_prez(ctx)


@DebugBot.update_all_modules
async def reload_module():
return 0;

return 0


@bot.command(aliases=['reload', 'rld'])
async def reload_module(ctx):
await reload_module();
await ctx.channel.send("The scripts has been reloaded.");
return 0;
await reload_module()
await ctx.channel.send("The scripts has been reloaded.")
return 0


bot.run(TOKEN)

1 comment on commit 00e7035

@S2P-KB
Copy link
Contributor Author

@S2P-KB S2P-KB commented on 00e7035 Jun 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Une description des trois nouvelles commandes :
• name : change le nickname du bot sur le serveur où est tapée la commande. Le nom initial (qui apparaît sur chaque serveur) ne change pas.
Pourtant, il est possible de changer ce dernier. Cependant, Discord y impose une limite (deux changements par heure).
--> Faudrait il garder la première option ou coder la deuxième ; faire les deux ?.

• description : change le message d'état de présence du bot. 

On ne peut malheureusement pas changer la section "À propos de moi" par une commande
--> dans le README.MD : il faut créer une section avec l'espace 'Discord Developers', qu'ils sachent comment changer cette description.
De plus, tout comme un utilisateur lambda ne pourrait pas le faire, un même bot ne peut pas posséder plusieurs statuts différents selon les serveurs.

• pfp : change la photo de profil du bot en vérifiant l'URL et en retournant les messages appropriés. 

--> dans le README.MD : il faut créer un tutoriel, qu'ils sachent upload une image sur une page web.
E.g : L'utilisateur possède une image sur son ordinateur. Il poste cette dernière sur un chan discord, d'où il pourra récupérer une URL valide.

D'ailleurs, on ne peut vérifier l'ID du serveur qu'à l'intérieur des fonctions, car c'est en recevant une commande, que le bot peut connaître le serveur d'où est tapée cette dernière. C'est pourquoi il subsiste une répétition des lignes
suivantes : "server_id = ctx.guild.id" & "guild = bot.get_guild(server_id)".
Ces deux commandes récupèrent l'ID du serveur d'où est tapée la commande.
C'est elles qui permettent pour un même bot d'avoir un nom ou une photo de profil différente selon les serveurs.

Please sign in to comment.