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 IgnCore 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: IgnCore = 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} " \ f"[<{user.faction.lower()}>{user.org_name} - " \ 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}"