[REPO REFACTOR]: changed to a better git repository structure with branches

This commit is contained in:
2025-11-01 05:57:50 +01:00
parent d2ad93b3cc
commit bf54e4982e
37 changed files with 1748 additions and 0 deletions

View File

@@ -0,0 +1 @@
1
1 1

View File

@@ -0,0 +1,60 @@
Imagine Dragons
Lil Nas X
Ed Sheeran
OneRepublic
Harry Styles
Mägo de Oz
Black Eyed Peas
Måneskin
BoyWithUke
Bad Bunny
Bizarrap
The Score
bbno$
The Weeknd
Green Day
Queen
AC/DC
Elton John
Coldplay
LiSA
Glass Animals
Post Malone
KSI
Cardi B
JBalvin
Marshmello
Farruko
Dua Lipa
Ava Max
Armin van Buuren
Panic! At The Disco
Billie Eilish
Alan Walker
Bebe Rexha
Bruno Mars
Miley Cyrus
Maroon 5
Tones And I
Why don't we
Ali Gatie
Canserbero
Residente
Dire Straits
Pink Floyd
Prince
The Police
Guns N' Roses
Linkin Park
Scorpion
Status Quo
Justin Bieber
Michael Jackson
Ariana Grande
Beyoncé
Lady Gaga
Katy Perry
Adele
Drake
Taylor Swift
Rihanna

View File

View File

@@ -0,0 +1,60 @@
Dishonored 2
The Witness
Journey
Uncharted 2: Among Thieves
Overwatch
Apex Legends
Hollow Knig
Ms. Pac-Man
Counter-Strike 1.6
Left 4 Dead 2
EarthBound
Diablo II
StarCraft
World of Warcraft
Star Wars: Knights of the Old Republic
Fallout: New Vegas
Final Fantasy VI
Pokémon Yellow
Metroid Prime
The Elder Scrolls V: Skyrim
Resident Evil 4
Shadow of the Colossus
The Last of Us Part 2
Red Dead Redemption
Metal Gear Solid
Sid Meier's Civilization IV
The Legend of Zelda: Ocarina of Time
Minecraft
Halo: Combat Evolved
Half-Life
Final Fantasy XIV
Doom
Tetris
Metal Gear Solid 3: Snake Eater
Half-Life: Alyx
God of War
Chrono Trigger
Portal
Street Fighter II
Super Mario Bros.
Undertale
Bloodborne
BioShock
The Last of Us
The Witcher 3: Wild Hunt
Halo 2
Castlevania: Symphony of the Night
Hades
Grand Theft Auto V
Super Mario Bros. 3
Disco Elysium
Half-Life 2
Red Dead Redemption 2
Super Mario 64
Mass Effect 2
Super Metroid
The Legend of Zelda: A Link to the Past
Portal 2
Super Mario World
The Legend of Zelda: Breath of the Wild

60
resources/files/shows.txt Normal file
View File

@@ -0,0 +1,60 @@
Squid Game
La Casa de Papel
Lupin
Avatar
Los Simpson
Lightyear
Tadeo Jones
Los Minions
Doraemon
Shin-Chan
JoJo's Bizarre Adventures
Boku no Hero Academia
Fullmetal Alchemist
SPY X FAMILY
Black Clover
My Dress-up Darling
New Amsterdam
Death Note
Cobra Kai
Karate Kid
Interstellar
Cómo entrenar a tu dragón
Free Guy
Spider Man
Dr Strange
Matrix
John Wick
Iron Man
The Good Doctor
Komi-san can't communicate
Big Mouth
(Des)encanto
Rick y Morty
Historias Corrientes
Hora de Aventuras
Chowder
Star Trek
Star Wars
Lost in Space
Tokyo Revengers
Gladiator
The Crown
Peaky Blinders
Sex Education
Enola Holmes
Los Juegos del Hambre
Juego de Tronos
El Señor de los Anillos
La princesa mononoke
Hitman
Los Croods
Plan de Escape
Código Lyoko
El Padrino
El viaje de Chihiro
El castillo ambulante
Coach Carter
Mascotas
Aida
La que se avecina

View File

BIN
resources/images/djpype.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 833 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

BIN
resources/images/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

BIN
resources/images/pype.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

22
src/bot.py Normal file
View File

@@ -0,0 +1,22 @@
import discord
from settings import BOT_TOKEN
from os import listdir
from utils.logger.pype_logger import PypeLogger
bot = discord.Bot(intents=discord.Intents.all())
def load_cogs():
for file in listdir("./cogs"):
if(file.endswith(".py")):
try:
bot.load_extension(f"cogs.{file[:-3]}")
PypeLogger.info(f"{file[:-3]} has been loaded")
except Exception as e:
PypeLogger.error(f"Error loading {file[:-3]}",e)
def main():
load_cogs()
bot.run(BOT_TOKEN)
if __name__ == "__main__":
main()

227
src/cogs/admin.py Normal file
View File

@@ -0,0 +1,227 @@
import discord
from discord.ext import commands
from discord.commands import SlashCommandGroup
from settings import EMBED_COLOR, GUILD_IDS, ADMIN_ROLE_ID, ANNOUNCES_CHANNEL_ID, TIMEZONE
from utils.embeds import crear_embed
from utils.logger.pype_logger import PypeLogger
from utils.files import read_json, write_json
from utils.reactions import añadir_reacciones
from datetime import datetime
import pytz
import json
class Admin(commands.Cog):
def __init__(self, bot):
self.bot = bot
self._last_member = None
admin = SlashCommandGroup(
name="admin",
description="Comandos de administración",
guild_ids=GUILD_IDS
)
@admin.command(name="anuncio", guild_ids=GUILD_IDS, description="Anuncia algo.")
async def anuncio(self, ctx, *, mensaje) -> None:
embed = discord.Embed(color=discord.Color(EMBED_COLOR))
embed.add_field(name="📢** | Anuncio**", value=mensaje)
if ctx.author.guild.get_role(ADMIN_ROLE_ID) in ctx.author.roles:
channel = ctx.guild.get_channel(ANNOUNCES_CHANNEL_ID)
await channel.send(embed=embed)
await ctx.respond(f"Se ha anunciado el mensaje, {ctx.author.mention} ", ephemeral=True)
else:
await ctx.respond(f"No tienes permisos para eso, {ctx.author.mention} ", ephemeral=True)
# crea un embed con fields, footer, image, thumbnail, author, title, description, color, timestamp a elegir
@admin.command(name="embed", guild_ids=GUILD_IDS, description="Crea un embed.")
async def create_embed(self, ctx: commands.Context, *,
title: str,
description: str,
fields: str = None,
footer_text: str = None,
timestamp: bool = False,
author_name: str = None,
image_url: str = None,
thumbnail_url: str = None,
color: int = None) -> None:
embed = crear_embed(ctx,title,description,fields,footer_text,timestamp,author_name,image_url,thumbnail_url,color)
await ctx.send(embed=embed)
await ctx.respond(f"Se ha creado el embed, {ctx.author.mention} ", ephemeral=True)
@admin.command(name='ban', guild_ids=GUILD_IDS, description="Alza el martillo del ban.")
async def ban(self, ctx, *, miembro: discord.Member) -> None:
embed = discord.Embed(color=discord.Color(EMBED_COLOR))
embed.add_field(
name="🚫** | BAN**", value=f"{miembro.mention} ha sido golpead@ por el martillo del Ban.")
if ctx.author.guild.get_role(ADMIN_ROLE_ID) in ctx.author.roles:
await ctx.respond(embed=embed)
await miembro.ban()
else:
await ctx.respond(f"No tienes permisos para eso, {ctx.author.mention} ", ephemeral=True)
@admin.command(name='unban', guild_ids=GUILD_IDS, description="Baja el martillo del ban.")
async def unban(self, ctx, *, miembro: discord.Member) -> None:
embed = discord.Embed(color=discord.Color(EMBED_COLOR))
embed.add_field(name="🚫** | UNBAN**",
value=f"{miembro.name} se ha recuperado del martillazo.")
if ctx.author.guild.get_role(ADMIN_ROLE_ID) in ctx.author.roles:
await ctx.respond(embed=embed)
await miembro.unban()
else:
await ctx.respond(f"No tienes permisos para eso, {ctx.author.mention} ", ephemeral=True)
@admin.command(name='kick', guild_ids=GUILD_IDS, description="Expulsa a un miembro.")
async def kick(self, ctx, *, miembro: discord.Member, razon: str = "mal comportamiento") -> None:
embed = discord.Embed(color=discord.Color(EMBED_COLOR))
embed.add_field(
name="🦵🏽** | KICK**", value=f"{miembro.mention} ha sido expulsado por: {razon}.")
if ctx.author.guild.get_role(ADMIN_ROLE_ID) in ctx.author.roles:
await ctx.respond(embed=embed)
await miembro.kick(reason=razon)
else:
await ctx.respond(f"No tienes permisos para eso, {ctx.author.mention} ", ephemeral=True)
@admin.command(name="mute", guild_ids=GUILD_IDS, description="Silencia a un miembro.")
async def mute(self, ctx, *, miembro: discord.Member) -> None:
embed = discord.Embed(color=discord.Color(EMBED_COLOR))
embed.add_field(
name="🔇** | MUTE**", value=f"{miembro.mention} ha sido silenciad@.")
if ctx.author.guild.get_role(ADMIN_ROLE_ID) in ctx.author.roles:
await ctx.respond(embed=embed)
await miembro.edit(mute=True)
else:
await ctx.respond(f"No tienes permisos para eso, {ctx.author.mention} ", ephemeral=True)
@admin.command(name="unmute", guild_ids=GUILD_IDS, description="Desilencia a un miembro.")
async def unmute(self, ctx, *, miembro: discord.Member) -> None:
embed = discord.Embed(color=discord.Color(EMBED_COLOR))
embed.add_field(
name="🔊** | UNMUTE**", value=f"{miembro.mention} ha sido desilenciad@.")
if ctx.author.guild.get_role(ADMIN_ROLE_ID) in ctx.author.roles:
await ctx.respond(embed=embed)
await miembro.edit(mute=False)
else:
await ctx.respond(f"No tienes permisos para eso, {ctx.author.mention} ", ephemeral=True)
@admin.command(name="clearch", guild_ids=GUILD_IDS, description="Borra mensajes.")
async def clear(self, ctx, cantidad: int) -> None:
if ctx.author.guild.get_role(ADMIN_ROLE_ID) in ctx.author.roles:
await ctx.respond(f"Se han limpiado {cantidad} mensajes, {ctx.author.mention}", ephemeral=True)
await ctx.channel.purge(limit=cantidad)
else:
await ctx.respond(f"No tienes permisos para eso, {ctx.author.mention} ", ephemeral=True)
@admin.command(name="lock", guild_ids=GUILD_IDS, description="Bloquea un canal.")
async def lock(self, ctx) -> None:
if ctx.author.guild.get_role(ADMIN_ROLE_ID) in ctx.author.roles:
await ctx.respond(f"Se ha bloqueado el canal, {ctx.author.mention}", ephemeral=True)
await ctx.channel.set_permissions(ctx.guild.default_role, send_messages=False)
else:
await ctx.respond(f"No tienes permisos para eso, {ctx.author.mention} ", ephemeral=True)
@admin.command(name="unlock", guild_ids=GUILD_IDS, description="Desbloquea un canal.")
async def unlock(self, ctx) -> None:
if ctx.author.guild.get_role(ADMIN_ROLE_ID) in ctx.author.roles:
await ctx.respond(f"Se ha desbloqueado el canal, {ctx.author.mention}", ephemeral=True)
await ctx.channel.set_permissions(ctx.guild.default_role, send_messages=True)
else:
await ctx.respond(f"No tienes permisos para eso, {ctx.author.mention} ", ephemeral=True)
@admin.command(name="nick", guild_ids=GUILD_IDS, description="Cambia el apodo de un miembro.")
async def nick(self, ctx, miembro: discord.Member, *, apodo: str) -> None:
if ctx.author.guild.get_role(ADMIN_ROLE_ID) in ctx.author.roles:
await ctx.respond(f"Se ha cambiado el apodo de {miembro.mention} a {apodo}, {ctx.author.mention}", ephemeral=True)
await miembro.edit(nick=apodo)
else:
await ctx.respond(f"No tienes permisos para eso, {ctx.author.mention} ", ephemeral=True)
@admin.command(name="role", guild_ids=GUILD_IDS, description="Añade o quita un rol a un miembro.")
async def role(self, ctx, miembro: discord.Member, *, rol: discord.Role) -> None:
if ctx.author.guild.get_role(ADMIN_ROLE_ID) in ctx.author.roles:
if rol in miembro.roles:
await ctx.respond(f"Se ha quitado el rol {rol.mention} a {miembro.mention}, {ctx.author.mention}", ephemeral=True)
await miembro.remove_roles(rol)
else:
await ctx.respond(f"Se ha añadido el rol {rol.mention} a {miembro.mention}, {ctx.author.mention}", ephemeral=True)
await miembro.add_roles(rol)
else:
await ctx.respond(f"No tienes permisos para eso, {ctx.author.mention} ", ephemeral=True)
@admin.command(name='votacion', guild_ids=GUILD_IDS, description="Crea una votación.")
async def votacion(self, ctx, *, pregunta, reacciones, tiempo = None) -> None:
if ctx.author.guild.get_role(ADMIN_ROLE_ID) in ctx.author.roles:
emojis = "1\uFE0F\u20E3;2\uFE0F\u20E3;3\uFE0F\u20E3;4\uFE0F\u20E3;5\uFE0F\u20E3;6\uFE0F\u20E3;7\uFE0F\u20E3;8\uFE0F\u20E3;9\uFE0F\u20E3"
emojis_list = emojis.split(";")
if tiempo:
embed = discord.Embed(title=pregunta, description=f"Acaba en {tiempo}", color=discord.Color(EMBED_COLOR))
else:
embed = discord.Embed(title=pregunta, description="", color=discord.Color(EMBED_COLOR))
reacciones = reacciones.split(",")
a=0
for r in reacciones:
embed.add_field(name=f"{emojis_list[a]} : {r}", value="", inline=False)
a+=1
embed.set_author(name=f"Votación 📊", icon_url=ctx.author.avatar.url)
embed.set_footer(text=f"Concord")
embed.timestamp = datetime.now(pytz.timezone(TIMEZONE))
msg = await ctx.send(embed=embed)
await añadir_reacciones(msg, emojis, len(reacciones))
await ctx.respond(f"Se ha creado la votación, {ctx.author.mention}", ephemeral=True)
else:
await ctx.respond(f"No tienes permisos para eso, {ctx.author.mention} ", ephemeral=True)
@admin.command(name='warn', guild_ids=GUILD_IDS, description="Añade una advertencia a un miembro.")
async def warn(self, ctx, miembro: discord.Member, *, razon) -> None:
warned_users = read_json("../resources/files/warns.json")
if ctx.author.guild.get_role(ADMIN_ROLE_ID) in ctx.author.roles:
embed = discord.Embed(color=discord.Color(EMBED_COLOR))
embed.add_field(
name="⚠️** | WARN**", value=f"{miembro.mention} ha sido advertid@ por {razon}.")
await ctx.respond(embed=embed)
await miembro.send(f"Has sido advertid@ en {ctx.guild.name} por {razon}.")
key = str(miembro.id)
if key not in warned_users.keys():
warned_users[key] = 1
elif key in warned_users.keys():
warned_users[key]+=1
warnsfile = "../resources/files/warns.json"
write_json(warnsfile, warned_users)
else:
await ctx.respond(f"No tienes permisos para eso, {ctx.author.mention} ", ephemeral=True)
@admin.command(name='warns', guild_ids=GUILD_IDS, description="Muestra las advertencias de un miembro.")
async def warns(self, ctx, miembro: discord.Member) -> None:
warned_users = read_json("../resources/files/warns.json")
if ctx.author.guild.get_role(ADMIN_ROLE_ID) in ctx.author.roles:
embed = discord.Embed(color=discord.Color(EMBED_COLOR))
embed.add_field(
name="⚠️** | WARN**", value=f"{miembro.mention} tiene {warned_users[str(miembro.id)]} advertencias.")
await ctx.respond(embed=embed, ephemeral=True)
else:
await ctx.respond(f"No tienes permisos para eso, {ctx.author.mention} ", ephemeral=True)
@admin.command(name='clearwarns', guild_ids=GUILD_IDS, description="Elimina las advertencias de un miembro.")
async def clearwarns(self, ctx, miembro: discord.Member) -> None:
warned_users = read_json("../resources/files/warns.json")
if ctx.author.guild.get_role(ADMIN_ROLE_ID) in ctx.author.roles:
embed = discord.Embed(color=discord.Color(EMBED_COLOR))
embed.add_field(
name="⚠️** | WARN**", value=f"{miembro.mention} ha sido desadvertid@.")
await ctx.respond(embed=embed, ephemeral=True)
warned_users[str(miembro.id)] = 0
warnsfile = "../resources/files/warns.json"
write_json(warnsfile, warned_users)
else:
await ctx.respond(f"No tienes permisos para eso, {ctx.author.mention} ", ephemeral=True)
def setup(bot) -> None:
bot.add_cog(Admin(bot))

83
src/cogs/events.py Normal file
View File

@@ -0,0 +1,83 @@
import discord
from discord.ext import commands
from settings import (
EMBED_COLOR, BOT_NAME, ADMIN_CHANNEL_ID, BOT_LOGO, COUNTER_CHANNEL_ID,
WELCOME_CHANNEL_ID, UNVERIFIED_ROLE_ID, VERIFIED_ROLE_ID
)
from utils.logger.pype_logger import PypeLogger
import asyncio
from utils.bot import bot_status_randomizer
from utils.files import read, write
class Events(commands.Cog):
def __init__(self, bot):
self.bot = bot
self._last_member = None
@commands.Cog.listener()
async def on_ready(self):
PypeLogger.success(f"Logged in as {self.bot.user.name}#{self.bot.user.discriminator}")
channel = self.bot.get_channel(ADMIN_CHANNEL_ID)
embed = discord.Embed(title = f"{BOT_NAME} Console",
description = "```✅ | Logged in as Pype#6125\n🐍 | Estoy listo pa\n🐍 | >>>```",
color=discord.Color(EMBED_COLOR))
await channel.send(embed=embed)
await self.bot.user.edit(avatar=open("../"+BOT_LOGO, "rb").read())
while True:
await self.bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching,
name=bot_status_randomizer("../resources/files/shows.txt")))
await asyncio.sleep(60)
await self.bot.change_presence(activity=discord.Activity(type=discord.ActivityType.playing,
name=bot_status_randomizer("../resources/files/juegos.txt")))
await asyncio.sleep(60)
await self.bot.change_presence(activity=discord.Activity(type=discord.ActivityType.listening,
name=bot_status_randomizer("../resources/files/grupos.txt")))
await asyncio.sleep(60)
@commands.Cog.listener()
async def on_message(self, message: discord.Message):
if message.author != self.bot.user:
if message.channel.id == COUNTER_CHANNEL_ID:
if message.author != self._last_member:
try:
# Evaluar el contenido del mensaje como una expresión matemática
numero = int(eval(message.content))
file = "../resources/files/counter.csv"
n = int(read(file))
if numero == n + 1:
await message.add_reaction("")
self._last_member = message.author
n += 1
write(file, str(n))
else:
await message.add_reaction("")
await message.channel.send(f"{message.author.mention} falló, reseteando el contador.")
write(file, "0")
except (ValueError, SyntaxError):
await message.delete()
else:
await message.delete()
@commands.Cog.listener()
async def on_member_join(self, member):
bienvenidas = self.bot.get_channel(WELCOME_CHANNEL_ID)
"""defaultrole = member.guild.get_role(UNVERIFIED_ROLE_ID)
verifiedrole = member.guild.get_role(VERIFIED_ROLE_ID)
if member.guild.get_role(VERIFIED_ROLE_ID) in member.roles:
await member.remove_roles(verifiedrole)
await member.add_roles(defaultrole)"""
await bienvenidas.send(f"¡Bienvenido {member.mention}! Espero que te lo pases bien en el servidor. Recuerda leer las <#1092518793143652352> para evitar ser sancionado. ¡Diviértete! :D")
@commands.Cog.listener()
async def on_member_leave(self, after):
adminchannel = self.bot.get_channel(ADMIN_CHANNEL_ID)
await adminchannel.send(f"**{after.name}** ha abandonado el servidor")
@commands.Cog.listener()
async def on_application_command(self, ctx):
PypeLogger.command(f"{ctx.author} ha ejecutado el comando {ctx.command} en {ctx.guild.name}.")
def setup(bot):
bot.add_cog(Events(bot))

71
src/cogs/help.py Normal file
View File

@@ -0,0 +1,71 @@
import discord
from discord.ext import commands, pages
from discord.commands import SlashCommandGroup
from settings import (
EMBED_COLOR, GUILD_IDS, INDICE, VARIOS,
INTERACCION, INTERACCION_2, NSFW, MATEMATICAS, MUSICA, VERIFICACION, HELP
)
class Help(commands.Cog):
def __init__(self, bot):
self.bot = bot
help = SlashCommandGroup("help", "Comandos de Ayuda", guild_ids=GUILD_IDS)
@help.command(name="all", guild_ids=GUILD_IDS, description="Abre el menú de ayuda de comandos.")
async def all(self, ctx: discord.ApplicationContext):
indice_embed = discord.Embed(
title="**📖 | MENÚ DE COMANDOS**", color=discord.Color(EMBED_COLOR))
indice_embed.add_field(name="**📝 | Categorías**", value=INDICE)
varios_embed = discord.Embed(
title="**📖 | MENÚ DE COMANDOS**", color=discord.Color(EMBED_COLOR))
varios_embed.add_field(name="**🪶 | Varios**", value=VARIOS)
interaccion_embed = discord.Embed(
title="**📖 | MENÚ DE COMANDOS**", color=discord.Color(EMBED_COLOR))
interaccion_embed.add_field(
name="**👥 | Interacción**", value=INTERACCION, inline=False)
interaccion_embed.add_field(
name="**👥 | Interacción**", value=INTERACCION_2, inline=False)
nsfw_embed = discord.Embed(
title="**📖 | MENÚ DE COMANDOS**", color=discord.Color(EMBED_COLOR))
nsfw_embed.add_field(name="**🔞 | NSFW**", value=NSFW)
matematicas_embed = discord.Embed(
title="**📖 | MENÚ DE COMANDOS**", color=discord.Color(EMBED_COLOR))
matematicas_embed.add_field(
name="**🧮 | Matemáticas**", value=MATEMATICAS)
musica_embed = discord.Embed(
title="**📖 | MENÚ DE COMANDOS**", color=discord.Color(EMBED_COLOR))
musica_embed.add_field(name="**🎶 | Música**", value=MUSICA)
verificacion_embed = discord.Embed(
title="**📖 | MENÚ DE COMANDOS**", color=discord.Color(EMBED_COLOR))
verificacion_embed.add_field(
name="**✅ | Verificación**", value=VERIFICACION)
help_embed = discord.Embed(
title="**📖 | MENÚ DE COMANDOS**", color=discord.Color(EMBED_COLOR))
help_embed.add_field(name="**🆘 | Ayuda**", value=HELP)
paginator = pages.Paginator(
pages=[
indice_embed,
varios_embed,
interaccion_embed,
nsfw_embed,
matematicas_embed,
musica_embed,
verificacion_embed,
help_embed
],
loop_pages=True
)
await paginator.respond(ctx.interaction, ephemeral=False)
def setup(bot):
bot.add_cog(Help(bot))

207
src/cogs/interaction.py Normal file
View File

@@ -0,0 +1,207 @@
import discord
from discord.ext import commands
from discord.commands import SlashCommandGroup
import hmtai
import random
import json
from settings import GUILD_IDS, EMBED_COLOR
from utils.files import read_json
class Interaccion(commands.Cog):
def __init__(self, bot):
self.bot = bot
self._last_member = None
inter = SlashCommandGroup("inter", "Comandos de Interacción", guild_ids=GUILD_IDS)
@inter.command(name='wave', guild_ids=GUILD_IDS, description="Saluda a alguien.")
async def wave(self, ctx, *, miembro: discord.Member):
embed = discord.Embed(
description=f"{ctx.author.mention} saludó a {miembro.mention}.", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "wave"))
await ctx.respond(embed=embed)
@inter.command(name='dance', guild_ids=GUILD_IDS, description="Saca los pasos prohibidos.")
async def dance(self, ctx):
embed = discord.Embed(
description=f"{ctx.author.mention} se puso a bailar.", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "dance"))
await ctx.respond(embed=embed)
@inter.command(name='nice', guild_ids=GUILD_IDS, description="Di que te gusta.")
async def nice(self, ctx):
embed = discord.Embed(
description=f"A {ctx.author.mention} le gustó eso.", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "like"))
await ctx.respond(embed=embed)
@inter.command(name='nosebleed', guild_ids=GUILD_IDS, description="OwO")
async def nosebleed(self, ctx):
embed = discord.Embed(
description=f"{ctx.author.mention} empezó a sangrar por la nariz.", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "nosebleed"))
await ctx.respond(embed=embed)
@inter.command(name='punch', guild_ids=GUILD_IDS, description="ONE PUUUUUUUNCH.")
async def punch(self, ctx, *, miembro: discord.Member):
embed = discord.Embed(
description=f"{ctx.author.mention} le dio un puñetazo a {miembro.mention}.", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "punch"))
await ctx.respond(embed=embed)
@inter.command(name='feed', guild_ids=GUILD_IDS, description="Ñam ñam.")
async def feed(self, ctx, *, miembro: discord.Member):
embed = discord.Embed(
description=f"{ctx.author.mention} le dio de comer a {miembro.mention}.", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "feed"))
await ctx.respond(embed=embed)
@inter.command(name='tickle', guild_ids=GUILD_IDS, description="Tortura de la risa.")
async def tickle(self, ctx, *, miembro: discord.Member):
embed = discord.Embed(
description=f"{ctx.author.mention} le hizo cosquillas a {miembro.mention}.", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "tickle"))
await ctx.respond(embed=embed)
@inter.command(name='bite', guild_ids=GUILD_IDS, description="Muerde a alguien.")
async def bite(self, ctx, *, miembro: discord.Member):
embed = discord.Embed(
description=f"{ctx.author.mention} le dio un mordisco a {miembro.mention}.", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "bite"))
await ctx.respond(embed=embed)
@inter.command(name='hug', guild_ids=GUILD_IDS, description="Abraza a alguien.")
async def hug(self, ctx, *, miembro: discord.Member):
hugdata = read_json("../resources/files/hugs.json")
key = str(miembro.id)
if key not in hugdata.keys():
hugdata[key] = 1
elif key in hugdata.keys():
hugdata[key]+=1
with open("/home/container/data/hugs.json", 'w', encoding='utf8') as outfile:
str_ = json.dumps(hugdata, indent=4, sort_keys=True, separators=(',', ': '), ensure_ascii=False)
outfile.write(str_)
nabrazos = hugdata[str(miembro.id)]
embed = discord.Embed(
description=f"{ctx.author.mention} le dio un abrazo a {miembro.mention}", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "hug"))
embed.set_footer(text=f"{miembro.name} ha sido abrazado {nabrazos} veces.")
await ctx.respond(embed=embed)
@inter.command(name='kill', guild_ids=GUILD_IDS, description="Arrebátale la vida a alguien.")
async def kill(self, ctx, *, miembro: discord.Member):
embed = discord.Embed(
description=f"{ctx.author.mention} asesinó a {miembro.mention}", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "kill"))
await ctx.respond(embed=embed)
@inter.command(name='kiss', guild_ids=GUILD_IDS, description="Cómele la boca a alguien.")
async def kiss(self, ctx, *, miembro: discord.Member):
embed = discord.Embed(
description=f"{ctx.author.mention} le dio un beso a {miembro.mention} >.<", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "kiss"))
await ctx.respond(embed=embed)
@inter.command(name='pat', guild_ids=GUILD_IDS, description="Acaricia a alguien.")
async def pat(self, ctx, *, miembro: discord.Member):
embed = discord.Embed(
description=f"{ctx.author.mention} acarició a {miembro.mention} UwU", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "pat"))
await ctx.respond(embed=embed)
@inter.command(name='slap', guild_ids=GUILD_IDS, description="Abofetea a alguien.")
async def slap(self, ctx, *, miembro: discord.Member):
embed = discord.Embed(
description=f"{ctx.author.mention} le dio una bofetada a {miembro.mention} >:)", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "slap"))
await ctx.respond(embed=embed)
@inter.command(name='sleep', guild_ids=GUILD_IDS, description="A mimir.")
async def sleep(self, ctx):
embed = discord.Embed(
description=f"{ctx.author.mention} se fue a mimir", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "sleep"))
await ctx.respond(embed=embed)
@inter.command(name='cry', guild_ids=GUILD_IDS, description="Expresa tu tristeza...")
async def cry(self, ctx):
embed = discord.Embed(
description=f"{ctx.author.mention} se puso triste :(", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "cry"))
await ctx.respond(embed=embed)
@inter.command(name='cuddle', guild_ids=GUILD_IDS, description="Acurrúcate con alguien.")
async def cuddle(self, ctx, *, miembro: discord.Member):
embed = discord.Embed(
description=f"{ctx.author.mention} se acurrucó con {miembro.mention}", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "cuddle"))
await ctx.respond(embed=embed)
@inter.command(name='lick', guild_ids=GUILD_IDS, description="Lámele a alguien. 7u7")
async def lick(self, ctx, *, miembro: discord.Member):
embed = discord.Embed(
description=f"{ctx.author.mention} lamió sensualmente a {miembro.mention}", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "lick"))
await ctx.respond(embed=embed)
@inter.command(name='threaten', guild_ids=GUILD_IDS, description="Amenaza a alguien.")
async def threaten(self, ctx, *, miembro: discord.Member):
embed = discord.Embed(
description=f"{ctx.author.mention} amenazó con cortarle la picha a {miembro.mention}", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "threaten"))
await ctx.respond(embed=embed)
@inter.command(name='femboy', guild_ids=GUILD_IDS, description="Femboiza a alguien.")
async def femboy(self, ctx, *, miembro: discord.Member):
embed = discord.Embed(
description=f"{ctx.author.mention} ha convertido en femboy a {miembro.mention}", color=discord.Color(EMBED_COLOR))
file = discord.File("../resources/images/interaction/femboy.png", filename="imagen.png")
embed.set_image(url="attachment://imagen.gif")
await ctx.respond(file=file,embed=embed)
# ----------------| ESPECÍFICAS |-------------------------------------------------------------------------------------------------------------------
@inter.command(name='run', guild_ids=GUILD_IDS, description="Huye!!!")
async def run(self, ctx): # type: ignore
embed = discord.Embed(
description=f"{ctx.author.mention} se puso a correr", color=discord.Color(EMBED_COLOR))
file = discord.File("../resources/images/interaction/run.gif", filename="imagen.gif")
embed.set_image(url="attachment://imagen.gif")
await ctx.respond(file=file, embed=embed)
@inter.command(name='fbi', guild_ids=GUILD_IDS, description="Llama al FBI.")
async def run(self, ctx, *, miembro: discord.Member):
embed = discord.Embed(
description=f"{ctx.author.mention} ha llamado al FBI. Corre {miembro.mention}!", color=discord.Color(EMBED_COLOR))
file = discord.File("../resources/images/interaction/fbi.gif", filename="imagen.gif")
embed.set_image(url="attachment://imagen.gif")
await ctx.respond(file=file, embed=embed)
@inter.command(name='spank', guild_ids=GUILD_IDS, description="Reparte nalgadas como panes.")
async def spank(self, ctx, *, alguien: discord.Member):
embed = discord.Embed(
description=f"{ctx.author.mention} nalgueó a {alguien.mention} >///<", color=discord.Color(EMBED_COLOR))
file = discord.File("../resources/images/interaction/spank.gif", filename="imagen.gif")
embed.set_image(url="attachment://imagen.gif")
await ctx.respond(file=file, embed=embed)
@inter.command(name='ship', guild_ids=GUILD_IDS, description="Shipea a dos personas (porcentaje de compatibilidad).")
async def ship(self, ctx, *, persona1: discord.Member, persona2: discord.Member):
embed = discord.Embed(
description=f"{persona1.mention} x {persona2.mention}\n ❤️ La compatibilidad es del: **{random.randint(0, 100)}%**", color=discord.Color(EMBED_COLOR))
file = discord.File("../resources/images/interaction/ship.gif", filename="imagen.gif")
embed.set_image(url="attachment://imagen.gif")
await ctx.respond(file=file, embed=embed)
@inter.command(name='moan', guild_ids=GUILD_IDS, description="Gime como una perra.")
async def moan(self, ctx):
embed = discord.Embed(
description=f"{ctx.author.mention} gimió como una perra.", color=discord.Color(EMBED_COLOR))
file = discord.File("../resources/images/interaction/moan.gif", filename="imagen.gif")
embed.set_image(url="attachment://imagen.gif")
await ctx.respond(file=file, embed=embed)
def setup(bot):
bot.add_cog(Interaccion(bot))

143
src/cogs/math.py Normal file
View File

@@ -0,0 +1,143 @@
import time
import discord
import matplotlib.pyplot as plt
import numpy as np
from discord.ext import commands
from discord.commands import SlashCommandGroup
from matplotlib.patches import Circle
from settings import EMBED_COLOR, GUILD_IDS
from utils.bot import esPar, esPrimo
class Math(commands.Cog):
def __init__(self, bot):
self.bot = bot
self._last_member = None
mates = SlashCommandGroup("mates", "Comandos de Matemáticas", guild_ids=GUILD_IDS)
@mates.command(name='contar', guild_ids=GUILD_IDS, description="Cuenta desde a hasta b.")
async def contar(self, ctx, a: int, b: int):
await ctx.respond(f"*Contando desde {a} hasta {b}...*", ephemeral=True)
i = a
time.sleep(1)
await ctx.send(a)
time.sleep(1)
for i in range(a, b):
await ctx.send(str(i+1))
time.sleep(1)
@mates.command(name="calc", guild_ids=GUILD_IDS, description="Resuelve una expresión matemática.")
async def calc(self, ctx, *, expresion):
embed = discord.Embed(color=discord.Color(EMBED_COLOR))
embed.add_field(name="**Resultado**",
value=f"{expresion} = " + str(eval(expresion)))
await ctx.respond(embed=embed)
@mates.command(name="par", guild_ids=GUILD_IDS, description="Dice si un número es par o no.")
async def par(self, ctx, numero: int):
numres = esPar(numero)
embed = discord.Embed(color=discord.Color(EMBED_COLOR))
embed.add_field(name="**Resultado**", value=numres)
await ctx.respond(embed=embed)
@mates.command(name="primo", guild_ids=GUILD_IDS, description="Dice si un número es primo o no.")
async def primo(self, ctx, numero: int):
numres = esPrimo(numero)
embed = discord.Embed(color=discord.Color(EMBED_COLOR))
embed.add_field(name="**Resultado**", value=numres)
await ctx.respond(embed=embed)
@mates.command(name='grafseno', guild_ids=GUILD_IDS, description="Grafica una función seno (a, k).")
async def grafseno(self, ctx, a: int, k: int):
x = np.linspace(0, 2*np.pi, 400)
y = a * np.sin(k*x)
plt.axhline(0, color="black")
plt.plot(x, y, color="#b2122f")
plt.savefig("../resources/images/graphics/graf.png")
await ctx.respond(file=discord.File("../resources/images/graphics/graf.png"))
plt.clf()
@mates.command(name='grafcoseno', guild_ids=GUILD_IDS, description="Grafica una función coseno (a, k).")
async def grafcoseno(self, ctx, a: int, k: int):
x = np.linspace(0, 2*np.pi, 400)
y = a * np.cos(k*x)
plt.axhline(0, color="black")
plt.plot(x, y, color="#b2122f")
plt.savefig("../resources/images/graphics/graf.png")
await ctx.respond(file=discord.File("../resources/images/graphics/graf.png"))
plt.clf()
@mates.command(name='grafrecta', guild_ids=GUILD_IDS, description="Grafica una función lineal (m, n).")
async def grafrecta(self, ctx, m: int, n: int):
def f(x):
return m*x+n
x = range(-10000, 10000)
y = [f(i) for i in x]
plt.axhline(0, color="black")
plt.axvline(0, color="black")
plt.xlim(-10, 10)
plt.ylim(-20, 20)
plt.plot(x, y, color="#b2122f")
plt.savefig("../resources/images/graphics/graf.png")
await ctx.respond(file=discord.File("../resources/images/graphics/graf.png"))
plt.clf()
@mates.command(name='grafparabola', guild_ids=GUILD_IDS, description="Grafica una parábola (a, b, c).")
async def grafparabola(self, ctx, a: int, b: int, c: int):
def f(x):
return a*(x*x)+b*x+c
x = np.linspace(-10, 10, 1000)
y = [f(i) for i in x]
plt.axhline(0, color="black")
plt.axvline(0, color="black")
plt.xlim(-10, 10)
plt.ylim(-20, 20)
plt.plot(x, y, color="#b2122f")
plt.savefig("../resources/images/graphics/graf.png")
await ctx.respond(file=discord.File("../resources/images/graphics/graf.png"))
plt.clf()
@mates.command(name='grafcircunferencia', guild_ids=GUILD_IDS, description="Grafica una circunferencia (r).")
async def grafcircunferencia(self, ctx, r: int):
fig, ax = plt.subplots()
ax.set_aspect('equal')
circle1 = Circle((0, 0), r, color='r')
ax.add_artist(circle1)
plt.xlim(-10, 10)
plt.ylim(-10, 10)
plt.savefig("../resources/images/graphics/graf.png")
await ctx.respond(file=discord.File("../resources/images/graphics/graf.png"))
plt.clf()
@mates.command(name='graflog', guild_ids=GUILD_IDS, description="Grafica una función logarítmica (a, b).")
async def graflog(self, ctx, a: int, b: int):
def f(x):
return a*np.log(x)+b
x = np.linspace(-10, 10, 1000)
y = [f(i) for i in x]
plt.axhline(0, color="black")
plt.axvline(0, color="black")
plt.xlim(-10, 10)
plt.ylim(-20, 20)
plt.plot(x, y, color="#b2122f")
plt.savefig("../resources/images/graphics/graf.png")
await ctx.respond(file=discord.File("../resources/images/graphics/graf.png"))
plt.clf()
@mates.command(name='grafexp', guild_ids=GUILD_IDS, description="Grafica una función exponencial (a, b).")
async def grafexp(self, ctx, a: int, b: int):
def f(x):
return a*np.exp(b*x)
x = np.linspace(-10, 10, 1000)
y = [f(i) for i in x]
plt.axhline(0, color="black")
plt.axvline(0, color="black")
plt.xlim(-10, 10)
plt.ylim(-20, 20)
plt.plot(x, y, color="#b2122f")
plt.savefig("../resources/images/graphics/graf.png")
await ctx.respond(file=discord.File("../resources/images/graphics/graf.png"))
plt.clf()
def setup(bot):
bot.add_cog(Math(bot))

146
src/cogs/misc.py Normal file
View File

@@ -0,0 +1,146 @@
import discord
from discord.ext import commands
from discord.commands import SlashCommandGroup
from settings import EMBED_COLOR, BOT_NAME, VERSION, OWNER_ID, DISCORD_LOGO, BOT_LOGO, GUILD_IDS
from datetime import datetime
from random import randint, choice
import hmtai
class Misc(commands.Cog):
def __init__(self, bot):
self.bot = bot
self._last_member = None
misc = SlashCommandGroup(
name="misc",
description="Comandos varios",
guild_ids=GUILD_IDS
)
@misc.command(name="ping", guild_ids=GUILD_IDS, description="Muestra la latencia del bot.")
async def ping(self, ctx) -> None:
await ctx.respond(f'Pong! Latency is {round(float(self.bot.latency * 1000), 2)}')
@misc.command(name="info", guild_ids=GUILD_IDS, description="Muestra información sobre el servidor.")
async def info(self, ctx) -> None:
embed1 = discord.Embed(title=f"{ctx.guild.name}", description="Información del servidor",
timestamp=datetime.now(), color=discord.Color(EMBED_COLOR))
embed1.add_field(name="Miembros: ", value=f"{ctx.guild.member_count}")
embed1.add_field(name="Creador: ", value=f"{ctx.guild.owner}")
embed1.add_field(name="Nº comandos", value=f"{len(self.bot.commands)}")
mclogo = discord.File("../"+DISCORD_LOGO, filename="image.png")
embed1.set_footer(icon_url="attachment://image.png",
text=f"pedido por {ctx.author.name}")
embed1.set_thumbnail(url="attachment://image.png")
embed2 = discord.Embed(
title=f"Nuestro bot {BOT_NAME}", color=discord.Color(EMBED_COLOR))
embed2.add_field(name="Lenguaje", value=f"Python", inline=False)
embed2.add_field(name="Tipo", value=f"Multipropósito", inline=False)
embed2.add_field(name="Versión", value=str(VERSION), inline=False)
pypeav = discord.File("../"+BOT_LOGO, filename="image.png")
embed2.set_image(url="attachment://image.png")
await ctx.respond(file=mclogo, embed=embed1)
await ctx.respond(file=pypeav, embed=embed2)
@misc.command(name='say', guild_ids=GUILD_IDS, description="Manda un mensaje a través del bot.")
async def say(self, ctx, *, algo) -> None:
await ctx.respond("Mensaje enviado :)", ephemeral=True)
await ctx.send(algo)
@misc.command(name='platano', guild_ids=GUILD_IDS, description="Conoce la medida de tu plátano.")
async def platano(self, ctx) -> None:
if ctx.author.id == OWNER_ID:
banana = 21
else:
banana = randint(-5, 21)
embed = discord.Embed(
title=f"El plátano de **{ctx.author}** mide {banana} cm 😳", color=discord.Color(EMBED_COLOR))
embed.set_image(
url="https://cdn.discordapp.com/attachments/755529601333067940/853072892702490624/banana.png")
await ctx.respond(embed=embed)
@misc.command(name='dado', guild_ids=GUILD_IDS, description="Tira un dado de 6 caras.")
async def dado(self, ctx) -> None:
res = randint(1, 6)
embed = discord.Embed(title="🎲 Se ha lanzado un dado",
color=discord.Color(EMBED_COLOR))
embed.add_field(name="Resultado: ", value=str(res))
await ctx.respond(embed=embed)
@misc.command(name='moneda', guild_ids=GUILD_IDS, description="Tira una moneda al aire.")
async def moneda(self, ctx) -> None:
coinResults = ("Cara 😀", "Cruz ❌")
res = choice(coinResults)
embed = discord.Embed(title="🪙 Se ha lanzado la moneda",
color=discord.Color(EMBED_COLOR))
embed.add_field(name="Resultado: ", value=res)
await ctx.respond(embed=embed)
@misc.command(name='avatar', guild_ids=GUILD_IDS, description="Renderiza el avatar de alguien.")
async def avatar(self, ctx, *, miembro: discord.Member) -> None:
embed = discord.Embed(color=discord.Color(EMBED_COLOR))
embed.add_field(name='Avatar de:', value=miembro.mention)
if miembro.avatar:
pfp = miembro.avatar.with_size(1024)
embed.set_image(url=pfp)
else:
embed.add_field(name='No hay avatar', value='Este usuario no tiene un avatar personalizado.')
await ctx.respond(embed=embed)
@misc.command(name='wallpaper', guild_ids=GUILD_IDS, description="Wallpaper de anime para pc.")
async def wallpaper(self, ctx) -> None:
embed = discord.Embed(
description=f"Aquí tienes tu wallpaper, {ctx.author.mention}", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "wallpaper"))
await ctx.respond(embed=embed)
@misc.command(name='mobilewallpaper', guild_ids=GUILD_IDS, description="Genera un wallpaper para tu móvil.")
async def mobileWallpaper(self, ctx) -> None:
embed = discord.Embed(
description=f"Aquí tienes tu wallpaper {ctx.author.mention}", color=discord.Color(EMBED_COLOR))
embed.set_image(url=hmtai.get("hmtai", "mobileWallpaper"))
await ctx.respond(embed=embed)
@misc.command(name='paredes', guild_ids=GUILD_IDS, description="Están por las paredes.")
async def paredes(self, ctx, *, miembro: discord.Member) -> None:
embed = discord.Embed(
description=f"{miembro.mention} está por las paredes!", color=discord.Color(EMBED_COLOR))
file = discord.File("../resources/images/interaction/paredes.gif", filename="imagen.gif")
embed.set_image(url="attachment://imagen.gif")
await ctx.respond(file=file, embed=embed)
@misc.command(name='oooh', guild_ids=GUILD_IDS, description="Ooohh.")
async def oooh(self, ctx) -> None:
embed = discord.Embed(color=discord.Color(EMBED_COLOR))
file = discord.File("../resources/images/interaction/oooh.gif", filename="imagen.gif")
embed.set_image(url="attachment://imagen.gif")
await ctx.respond(file=file, embed=embed)
@misc.command(name='carey', guild_ids=GUILD_IDS, description="Feliz navidad.")
async def carey(self, ctx) -> None:
file = discord.File("../resources/images/interaction/dale al play.webm")
await ctx.respond(file=file)
@misc.command(name='beber', guild_ids=GUILD_IDS, description="Bebe alcohol.")
async def beber(self, ctx) -> None:
# lista de bebidas alcohólicas
bebidas = ["cerveza", "vino", "whisky", "ron", "vodka", "tequila", "ginebra", "sidra", "champán", "cava", "sake", "absenta", "brandy", "licor", "vermut", "mezcal", "pacharán", "anís", "aguardiente", "coñac", "cóctel", "cubata", "cóctel", "cubalibre"]
bebida = choice(bebidas)
embed = discord.Embed(
description=f"{ctx.author.mention} ha bebido {bebida}", color=discord.Color(EMBED_COLOR))
file = discord.File("../resources/images/interaction/beber.gif", filename="imagen.gif")
embed.set_image(url="attachment://imagen.gif")
await ctx.respond(file=file, embed=embed)
@misc.command(name="bombardeen", guild_ids=GUILD_IDS, description="Bombardea a alguien/algo.")
async def bombardeen(self, ctx, *, objetivo) -> None:
embed = discord.Embed(
description=f"Bombardeen {objetivo}", color=discord.Color(EMBED_COLOR))
file = discord.File("../resources/images/interaction/bombardeen.gif", filename="imagen.gif")
embed.set_image(url="attachment://imagen.gif")
await ctx.respond(file=file, embed=embed)
def setup(bot):
bot.add_cog(Misc(bot))

168
src/cogs/music.py Normal file
View File

@@ -0,0 +1,168 @@
import discord
import wavelink
from discord.ext import commands
from discord.commands import SlashCommandGroup
import wavelink
from settings import (
EMBED_COLOR, GUILD_IDS, WAVELINK_URI, WAVELINK_PASSWORD, GUILD_NAME
)
from utils.logger.pype_logger import PypeLogger
class Music(commands.Cog):
def __init__(self, bot):
self.bot = bot
self._last_member = None
musica = SlashCommandGroup("musica", "Comandos de música", guild_ids=GUILD_IDS)
async def setup_hook(self) -> None:
# Wavelink 2.0 has made connecting Nodes easier... Simply create each Node
# and pass it to NodePool.connect with the client/bot.
node: wavelink.Node = wavelink.Node(uri=WAVELINK_URI, password=WAVELINK_PASSWORD, secure=False)
await wavelink.NodePool.connect(client=self.bot, nodes=[node])
PypeLogger.success(f"Se ha conectado a -> {node}")
@commands.Cog.listener()
async def on_ready(self):
await self.setup_hook()
@commands.Cog.listener()
async def on_wavelink_track_start(self, track: wavelink.TrackEventPayload):
await self.bot.change_presence(activity=discord.Activity(type=discord.ActivityType.listening, name=track.track.title))
@commands.Cog.listener()
async def on_wavelink_track_end(self, track: wavelink.TrackEventPayload):
await self.bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name=GUILD_NAME))
@musica.command(name="play", guild_ids=GUILD_IDS, description="Reproduce una canción")
async def play(self, ctx: commands.Context, *, cancion: str, sitio: str = "youtube") -> None:
if not ctx.voice_client:
vc: wavelink.Player = await ctx.author.voice.channel.connect(cls=wavelink.Player)
else:
vc: wavelink.Player = ctx.voice_client
if sitio == "spotify":
#decoded = spotify.decode_url(cancion)
#if not decoded or decoded['type'] is not spotify.SpotifySearchType.track:
# await ctx.send('Sólo se permiten urls de Spotify.')
# return
#track = await spotify.SpotifyTrack.search(cancion)
ctx.respond("Próximamente")
elif sitio == "youtube":
track = await wavelink.YouTubeTrack.search(cancion, return_first=True)
if not vc.is_playing():
await vc.play(track)
try:
await self.bot.user.edit(avatar=open("../resources/images/djpype.png", "rb").read())
except:
pass
embed = discord.Embed(title="▶️ Reproduciendo", description=track.title + " de " + track.author + " en " + sitio, color=EMBED_COLOR)
elif vc.is_playing():
cola: wavelink.BaseQueue = vc.auto_queue
vc.autoplay = True
await cola.put_wait(track)
embed = discord.Embed(title="🎶 Añadido a la cola", description=track.title + " de " + track.author + " en " + sitio, color=EMBED_COLOR)
if cola.is_empty:
embed = discord.Embed(title="▶️ Reproduciendo", description="La cola está vacía.", color=EMBED_COLOR)
await ctx.respond(embed=embed)
@musica.command(name="pause", guild_ids=GUILD_IDS, description="Pausa la canción")
async def pausa(self, ctx: commands.Context) -> None:
vc: wavelink.Player = ctx.voice_client
if vc.is_playing():
if vc.is_paused():
embed = discord.Embed(title="⏸️ Pausado", description="La canción ya está pausada.", color=EMBED_COLOR)
await vc.pause()
embed = discord.Embed(title="⏸️ Pausado", description="La canción ha sido pausada.", color=EMBED_COLOR)
await ctx.respond(embed=embed)
@musica.command(name="resume", guild_ids=GUILD_IDS, description="Reanuda la canción")
async def reanudar(self, ctx: commands.Context) -> None:
vc: wavelink.Player = ctx.voice_client
await vc.resume()
embed = discord.Embed(title="▶️ Reproduciendo", description="La canción ha sido reanudada.", color=EMBED_COLOR)
await ctx.respond(embed=embed)
@musica.command(name="stop", guild_ids=GUILD_IDS, description="Detiene la canción")
async def parar(self, ctx: commands.Context) -> None:
vc: wavelink.Player = ctx.voice_client
await vc.stop()
embed = discord.Embed(title="⏹️ Detenido", description="La canción ha sido detenida.", color=EMBED_COLOR)
await ctx.respond(embed=embed)
@musica.command(name="join", guild_ids=GUILD_IDS, description="Conecta al bot al canal de voz")
async def conectar(self, ctx: commands.Context) -> None:
if not ctx.voice_client:
await ctx.author.voice.channel.connect(cls=wavelink.Player)
else:
ctx.voice_client
embed = discord.Embed(title="🔊 Conectado", description="Me he conectado al canal de voz.", color=EMBED_COLOR)
await ctx.respond(embed=embed)
@musica.command(name="leave", guild_ids=GUILD_IDS, description="Desconecta al bot del canal de voz")
async def desconectar(self, ctx: commands.Context) -> None:
vc: wavelink.Player = ctx.voice_client
await vc.disconnect()
await self.bot.user.edit(avatar=open("../resources/images/pype.png", "rb").read())
await self.bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name="Concord"))
embed = discord.Embed(title="🔊 Desconectado", description="Me he desconectado del canal de voz.", color=EMBED_COLOR)
await ctx.respond(embed=embed)
@musica.command()
async def ahora(self, ctx: commands.Context) -> None:
vc: wavelink.Player = ctx.voice_client
track: wavelink.Track = vc.current
embed = discord.Embed(title="🎶 Canción actual", description=track.title + " de " + track.author, color=EMBED_COLOR)
await ctx.respond(embed=embed)
@musica.command(name="volume", guild_ids=GUILD_IDS, description="Cambia el volumen del bot")
async def volumen(self, ctx: commands.Context, volumen: int) -> None:
vc: wavelink.Player = ctx.voice_client
if volumen < 100:
await vc.set_volume(volumen)
embed = discord.Embed(title="🔊 Volumen", description="El volumen ha sido cambiado a " + str(volumen), color=EMBED_COLOR)
else:
embed = discord.Embed(title="🔊 Volumen", description="El volumen no puede ser mayor a 100.", color=EMBED_COLOR)
await ctx.respond(embed=embed)
@musica.command(name="loop", guild_ids=GUILD_IDS, description="Repite la canción o la cola")
async def bucle(self, ctx: commands.Context, *, bucle = "current") -> None:
vc: wavelink.Player = ctx.voice_client
if bucle == "current":
vc.queue.loop = True
embed = discord.Embed(title="🔁 Repetir", description="La canción se repetirá indefinidamente.", color=EMBED_COLOR)
elif bucle == "all":
vc.queue.loop_all = True
embed = discord.Embed(title="🔁 Repetir", description="La cola se repetirá indefinidamente.", color=EMBED_COLOR)
elif bucle == "off":
vc.queue.loop = False
vc.queue.loop_all = False
embed = discord.Embed(title="🔁 Repetir", description="La repetición ha sido desactivada.", color=EMBED_COLOR)
await ctx.respond(embed=embed)
@musica.command(name="seek", guild_ids=GUILD_IDS, description="Avanza la canción x segundos")
async def avanzar(self, ctx: commands.Context, segundos: int) -> None:
vc: wavelink.Player = ctx.voice_client
await vc.seek(segundos*1000)
embed = discord.Embed(title="⏩ Avanzar", description="Se han adelantado " + str(segundos) + "s.", color=EMBED_COLOR)
await ctx.respond(embed=embed)
@musica.command(name="queue", guild_ids=GUILD_IDS, description="Muestra la cola de canciones")
async def cola(self, ctx: commands.Context) -> None:
vc: wavelink.Player = ctx.voice_client
cola = vc.auto_queue
embed = discord.Embed(title="🎶 Cola", description="", color=EMBED_COLOR)
i = 1
for track in cola._queue:
embed.add_field(name=f"Canción nº{i}", value=f"{track.title} de {track.author}", inline = False)
i+=1
await ctx.respond(embed=embed)
@musica.command(name="skip", guild_ids=GUILD_IDS, description="Salta a la siguiente canción")
async def saltar(self, ctx: commands.Context) -> None:
vc: wavelink.Player = ctx.voice_client
await vc.play(vc.auto_queue.get())
embed = discord.Embed(title="⏭️ Saltar", description=f"Se ha saltado a la siguiente canción", color=EMBED_COLOR)
await ctx.respond(embed=embed)
def setup(bot):
bot.add_cog(Music(bot))

153
src/cogs/nsfw.py Normal file
View File

@@ -0,0 +1,153 @@
import discord
from discord.ext import commands
from discord.commands import SlashCommandGroup
import hmtai
from settings import GUILD_IDS
class InteraccionNSFW(commands.Cog):
def __init__(self, bot):
self.bot = bot
self._last_member = None
nsfw = SlashCommandGroup("nsfw", "Comandos NSFW", guild_ids=GUILD_IDS)
@nsfw.command(name='creampie', guild_ids=GUILD_IDS, description="Lechita.")
async def creampie(self, ctx, *, miembro: discord.Member = None):
if ctx.channel.is_nsfw():
if miembro:
embed = discord.Embed(description=f"{ctx.author.mention} se vino en {miembro.mention} 😳", color=discord.Color.from_rgb(177,18,46))
else:
embed = discord.Embed(description=f"{ctx.author.mention} se vino 😳", color=discord.Color.from_rgb(177,18,46))
embed.set_image(url=hmtai.get("hmtai","creampie"))
await ctx.respond(embed=embed)
else:
await ctx.respond("*Debes usar el comando en un canal NSFW...*", ephemeral=True)
@nsfw.command(name='hentai', guild_ids=GUILD_IDS, description="Go to horny jail.")
async def hentai(self, ctx):
if ctx.channel.is_nsfw():
embed = discord.Embed(description="Disfruta 😳", color=discord.Color.from_rgb(177,18,46))
embed.set_image(url=hmtai.get("hmtai","classic"))
await ctx.respond(embed=embed)
else:
await ctx.respond("*Debes usar el comando en un canal NSFW...*", ephemeral=True)
@nsfw.command(name='anal', guild_ids=GUILD_IDS, description="Es la hora de dar por culo.")
async def anal(self, ctx, *, miembro: discord.Member):
if ctx.channel.is_nsfw():
embed = discord.Embed(description=f"{ctx.author.mention}: * le da por culo *\n {miembro.mention}: Man dao por culo Dios mío! Hola.", color=discord.Color.from_rgb(177,18,46))
embed.set_image(url=hmtai.get("hmtai","anal"))
await ctx.respond(embed=embed)
else:
await ctx.respond("*Debes usar el comando en un canal NSFW...*", ephemeral = True)
@nsfw.command(name='ass', guild_ids=GUILD_IDS, description="Culito, culito!")
async def ass(self, ctx):
if ctx.channel.is_nsfw():
embed = discord.Embed(description=f"{ctx.author.mention} toma culo!", color=discord.Color.from_rgb(177,18,46))
embed.set_image(url=hmtai.get("hmtai","ass"))
await ctx.respond(embed=embed)
else:
await ctx.respond("*Debes usar el comando en un canal NSFW...*", ephemeral = True)
@nsfw.command(name='bdsm', guild_ids=GUILD_IDS, description="Atar?")
async def bdsm(self, ctx,*,miembro: discord.Member = None):
if ctx.channel.is_nsfw():
if miembro:
embed = discord.Embed(description=f"{ctx.author.mention} le practicó el BDSM a {miembro.mention} 😳", color=discord.Color.from_rgb(177,18,46))
else:
embed = discord.Embed(description=f"A {ctx.author.mention} le gusta el BDSM!", color=discord.Color.from_rgb(177,18,46))
embed.set_image(url=hmtai.get("hmtai","bdsm"))
await ctx.respond(embed=embed)
else:
await ctx.respond("*Debes usar el comando en un canal NSFW...*", ephemeral=True)
@nsfw.command(name='doujin', guild_ids=GUILD_IDS, description="Página random de un doujinshi.")
async def doujin(self, ctx):
if ctx.channel.is_nsfw():
embed = discord.Embed(description=f"Aquí tienes tu página random de un doujin, {ctx.author.mention}.", color=discord.Color.from_rgb(177,18,46))
embed.set_image(url=hmtai.get("hmtai","manga"))
await ctx.respond(embed=embed)
else:
await ctx.respond("*Debes usar el comando en un canal NSFW...*", ephemeral=True)
@nsfw.command(name='fap', guild_ids=GUILD_IDS, description="Fap fap fap fap.")
async def fap(self, ctx, *, miembro: discord.Member = None):
if ctx.channel.is_nsfw():
if miembro:
embed = discord.Embed(description=f"{ctx.author.mention} hizo sentir rico a {miembro.mention} 😳", color=discord.Color.from_rgb(177,18,46))
else:
embed = discord.Embed(description=f"{ctx.author.mention} se tocó 😳", color=discord.Color.from_rgb(177,18,46))
embed.set_image(url=hmtai.get("hmtai","handjob"))
await ctx.respond(embed=embed)
else:
await ctx.respond("*Debes usar el comando en un canal NSFW...*", ephemeral=True)
@nsfw.command(name='ero', guild_ids=GUILD_IDS, description="Fucking pervert.")
async def ero(self, ctx):
if ctx.channel.is_nsfw():
embed = discord.Embed(description=f"Aquí tienes tu contenido ero, {ctx.author.mention}.", color=discord.Color.from_rgb(177,18,46))
embed.set_image(url=hmtai.get("hmtai","ero"))
await ctx.respond(embed=embed)
else:
await ctx.respond("*Debes usar el comando en un canal NSFW...*", ephemeral=True)
@nsfw.command(name='yuri', guild_ids=GUILD_IDS, description="Imagen yuri 🏳️‍🌈.")
async def yuri(self, ctx):
if ctx.channel.is_nsfw():
embed = discord.Embed(description=f"Aquí tienes tu contenido yuri, {ctx.author.mention}.", color=discord.Color.from_rgb(177,18,46))
embed.set_image(url=hmtai.get("hmtai","yuri"))
await ctx.respond(embed=embed)
else:
await ctx.respond("*Debes usar el comando en un canal NSFW...*", ephemeral=True)
@nsfw.command(name='blowjob', guild_ids=GUILD_IDS, description="* clk clk clk *")
async def blowjob(self, ctx, *, miembro: discord.Member = None):
if ctx.channel.is_nsfw():
if miembro:
embed = discord.Embed(description=f"{ctx.author.mention} * clk clk clk * {miembro.mention} 😳", color=discord.Color.from_rgb(177,18,46))
else:
embed = discord.Embed(description=f"{ctx.author.mention} realizó la AutoM", color=discord.Color.from_rgb(177,18,46))
embed.set_image(url=hmtai.get("hmtai","blowjob"))
await ctx.respond(embed=embed)
else:
await ctx.respond("*Debes usar el comando en un canal NSFW...*", ephemeral=True)
@nsfw.command(name='boobs', guild_ids=GUILD_IDS, description="tetas tetitas tetazas tetotas tetarracas.")
async def boobs(self, ctx):
if ctx.channel.is_nsfw():
embed = discord.Embed(description=f"Aquí tienes tus tetas tetarracas, {ctx.author.mention}.", color=discord.Color.from_rgb(177,18,46))
embed.set_image(url=hmtai.get("hmtai","boobs"))
await ctx.respond(embed=embed)
else:
await ctx.respond("*Debes usar el comando en un canal NSFW...*", ephemeral=True)
@nsfw.command(name='pussy', guild_ids=GUILD_IDS, description="Es temporada de recogida de higos.")
async def pussy(self, ctx):
if ctx.channel.is_nsfw():
embed = discord.Embed(description=f"{ctx.author.mention} recogió un higo.", color=discord.Color.from_rgb(177,18,46))
embed.set_image(url=hmtai.get("hmtai","pussy"))
await ctx.respond(embed=embed)
else:
await ctx.respond("*Debes usar el comando en un canal NSFW...*", ephemeral=True)
@nsfw.command(name='boobjob', guild_ids=GUILD_IDS, description="Tetas tetarracas + * clk clk clk *")
async def boobjob(self, ctx,*,miembro: discord.Member):
if ctx.channel.is_nsfw():
embed = discord.Embed(description=f"{ctx.author.mention} le hizo una boobjob a {miembro.mention}", color=discord.Color.from_rgb(177,18,46))
embed.set_image(url=hmtai.get("hmtai","boobjob"))
await ctx.respond(embed=embed)
else:
await ctx.respond("*Debes usar el comando en un canal NSFW...*", ephemeral=True)
@nsfw.command(name='gangbang', guild_ids=GUILD_IDS, description="Muchas tuneladoras para un sólo túnel.")
async def gangbang(self, ctx, *, abusador_1: discord.Member, abusador_2: discord.Member, abusador_3: discord.Member, victima: discord.Member):
if ctx.channel.is_nsfw():
embed = discord.Embed(description=f"{ctx.author.mention} & {abusador_1.mention},{abusador_2.mention},{abusador_3.mention} taladraron a {victima.mention} 😳", color=discord.Color.from_rgb(177,18,46))
embed.set_image(url=hmtai.get("hmtai","gangbang"))
await ctx.respond(embed=embed)
else:
await ctx.respond("*Debes usar el comando en un canal NSFW...*", ephemeral=True)
def setup(bot):
bot.add_cog(InteraccionNSFW(bot))

57
src/cogs/verification.py Normal file
View File

@@ -0,0 +1,57 @@
from discord.ext import commands
from discord.commands import SlashCommandGroup
from settings import (
GUILD_IDS, VERIFICATION_CHANNEL_ID, VERIFIED_ROLE_ID, UNVERIFIED_ROLE_ID, SUPPORT_ROLE_ID
)
import asyncio
class Verification(commands.Cog):
def __init__(self, bot):
self.bot = bot
self._last_member = None
verification = SlashCommandGroup("verification", "Verify through the bot", guild_ids=GUILD_IDS)
@verification.command(name="verify", guild_ids=GUILD_IDS, description="Verify yourself in the server using a command.")
async def verificar(self, ctx):
if ctx.channel.id == VERIFICATION_CHANNEL_ID:
verified = ctx.guild.get_role(VERIFIED_ROLE_ID)
unverified = ctx.guild.get_role(UNVERIFIED_ROLE_ID)
support_role = ctx.guild.get_role(SUPPORT_ROLE_ID)
if verified not in ctx.author.roles:
await ctx.author.add_roles(unverified)
await ctx.send(f"{ctx.author.mention}, please specify your origin (CurseForge/SpigotMC) or enter the secret code to get verified.")
try:
# Esperar la respuesta del usuario en el mismo canal
response = await self.bot.wait_for(
"message",
check=lambda message: message.author == ctx.author and message.channel == ctx.channel,
timeout=120 # Puedes ajustar el tiempo límite según tus necesidades
)
# Verificar la respuesta del usuario
if "CurseForge" in response.content or "SpigotMC" in response.content:
await ctx.author.add_roles(support_role)
await ctx.author.remove_roles(unverified)
await ctx.send(f"{ctx.author.mention} has been verified from CurseForge or SpigotMC!")
await ctx.channel.purge(limit=100)
elif "cHV0b3RvbnRvWEQ=" in response.content:
await ctx.author.add_roles(verified)
await ctx.author.remove_roles(unverified)
await ctx.send(f"{ctx.author.mention} has been verified using the secret code!")
await ctx.channel.purge(limit=100)
else:
await ctx.respond("Invalid response. Please specify CurseForge/SpigotMC or the secret code.", ephemeral=True)
except asyncio.TimeoutError:
await ctx.respond("Verification process timed out. Please run the command again.", ephemeral=True)
else:
await ctx.respond("You are already verified.", ephemeral=True)
else:
await ctx.respond(f"You can only verify in <#{VERIFICATION_CHANNEL_ID}>.", ephemeral=True)
def setup(bot):
bot.add_cog(Verification(bot))

134
src/settings.py Normal file
View File

@@ -0,0 +1,134 @@
##### ####### # # ####### ### ##### # # ###### # ##### ### ####### # #
# # # # ## # # # # # # # # # # # # # # # # ## #
# # # # # # # # # # # # # # # # # # # # # #
# # # # # # ##### # # #### # # ###### # # # # # # # # #
# # # # # # # # # # # # # # ####### # # # # # # #
# # # # # ## # # # # # # # # # # # # # # # # ##
##### ####### # # # ### ##### ##### # # # # ##### ### ####### # #
# Configuración de parámetros de Discord
DISCORD_LOGO = "resources/images/logo.png" # png/jpg
DISCORD_INVITE = "https://discord.gg/wSx82bUrFT" # https://discord.gg/TU_INVITACIÓN
ADMIN_CHANNEL_ID = 1212498847138447450 # canal para enviar mensajes del bot para admins
ADMIN_ROLE_ID = 1093755241494749274 # id del rol de admin obtenido con dev mode
ANNOUNCES_CHANNEL_ID = 1242621232281813082 # Canal para enviar anuncios, normalmente el propio canal de anuncios de una comunidad de Discord.
WELCOME_CHANNEL_ID = 1212311179846746124 # canal de bienvenidas
VERIFICATION_CHANNEL_ID = 0000000000000000000 # canal de verificación
VERIFIED_ROLE_ID = 0000000000000000000 # rol verificado
UNVERIFIED_ROLE_ID = 0000000000000000000 # rol no verificado
COUNTER_CHANNEL_ID = 1244730885836767315 # canal de contador
GUILD_IDS = [925562720890277948] # id del servidor obtenido con dev mode ⚠️ DE MOMENTO SOLO SOPORTA UN SERVIDOR A LA VEZ ⚠️
SUPPORT_ROLE_ID = 0000000000000000000
# Configuración de parámetros del bot
GUILD_NAME = "MIARMAPLACE" # nombre del servidor
BOT_LOGO ="resources/images/pype.png" # png/jpg
BOT_NAME = "Pype" # nombre a elegir
BOT_TOKEN = "MTAyMDg5MzE2MDY0NzQzMDIyNg.GONoVo.ar4hT-d6JPG6Cpq9jJnafVkb3Z9EFsZY9ZVFVY" # token obtenido en la página de Discord Developers
VERSION = "1.0 Rewritten" # versión del bot
WAVELINK_URI = 'ether.lunarnodes.xyz:6969' # ip del servidor de Lavalink
WAVELINK_PASSWORD = "lunarnodes.xyz" # contraseña del servidor de Lavalink
SPOTIFY_CLIENT_ID = '' # id de la app de Spotify
SPOTIFY_CLIENT_SECRET = '' # secret de la app de Spotify
EMBED_COLOR = 0x2B2D31
TIMEZONE = "Europe/Madrid" # zona horaria
# Configuración de parámetros del owner
OWNER_NAME = "Gallardo7761" # nombre sin tag (#XXXX)
OWNER_ID = 318818322642763780 # id del owner obtenido con el dev mode
# Cofiguración de parámetros del comando /help
INDICE = "\n**★) ** 🪶 Varios\n\n**★) ** 👥 Interacción\n\n**★) ** 🧮 Matemáticas\n\n**★) ** 🎶 Música\n\n**★) ** 💻 Asciiart\n\n**★) ** ✅ Verificacion\n\n**★) ** 🆘 Help\n\n*En las siguientes páginas*\n*hay ayuda más detallada.*"
VARIOS = """
**/misc ping** - Ping de Pype.
**/misc info** - Info del discord.
**/misc say** - Pype dice algo.
**/misc platano** - Banana!
**/misc dado** - Tira un dado de 6 caras.
**/misc moneda** - Tira una moneda al aire.
**/misc avatar** - Renderiza el avatar de un miembro del servidor.
**/misc wallpaper** - Wallpaper de anime (PC).
**/misc mobilewallpaper** - Wallpaper de anime (móvil).
**/misc paredes** - Están por las paredes.
**/misc oooh** - Ooooooooh! .- Exclamaron Mordecai y Rigby.
**/misc carey** - Navidad (?)
**/misc beber** - Bebe algo.
**/misc bombardeen** - Bombardeen algo.
"""
INTERACCION = """
**/inter wave** - Di hola.
**/inter dance** - Saca los pasos prohibidos.
**/inter nice** - Noice.
**/inter nosebleed** - Ecsitante.
**/inter punch** - Cruzado o uppercut?
**/inter feed** - Alimenta a alguien.
**/inter tickle** - Hazle la tortura de las cosquillas a alguien.
**/inter bite** - Muerde~ a alguien.
**/inter hug** - Abraza a alguien.
**/inter kill** - Mata a alguien D:
**/inter kiss** - Besa a alguien UwU
**/inter pat** - Dale palmaditas a alguien.
**/inter slap** - A dar de hostias a alguien.
**/inter sleep** - A mimir.
**/inter cry** - Tas bien? :(
**/inter cuddle** - Acurrúcate con alguien u.u
**/inter lick** - Lame a alguien?
"""
INTERACCION_2 = """
**/inter threaten** - Amenaza a alguien >:)
**/inter run** - Corre Forrest, corre!
**/inter fbi** - FBI OPEN UP!
**/inter spank** - Dale nalgadas a alguien.
**/inter ship** - Haz un ship entre dos personas.
**/inter moan** - Aaaaaaah~!
**/femboy** - Femboiza a alguien.
"""
NSFW = """
**/nsfw creampie** Lechita.
**/nsfw hentai** Go to horny jail.
**/nsfw anal** Es la hora de dar por culo.
**/nsfw ass** Culito, culito!
**/nsfw bdsm** Atar?
**/nsfw doujin** Página random de un doujinshi.
**/nsfw fap** Fap fap fap fap.
**/nsfw ero** Fucking pervert.
**/nsfw yuri** Imagen yuri 🏳️‍🌈.
**/nsfw blowjob** * clk clk clk *
**/nsfw boobs** Tetas tetitas tetazas tetotas tetarracas.
**/nsfw pussy** Es temporada de recogida de higos.
**/nsfw boobjob** Tetas tetarracas + * clk clk clk *
**/nsfw gangbang** Muchas tuneladoras para un sólo túnel.
"""
MATEMATICAS = """
**/mates contar** - Cuenta desde un número *a* hasta un número *b*.
**/mates calc** - Calcula expresiones matemáticas varias.
**/mates par** - Comprueba si un número es par o no.
**/mates primo** - Comprueba si un número es primo o no.
**/mates grafseno** - Grafica una función seno.
**/mates grafcoseno** - Grafica una función coseno.
**/mates grafrecta** - Grafica una función lineal.
**/mates grafparabola** - Grafica una función cuadrática.
**/mates grafcircunferencia** - Grafica una circunferencia.
**/mates graflog** - Grafica una función logarítmica.
**/mates grafexp** - Grafica una función exponencial.
"""
MUSICA = """
**/musica play** - Reproduce una canción.
**/musica pause** - Pausa la reproducción.
**/musica resume** - Reanuda la reproducción.
**/musica skip** - Salta a la siguiente canción.
**/musica seek** - Avanza hacia delante o atrás en la canción.
**/musica join** - Conecta al bot al canal de voz.
**/musica leave** - Desconecta al bot al canal de voz.
**/musica volume** - Establece el volumen del bot.
**/musica loop** - Activa/Desactiva el bucle.
**/musica queue** - Mira la cola.
**/musica now** - Muestra lo que se está reproduciendo ahora mismo.
**/musica stop** - Para la canción.
"""
VERIFICACION = """
**/verification verify** - Verifica tu cuenta.
"""
HELP = """
**/help all** - Muestra este mensaje.
"""

34
src/utils/bot.py Normal file
View File

@@ -0,0 +1,34 @@
from random import choice, randint
import csv
def bot_status_randomizer(fichero) -> str:
listStatus = []
with open(fichero, encoding="utf-8") as f:
lector = csv.reader(f)
next(lector)
for l in lector:
status = str(l[0])
listStatus.append(status)
return choice(listStatus)
def get_random_color() -> int:
return randint(0, 0xFFFFFF)
def esPar(numero: int) -> str:
if numero % 2 == 0:
res = "Es par"
else:
res = "Es impar"
return res
def esPrimo(numero: int) -> str:
if numero > 1:
for i in range(2, numero):
if (numero % i) == 0:
res = "No es primo"
break
else:
res = "Es primo"
else:
res = "No es primo"
return res

42
src/utils/embeds.py Normal file
View File

@@ -0,0 +1,42 @@
import discord
from discord.ext import commands
from settings import EMBED_COLOR, TIMEZONE
from datetime import datetime
import pytz
def crear_embed(ctx: commands.Context,
title: str,
description: str,
fields: str = None,
footer_text: str = None,
timestamp: bool = False,
author_name: str = None,
image_url: str = None,
thumbnail_url: str = None,
color: int = None):
def bool_parser(string):
if string.lower() == "true":
return True
elif string.lower() == "false":
return False
else:
raise commands.BadArgument("El valor debe ser True o False")
embed = discord.Embed(title=title, description=description, color=EMBED_COLOR)
if fields:
fields_list = fields.split(";;")
for field in fields_list:
name, value, inline = field.split(",,")
embed.add_field(name=name, value=value, inline=bool_parser(inline))
if footer_text:
embed.set_footer(text=footer_text)
if image_url:
embed.set_image(url=image_url)
if thumbnail_url:
embed.set_thumbnail(url=thumbnail_url)
if author_name:
embed.set_author(name=author_name, icon_url=ctx.author.avatar.url)
if timestamp:
embed.timestamp = datetime.now(pytz.timezone(TIMEZONE))
if color:
embed.color = color
return embed

17
src/utils/files.py Normal file
View File

@@ -0,0 +1,17 @@
import json
def read(file: str) -> str:
with open(file, "r") as f:
return f.read()
def read_json(file: str) -> dict:
with open(file, "r") as f:
return json.load(f)
def write(file: str, content: str) -> None:
with open(file, "w") as f:
f.write(content)
def write_json(file: str, content: dict) -> None:
with open(file, "w") as f:
json.dump(content, f, indent=4, sort_keys=True, separators=(',', ': '), ensure_ascii=False)

View File

@@ -0,0 +1,13 @@
class Colors:
RED = "\033[91m"
GREEN = "\033[92m"
YELLOW = "\033[93m"
BLUE = "\033[94m"
MAGENTA = "\033[95m"
CYAN = "\033[96m"
WHITE = "\033[97m"
RESET = "\033[0m"
BOLD = "\033[1m"
UNDERLINE = "\033[4m"
LIME = "\033[32m"
GRAY = "\033[90m"

View File

@@ -0,0 +1,43 @@
from .colors import Colors
from datetime import datetime
import pytz
import traceback
class PypeLogger:
@staticmethod
def info(message):
now = datetime.now(tz=pytz.timezone("Europe/Madrid")).strftime("%H:%M:%S")
print(f"{Colors.GRAY}[{now}] {Colors.GREEN}[INFO] {message}{Colors.RESET}")
@staticmethod
def error(message, exception=None):
now = datetime.now(tz=pytz.timezone("Europe/Madrid")).strftime("%H:%M:%S")
main_error = f"{Colors.GRAY}[{now}] {Colors.RED}[ERROR] {message}{Colors.RESET}"
error_messages = [main_error]
if exception:
exception_message = f"\n{Colors.GRAY}[{now}] {Colors.RED}[ERROR] - Exception: {exception}"
traceback_message = f"\n{Colors.GRAY}[{now}] {Colors.RED}[ERROR] - Traceback: {traceback.format_exc()}"
error_messages.append(exception_message)
error_messages.append(traceback_message)
for error_message in error_messages:
print(error_message)
@staticmethod
def debug(message):
now = datetime.now(tz=pytz.timezone("Europe/Madrid")).strftime("%H:%M:%S")
print(f"{Colors.GRAY}[{now}] {Colors.BLUE}[DEBUG] {message}{Colors.RESET}")
@staticmethod
def warning(message):
now = datetime.now(tz=pytz.timezone("Europe/Madrid")).strftime("%H:%M:%S")
print(f"{Colors.GRAY}[{now}] {Colors.YELLOW}[WARNING] {message}{Colors.RESET}")
@staticmethod
def success(message):
now = datetime.now(tz=pytz.timezone("Europe/Madrid")).strftime("%H:%M:%S")
print(f"{Colors.GRAY}[{now}] {Colors.LIME}[SUCCESS] {message}{Colors.RESET}")
@staticmethod
def command(message):
now = datetime.now(tz=pytz.timezone("Europe/Madrid")).strftime("%H:%M:%S")
print(f"{Colors.GRAY}[{now}] {Colors.MAGENTA}[COMMAND] {message}{Colors.RESET}")

7
src/utils/reactions.py Normal file
View File

@@ -0,0 +1,7 @@
import discord
async def añadir_reacciones(message: discord.Message, reactions: str, n: int) -> None:
reactions_list = reactions.split(";")
for i in range(n):
await message.add_reaction(reactions_list[i])
i+=1