Update server.py
This commit is contained in:
parent
93bf209924
commit
a012870de9
1 changed files with 35 additions and 9 deletions
44
server.py
44
server.py
|
@ -66,6 +66,7 @@ def session(connection, client):
|
||||||
else:
|
else:
|
||||||
if not already_set:
|
if not already_set:
|
||||||
nickname_list[pending] = connection
|
nickname_list[pending] = connection
|
||||||
|
property_list[pending] = {"host": hostname}
|
||||||
already_set = True
|
already_set = True
|
||||||
elif command == "USER":
|
elif command == "USER":
|
||||||
if not ready:
|
if not ready:
|
||||||
|
@ -106,10 +107,10 @@ def session(connection, client):
|
||||||
print(channels_list)
|
print(channels_list)
|
||||||
for i in channels_list[channel]:
|
for i in channels_list[channel]:
|
||||||
try:
|
try:
|
||||||
nickname_list[i].sendall(bytes(f":{pending}!~{username}@{client[0]} JOIN {channel}\r\n","UTF-8"))
|
nickname_list[i].sendall(bytes(f":{pending}!~{username}@{hostname} JOIN {channel}\r\n","UTF-8"))
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
# Code re-used in the WHO command
|
# Code re-used in the NAMES command
|
||||||
if channel in channels_list:
|
if channel in channels_list:
|
||||||
if pending in channels_list[channel]:
|
if pending in channels_list[channel]:
|
||||||
users = " ".join(channels_list[channel])
|
users = " ".join(channels_list[channel])
|
||||||
|
@ -120,7 +121,7 @@ def session(connection, client):
|
||||||
channel = text.split(" ")[1]
|
channel = text.split(" ")[1]
|
||||||
for i in channels_list[channel]:
|
for i in channels_list[channel]:
|
||||||
try:
|
try:
|
||||||
nickname_list[i].sendall(bytes(f":{pending}!~{username}@{client[0]} {text}\r\n","UTF-8"))
|
nickname_list[i].sendall(bytes(f":{pending}!~{username}@{hostname} {text}\r\n","UTF-8"))
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
try:
|
try:
|
||||||
|
@ -131,12 +132,24 @@ def session(connection, client):
|
||||||
channel = text.split(" ")[1]
|
channel = text.split(" ")[1]
|
||||||
if channel in channels_list:
|
if channel in channels_list:
|
||||||
for i in channels_list[channel]:
|
for i in channels_list[channel]:
|
||||||
who_host = nickname_list[i]["host"]
|
who_host = property_list[i]["host"]
|
||||||
connection.sendall(bytes(f":{server} 352 {pending} {i} {who_host}\r\n","UTF-8"))
|
who_user = property_list[i]["username"]
|
||||||
|
who_realname = property_list[i]["realname"]
|
||||||
|
connection.sendall(bytes(f":{server} 352 {pending} {who_user} ~{who_host} {server} {i} H :0 {who_realname}\r\n","UTF-8"))
|
||||||
elif channel in nickname_list:
|
elif channel in nickname_list:
|
||||||
connection.sendall(bytes(f":{server} 353 {pending} {channel} {users} {server}\r\n","UTF-8"))
|
who_host = property_list[channel]["host"]
|
||||||
|
who_user = property_list[channel]["username"]
|
||||||
|
who_realname = property_list[channel]["realname"]
|
||||||
|
connection.sendall(bytes(f":{server} 352 {pending} * {who_user} ~{who_host} {server} {channel} H :0 {who_realname}\r\n","UTF-8"))
|
||||||
|
|
||||||
connection.sendall(bytes(f":{server} 366 {pending} {channel} :End of /WHO list.\r\n","UTF-8"))
|
connection.sendall(bytes(f":{server} 366 {pending} {channel} :End of /WHO list.\r\n","UTF-8"))
|
||||||
|
elif command == "NAMES":
|
||||||
|
channel = text.split(" ")[1]
|
||||||
|
if channel in channels_list:
|
||||||
|
if pending in channels_list[channel]:
|
||||||
|
users = " ".join(channels_list[channel])
|
||||||
|
connection.sendall(bytes(f":{server} 353 {pending} = {channel} :{users}\r\n","UTF-8"))
|
||||||
|
connection.sendall(bytes(f":{server} 366 {pending} {channel} :End of /NAMES list.\r\n","UTF-8"))
|
||||||
elif command == "PRIVMSG":
|
elif command == "PRIVMSG":
|
||||||
target = text.split(" ")[1]
|
target = text.split(" ")[1]
|
||||||
if target in channels_list:
|
if target in channels_list:
|
||||||
|
@ -167,7 +180,7 @@ def session(connection, client):
|
||||||
if pending in users:
|
if pending in users:
|
||||||
for j in users:
|
for j in users:
|
||||||
if j != pending and not j in done:
|
if j != pending and not j in done:
|
||||||
nickname_list[j].sendall(bytes(f":{pending}!~{username}@{client[0]} {text}\r\n","UTF-8"))
|
nickname_list[j].sendall(bytes(f":{pending}!~{username}@{hostname} {text}\r\n","UTF-8"))
|
||||||
done.append(j)
|
done.append(j)
|
||||||
# Remove the quitting user from the channel.
|
# Remove the quitting user from the channel.
|
||||||
try:
|
try:
|
||||||
|
@ -175,8 +188,8 @@ def session(connection, client):
|
||||||
except:
|
except:
|
||||||
print(traceback.format_exc())
|
print(traceback.format_exc())
|
||||||
# Confirm QUIT and close the socket.
|
# Confirm QUIT and close the socket.
|
||||||
connection.sendall(bytes(f":{pending}!~{username}@{client[0]} {text}\r\n","UTF-8"))
|
connection.sendall(bytes(f":{pending}!~{username}@{hostname} {text}\r\n","UTF-8"))
|
||||||
connection.sendall(bytes(f"ERROR :Closing Link: {client[0]} ({msg})\r\n","UTF-8"))
|
connection.sendall(bytes(f"ERROR :Closing Link: {hostname} ({msg})\r\n","UTF-8"))
|
||||||
connection.close()
|
connection.close()
|
||||||
break
|
break
|
||||||
elif command == "GITSERV":
|
elif command == "GITSERV":
|
||||||
|
@ -203,6 +216,19 @@ def session(connection, client):
|
||||||
connection.close()
|
connection.close()
|
||||||
if pending != "*":
|
if pending != "*":
|
||||||
del nickname_list[pending]
|
del nickname_list[pending]
|
||||||
|
del property_list[pending]
|
||||||
|
if not safe_quit:
|
||||||
|
for i, users in channels_list.items():
|
||||||
|
if pending in users:
|
||||||
|
for j in users:
|
||||||
|
if j != pending and not j in done:
|
||||||
|
nickname_list[j].sendall(bytes(f":{pending}!~{username}@{hostname} QUIT :Error, possibly disconnected.\r\n","UTF-8"))
|
||||||
|
done.append(j)
|
||||||
|
# Remove the quitting user from the channel.
|
||||||
|
try:
|
||||||
|
channels_list[i].remove(pending)
|
||||||
|
except:
|
||||||
|
print(traceback.format_exc())
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
connection, client = tcp_socket.accept()
|
connection, client = tcp_socket.accept()
|
||||||
|
|
Loading…
Reference in a new issue