This repository has been archived on 2022-03-31. You can view files and clone it, but cannot push or open issues or pull requests.
bot-licence/cogs/commands.py

142 lines
8.1 KiB
Python
Raw Normal View History

2020-10-14 02:50:24 +02:00
import discord
from discord.ext import commands
from random import randint, choice
import time
class Commands(commands.Cog):
2020-10-14 03:02:43 +02:00
"""Commandes générales du bot."""
2020-10-14 02:50:24 +02:00
2020-10-14 03:02:43 +02:00
def __init__(self, bot):
self.bot = bot
2020-10-14 02:50:24 +02:00
2020-10-14 03:23:14 +02:00
# 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
2020-10-14 03:02:43 +02:00
@commands.command()
async def ping(self, ctx, *, question = '0'):
"""Affiche mon ping.\n ➡ Syntaxe: .ping [help]"""
if question == 'help':
2020-10-20 15:06:08 +02:00
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)"))
2020-10-14 03:02:43 +02:00
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
2020-10-20 15:06:08 +02:00
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'))
2020-10-14 03:02:43 +02:00
await ctx.message.add_reaction(emoji = '')
2020-10-14 02:50:24 +02:00
2020-10-14 03:07:28 +02:00
@commands.command(aliases = ['calculatrice', 'calcu'])
2020-10-14 03:02:43 +02:00
async def calc(self, ctx, *, msg):
2020-10-14 03:07:28 +02:00
"""Calculatrice.\n ➡ Syntaxe: .calc/calculatrice/calcu <calcul>"""
2020-10-14 03:02:43 +02:00
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)
2020-10-14 02:50:24 +02:00
2020-10-14 03:02:43 +02:00
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.")
2020-10-14 02:50:24 +02:00
2020-10-14 03:07:28 +02:00
@commands.command(aliases = ['syntaxe'])
2020-10-14 03:02:43 +02:00
async def syntax(self, ctx):
2020-10-14 03:07:28 +02:00
"""Informations pour bien éditer son texte.\n ➡ Syntaxe: .syntax/syntaxe"""
2020-10-14 03:02:43 +02:00
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 += "-----------------------------------------------------\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("***text en italique-gras***\n")
syntaxe += "***text en italique-gras***\n"
syntaxe += "-----------------------------------------------------\n"
2020-10-15 10:12:25 +02:00
syntaxe += discord.utils.escape_markdown("le \ permet de désactiver l'emoji/mention de ce qui suit : \:thumbsup: et \<@765155546416021504>\n")
syntaxe += "le \ permet de désactiver l'emoji/mention de ce qui suit : \:thumbsup: et \<@765155546416021504>\n"
syntaxe += "-----------------------------------------------------\n"
2020-10-14 03:02:43 +02:00
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)
2020-10-14 02:50:24 +02:00
2020-10-14 03:02:43 +02:00
@commands.command(aliases = ['infos'])
async def info(self, ctx):
"""Donne des infos sur le bot.\n ➡ Syntaxe: .info/infos"""
2020-10-14 03:23:14 +02:00
embed = discord.Embed(url = 'https://github.com/Mylloon', color = randint(0, 0xFFFFFF)) # pub gratuite
2020-10-14 02:50:24 +02:00
2020-10-14 03:02:43 +02:00
embed.set_author(name='Bot Licence L1', icon_url=ctx.author.avatar_url)
2020-10-14 02:50:24 +02:00
2020-10-20 15:06:08 +02:00
# 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})
2020-10-14 03:23:14 +02:00
total_unique = len(self.bot.users) # pareil mais en comptants les hors lignes aussi
2020-10-14 02:50:24 +02:00
2020-10-14 03:23:14 +02:00
# liste des différents canaux
2020-10-14 03:02:43 +02:00
voice_channels = []
text_channels = []
for guild in self.bot.guilds:
voice_channels.extend(guild.voice_channels)
text_channels.extend(guild.text_channels)
2020-10-14 02:50:24 +02:00
2020-10-14 03:02:43 +02:00
text = len(text_channels)
voice = len(voice_channels)
2020-10-14 02:50:24 +02:00
2020-10-14 03:23:14 +02:00
embed.add_field(name='Développeur', value='Mylloon#7869') # pub encore
2020-10-14 03:02:43 +02:00
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')
2020-10-20 15:06:08 +02:00
# 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__}')
2020-10-14 03:02:43 +02:00
await ctx.send(embed=embed)
2020-10-14 02:50:24 +02:00
def setup(bot):
2020-10-14 03:02:43 +02:00
bot.add_cog(Commands(bot))