151 lines
No EOL
8.5 KiB
Python
Executable file
151 lines
No EOL
8.5 KiB
Python
Executable file
import discord
|
||
from discord.ext import commands
|
||
from random import randint, choice
|
||
import time
|
||
|
||
class Commands(commands.Cog):
|
||
"""Commandes générales du bot."""
|
||
|
||
def __init__(self, bot):
|
||
self.bot = bot
|
||
|
||
# dans le message envoyer : le premier chiffre est la latence du protocole Discord WebSocket,
|
||
# le deuxieme c'est le temps que le bot a pris pour faire les p'tits calculs,
|
||
# le troisième c'est le temps que le bot a pris pour réagir au message
|
||
@commands.command()
|
||
async def ping(self, ctx, *, question = '0'):
|
||
"""Affiche mon ping.\n ➡ Syntaxe: .ping [help]"""
|
||
if question == 'help':
|
||
return await ctx.send(embed = discord.Embed(color = randint(0, 0xFFFFFF),
|
||
description = ":hourglass: correspond au temps entre deux battements de cœurs (en millisecondes)\n\n"
|
||
+ ":stopwatch: correspond au temps que met le bot a calculer le ping (en millisecondes)\n\n"
|
||
+ ":heartbeat: correspond au temps que met le bot a réagir au messages (en millisecondes)"))
|
||
else:
|
||
now = int(round(time.time() * 1000))
|
||
ping = now - int(round(ctx.message.created_at.timestamp() * 1000))
|
||
embed = discord.Embed(description = 'Pinging...')
|
||
message = await ctx.send(embed = embed)
|
||
ping2 = int(round(time.time() * 1000)) - now
|
||
await message.edit(embed = discord.Embed(color = randint(0, 0xFFFFFF),
|
||
description = f':hourglass: {round(self.bot.latency * 1000)}ms\n\n:stopwatch: {ping2}ms\n\n:heartbeat: {ping}ms'))
|
||
await ctx.message.add_reaction(emoji = '✅')
|
||
|
||
@commands.command(aliases = ['calculatrice', 'calcu'])
|
||
async def calc(self, ctx, *, msg):
|
||
"""Calculatrice.\n ➡ Syntaxe: .calc/calculatrice/calcu <calcul>"""
|
||
equation = msg.replace('^', '**').replace('x', '*').replace('×', '*').replace('÷', '/').replace('≥', '>=').replace('≤', '<=')
|
||
try:
|
||
try:
|
||
if '=' in equation:
|
||
if '<' in equation:
|
||
left = eval(equation.split("<=")[0])
|
||
right = eval(equation.split("<=")[1])
|
||
answer = str(left <= right)
|
||
elif '>' in equation:
|
||
left = eval(equation.split(">=")[0])
|
||
right = eval(equation.split(">=")[1])
|
||
answer = str(left >= right)
|
||
else:
|
||
left = eval(equation.split("=")[0])
|
||
right = eval(equation.split("=")[1])
|
||
answer = str(left == right)
|
||
else:
|
||
answer = str(eval(equation))
|
||
except ZeroDivisionError:
|
||
return await ctx.send("Tu ne peux pas divisé par 0.")
|
||
except TypeError:
|
||
return await ctx.send("Requête de calcul invalide.")
|
||
if '.' in answer:
|
||
aftercomma = answer.split(".")[1]
|
||
if len(aftercomma) > 2:
|
||
answer = str(round(float(answer),2))
|
||
equation = f"'{equation}' arrondi à 2"
|
||
equation = equation.replace('*', '×').replace('/', '÷').replace('>=', '≥').replace('<=', '≤')
|
||
embed = discord.Embed(color = randint(0, 0xFFFFFF), title = 'Calculatrice')
|
||
embed.set_footer(text = ctx.author)
|
||
|
||
embed.add_field(name = 'Calcul :', value = equation, inline = False)
|
||
embed.add_field(name = 'Réponse :', value = answer.replace('False', 'Faux').replace('True', 'Vrai'), inline = False)
|
||
await ctx.message.add_reaction(emoji = '✅')
|
||
await ctx.send(content = None, embed = embed)
|
||
@calc.error
|
||
async def calc_error(self, ctx, error):
|
||
await ctx.send("Tu n'as pas spécifié de calcul.")
|
||
|
||
@commands.command(aliases = ['syntaxe'])
|
||
async def syntax(self, ctx):
|
||
"""Informations pour bien éditer son texte."""
|
||
syntaxe = "-----------------------------------------------------\n"
|
||
syntaxe += discord.utils.escape_markdown("```Js\n")
|
||
syntaxe += discord.utils.escape_markdown("//code en js (possible de remplacer 'js' par d'autres languages . adaptez le !)\n")
|
||
syntaxe += discord.utils.escape_markdown('console.log("hi");\n')
|
||
syntaxe += discord.utils.escape_markdown("```\n")
|
||
syntaxe += "```Js\n"
|
||
syntaxe += "//code en js (possible de remplacer 'js' par d'autres languages . adaptez le !)\n"
|
||
syntaxe += 'console.log("hi");\n'
|
||
syntaxe += "```\n"
|
||
syntaxe += "Si ton code est trop long, mets le sur <https://pastebin.com/>\n"
|
||
syntaxe += "-----------------------------------------------------\n"
|
||
syntaxe += discord.utils.escape_markdown("`code sur une seule ligne`\n")
|
||
syntaxe += "`code sur une seule ligne`\n"
|
||
syntaxe += "-----------------------------------------------------\n"
|
||
syntaxe += discord.utils.escape_markdown("*texte en italique*\n")
|
||
syntaxe += "*texte en italique*\n"
|
||
syntaxe += "-----------------------------------------------------\n"
|
||
syntaxe += discord.utils.escape_markdown("**text en gras**\n")
|
||
syntaxe += "**text en gras**\n"
|
||
syntaxe += "-----------------------------------------------------\n"
|
||
syntaxe += discord.utils.escape_markdown("__texte souligné__\n")
|
||
syntaxe += "__texte souligné__\n"
|
||
syntaxe += "-----------------------------------------------------\n"
|
||
syntaxe += discord.utils.escape_markdown("~~texte barré~~\n")
|
||
syntaxe += "~~texte barré~~\n"
|
||
syntaxe += "-----------------------------------------------------\n"
|
||
syntaxe += discord.utils.escape_markdown("~~__***text en italique-gras-souligné-barré***__~~\n")
|
||
syntaxe += "~~__***text en italique-gras-souligné-barré***__~~\n"
|
||
syntaxe += "-----------------------------------------------------\n"
|
||
syntaxe += discord.utils.escape_markdown("\:joy: <- l'emoji ne va pas fonctionné grâce au \ \n")
|
||
syntaxe += "\:joy: <- l'emoji ne va pas fonctionné grâce au \ \n"
|
||
syntaxe += "-----------------------------------------------------\n"
|
||
syntaxe += discord.utils.escape_markdown("> cette ligne est cité\npas celle là\n")
|
||
syntaxe += "> cette ligne est cité\npas celle là\n"
|
||
syntaxe += "-----------------------------------------------------\n"
|
||
syntaxe += discord.utils.escape_markdown(">>> cette ligne est cité\ncelle là aussi (et elles le seront toutes!)\n")
|
||
syntaxe += ">>> cette ligne est cité\ncelle là aussi (et elles le seront toutes!)\n"
|
||
await ctx.message.add_reaction(emoji = '✅')
|
||
await ctx.send(syntaxe)
|
||
|
||
@commands.command(aliases = ['info'])
|
||
async def infos(self, ctx):
|
||
"""Donne des infos sur le KassouBot.\n ➡ Syntaxe: .infos/info"""
|
||
appinfo = await self.bot.application_info()
|
||
|
||
embed = discord.Embed(color = randint(0, 0xFFFFFF))
|
||
|
||
embed.set_author(name=appinfo.name, icon_url=self.bot.user.avatar_url)
|
||
|
||
# liste utilisateurs de tous les serveurs où le bot est, en ligne
|
||
total_online = len({m.id for m in self.bot.get_all_members() if m.status is discord.Status.online})
|
||
total_unique = len(self.bot.users) # pareil mais en comptants les hors lignes aussi
|
||
|
||
# liste des différents canaux
|
||
voice_channels = []
|
||
text_channels = []
|
||
for guild in self.bot.guilds:
|
||
voice_channels.extend(guild.voice_channels)
|
||
text_channels.extend(guild.text_channels)
|
||
|
||
text = len(text_channels)
|
||
voice = len(voice_channels)
|
||
|
||
embed.add_field(name='Dev', value=f"[{appinfo.owner}](https://github.com/Mylloon)") # pub gratuite
|
||
embed.add_field(name='Serveurs', value=len(self.bot.guilds))
|
||
embed.add_field(name='Membres', value=f'{total_unique} au total\n{total_online} en ligne')
|
||
embed.add_field(name='Channels', value=f'{text} textuelles\n{voice} vocales')
|
||
# ca peut être utile de connaitre quel version le bot utilise sans devoir se connecter a distance au serveur qui fait tourner le bot
|
||
embed.set_footer(text=f'Basé sur discord.py {discord.__version__}')
|
||
await ctx.send(embed=embed)
|
||
|
||
|
||
def setup(bot):
|
||
bot.add_cog(Commands(bot)) |