Files
igncore/modules/onlinebot/ding/ding_controller.py
T
Minidodo d0c8c1744c Fixed bidding, while not being in raid (Nolonger throws an error)
Added default alias !list for !loot (bebot like)
Changed the layout of !notes, its more compact now.
fixed !count in the rare case of an empty private channel
2021-08-15 15:47:06 +02:00

126 lines
6.8 KiB
Python

import random
import re
from core.conn import Conn
from core.db import DB
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.text import Text
from core.tyrbot import Tyrbot
@instance("DingController")
class DingController:
axp = re.compile(
r"ICC planet-wide announcement: (.+) has been awarded the highest honorary rank for "
r"outstanding dedication to the defence of Rubi-Ka.")
xp = re.compile(
r"You feel the core of your being shift, as the source makes room for a divine presence. "
r"'(.+)' has reached enlightenment.")
text_options_xp = ["Congratz! You have reached the end of the line! NO MORE FUN FOR YOU! :P",
"Holy shit, you finally made it! What an accomplishment... Congratulations "
"<font color=#FF1493>{name}</font>, for reaching a level reserved for the greatest!",
"Damn <font color=#FF1493>{name}</font>.... I'm going to miss you a great deal, "
"because after this, we no longer can be together <font color=#FF1493>{name}</font>."
" We must part so you can continue getting your research and AI levels done! Farewell!",
"Hey <font color=#FF1493>{name}</font>, how was the inferno grind? "
"I'm glad to see you made it through, and congratulations for "
"finally getting the level you well deserved!",
"Our congratulations, to our newest <font color=#FF1493>level 220</font> member, "
"<font color=#FF1493>{name}</font>, for his dedication. "
"We present him with his new honorary rank, Chuck Norris!",
"Holy crap, you actually did it! Dear <font color=#FF1493>{name}</font>, "
"I salute you for your determination and sheer awesomeness. Congratulations, "
"to our newest <font color=#FF1493>level 220</font> member!"]
text_options_axp = ["Congratz! You have reached the end of the line! NO MORE FUN FOR YOU! :P",
"Holy shit, you finally made it! What an accomplishment... "
"Congratulations <font color=#FF1493>{name}</font>, "
"for reaching <green>Alien Level 30</green>!",
"Damn... I'm going to miss you a great deal, because after this, we no longer can be together, "
"<font color=#FF1493>{name}</font>. We must part so you can continue getting your research!"
" Farewell!",
"Hey <font color=#FF1493>{name}</font>, how was the <green>alien</green> grind?"
" I'm glad to see you made it through, "
"and congratulations for finally getting the level you well deserved!",
"Our congratulations, to our newest <green>Alien Level 30</green> member, "
"<font color=#FF1493>{name}</font>, for his dedication. "
"We present him with his new honorary rank, <yellow>Vindicator</yellow>!",
"Holy crap, you actually did it! Dear <font color=#FF1493>{name}</font>, "
"I salute you for your determination and sheer awesomeness. Congratulations, "
"to our newest <green>Alien Level 30</green> member!"]
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")
self.db: DB = registry.get_instance("db")
def pre_start(self):
self.bot.register_packet_handler(36, self.handle_ding)
self.bot.register_packet_handler(35, self.handle_ding)
def handle_ding(self, conn: Conn, packet):
if conn.char_id != self.bot.get_char_id():
return
# AXP 30
if packet.id == 36:
info = re.findall(self.axp, packet.message)
if info:
user = self.get_user(info[0])
if user:
self.bot.send_mass_message(user.char_id,
f"<green>Game Over</green>! "
f"{random.choice(self.text_options_axp).format(**user)} "
f"<yellow>[{self.generate_output('AI 220')}]</yellow>",
log_message=True)
# XP 220
if packet.id == 35:
info = re.findall(self.xp, packet.message)
if info:
user = self.get_user(info[0])
if user:
self.bot.send_mass_message(user.char_id,
f"<font color=#FF1493>Game Over</font>! "
f"{random.choice(self.text_options_xp).format(**user)} "
f"<yellow>[{self.generate_output('Level 220')}]</yellow>",
log_message=True)
def generate_output(self, level):
invite = self.text.make_chatcmd("click here", "/tell <myname> discord invite",
style="style='text-decoration:none'")
sys = self.text.make_chatcmd("SYSTEM", "/tell <myname> admins",
style="style='text-decoration:none'")
blob = self.text.format_page('Info',
f"<header>::: Information :::</header><br><br>"
f"This automated message has been sent to you by:<br><br>"
f"<header2>{self.bot.get_char_name()}</header2> <yellow>[<green>{sys}</green>]</yellow><br>"
f"<header2>Reason for this Message: "
f"<highlight>You dinged {level}</highlight></header2><br><br>"
f"<header2>Have you joined The Alliance Discord yet? "
f"If not <highlight>{invite}</highlight> to receive an invite. "
f"(/tell <myname> discord invite from your Main)</header2>")
return blob
def get_user(self, name):
return self.db.query_single("SELECT * FROM player where name=? and org_id in (SELECT * from orgs)", [name])