Skip to content
This repository was archived by the owner on Apr 27, 2019. It is now read-only.

Commit 5e742bc

Browse files
committed
Added trace debugging branch; fixed colored names.
1 parent 3af9aab commit 5e742bc

File tree

6 files changed

+60
-13
lines changed

6 files changed

+60
-13
lines changed

packet_stream.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
import pprint
23
import zlib
34
import datetime
45
import packets
@@ -70,7 +71,10 @@ def check_packet(self):
7071
z = zlib.decompressobj()
7172
p_parsed.data = z.decompress(p_parsed.data)
7273
except zlib.error:
73-
self.logger.warning("Decompression error in check_packet.")
74+
self.logger.error("Decompression error in check_packet.")
75+
self.logger.trace("Packet data:")
76+
for line in pprint.pformat(p_parsed):
77+
self.logger.trace(line)
7478
raise
7579
packet = Packet(packet_id=p_parsed.id, payload_size=p_parsed.payload_size, data=p_parsed.data,
7680
original_data=p, direction=self.direction)

plugins/core/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22
from admin_commands_plugin import *
33
from command_plugin import *
44
from player_manager import *
5-
from starbound_config_manager import *
5+
from starbound_config_manager import *
6+
from colored_names import *

plugins/core/admin_commands_plugin/admin_command_plugin.py

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import pprint
2+
import socket
13
from twisted.internet import reactor
24
from base_plugin import SimpleCommandPlugin, BasePlugin
35
from plugins.core.player_manager import permissions, UserLevels
@@ -51,13 +53,21 @@ def whois(self, data):
5153
@permissions(UserLevels.MODERATOR)
5254
def promote(self, data):
5355
"""Promotes/demoates a user to a specific rank. Syntax: /promote [username] [rank] (where rank is either: registered, moderator, admin, or guest))"""
56+
self.logger.trace("Promote command received with the following data: %s" % ":".join(data))
5457
if len(data) > 0:
5558
name = " ".join(data[:-1])
59+
self.logger.trace("Extracted the name %s in promote command." % name)
5660
rank = data[-1].lower()
61+
self.logger.trace("Extracted the rank %s in the promote command." % rank)
5762
player = self.player_manager.get_by_name(name)
63+
self.logger.trace("Player object in promote command, found by name, is %s." % str(player))
5864
if player is not None:
65+
self.logger.trace("Player object was not None. Dump of player object follows.")
66+
for line in pprint.pformat(player):
67+
self.logger.trace("\t"+line)
5968
old_rank = player.access_level
6069
if old_rank >= self.protocol.player.access_level:
70+
self.logger.trace("The old rank was greater or equal to the current rank. Sending a message and returning.")
6171
self.protocol.send_chat_message(
6272
"You cannot change that user's access level as they are at least at an equal level as you.")
6373
return
@@ -70,23 +80,32 @@ def promote(self, data):
7080
elif rank == "guest":
7181
self.make_guest(player)
7282
else:
83+
self.logger.trace("Non-existent rank. Returning with a help message.")
7384
self.protocol.send_chat_message("No such rank!\n" + self.promote.__doc__)
7485
return
7586

87+
self.logger.trace("Sending promotion message to promoter.")
7688
self.protocol.send_chat_message("%s: %s -> %s" % (
7789
player.colored_name(self.config.colors), str(UserLevels(old_rank)).split(".")[1],
7890
rank.upper()))
79-
self.factory.protocols[player.protocol].send_chat_message(
80-
"%s has promoted you to %s" % (
81-
self.protocol.player.colored_name(self.config.colors), rank.upper()))
91+
self.logger.trace("Sending promotion message to promoted player.")
92+
try:
93+
self.factory.protocols[player.protocol].send_chat_message(
94+
"%s has promoted you to %s" % (
95+
self.protocol.player.colored_name(self.config.colors), rank.upper()))
96+
except KeyError:
97+
self.logger.trace("Promoted player is not logged in.")
8298
else:
99+
self.logger.trace("Player wasn't found. Sending chat message to player.")
83100
self.protocol.send_chat_message("Player not found!\n" + self.promote.__doc__)
84101
return
85102
else:
103+
self.logger.trace("Received blank promotion command. Sending help message.")
86104
self.protocol.send_chat_message(self.promote.__doc__)
87105

88106
@permissions(UserLevels.OWNER)
89107
def make_guest(self, player):
108+
self.logger.trace("Setting %s to GUEST", player.name)
90109
player.access_level = UserLevels.GUEST
91110
try:
92111
self.player_manager.session.commit()
@@ -96,6 +115,7 @@ def make_guest(self, player):
96115

97116
@permissions(UserLevels.MODERATOR)
98117
def make_registered(self, player):
118+
self.logger.trace("Setting %s to REGISTERED", player.name)
99119
player.access_level = UserLevels.REGISTERED
100120
try:
101121
self.player_manager.session.commit()
@@ -106,6 +126,7 @@ def make_registered(self, player):
106126
@permissions(UserLevels.ADMIN)
107127
def make_mod(self, player):
108128
player.access_level = UserLevels.MODERATOR
129+
self.logger.trace("Setting %s to MODERATOR", player.name)
109130
try:
110131
self.player_manager.session.commit()
111132
except:
@@ -114,6 +135,7 @@ def make_mod(self, player):
114135

115136
@permissions(UserLevels.OWNER)
116137
def make_admin(self, player):
138+
self.logger.trace("Setting %s to ADMIN", player.name)
117139
player.access_level = UserLevels.ADMIN
118140
try:
119141
self.player_manager.session.commit()
@@ -144,12 +166,22 @@ def kick(self, data):
144166
@permissions(UserLevels.ADMIN)
145167
def ban(self, data):
146168
"""Bans an IP (retrieved by /whois). Syntax: /ban [ip address]"""
147-
ip = data[0]
148-
self.player_manager.ban(ip)
149-
self.protocol.send_chat_message("Banned IP: %s" % ip)
150-
self.logger.warning("%s banned IP: %s", self.protocol.player.name, ip)
169+
try:
170+
ip = data[0]
171+
socket.inet_aton(ip)
172+
self.logger.debug("Banning IP address %s" % ip)
173+
self.player_manager.ban(ip)
174+
self.protocol.send_chat_message("Banned IP: %s" % ip)
175+
self.logger.warning("%s banned IP: %s", self.protocol.player.name, ip)
176+
return False
177+
except socket.error:
178+
self.ban_by_name(data)
151179
return False
152180

181+
def ban_by_name(self, data):
182+
raise NotImplementedError
183+
184+
153185
@permissions(UserLevels.ADMIN)
154186
def bans(self, data):
155187
"""Lists the currently banned IPs. Syntax: /bans"""

plugins/core/colored_names/colored_names.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,14 @@ def activate(self):
1818
def on_chat_received(self, data):
1919
try:
2020
p = chat_received().parse(data.data)
21+
print p
2122
sender = self.player_manager.get_logged_in_by_name(p.name)
23+
print sender
2224
p.name = sender.colored_name(self.config.colors)
25+
print p.name
2326
self.protocol.transport.write(build_packet(Packets.CHAT_RECEIVED, chat_received().build(p)))
24-
except AttributeError:
27+
except AttributeError as e:
28+
self.logger.warning("Received AttributeError in colored_name. %s", str(e))
2529
self.protocol.transport.write(data.original_data)
2630
return False
2731

plugins/core/player_manager/manager.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,12 @@ class Player(Base):
110110
ips = relationship("IPAddress", order_by="IPAddress.id", backref="players")
111111

112112
def colored_name(self, colors):
113+
logger.trace("Building colored name.")
113114
color = colors[str(UserLevels(self.access_level)).split(".")[1].lower()]
115+
logger.trace("Color is %s", color)
114116
name = self.name
117+
logger.trace("Name is %s", name)
118+
logger.trace("Returning the following data for colored name. %s:%s:%s", color, name, colors['default'])
115119
return color + name + colors["default"]
116120

117121
@property

server.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from utility_functions import build_packet
2222

2323
VERSION = "1.2.2"
24-
TRACE = False
24+
TRACE = True
2525
TRACE_LVL = 9
2626
logging.addLevelName(9, "TRACE")
2727
logging.Logger.trace = lambda s, m, *a, **k: s._log(TRACE_LVL, m, a, **k)
@@ -397,21 +397,23 @@ def send_chat_message(self, text, channel=0, world='', name=''):
397397
brackets, otherwise it will be displayed as `<name>`.
398398
:return: None
399399
"""
400-
logger.debug("Sent chat message with text: %s", text)
401400
if '\n' in text:
402401
lines = text.split('\n')
403402
for line in lines:
404403
self.send_chat_message(line)
405404
return
405+
logger.trace("Calling send_chat_message from player %s on channel %d on world '%s' with reported username of %s with message: %s", self.player.name, channel, world, name, text)
406406
chat_data = packets.chat_received().build(Container(chat_channel=channel,
407407
world=world,
408408
client_id=0,
409409
name=name,
410410
message=text.encode("utf-8")))
411+
logger.trace("Built chat payload. Data: %s", chat_data.encode("hex"))
411412
chat_packet = build_packet(packets.Packets.CHAT_RECEIVED,
412413
chat_data)
414+
logger.trace("Built chat packet. Data: %s", chat_packet.encode("hex"))
413415
self.transport.write(chat_packet)
414-
416+
logger.debug("Sent chat message with text: %s", text)
415417
def write(self, data):
416418
"""
417419
Convenience method to send data to the client.

0 commit comments

Comments
 (0)