-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathevents.py
131 lines (102 loc) · 5.37 KB
/
events.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import discord
import urllib.parse
import requests
import os
from dotenv import load_dotenv
load_dotenv()
url = os.getenv('API_DOLAR')
google = os.getenv('API_GOOGLE')
join_channel = int(os.getenv('CHANNEL_JOIN')) # Asegúrate de que CHANNEL_JOIN sea un ID numérico válido
async def on_raw_reaction_add(payload, bot):
if payload.member.bot:
return
channel = bot.get_channel(payload.channel_id)
message = await channel.fetch_message(payload.message_id)
guild = message.guild
member = payload.member
try:
emoji = payload.emoji.name
role = discord.utils.get(guild.roles, name=emoji)
if role is not None:
if role in member.roles:
await member.remove_roles(role)
else:
await member.add_roles(role)
except Exception as e:
print(f'Error: {e}')
# Evento que se ejecuta cuando un nuevo miembro se une al servidor
async def on_member_join(member, bot):
guild = member.guild
canal_de_bienvenida = discord.utils.get(guild.channels, name="bienvenida")
if canal_de_bienvenida:
mensaje_de_bienvenida = f'Bienvenido al servidor, {member.mention}!'
await canal_de_bienvenida.send(mensaje_de_bienvenida)
channel = bot.get_channel(join_channel)
message = await channel.send(f'Bienvenido {member.mention}! Reacciona a este mensaje para seleccionar tus roles:')
for emoji in ['👨💻', '📂', '⌨️', '💻', '🖥️', '🎨', '👁️']:
await message.add_reaction(emoji)
# Evento que se ejecuta cuando un miembro abandona el servidor
async def on_member_remove(member, bot):
guild = member.guild
canal_de_despedida = discord.utils.get(guild.channels, name="bienvenida")
if canal_de_despedida:
mensaje_de_despedida = f'{member.mention} ha dejado el servidor. ¡Te echaremos de menos!'
await canal_de_despedida.send(mensaje_de_despedida)
async def obtener_usuarios_offline(message):
usuarios_offline = [m for m in message.guild.members if m.status == discord.Status.offline]
if usuarios_offline:
lista_usuarios = "\n".join([u.display_name for u in usuarios_offline])
respuesta = f'Los usuarios que están offline son:\n{lista_usuarios}'
else:
respuesta = 'No hay usuarios offline en este servidor en este momento.'
await message.channel.send(respuesta)
# Evento que se ejecuta cuando se recibe un mensaje en el servidor
async def on_message(message, bot):
if message.author == bot.user:
return
mensaje = message.content.lower()
if any(keyword in mensaje for keyword in ["código", "programación", "code", "programming"]):
recomendacion = (
f"Hola {message.author.mention}, veo que tienes una consulta sobre programación. "
"Te recomiendo que uses ChatGPT para obtener respuestas detalladas y específicas sobre tu código. "
"¡Es una excelente herramienta! Accedé desde: https://chatgpt.com/"
)
await message.channel.send(recomendacion)
return
if ("dolar" in mensaje or "dólar" in mensaje or "euro" in mensaje) and (("oficial" in mensaje or "blue" in mensaje) and ("compra" in mensaje or "venta" in mensaje)):
tipo = "oficial" if "oficial" in mensaje else "blue" if "blue" in mensaje else "oficial_euro" if "euro" in mensaje else "blue_euro"
accion = "compra" if "compra" in mensaje else "venta"
response = requests.get(url)
if response.status_code == 200:
data_dolar = response.json()
clave_valor = "value_buy" if accion == "compra" else "value_sell"
valor = data_dolar[tipo][clave_valor]
if "euro" in mensaje:
moneda = "Euro"
else:
moneda = "Dólar"
mensaje_respuesta = f"El Valor del {moneda} {tipo.replace('_', ' ').title()} es de ${valor} para la {accion.title()}"
await message.channel.send(mensaje_respuesta)
else:
await message.channel.send("No se pudo obtener la información de la moneda en este momento. Inténtalo de nuevo más tarde.")
if mensaje.startswith('¿dónde queda '):
provincia = mensaje[len('¿dónde queda '):-1]
ubicacion_codificada = urllib.parse.quote(provincia)
google_maps_url = f'{google}{ubicacion_codificada}'
await message.channel.send(f'{provincia} se encuentra en {google_maps_url}')
if bot.user.mentioned_in(message):
apodo = message.author.mention
if any(saludo in mensaje for saludo in ["hola", "hello", "hi", "buen dia", "buenas tardes", "buenas noches"]):
respuesta = f'Hola {apodo}! ¿Cómo estás en el día de hoy?'
elif any(saludo in mensaje for saludo in ["adios", "chau", "bye"]):
respuesta = f'Hasta luego {apodo}!'
elif any(saludo in mensaje for saludo in ["ayudar", "ayuda", "help", "ayúdame"]):
respuesta = f'Obviamente, ¿en qué te puedo ayudar {apodo}?'
elif any(saludo in mensaje for saludo in ["sos", "robot", "extraterrestre"]):
respuesta = f'Para nada {apodo}, soy un Bot generado con Python por un Hacker!.'
elif "offline" in mensaje:
await obtener_usuarios_offline(message)
return
else:
respuesta = f'¡Quedo atento a lo que necesites, {apodo}!'
await message.channel.send(respuesta)