Reduced & updated dependencies.
By default, messages larger than 2.000 characters (sent via tells) get sent via slaves, if these exist. Fixes #3
This commit is contained in:
+1
-1
@@ -50,7 +50,7 @@ try:
|
|||||||
mod = __import__(f'conf.{bot}', fromlist=['BotConfig'])
|
mod = __import__(f'conf.{bot}', fromlist=['BotConfig'])
|
||||||
config: BotConfig = getattr(mod, 'BotConfig')
|
config: BotConfig = getattr(mod, 'BotConfig')
|
||||||
if sys.version_info < (3, 9):
|
if sys.version_info < (3, 9):
|
||||||
logger.warning("Versions lower then Python3.9 are not supported.")
|
logger.warning("Versions lower then Python3.10 are not supported.")
|
||||||
exit(-1)
|
exit(-1)
|
||||||
|
|
||||||
# load config values from env vars
|
# load config values from env vars
|
||||||
|
|||||||
@@ -17,3 +17,6 @@ class ChatBlob:
|
|||||||
obj.msg == self.msg and \
|
obj.msg == self.msg and \
|
||||||
obj.page_prefix == self.page_prefix and \
|
obj.page_prefix == self.page_prefix and \
|
||||||
obj.page_postfix == self.page_postfix
|
obj.page_postfix == self.page_postfix
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return len(self.title + self.msg + self.page_postfix + self.page_prefix)
|
||||||
@@ -243,7 +243,11 @@ class CommandService:
|
|||||||
response = handler["callback"](CommandRequest(conn, channel, sender, reply),
|
response = handler["callback"](CommandRequest(conn, channel, sender, reply),
|
||||||
*self.process_matches(matches, handler["params"]))
|
*self.process_matches(matches, handler["params"]))
|
||||||
if response is not None:
|
if response is not None:
|
||||||
|
if len(response) > 2000 and conn.id == "main" and channel == "msg":
|
||||||
|
self.bot.send_mass_message(sender.char_id, response)
|
||||||
|
else:
|
||||||
reply(response)
|
reply(response)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.error(f"error processing command: {message}", e)
|
self.logger.error(f"error processing command: {message}", e)
|
||||||
self.relay_hub_service.send_message("access_denied_logger", sender,
|
self.relay_hub_service.send_message("access_denied_logger", sender,
|
||||||
|
|||||||
+45
-49
@@ -7,7 +7,6 @@ import time
|
|||||||
import mariadb
|
import mariadb
|
||||||
# noinspection PyProtectedMember
|
# noinspection PyProtectedMember
|
||||||
from mariadb._mariadb import ConnectionPool, OperationalError
|
from mariadb._mariadb import ConnectionPool, OperationalError
|
||||||
from mysql.connector.cursor import CursorBase
|
|
||||||
from pkg_resources import parse_version
|
from pkg_resources import parse_version
|
||||||
|
|
||||||
from conf.config import BotConfig
|
from conf.config import BotConfig
|
||||||
@@ -217,56 +216,53 @@ class DB:
|
|||||||
if pre_optimized:
|
if pre_optimized:
|
||||||
self._load_optimized_file(filename)
|
self._load_optimized_file(filename)
|
||||||
return
|
return
|
||||||
start = time.time()
|
raise SqlException(f"SQL File not optimized: {filename}")
|
||||||
|
# start = time.time()
|
||||||
# Short version... instead of executing 90 000 inserts for the itemDB, just do one,
|
# Short version... instead of executing 90 000 inserts for the itemDB, just do one,
|
||||||
# while providing all values during one query
|
# while providing all values during one query
|
||||||
with open(filename, mode="r", encoding="UTF-8") as f:
|
# with open(filename, mode="r", encoding="UTF-8") as f:
|
||||||
insert_batches = []
|
# insert_batches = []
|
||||||
inserts = []
|
# inserts = []
|
||||||
others = []
|
# others = []
|
||||||
stat = ""
|
# stat = ""
|
||||||
for i in f.readlines():
|
# for i in f.readlines():
|
||||||
i = i.strip()
|
# i = i.strip()
|
||||||
if i == "" or i == " ":
|
# if i == "" or i == " ":
|
||||||
continue
|
# continue
|
||||||
if i.startswith("INSERT INTO"):
|
# if i.startswith("INSERT INTO"):
|
||||||
match2 = re.match("(INSERT INTO .+? VALUES) (\(.+?\));", i)
|
# match2 = re.match("(INSERT INTO .+? VALUES) (\(.+?\));", i)
|
||||||
if match2:
|
# if match2:
|
||||||
r2 = match2[2].replace("NULL", "None")
|
# r2 = match2[2].replace("NULL", "None")
|
||||||
r2 = r2.replace("null", "None")
|
# r2 = r2.replace("null", "None")
|
||||||
query = match2[1] + f" ({', ?' * len(eval(r2))})"
|
# query = match2[1] + f" ({', ?' * len(eval(r2))})"
|
||||||
query = query.replace("(, ", "(")
|
# query = query.replace("(, ", "(")
|
||||||
if stat != query:
|
# if stat != query:
|
||||||
if stat != "" or len(inserts) != 0:
|
# if stat != "" or len(inserts) != 0:
|
||||||
insert_batches.append([stat, inserts])
|
# insert_batches.append([stat, inserts])
|
||||||
inserts = []
|
# inserts = []
|
||||||
stat = query
|
# stat = query
|
||||||
inserts.append(eval(r2))
|
# inserts.append(eval(r2))
|
||||||
else:
|
# else:
|
||||||
if i.startswith("--"):
|
# if i.startswith("--"):
|
||||||
continue
|
# continue
|
||||||
others.append(i)
|
# others.append(i)
|
||||||
insert_batches.append([stat, inserts])
|
# insert_batches.append([stat, inserts])
|
||||||
with self.shared.lock:
|
# with self.shared.lock:
|
||||||
with self.shared.pool.get_connection() as conn:
|
# with self.shared.pool.get_connection() as conn:
|
||||||
with conn.cursor() as cur:
|
# with conn.cursor() as cur:
|
||||||
cur: CursorBase
|
# cur: CursorBase
|
||||||
if others:
|
# if others:
|
||||||
for statement in others:
|
# for statement in others:
|
||||||
try:
|
# cur.execute(statement)
|
||||||
cur.execute(statement)
|
# for sql, param in insert_batches:
|
||||||
except OperationalError:
|
# if sql == "INSERT INTO trickle (id, group_name, name, amount_agility, " \
|
||||||
pass
|
# "amount_intelligence, amount_psychic, amount_stamina, " \
|
||||||
for sql, param in insert_batches:
|
# "amount_strength, amount_sense) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)":
|
||||||
if sql == "INSERT INTO trickle (id, group_name, name, amount_agility, " \
|
# for row in param:
|
||||||
"amount_intelligence, amount_psychic, amount_stamina, " \
|
# cur.execute(sql, row)
|
||||||
"amount_strength, amount_sense) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)":
|
# continue
|
||||||
for row in param:
|
# cur.executemany(sql, param)
|
||||||
cur.execute(sql, row)
|
# print(f"Runtime: {time.time() - start: .2f} for {filename}")
|
||||||
continue
|
|
||||||
cur.executemany(sql, param)
|
|
||||||
|
|
||||||
print(f"Runtime: {time.time() - start: .2f} for {filename}")
|
|
||||||
|
|
||||||
def get_type(self) -> str:
|
def get_type(self) -> str:
|
||||||
return self.type
|
return self.type
|
||||||
|
|||||||
+2
-2
@@ -41,8 +41,8 @@ class IgnCore:
|
|||||||
self.dimension = None
|
self.dimension = None
|
||||||
self.last_timer_event = 0
|
self.last_timer_event = 0
|
||||||
self.start_time = int(time.time())
|
self.start_time = int(time.time())
|
||||||
self.major_version = "IGNCore v2.6"
|
self.major_version = "IGNCore v2.7"
|
||||||
self.minor_version = "7"
|
self.minor_version = "0"
|
||||||
self.incoming_queue = FifoQueue()
|
self.incoming_queue = FifoQueue()
|
||||||
self.mass_message_queue = None
|
self.mass_message_queue = None
|
||||||
self.conns = DictObject()
|
self.conns = DictObject()
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from mysql.connector.cursor import CursorBase
|
|
||||||
from requests import ReadTimeout
|
from requests import ReadTimeout
|
||||||
|
|
||||||
from core.aochat import server_packets
|
from core.aochat import server_packets
|
||||||
@@ -233,7 +232,6 @@ class PorkService:
|
|||||||
with self.db.pool.get_connection() as conn:
|
with self.db.pool.get_connection() as conn:
|
||||||
with conn.cursor(dictionary=True) as cur:
|
with conn.cursor(dictionary=True) as cur:
|
||||||
for packet in self.updates:
|
for packet in self.updates:
|
||||||
cur: CursorBase
|
|
||||||
cur.execute(
|
cur.execute(
|
||||||
"SELECT char_id, name, first_name, last_name, level, breed, gender, faction, profession, "
|
"SELECT char_id, name, first_name, last_name, level, breed, gender, faction, profession, "
|
||||||
"profession_title, ai_rank, ai_level, org_id, org_name, org_rank_name, org_rank_id, "
|
"profession_title, ai_rank, ai_level, org_id, org_name, org_rank_name, org_rank_id, "
|
||||||
|
|||||||
+1
-15
@@ -6,26 +6,12 @@ if ! [ -x "$(command -v $PYTHON_BINARY)" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
$PYTHON_BINARY --version
|
$PYTHON_BINARY --version
|
||||||
|
|
||||||
# Ensure virtualenv is present. This is not always the case
|
|
||||||
$PYTHON_BINARY -m pip install virtualenv --user
|
|
||||||
|
|
||||||
# Create and activate the virtualenv. This can be done even if it already exists
|
|
||||||
# and will ensure setuptools, wheel and pip are up to date
|
|
||||||
$PYTHON_BINARY -m virtualenv venv
|
|
||||||
source venv/bin/activate
|
source venv/bin/activate
|
||||||
|
|
||||||
# From there on we use 'pip' and 'python' (refers to versions in the virtualenv)
|
|
||||||
pip install -r requirements.txt
|
|
||||||
|
|
||||||
set -o pipefail -o errexit
|
set -o pipefail -o errexit
|
||||||
|
|
||||||
# The bot uses non-zero exit codes to signal state.
|
# The bot uses non-zero exit codes to signal state.
|
||||||
# The bot will restart until it returns an exit code of zero.
|
# The bot will restart until it returns an exit code of zero.
|
||||||
while true; do
|
while true; do
|
||||||
# shellcheck disable=SC1073
|
python bootstrap.py "$1" && exit
|
||||||
# shellcheck disable=SC1072
|
|
||||||
# shellcheck disable=SC1009
|
|
||||||
python bootstrap.py ##bot_name## && exit
|
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -36,8 +36,7 @@ class AccountController:
|
|||||||
@command(command="account", params=[], access_level="member",
|
@command(command="account", params=[], access_level="member",
|
||||||
description="View your account")
|
description="View your account")
|
||||||
def account(self, request: command_request):
|
def account(self, request: command_request):
|
||||||
out = self.show_account(request.sender.char_id)
|
return self.show_account(request.sender.char_id)
|
||||||
self.bot.send_mass_message(request.sender.char_id, out)
|
|
||||||
|
|
||||||
@command(command="accounts", params=[Const('online', is_optional=True)], access_level="moderator",
|
@command(command="accounts", params=[Const('online', is_optional=True)], access_level="moderator",
|
||||||
description="View all accounts")
|
description="View all accounts")
|
||||||
@@ -238,6 +237,10 @@ class AccountController:
|
|||||||
if not mod:
|
if not mod:
|
||||||
response += f" Options: {prefs}\n"
|
response += f" Options: {prefs}\n"
|
||||||
response += f" Points: <notice>{alts[0].points}</notice>\n"
|
response += f" Points: <notice>{alts[0].points}</notice>\n"
|
||||||
|
last_seen = {}
|
||||||
|
for x in alts:
|
||||||
|
if x.last_seen > last_seen.get("last_seen", 0):
|
||||||
|
last_seen = x
|
||||||
access_levels = {f"Member ({alts[0].member})": self.account_service.check_member(alts[0].char_id),
|
access_levels = {f"Member ({alts[0].member})": self.account_service.check_member(alts[0].char_id),
|
||||||
"Officer": self.account_service.check_officer(alts[0].char_id),
|
"Officer": self.account_service.check_officer(alts[0].char_id),
|
||||||
"General": self.account_service.check_general(alts[0].char_id),
|
"General": self.account_service.check_general(alts[0].char_id),
|
||||||
@@ -252,6 +255,7 @@ class AccountController:
|
|||||||
perms.append(key)
|
perms.append(key)
|
||||||
response += f" Status: {'<green>Open</green>' if alts[0].disabled == 0 else '<red>Closed</red>'}\n"
|
response += f" Status: {'<green>Open</green>' if alts[0].disabled == 0 else '<red>Closed</red>'}\n"
|
||||||
response += f" Created at: <notice>{self.util.format_datetime(alts[0].created)}</notice>\n"
|
response += f" Created at: <notice>{self.util.format_datetime(alts[0].created)}</notice>\n"
|
||||||
|
response += f" Last seen on <notice>{last_seen.name}</notice> <highlight>{self.util.time_to_readable(time.time()-last_seen.last_seen)}</highlight> ago\n"
|
||||||
response += f" Permissions: <notice>{', '.join(perms)}</notice>\n"
|
response += f" Permissions: <notice>{', '.join(perms)}</notice>\n"
|
||||||
if alts[0].discord_joined == 1:
|
if alts[0].discord_joined == 1:
|
||||||
joined = ' (Joined server)'
|
joined = ' (Joined server)'
|
||||||
|
|||||||
@@ -580,6 +580,8 @@ class DiscordController:
|
|||||||
async def on_message(self, msg: Message):
|
async def on_message(self, msg: Message):
|
||||||
if msg.author.id == self.client.user.id:
|
if msg.author.id == self.client.user.id:
|
||||||
return
|
return
|
||||||
|
if not self.setting_service.get_value("dc_relay_public"):
|
||||||
|
return
|
||||||
channel: TextChannel = msg.channel
|
channel: TextChannel = msg.channel
|
||||||
if channel.id == int(self.setting_service.get_value("dc_relay_public")):
|
if channel.id == int(self.setting_service.get_value("dc_relay_public")):
|
||||||
if self.setting_service.get_value('is_alliance_bot') == "0":
|
if self.setting_service.get_value('is_alliance_bot') == "0":
|
||||||
|
|||||||
@@ -141,10 +141,7 @@ class PrivateChannelController:
|
|||||||
if len(banned) > 0:
|
if len(banned) > 0:
|
||||||
out += f'The Character <highlight>{", ".join(banned)}</highlight> is <red>banned</red>, ' \
|
out += f'The Character <highlight>{", ".join(banned)}</highlight> is <red>banned</red>, ' \
|
||||||
f'and cannot be invited.'
|
f'and cannot be invited.'
|
||||||
if request.channel == "priv":
|
|
||||||
return out.strip("\n")
|
return out.strip("\n")
|
||||||
else:
|
|
||||||
self.bot.send_mass_message(request.sender.char_id, out.strip("\n"))
|
|
||||||
|
|
||||||
@command(command="kick", params=[Character("character")], access_level="moderator",
|
@command(command="kick", params=[Character("character")], access_level="moderator",
|
||||||
description="Kick a character from the private channel")
|
description="Kick a character from the private channel")
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import json
|
||||||
import math
|
import math
|
||||||
|
|
||||||
from core.buddy_service import BuddyService
|
from core.buddy_service import BuddyService
|
||||||
@@ -165,7 +166,7 @@ class RIAdminController:
|
|||||||
description="take the RI from another bot")
|
description="take the RI from another bot")
|
||||||
def ritake(self, request, raiders: str):
|
def ritake(self, request, raiders: str):
|
||||||
users = raiders.split(",")
|
users = raiders.split(",")
|
||||||
if request.sender.char_id not in eval(self.setting_service.get_value('riadmin_network')):
|
if request.sender.char_id not in json.loads(self.setting_service.get_value('riadmin_network')):
|
||||||
return
|
return
|
||||||
for user in users:
|
for user in users:
|
||||||
char = self.character_service.resolve_char_to_id(user.strip())
|
char = self.character_service.resolve_char_to_id(user.strip())
|
||||||
@@ -277,7 +278,7 @@ class RIAdminController:
|
|||||||
def riadmin_create(self, _, _2, raid_instance_name, bot):
|
def riadmin_create(self, _, _2, raid_instance_name, bot):
|
||||||
if not bot.char_id:
|
if not bot.char_id:
|
||||||
return self.getresp("global", "char_not_found", {"char": bot.name})
|
return self.getresp("global", "char_not_found", {"char": bot.name})
|
||||||
if bot.char_id not in eval(self.setting_service.get_value('riadmin_network')):
|
if bot.char_id not in json.loads(self.setting_service.get_value('riadmin_network')):
|
||||||
return "Bot not valid: please ask an Administrator to verify it first."
|
return "Bot not valid: please ask an Administrator to verify it first."
|
||||||
raid_instance = self.get_raid_instance(raid_instance_name)
|
raid_instance = self.get_raid_instance(raid_instance_name)
|
||||||
if raid_instance:
|
if raid_instance:
|
||||||
|
|||||||
@@ -32,4 +32,4 @@ class OrgOnlineController(OnlineController):
|
|||||||
blob = self.online_display.format_by_channel_prof(query, params)
|
blob = self.online_display.format_by_channel_prof(query, params)
|
||||||
else:
|
else:
|
||||||
blob = self.online_display.format_by_org(query, params)
|
blob = self.online_display.format_by_org(query, params)
|
||||||
self.bot.send_mass_message(request.sender.char_id, self.online_display.format_blob(blob))
|
return self.online_display.format_blob(blob)
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ class OrgOnlineController(OnlineController):
|
|||||||
query = "and channel_id IN (1, 2) "
|
query = "and channel_id IN (1, 2) "
|
||||||
params = [self.bot.name, self.bot.get_char_id()]
|
params = [self.bot.name, self.bot.get_char_id()]
|
||||||
blob = self.online_display.format_by_channel_prof(query, params)
|
blob = self.online_display.format_by_channel_prof(query, params)
|
||||||
self.bot.send_mass_message(request.sender.char_id, self.online_display.format_blob(blob))
|
return self.online_display.format_blob(blob)
|
||||||
|
|
||||||
def pre_start(self):
|
def pre_start(self):
|
||||||
super().pre_start()
|
super().pre_start()
|
||||||
|
|||||||
@@ -85,8 +85,7 @@ class AOUController:
|
|||||||
obj.aou = self.text.make_chatcmd("AO-Universe.com", "/start https://www.ao-universe.com")
|
obj.aou = self.text.make_chatcmd("AO-Universe.com", "/start https://www.ao-universe.com")
|
||||||
obj.text = self.format_bbcode_code(guide_info.text)
|
obj.text = self.format_bbcode_code(guide_info.text)
|
||||||
|
|
||||||
self.bot.send_mass_message(request.sender.char_id,
|
return ChatBlob(guide_info.name, self.getresp("module/aou", "guide", {**obj}))
|
||||||
ChatBlob(guide_info.name, self.getresp("module/aou", "guide", {**obj})))
|
|
||||||
|
|
||||||
@command(command="aou", params=[Const("all", is_optional=True), Any("search")], access_level="member",
|
@command(command="aou", params=[Const("all", is_optional=True), Any("search")], access_level="member",
|
||||||
description="Search for an AO-Universe guides")
|
description="Search for an AO-Universe guides")
|
||||||
@@ -117,9 +116,9 @@ class AOUController:
|
|||||||
if count == 0:
|
if count == 0:
|
||||||
return self.getresp("module/aou", "no_guide_search", {"search": search})
|
return self.getresp("module/aou", "no_guide_search", {"search": search})
|
||||||
else:
|
else:
|
||||||
self.bot.send_mass_message(request.sender.char_id, ChatBlob(
|
return ChatBlob(
|
||||||
self.getresp("module/aou", "search_guide_title" + ("_all" if include_all_matches else ""),
|
self.getresp("module/aou", "search_guide_title" + ("_all" if include_all_matches else ""),
|
||||||
{"search": search, "count": count}), blob))
|
{"search": search, "count": count}), blob)
|
||||||
|
|
||||||
def retrieve_guide(self, guide_id):
|
def retrieve_guide(self, guide_id):
|
||||||
cache_key = "%d.xml" % guide_id
|
cache_key = "%d.xml" % guide_id
|
||||||
|
|||||||
@@ -74,18 +74,16 @@ class MailController:
|
|||||||
@command(command="mail", params=[Const('all', is_optional=True)], description="Show your mails",
|
@command(command="mail", params=[Const('all', is_optional=True)], description="Show your mails",
|
||||||
access_level="member")
|
access_level="member")
|
||||||
def mail_show(self, sender, const_all):
|
def mail_show(self, sender, const_all):
|
||||||
|
mails, title = None, "You dont have any unread mails."
|
||||||
|
|
||||||
if const_all:
|
if const_all:
|
||||||
mails = self.get_mails(sender.sender.char_id, True)
|
mails, title = self.get_mails(sender.sender.char_id, True), "All your recent Mails"
|
||||||
|
else:
|
||||||
|
mails, title = self.get_mails(sender.sender.char_id), "Your unread mails"
|
||||||
if mails:
|
if mails:
|
||||||
self.bot.send_private_message(sender.sender.char_id, ChatBlob("All your recent Mails", mails))
|
self.bot.send_private_message(sender.sender.char_id, ChatBlob(title, mails))
|
||||||
else:
|
else:
|
||||||
return "You dont have any mails."
|
return title
|
||||||
else:
|
|
||||||
mails = self.get_mails(sender.sender.char_id)
|
|
||||||
if mails:
|
|
||||||
self.bot.send_private_message(sender.sender.char_id, ChatBlob("Your unread mails", mails))
|
|
||||||
else:
|
|
||||||
return "You dont have any unread mails."
|
|
||||||
|
|
||||||
@command(command="mail", params=[Options(["read"]), Int("ID")],
|
@command(command="mail", params=[Options(["read"]), Int("ID")],
|
||||||
description="mark a mail as read", access_level="member")
|
description="mark a mail as read", access_level="member")
|
||||||
|
|||||||
@@ -85,37 +85,6 @@ hh:mm - DD.MM.YYYY
|
|||||||
f" [{self.text.make_chatcmd('orgs', '/tell <myname> orgs')}] " \
|
f" [{self.text.make_chatcmd('orgs', '/tell <myname> orgs')}] " \
|
||||||
f"[{self.text.make_chatcmd('admins', '/tell <myname> admins')}]\n"
|
f"[{self.text.make_chatcmd('admins', '/tell <myname> admins')}]\n"
|
||||||
|
|
||||||
@event("connect", "prepare info msg")
|
|
||||||
def prepare_info(self, _, _1):
|
|
||||||
self.INFO = ChatBlob("Welcome", f"<font color=CCInfoText>You're getting this message,\n"
|
|
||||||
f"because you recently joined the clan alliance\n"
|
|
||||||
f"<highlight>The New Alliance</highlight> or in short "
|
|
||||||
f"<highlight>TNA</highlight>.\n"
|
|
||||||
f"I'm <notice><myname></notice>, a bot with the task to "
|
|
||||||
f"automate a few workflows around here,\n"
|
|
||||||
f"while making the life of everyone a bit easier.\n"
|
|
||||||
f"\n"
|
|
||||||
f"You can see a list of all my orgs by using "
|
|
||||||
f"{self.text.make_tellcmd('!orgs', 'orgs')}.\n"
|
|
||||||
f"Whenever you use {self.text.make_tellcmd('!online', 'online')} "
|
|
||||||
f"I'll show you who's currently around.\n"
|
|
||||||
f"We've got regular raids, you can view them by using "
|
|
||||||
f"{self.text.make_tellcmd('!raids', 'raids')}\n"
|
|
||||||
f"If you'd like to stay out, thats fine. Just turn all settings off here: "
|
|
||||||
f"{self.text.make_tellcmd('here', 'prefs')}\n"
|
|
||||||
f"\n"
|
|
||||||
f"If you encounter any issues, my administrators will help you. just ask them, "
|
|
||||||
f"you can find them all here: {self.text.make_tellcmd('!admins', 'admins')}\n"
|
|
||||||
f"\n"
|
|
||||||
f"<highlight>Thats it already. "
|
|
||||||
f"Thank you for taking your time to read this note. See you ingame!</highlight>"
|
|
||||||
f"</font>")
|
|
||||||
self.INFO = f"\n<yellow>________________\n\n" \
|
|
||||||
f" No need to <red>PANIC</red>!\n" \
|
|
||||||
f" [{self.text.paginate_single(self.INFO)}]\n" \
|
|
||||||
f" to our alliance!\n" \
|
|
||||||
f"________________</yellow>"
|
|
||||||
|
|
||||||
@event(event_type="member_logon", description="Send news to players logging in")
|
@event(event_type="member_logon", description="Send news to players logging in")
|
||||||
def logon_event(self, _, data):
|
def logon_event(self, _, data):
|
||||||
if not self.bot.is_ready():
|
if not self.bot.is_ready():
|
||||||
@@ -140,10 +109,6 @@ hh:mm - DD.MM.YYYY
|
|||||||
discord,
|
discord,
|
||||||
self.preferences.get_pref_view_small(account))
|
self.preferences.get_pref_view_small(account))
|
||||||
|
|
||||||
# This one is kinda redudant now that the simple checks get done above, will remove it in the future.
|
|
||||||
if account.last_seen == 0 and self.setting_service.get_value('is_alliance_bot') == "1":
|
|
||||||
self.bot.send_mass_message(data.packet.char_id, self.INFO)
|
|
||||||
|
|
||||||
@command(command="raids", params=[], description="Show the Raids", access_level="member")
|
@command(command="raids", params=[], description="Show the Raids", access_level="member")
|
||||||
def show_raids(self, _):
|
def show_raids(self, _):
|
||||||
with open("data/latest_raids.txt", "r") as f:
|
with open("data/latest_raids.txt", "r") as f:
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ class TimerController:
|
|||||||
blob += "\n\n<header>Manual Timers</header>\n"
|
blob += "\n\n<header>Manual Timers</header>\n"
|
||||||
for timer in data:
|
for timer in data:
|
||||||
repeats = ""
|
repeats = ""
|
||||||
if timer.repeating_every >= 0:
|
if timer.repeating_every > 0:
|
||||||
repeats = f" (Repeats every {self.util.time_to_readable(timer.repeating_every)})"
|
repeats = f" (Repeats every {self.util.time_to_readable(timer.repeating_every)})"
|
||||||
blob += f"<pagebreak>Name: <highlight>{timer.name}</highlight>\n"
|
blob += f"<pagebreak>Name: <highlight>{timer.name}</highlight>\n"
|
||||||
blob += f"Time left: <highlight>" \
|
blob += f"Time left: <highlight>" \
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ class CharacterInfoController:
|
|||||||
msg = ChatBlob(f"Basic Info for {char.name}", blob)
|
msg = ChatBlob(f"Basic Info for {char.name}", blob)
|
||||||
else:
|
else:
|
||||||
msg = f"Could not find character <highlight>{char.name}</highlight> on RK{dimension:d}."
|
msg = f"Could not find character <highlight>{char.name}</highlight> on RK{dimension:d}."
|
||||||
if request.channel == "msg":
|
if request.channel == "msg" and request.conn.id == "main":
|
||||||
self.bot.send_mass_message(request.sender.char_id, msg)
|
self.bot.send_mass_message(request.sender.char_id, msg)
|
||||||
else:
|
else:
|
||||||
request.reply(msg)
|
request.reply(msg)
|
||||||
|
|||||||
+12
-16
@@ -1,17 +1,13 @@
|
|||||||
beautifulsoup4~=4.9.3
|
bbcode==1.1.0
|
||||||
cryptography~=3.3.2
|
beautifulsoup4==4.10.0
|
||||||
|
cryptography==3.3.2
|
||||||
discord.py @ git+https://github.com/Rapptz/discord.py@45d498c1b76deaf3b394d17ccf56112fa691d160
|
discord.py @ git+https://github.com/Rapptz/discord.py@45d498c1b76deaf3b394d17ccf56112fa691d160
|
||||||
emojis~=0.6.0
|
emojis==0.6.0
|
||||||
hjson~=3.0.2
|
hjson==3.0.2
|
||||||
mariadb~=1.0.6
|
mariadb==1.0.7
|
||||||
mysql-connector-python~=8.0.25
|
psutil==5.8.0
|
||||||
psutil~=5.8.0
|
pytz==2021.3
|
||||||
pytz~=2021.1
|
requests==2.26.0
|
||||||
requests~=2.25.1
|
torpy==1.1.6
|
||||||
websocket-client~=1.1.0
|
websock==1.0.4
|
||||||
bbcode~=1.1.0
|
websocket-client==1.2.1
|
||||||
websock~=1.0.4
|
|
||||||
pip>=21.2.4
|
|
||||||
websockets~=9.1
|
|
||||||
torpy~=1.1.6
|
|
||||||
urllib3==1.25.11
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
git pull
|
||||||
|
|
||||||
|
PYTHON_BINARY=python3
|
||||||
|
if ! [ -x "$(command -v $PYTHON_BINARY)" ]; then
|
||||||
|
PYTHON_BINARY=python
|
||||||
|
fi
|
||||||
|
|
||||||
|
$PYTHON_BINARY --version
|
||||||
|
|
||||||
|
# Ensure virtualenv is present. This is not always the case
|
||||||
|
$PYTHON_BINARY -m pip install virtualenv --user
|
||||||
|
|
||||||
|
# Create and activate the virtualenv. This can be done even if it already exists
|
||||||
|
# and will ensure setuptools, wheel and pip are up to date
|
||||||
|
$PYTHON_BINARY -m virtualenv venv
|
||||||
|
source venv/bin/activate
|
||||||
|
|
||||||
|
# From there on we use 'pip' and 'python' (refers to versions in the virtualenv)
|
||||||
|
pip install -r requirements.txt
|
||||||
|
|
||||||
|
echo "Update completed."
|
||||||
Reference in New Issue
Block a user