Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feedback #1

Open
wants to merge 116 commits into
base: feedback
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
f4f69a1
Setting up GitHub Classroom Feedback
github-classroom[bot] Dec 19, 2023
622cee3
add online IDE url; add deadline
github-classroom[bot] Dec 19, 2023
5562664
initial commit
patirroyo Dec 19, 2023
9f3b934
instrucciones
patirroyo Dec 19, 2023
eefae7e
funcina muy básico
patirroyo Dec 19, 2023
126c903
test local network
patirroyo Jan 12, 2024
21e73d0
ask for host
patirroyo Jan 12, 2024
ca3c267
change port
patirroyo Jan 12, 2024
e1b9387
port8081
patirroyo Jan 12, 2024
60e701d
upd socket
patirroyo Jan 12, 2024
ebe0636
socket stream
patirroyo Jan 12, 2024
8a4fc48
a mitad de filtrar
patirroyo Jan 12, 2024
c2a9953
server actualizado
patirroyo Jan 12, 2024
2bc610c
Probando temporizador de usuario inactivo
CarlosV2003 Jan 12, 2024
0b61e14
Probando temporizador de usuario inactivo v2
CarlosV2003 Jan 12, 2024
619de09
Merge pull request #13 from SalesianosZaragoza/DevUsuarioInactivo
CarlosV2003 Jan 12, 2024
6b9c00f
resuelto filtrado ips
patirroyo Jan 12, 2024
0a687cc
Merge branch 'main' into 6-filtrado-de-la-lista-de-ips-al-inicio-en-e…
patirroyo Jan 12, 2024
837add0
Merge pull request #14 from SalesianosZaragoza/6-filtrado-de-la-lista…
patirroyo Jan 12, 2024
badef76
Testeo del split del string
FernandoDelPino214 Jan 16, 2024
3c5a955
mas pruebas
FernandoDelPino214 Jan 16, 2024
34eaa7e
Muchos prints para debuggear
FernandoDelPino214 Jan 16, 2024
dace801
MAS PRUEBAS
FernandoDelPino214 Jan 16, 2024
2aef82d
Gestion de comandos por lado del server:
FernandoDelPino214 Jan 19, 2024
350a860
Merge pull request #16 from SalesianosZaragoza/DevGestionComandos
FernandoDelPino214 Jan 25, 2024
199954b
Debug handle function delete double remove client
patirroyo Jan 25, 2024
9c08170
manage close conexion and app
patirroyo Jan 26, 2024
fb559fa
handle conexion
patirroyo Jan 26, 2024
3439af8
try catch en el filtrado de IPs
FernandoDelPino214 Jan 26, 2024
545572b
#18 removed NICK
patirroyo Jan 26, 2024
a753257
La funcion 'soloMessage' funciona
FernandoDelPino214 Jan 26, 2024
c73bca3
Merge pull request #20 from SalesianosZaragoza/00X-desarrollo-base
patirroyo Jan 26, 2024
f1276da
#17 #19 handle and conexion fixed
patirroyo Jan 26, 2024
ed49503
Comando 'testSolo' disponible
FernandoDelPino214 Jan 26, 2024
850c6cd
Merge pull request #21 from SalesianosZaragoza/DevMensajesPrivados
FernandoDelPino214 Jan 26, 2024
bf4c13c
Arreglo split del mensaje en checkCommand
FernandoDelPino214 Jan 26, 2024
f4e9b7f
Merge pull request #22 from SalesianosZaragoza/DevGestionComandos
FernandoDelPino214 Jan 26, 2024
96fcb45
#11 close client conexion timeout
patirroyo Jan 26, 2024
c405d19
Merge branch '00X-desarrollo-base' of https://github.com/SalesianosZa…
patirroyo Jan 26, 2024
c5e2b38
timeout60*5s
patirroyo Jan 26, 2024
6d4f666
Merge pull request #26 from SalesianosZaragoza/DevGestionComandos
patirroyo Jan 26, 2024
f3583d2
#11 pulido
patirroyo Jan 26, 2024
9439deb
#11 good timeOut
patirroyo Jan 26, 2024
46d2f24
close cliente after 5 min
patirroyo Jan 26, 2024
57c5574
delete ok client closed byself
patirroyo Jan 26, 2024
96d789a
colorines
patirroyo Jan 26, 2024
8fb596c
#27 funciona a falta de guardar más lineas
patirroyo Jan 26, 2024
c31f3f8
Merge branch '00X-desarrollo-base' into 23-comando-cerrar-el-cliente
patirroyo Jan 26, 2024
8b4ab27
Merge pull request #28 from SalesianosZaragoza/23-comando-cerrar-el-c…
patirroyo Jan 26, 2024
a16079a
remove unnused func
patirroyo Jan 26, 2024
b965325
Corrected name previous
patirroyo Feb 2, 2024
823db6e
clean line when send
patirroyo Feb 2, 2024
fca99ca
Merge pull request #30 from SalesianosZaragoza/00X-desarrollo-base
patirroyo Feb 2, 2024
88ae297
La funcion 'soloMessage' funciona
FernandoDelPino214 Jan 26, 2024
d0a29a4
Comando 'testSolo' disponible
FernandoDelPino214 Jan 26, 2024
dae0b1e
Merge branch 'DevMensajesPrivados' of https://github.com/SalesianosZa…
FernandoDelPino214 Feb 2, 2024
5d1cef2
Co-authored-by: FernandoDelPino214 <[email protected].…
patirroyo Feb 2, 2024
00a3885
one distinct colour for each client
patirroyo Feb 2, 2024
5667241
Merge pull request #32 from SalesianosZaragoza/31-un-color-para-cada-…
patirroyo Feb 2, 2024
a65ccdc
La funcion 'soloMessage' funciona
FernandoDelPino214 Jan 26, 2024
eb3d78e
Comando 'testSolo' disponible
FernandoDelPino214 Jan 26, 2024
904dbb9
Merge branch 'DevMensajesPrivados' of https://github.com/SalesianosZa…
FernandoDelPino214 Feb 15, 2024
891e09e
Movida la logica del comando susurro a su propia funcion.
FernandoDelPino214 Feb 22, 2024
1cff3ed
Parece que funciona, falta limpiar codigo
FernandoDelPino214 Feb 22, 2024
4874fd6
Limpieza del método buildSusurro
FernandoDelPino214 Feb 22, 2024
007bfe4
Merge pull request #37 from SalesianosZaragoza/00X-desarrollo-base
David-hub777 Feb 23, 2024
b9e94ba
Añadido feedback para los clientes que envían mensajes privados cuand…
FernandoDelPino214 Feb 23, 2024
c8ec75e
soloMessage usa formateo como broadcast
FernandoDelPino214 Feb 23, 2024
251346a
Merge pull request #40 from SalesianosZaragoza/DevFormateoMensajes
FernandoDelPino214 Feb 23, 2024
6bb5a01
case exit en checkCommand
FernandoDelPino214 Feb 23, 2024
aaad255
Merge pull request #38 from SalesianosZaragoza/DevMensajesPrivados
patirroyo Feb 23, 2024
19d8281
Creacion de canales y borrar pantalla del chat
David-hub777 Feb 27, 2024
81225cb
solved double quotation marks
patirroyo Feb 27, 2024
c9b75d7
gitignore
patirroyo Feb 27, 2024
cee6d4b
updated Readme
patirroyo Mar 3, 2024
6d1bf50
#42 We have Emojis
patirroyo Mar 3, 2024
e16eea0
#34 bad words filter
patirroyo Mar 3, 2024
1c42fc2
Merge pull request #44 from SalesianosZaragoza/34-filtrado-de-palabra…
patirroyo Mar 3, 2024
8709e45
Merge pull request #45 from SalesianosZaragoza/00X-desarrollo-base
patirroyo Mar 3, 2024
1041513
Canales version un poco estable
David-hub777 Mar 6, 2024
72f1d8c
Marcado de censura
FernandoDelPino214 Mar 7, 2024
d4e8f19
Comando de listar usuarios
FernandoDelPino214 Mar 7, 2024
30a8da2
Comando listado Emojis
FernandoDelPino214 Mar 8, 2024
90082f1
Emoji list move cursor ok
patirroyo Mar 8, 2024
7f3e690
Merge pull request #46 from SalesianosZaragoza/MiniArreglos
patirroyo Mar 8, 2024
4a68da7
Merge pull request #50 from SalesianosZaragoza/00X-desarrollo-base
patirroyo Mar 8, 2024
579e701
version un poco estable
David-hub777 Mar 8, 2024
c8d655e
Prints in good place
patirroyo Mar 8, 2024
326df4a
refactor 1
David-hub777 Mar 8, 2024
94408be
Comprobacion de usuarios duplicados y/kick creados
CarlosV2003 Mar 9, 2024
aa5a020
Nuevos comandos añadidos (gacha incluido)
CarlosV2003 Mar 9, 2024
79b95d4
Cambiado los personajes por pokemons
CarlosV2003 Mar 9, 2024
34f4e83
Mas pokemon añadidos
CarlosV2003 Mar 9, 2024
146fe21
corrección errores con nombres de canalClientes
David-hub777 Mar 10, 2024
6877b6b
organizo el codigo
David-hub777 Mar 10, 2024
da97ba3
error corregido
David-hub777 Mar 11, 2024
a812fb7
correcion error en lineas con canales[canal].clientes
David-hub777 Mar 11, 2024
557b392
Subiendo cambios (quizas funcionen), a otra branch
CarlosV2003 Mar 11, 2024
b1b6a7a
Subiendo mas cambios funcionales a la rama local
CarlosV2003 Mar 11, 2024
03cf570
Merge branch 'main' into DevMasComandos
CarlosV2003 Mar 11, 2024
aac043a
Hecho merge con main, esperando a que
CarlosV2003 Mar 11, 2024
1bca3d3
pequeños cambios en enviaracanal, salirdecanal y en comandos
David-hub777 Mar 11, 2024
ccee922
Subiendo comando clear a chat_server.py
CarlosV2003 Mar 11, 2024
e4067c2
Revisado comando daradmin
CarlosV2003 Mar 11, 2024
e668077
Quitando comando /gacha50
CarlosV2003 Mar 11, 2024
cee8b8c
correcion de errores al crear y unirse a canales
David-hub777 Mar 11, 2024
0c70c55
eliminar metodo sacar del canal y pequeños arreglos
David-hub777 Mar 11, 2024
4039a4e
cambio para borrar los canales
David-hub777 Mar 11, 2024
f7611a3
Comandos mayuscula
CarlosV2003 Mar 11, 2024
4fa1c46
Merge pull request #54 from SalesianosZaragoza/DevMasComandos
FernandoDelPino214 Mar 11, 2024
74a3235
Merge branch '10-creación-canales' into 00X-desarrollo-base
David-hub777 Mar 11, 2024
dc8be92
revision final
patirroyo Mar 11, 2024
fe8d259
solucionada conexion inicial
patirroyo Mar 12, 2024
fcbc88c
pretty commands
patirroyo Mar 12, 2024
327db59
final commit lorololo imprimir este auténtico final final de verdad n…
patirroyo Mar 12, 2024
4291674
arreglado soloMessage
patirroyo Mar 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Byte-compiled / optimized / DLL files
__pycache__/
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-24ddc0f5d75046c5622901739e7c5dd533143b0c8e959d652212380cedb1ea36.svg)](https://classroom.github.com/a/RvxJKA0f)
[![Open in Codespaces](https://classroom.github.com/assets/launch-codespace-7f7980b617ed060a017424585567c406b6ee15c891e84e1186181d67ecf80aa0.svg)](https://classroom.github.com/open-in-codespaces?assignment_repo_id=13264709)

Para ejecutar el programa de chat, sigue estos pasos:

1. Abre dos terminales (ventanas de línea de comandos) en tu sistema operativo.
2. En la primera terminal, ejecuta el servidor de chat:

python chat_server.py

El servidor estará en espera de conexiones de clientes.
3. En la segunda terminal, ejecuta el cliente:

python chat_client.py

Ingresa un nombre de usuario cuando se te solicite.

Repite el paso 3 para abrir más clientes y únete al chat con diferentes nombres de usuario.

Ahora deberías tener varios clientes conectados al servidor, y pueden comenzar a enviar mensajes entre ellos. Ten en cuenta que en este ejemplo, tanto el servidor como los clientes se están ejecutando localmente en el mismo dispositivo, pero puedes modificar las direcciones IP para conectarte en una red local.
44 changes: 44 additions & 0 deletions chat_canales.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
class Canal:
def __init__(self, nombre):
self.nombre = nombre # Nombre del canal
self.clientes = [] # Clientes del canal
self.mensajes = [] # lista de mensajes del canal

# Para agregar un nuevo cliente al canal
def agregar_cliente(self, cliente):
self.clientes.append(cliente)

# Para eliminar un cliente del canal
def eliminar_cliente(self, cliente):
self.clientes.remove(cliente)

# Para enviar mensaje a TODOS los clientes del canal
def enviar_mensaje(self, mensaje):
self.mensajes.append(mensaje)

# Obtienes los últimos 10 mensajes cuando te conectas POR PRIMERA VEZ
# También se puede usar para borrar los mensajes que tienes en la pantalla con /clear
# Y volver a cargar los últimos 10 mensajes
def obtener_ultimos_mensajes(self):
return self.mensajes[-10:]

# eliminar canal de forma segura
def vaciar_canal(self):
clientesCanal = self.clientes
self.clientes = []
self.mensajes = []
return clientesCanal

#Encontrar un cliente
def encontrar_cliente(self, cliente):
for client in self.clientes:
if client == cliente:
return client
return None




# Como no funciona se puede borrar
# def __str__(self):
# return self.nombre + 'se ha empleado este metodo'
171 changes: 171 additions & 0 deletions chat_client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
import socket
import threading
import time
import sys
from chat_canales import Canal

# Configuración del cliente
host = input("Ingresa la dirección IP del servidor: \nEn caso de dejarlo en blanco se asignará localhost\n")
if host == '':
host = '127.0.0.1'
port = 65000


# Crear un socket del cliente
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.connect((host, port))


# Nombre de usuario
username = 'null'

quit = False


#Variable para almacenar el tiempo del último mensaje
last_message_time = time.time()

#Función para cerrar la conexión con el server
def close_connection():
global quit
print("Cerrando conexión...")
try:
server.close()
except Exception as e:
pass
quit = True
print("Conexión cerrada.\nPresiona ctrl+c para salir.")


#Función para verificar la inactividad del usuario
def check_inactivity():
global last_message_time
global quit
while not quit:
if time.time() - last_message_time > 5 * 60: # 5 minutos
print("Llevas demasiado tiempo inactivo")
close_connection()
break
if time.time() - last_message_time > 4 * 60: # 4 minutos
print("Si no escribes un mensaje dentro de un minuto, se cerrará la conexión.")

time.sleep(60) # Comprobar cada minuto



# Función para recibir mensajes del servidor
def receive():
global quit
global username
global duplicateUsername
while not quit:
try:
# Recibir y mostrar mensajes del servidor
message = server.recv(1024).decode('utf-8')
if message == 'Nombre de usuario ya está en uso. Por favor, elige otro.':
duplicateUsername = username
username = 'null'
time.sleep(1) # Clear the username
elif message == 'Has sido expulsado por un administrador.':
print("Has sido expulsado del servidor.")
close_connection()
break
print(message)
except Exception as e:
# Cerrar la conexión si hay un problema al recibir el mensaje
#print(f"Error en receive: {e}")
#print("Cerrando conexión...")
#close_connection()
#print("Conexión cerrada.\nPresiona ctrl+c para salir.")
break

#Constantes secuencias de escape
MOVES_CURSOR_1_LINE_UP = "\x1b[1A"
CLEAR_ENTIRE_LINE = "\x1b[2K"
MOVES_CURSOR_1_LINE_DOWN = "\x1b[1B"

#Diccionario de palabras malsonantes
BAD_WORDS = {
'joder' : 'practicar deporte en horizontal',
'follar' : 'hacer bebes',
'puta': 'persona con un trabajo complicado',
'coño': 'la parte entre el ombligo y las rodillas (en femenino)',
'chúpamela': 'no estoy de acuerdo contigo',
'mierda': 'excremento',
'cabrón': 'persona con mucho carácter',
'gilipollas': 'persona con mucho carácter',
'polla': 'ave',
'pene': 'miembro viril',
'verga': 'palo',
'coger': 'agarrar',
'culo': 'parte trasera',
'zorra': 'animal',
'maricón': 'persona con mucha sensibilidad',
'puto': 'persona con un trabajo complicado',
'Gorka': 'Dios',
'Agustín': 'Un poco menos que Dios',
'agustín': 'Un poco menos que Dios',
'salesianos': 'la mejor escuela del mundo',
'salesiano': 'persona con mucha suerte',
'salesiana': 'persona con mucha suerte',
'comunista': ' ☭ ',
'Nacho': ' ☭ ',
'nacho': ' ☭ ',
'Fuck': 'F***',
}

# Función para enviar mensajes al servidor
def send():
global end
global last_message_time
global username
global quit
usernameSet = False
while not quit:
if username == 'null':
while not usernameSet: # Keep asking for a username until a valid one is entered
username = input("username: ")
if ' ' in username:
print("Nombre de usuario no puede tener espacios. Utiliza solo una palabra.")
username == 'null'
elif username == '':
print("Nombre de usuario no puede estar vacío.")
username == 'null'
elif any(bad_word in username.lower() for bad_word in BAD_WORDS):
print("Nombre de usuario no puede contener la palabra prohibida.")
username == 'null'
elif len(username.split(' ')) > 1:
print("El nombre de usuario no puede tener más de una palabra")
username == 'null'
else:
message = username
server.send(message.encode('utf-8')) # Send the username to the server
time.sleep(1) # Wait for a response from the server
if username != 'null': # If the server accepted the username, break the loop
usernameSet = True
continue
data = ''
else:
data = input("")
message = f'{username}: {data}'
if data is not None and data != '':
try:
server.send(message.encode('utf-8'))
print(MOVES_CURSOR_1_LINE_UP+CLEAR_ENTIRE_LINE+MOVES_CURSOR_1_LINE_UP)
if data == '/exit':
close_connection()
break
last_message_time = time.time() # Update the last message time
except Exception as e:
close_connection()
break

# Instanciar un hilo para verificar la inactividad del usuario
inactivity_thread = threading.Thread(target=check_inactivity)
inactivity_thread.start()
# Iniciar hilos para recibir y enviar mensajes simultáneamente
receive_thread = threading.Thread(target=receive)
receive_thread.start()

send_thread = threading.Thread(target=send)
send_thread.start()
Loading