IRC rewrite continued
- Make functions for handling incoming IRC commands private where possible. - Add a few checks for input validation - Rewrite CTCP handling.
This commit is contained in:
parent
fbe8f48d63
commit
1d4d1dbab6
5 changed files with 389 additions and 295 deletions
6
mood.py
6
mood.py
|
@ -61,11 +61,15 @@ class Mood:
|
|||
}
|
||||
|
||||
def __init__(self, mood):
|
||||
if type(mood) is int:
|
||||
if isinstance(mood, int):
|
||||
self.mood = mood
|
||||
else:
|
||||
self.mood = self.moods.index(mood)
|
||||
|
||||
def value_str(self):
|
||||
"""Return mood index as str."""
|
||||
return str(self.mood)
|
||||
|
||||
def value(self):
|
||||
return self.mood
|
||||
|
||||
|
|
|
@ -4320,7 +4320,12 @@ class MainProgram(QtCore.QObject):
|
|||
self.attempts = 0
|
||||
|
||||
# but it's at least better than the way it was before.
|
||||
self.irc = PesterIRC(self.widget.config, self.widget)
|
||||
self.irc = PesterIRC(
|
||||
self.widget,
|
||||
self.widget.config.server(),
|
||||
self.widget.config.port(),
|
||||
self.widget.config.ssl(),
|
||||
)
|
||||
self.connectWidgets(self.irc, self.widget)
|
||||
|
||||
self.widget.passIRC(
|
||||
|
|
71
scripts/input_validation.py
Normal file
71
scripts/input_validation.py
Normal file
|
@ -0,0 +1,71 @@
|
|||
"""Provides functions for validating input from the server and other clients."""
|
||||
# import re
|
||||
|
||||
# _color_rgb = re.compile(r"^\d{1,3},\d{1,3},\d{1,3}$")
|
||||
# _color_hex = re.compile(r"^#(?:[0-9a-fA-F]{3}){1,2}$")
|
||||
|
||||
|
||||
def is_valid_mood(value: str):
|
||||
"""Returns True if an unparsed value (str) is a valid mood index."""
|
||||
if value in [
|
||||
"0",
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5",
|
||||
"6",
|
||||
"7",
|
||||
"8",
|
||||
"9",
|
||||
"10",
|
||||
"11",
|
||||
"12",
|
||||
"13",
|
||||
"14",
|
||||
"15",
|
||||
"16",
|
||||
"17",
|
||||
"18",
|
||||
"19",
|
||||
"20",
|
||||
"21",
|
||||
"22",
|
||||
]:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def is_valid_rgb_color(value: str):
|
||||
"""Returns True if an unparsed value (str) is a valid rgb color as "r,g,b".
|
||||
|
||||
Yeah you could do this via re but this is faster."""
|
||||
if not isinstance(value, str):
|
||||
return False
|
||||
if 4 > len(value) > 11:
|
||||
return False
|
||||
components = value.split(",")
|
||||
if len(components) != 3:
|
||||
return False
|
||||
for component in components:
|
||||
if not component.isnumeric():
|
||||
return False
|
||||
if int(component) > 255:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
"""
|
||||
def is_valid_rgb_color(value: str):
|
||||
"Returns True if an unparsed value (str) is a valid rgb color."
|
||||
if re.search(_color_rgb, value):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def is_valid_hex_color(value: str):
|
||||
"Returns True if an unparsed value (str) is a valid hex color."
|
||||
if re.search(_color_hex, value):
|
||||
return True
|
||||
return False
|
||||
"""
|
|
@ -90,6 +90,13 @@ class SendIRC:
|
|||
).strip() # Extra spaces break protocol, so strip.
|
||||
self.privmsg(target, f"\x01{outgoing_ctcp}\x01")
|
||||
|
||||
def ctcp_reply(self, target, command, msg=""):
|
||||
"""Send Client-to-Client Protocol reply message, responding to a CTCP message."""
|
||||
outgoing_ctcp = " ".join(
|
||||
[command, msg]
|
||||
).strip() # Extra spaces break protocol, so strip.
|
||||
self.notice(target, f"\x01{outgoing_ctcp}\x01")
|
||||
|
||||
def metadata(self, target, subcommand, *params):
|
||||
"""Send Metadata command to get or set metadata.
|
||||
|
||||
|
|
Loading…
Reference in a new issue