from core.aochat.BaseModule import BaseModule
from core.chat_blob import ChatBlob
from core.command_param_types import Any
from core.db import DB
from core.decorators import instance, command
from core.lookup.character_service import CharacterService
from core.lookup.pork_service import PorkService
from core.private_channel_service import PrivateChannelService
from core.setting_service import SettingService
from core.text import Text
from core.igncore import Tyrbot
from core.util import Util
from modules.core.accounting.services.account_service import AccountService
@instance()
class MassinviteController(BaseModule):
NO_RAID_RUNNING_RESPONSE = "No raid is running."
def __init__(self):
self.count = 0
def inject(self, registry):
self.bot: Tyrbot = registry.get_instance("bot")
self.db: DB = registry.get_instance("db")
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.util: Util = registry.get_instance("util")
self.pork: PorkService = registry.get_instance("pork_service")
self.private_channel_service: PrivateChannelService = registry.get_instance("private_channel_service")
self.account_service: AccountService = registry.get_instance("account_service")
@command(command="massinvite",
params=[Any("text")],
description="Send a Massmessage combined with a massinvite",
access_level="leader")
def mass_invite(self, request, msg):
if not self.raid:
return self.NO_RAID_RUNNING_RESPONSE
main = ""
blob = ""
spam = [self.format_subtile_spam(
f"{request.sender.name} invited you to join a raid: {msg}"),
self.format_spam(f"{request.sender.name} invited you to join a raid:\n"
f"{msg}")]
self.bot.send_private_channel_message(spam[1])
invites = self.account_service.get_all_members(online_only=True)
request.reply(f"Attempting to send {len(invites)} Raid invites....")
for player in invites:
if player.main != main:
main = player.main
blob += f"\n{self.character_service.resolve_char_to_name(main)} as \n"
blob += self.handle_player(player, spam, True)
msg = ChatBlob("Info", blob)
msg.page_prefix = f"{self.count} Massinvites sent! ["
msg.page_postfix = "]"
self.count = 0
if request.channel == "msg":
self.bot.send_mass_message(request.sender.char_id, msg)
else:
return msg
@command(command="massmessage", params=[Any("text")], description="Send a Massmessage to all online players",
access_level="leader")
def mass_message(self, request, msg):
# if not self.raid:
# return self.NO_RAID_RUNNING_RESPONSE
main = ""
blob = ""
spam = [self.format_subtile_spam(
f"{request.sender.name} sent you a message: {msg}"),
self.format_spam(f"{request.sender.name} sent you a message:\n"
f"{msg}")]
self.bot.send_private_channel_message(spam[1])
invites = self.account_service.get_all_members(online_only=True)
request.reply(f"Attempting to send {len(invites)} Massmessage's...")
for player in invites:
if player.main != main:
main = player.main
blob += f"\n{self.character_service.resolve_char_to_name(main)} as \n"
blob += self.handle_player(player, spam, False)
msg = ChatBlob("Info", blob)
msg.page_prefix = f"{self.count} Massmessage's have been sent! ["
msg.page_postfix = "]"
self.count = 0
if request.channel == "msg":
self.bot.send_mass_message(request.sender.char_id, msg)
else:
return msg
def handle_player(self, user, msg, invite=False):
pg = " [PG]" if self.private_channel_service.in_private_channel(
user.char_id) else " [MSG sent]"
if not self.private_channel_service.in_private_channel(user.char_id):
count = 0
if user.raid_spam == 1:
if user.subtile_spam == 1:
self.bot.send_mass_message(user.char_id, msg[0])
else:
self.bot.send_mass_message(user.char_id, msg[1])
count += 1
if user.raid_invite == 1 and invite:
self.private_channel_service.invite(user.char_id)
count += 1
if count == 0:
return ""
self.count += 1
return f"{self.util.get_prof_icon(user.profession)} " \
f"({self.text.zfill(user.level, 220)}/{self.text.zfill(user.ai_level, 30)}) " \
f"<{user.faction.lower()}>{user.name}{user.faction.lower()}> " \
f"[<{user.faction.lower()}>{user.org_name}{user.faction.lower()}> - " \
f"{user.org_rank_id + 1}]{pg}\n"
def format_spam(self, msg):
return f"\n" \
f"────────[ Raid invite ]────────\n" \
f"{msg}\n" \
f"────────[ Raid invite ]────────"
def format_subtile_spam(self, msg):
return f"[ Raid invite ] {msg}"