Initial Release of IGNCore version 2.5
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
import re
|
||||
|
||||
from core.aochat import server_packets, client_packets
|
||||
from core.conn import Conn
|
||||
from core.decorators import instance
|
||||
from core.logger import Logger
|
||||
from core.lookup.character_service import CharacterService
|
||||
from core.setting_service import SettingService
|
||||
from core.setting_types import BooleanSettingType
|
||||
from core.text import Text
|
||||
from core.tyrbot import Tyrbot
|
||||
|
||||
|
||||
@instance("Darknet")
|
||||
class DarkController:
|
||||
relay_channel_id = None
|
||||
relay_name = None
|
||||
MESSAGE_SOURCE = "darknet"
|
||||
message_regex = re.compile(r"^(<font color='#\S+'>){2}\[([a-zA-Z]{2,})]</font> "
|
||||
r"<font color='#\S+'>(.+)</font> \[(.+)] \[(.+)]$", re.DOTALL)
|
||||
name_regex = re.compile(r"<a.*?href='user://(.+?)'>\1</a>", re.DOTALL)
|
||||
|
||||
def __init__(self):
|
||||
self.logger = Logger(__name__)
|
||||
|
||||
def inject(self, registry):
|
||||
self.bot: Tyrbot = registry.get_instance("bot")
|
||||
self.text: Text = registry.get_instance("text")
|
||||
self.setting_service: SettingService = registry.get_instance("setting_service")
|
||||
self.character_service: CharacterService = registry.get_instance("character_service")
|
||||
self.message_hub_service = registry.get_instance("message_hub_service")
|
||||
|
||||
def pre_start(self):
|
||||
self.bot.register_packet_handler(server_packets.PrivateChannelInvited.id, self.handle_private_channel_invite)
|
||||
self.bot.register_packet_handler(server_packets.PrivateChannelMessage.id, self.handle_private_channel_message)
|
||||
self.message_hub_service.register_message_source(self.MESSAGE_SOURCE)
|
||||
|
||||
def start(self):
|
||||
self.setting_service.register_new(self.module_name, "dark_relay", "true", BooleanSettingType(),
|
||||
"Is the Module Enabled?")
|
||||
self.setting_service.register_new(self.module_name, "dark_wts", "true", BooleanSettingType(),
|
||||
"Is the WTS channel visible?")
|
||||
self.setting_service.register_new(self.module_name, "dark_wtb", "true", BooleanSettingType(),
|
||||
"Is the WTB channel visible?")
|
||||
self.setting_service.register_new(self.module_name, "dark_lr", "true", BooleanSettingType(),
|
||||
"Is the Lootrights channel visible?")
|
||||
self.setting_service.register_new(self.module_name, "dark_gen", "true", BooleanSettingType(),
|
||||
"Is the General channel visible?")
|
||||
self.setting_service.register_new(self.module_name, "dark_pvp", "true", BooleanSettingType(),
|
||||
"Is the PvP channel visible?")
|
||||
self.setting_service.register_new(self.module_name, "dark_pvm", "true", BooleanSettingType(),
|
||||
"Is the PVM channel visible?")
|
||||
self.setting_service.register_new(self.module_name, "dark_event", "true", BooleanSettingType(),
|
||||
"Is the Event channel visible?")
|
||||
|
||||
def handle_private_channel_invite(self, conn: Conn, packet: server_packets.PrivateChannelInvited):
|
||||
if conn != "main":
|
||||
pass
|
||||
if self.setting_service.get_value("dark_relay") == "0":
|
||||
return
|
||||
if "Darknet" == self.character_service.get_char_name(packet.private_channel_id):
|
||||
channel_name = self.character_service.get_char_name(packet.private_channel_id)
|
||||
self.bot.send_packet(client_packets.PrivateChannelJoin(packet.private_channel_id))
|
||||
self.logger.info("Joined private channel {channel}".format(channel=channel_name))
|
||||
self.relay_channel_id = packet.private_channel_id
|
||||
self.relay_name = channel_name
|
||||
|
||||
def handle_private_channel_message(self, conn, packet: server_packets.PrivateChannelMessage):
|
||||
if conn != "main":
|
||||
pass
|
||||
if self.setting_service.get_value("dark_relay") == "0":
|
||||
return
|
||||
if packet.private_channel_id == self.relay_channel_id:
|
||||
if self.bot.get_char_id() == packet.char_id:
|
||||
return
|
||||
if packet.char_id != self.relay_channel_id:
|
||||
return
|
||||
message = packet.message.strip()
|
||||
self.process_incoming_relay_message(message)
|
||||
|
||||
def process_incoming_relay_message(self, message):
|
||||
if re.search(self.message_regex, message):
|
||||
cont = re.findall(self.message_regex, message)
|
||||
cont = cont[0]
|
||||
ch = cont[1].lower()
|
||||
msg = cont[2]
|
||||
tell = cont[3]
|
||||
if ch == "wts":
|
||||
if self.setting_service.get_value("dark_wts") == "0":
|
||||
return
|
||||
channel = "<red>WTS</red>"
|
||||
elif ch == "wtb":
|
||||
if self.setting_service.get_value("dark_wtb") == "0":
|
||||
return
|
||||
channel = "<green>WTB</green>"
|
||||
elif ch == "lootrights":
|
||||
if self.setting_service.get_value("dark_lr") == "0":
|
||||
return
|
||||
channel = "<violet>LR</violet>"
|
||||
elif ch == "general":
|
||||
if self.setting_service.get_value("dark_gen") == "0":
|
||||
return
|
||||
channel = "<notice>Gen</notice>"
|
||||
elif ch == "pvm":
|
||||
if self.setting_service.get_value("dark_pvm") == "0":
|
||||
return
|
||||
channel = "<cyan>PvM</cyan>"
|
||||
elif ch == "event":
|
||||
if self.setting_service.get_value("dark_event") == "0":
|
||||
return
|
||||
channel = "<highlight>Event</highlight>"
|
||||
elif ch == "pvp":
|
||||
if self.setting_service.get_value("dark_pvp") == "0":
|
||||
return
|
||||
channel = "<grey>PvP</grey>"
|
||||
elif ch == "auction":
|
||||
channel = "<yellow>AUCTION</yellow>"
|
||||
else:
|
||||
return
|
||||
message = ("[%s] %s [%s]" % (self.text.strip_html_tags(channel), msg, tell))
|
||||
self.message_hub_service.send_message(self.MESSAGE_SOURCE, None, message, message)
|
||||
Reference in New Issue
Block a user