Initial Release of IGNCore version 2.5

This commit is contained in:
2021-08-09 13:18:56 +02:00
commit a83d98c47e
910 changed files with 224171 additions and 0 deletions
+116
View File
@@ -0,0 +1,116 @@
from core.aochat import server_packets
from core.aochat.BaseModule import BaseModule
from core.conn import Conn
from core.decorators import instance
from core.logger import Logger
from core.setting_service import SettingService
from core.setting_types import NumberSettingType, TextSettingType
@instance()
class PublicChannelService(BaseModule):
ORG_CHANNEL_MESSAGE_EVENT = "org_channel_message"
ORG_MSG_EVENT = "org_msg"
ORG_MSG_CHANNEL_ID = 42949672961
def __init__(self):
self.logger = Logger(__name__)
self.name_to_id = {}
self.id_to_name = {}
self.org_channel_id = None
self.org_id = None
self.org_name = None
def inject(self, registry):
self.bot = registry.get_instance("bot")
self.event_service = registry.get_instance("event_service")
self.character_service = registry.get_instance("character_service")
self.setting_service: SettingService = registry.get_instance("setting_service")
def pre_start(self):
self.bot.register_packet_handler(server_packets.PublicChannelJoined.id, self.add)
self.bot.register_packet_handler(server_packets.PublicChannelLeft.id, self.remove)
# priority must be above that of CommandService in order for relaying of commands to work correctly
self.bot.register_packet_handler(server_packets.PublicChannelMessage.id, self.public_channel_message,
priority=30)
self.event_service.register_event_type(self.ORG_CHANNEL_MESSAGE_EVENT)
self.event_service.register_event_type(self.ORG_MSG_EVENT)
self.setting_service.register_new('core.system', 'org_id', 0,
NumberSettingType(), 'OrgID used for roster')
self.setting_service.register_new('core.system', 'org_name', "",
TextSettingType(allow_empty=True), 'OrgName used for roster')
def start(self):
org_id_setting = self.setting_service.get("org_id")
if org_id_setting and org_id_setting.get_value() and org_id_setting.get_value() != "0":
self.org_id = org_id_setting.get_value()
org_name_setting = self.setting_service.get("org_name")
if org_name_setting and org_name_setting.get_value():
self.org_name = org_name_setting.get_value()
def get_channel_id(self, channel_name):
return self.name_to_id.get(channel_name)
def get_channel_name(self, channel_id):
return self.id_to_name.get(channel_id, None)
def add(self, conn: Conn, packet: server_packets.PublicChannelJoined):
if conn.id != "main":
return
self.id_to_name[packet.channel_id] = packet.name
self.name_to_id[packet.name] = packet.channel_id
if not self.org_id and self.is_org_channel_id(packet.channel_id):
self.org_channel_id = packet.channel_id
self.org_id = 0x00ffffffff & packet.channel_id
if packet.name != "Clan (name unknown)":
self.setting_service.get("org_name").set_value(packet.name)
self.org_name = packet.name
else:
data = self.event_service.db.query_single('SELECT org_name from all_orgs where org_id=?', [self.org_id])
self.org_name = data.org_name if data else 'Unknown Org'
self.logger.info("Org Id: %d" % self.org_id)
self.logger.info("Org Name: %s" % self.org_name)
def remove(self, conn: Conn, packet: server_packets.PublicChannelLeft):
if conn.id != "main":
return
channel_name = self.get_channel_name(packet.channel_id)
del self.id_to_name[packet.channel_id]
del self.name_to_id[channel_name]
def public_channel_message(self, conn: Conn, packet: server_packets.PublicChannelMessage):
if conn.id != "main":
return
if self.is_org_channel_id(packet.channel_id):
# char_name = self.character_service.get_char_name(packet.char_id)
# if packet.extended_message:
# message = packet.extended_message.get_message()
# else:
# message = packet.message
# # self.logger.log_chat(conn.id, "Org Channel", char_name, message)
self.event_service.fire_event(self.ORG_CHANNEL_MESSAGE_EVENT, packet)
elif packet.channel_id == self.ORG_MSG_CHANNEL_ID:
# char_name = self.character_service.get_char_name(packet.char_id)
# if packet.extended_message:
# message = packet.extended_message.get_message()
# else:
# message = packet.message
# self.logger.log_chat(conn.id, "Org Msg", char_name, message)
self.event_service.fire_event(self.ORG_MSG_EVENT, packet)
def is_org_channel_id(self, channel_id):
return channel_id >> 32 == 3
def get_org_id(self):
return self.org_id
def get_org_name(self):
return self.org_name
def get_all_public_channels(self):
return self.id_to_name