Added the option to !opt-in/opt-out [onlinebot only]

Fixed command & event threading
Events are now threaded by event_type (i.e. all buddy_logon events get ran in the same one)
Added default preferences
Fixed recipe loading for multiple installs (i.e. on different machines)
This commit is contained in:
2021-08-27 13:58:47 +02:00
parent d0c8c1744c
commit c04f76c0db
24 changed files with 258 additions and 122 deletions
@@ -2,6 +2,7 @@ import inspect
from typing import List
from core.decorators import instance
from core.dict_object import DictObject
from core.logger import Logger
@@ -100,14 +101,17 @@ class AccessService:
for access_level in self.access_levels:
if access_level["level"] == level:
return access_level
return False
self.logger.warning(f"Access to undefined Accesslevel detected: {level} - answering with rank 'None'")
return DictObject({"label": "none", "level": 0, "handler": self.no_access})
def get_access_level_by_label(self, label) -> dict or bool:
label = label.lower()
for access_level in self.access_levels:
if access_level["label"] == label:
return access_level
return False
self.logger.warning(f"Access to undefined Accesslevel detected: {label} - answering with rank 'None'")
return DictObject({"label": "none", "level": 0, "handler": self.no_access})
def check_access(self, char, access_level_label) -> bool:
char_id = self.character_service.resolve_char_to_id(char)
@@ -122,16 +122,27 @@ class AccountService:
"Is this bot used as an alliancebot")
self.setting_service.register_new(self.module_name, "alt_verification", False, BooleanSettingType(),
"alts require admin verification")
# Default preferences
self.setting_service.register_new(self.module_name, "pref_autoinvite", False, BooleanSettingType(),
"Default Value for the auto invite preference")
self.setting_service.register_new(self.module_name, "pref_raidinvite", True, BooleanSettingType(),
"Default Value for the raid invite (Massinvite) preference")
self.setting_service.register_new(self.module_name, "pref_raidspam", True, BooleanSettingType(),
"Default Value for the raid spam (Mass Message) preference")
self.setting_service.register_new(self.module_name, "pref_newsspam", True, BooleanSettingType(),
"Default Value for the news spam (News on logon) preference")
v = self.setting_service.get_value("pref_raidspam")
# Ranks
if self.setting_service.get_value("is_alliance_bot") == "1":
self.access_service.register_access_level("officer", 80, self.check_officer)
self.access_service.register_access_level("general", 70, self.check_general)
self.access_service.register_access_level("president", 60, self.check_president)
self.access_service.register_access_level("council", 40, self.check_council)
self.access_service.register_access_level("moderator", 30, self.check_moderator)
self.access_service.register_access_level("member", 90, self.check_member)
self.access_service.register_access_level("admin", 20, self.check_admin)
self.access_service.register_access_level("leader", 50, self.check_leader)
self.access_service.register_access_level("moderator", 30, self.check_moderator)
self.access_service.register_access_level("admin", 20, self.check_admin)
self.access_service.register_access_level("superadmin", 10, self.check_superadmin)
def get_main(self, char_id) -> DictObject:
@@ -300,19 +311,28 @@ class AccountService:
return [self.bot.public_channel_service.org_id]
def create_users(self, users, disable=False) -> int:
# Default preferences
pref_autoinvite = self.setting_service.get_value("pref_autoinvite")
pref_raidinvite = self.setting_service.get_value("pref_raidinvite")
pref_raidspam = self.setting_service.get_value("pref_raidspam")
pref_newsspam = self.setting_service.get_value("pref_newsspam")
if type(users) == list and len(users) > 0:
with self.db.pool.get_connection() as conn:
with conn.cursor() as cur:
if disable:
cur.executemany(
"INSERT IGNORE INTO account(char_id, main, member, disabled, last_updated, created) "
"VALUES(?, ?, ?, 1, ?, ?) ON DUPLICATE KEY UPDATE "
"INSERT IGNORE INTO account(char_id, main, member, disabled, last_updated, created, "
"auto_invite, raid_invite, raid_spam, news_spam) "
f"VALUES(?, ?, ?, 1, ?, ?, {pref_autoinvite}, {pref_raidinvite}, "
f"{pref_raidspam}, {pref_newsspam}) ON DUPLICATE KEY UPDATE "
"member=VALUE(member), last_updated=VALUE(last_updated), disabled=1",
users)
return cur.rowcount
cur.executemany(
"INSERT IGNORE INTO account(char_id, main, member, last_updated, created) "
"VALUES(?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE "
"INSERT IGNORE INTO account(char_id, main, member, last_updated, "
"created, auto_invite, raid_invite, raid_spam, news_spam) "
f"VALUES(?, ?, ?, ?, ?, {pref_autoinvite}, {pref_raidinvite}, "
f"{pref_raidspam}, {pref_newsspam}) ON DUPLICATE KEY UPDATE "
"member=VALUE(member), last_updated=VALUE(last_updated)",
users)
return cur.rowcount
+1 -1
View File
@@ -49,7 +49,7 @@ class SystemController:
NumberSettingType([4500, 6000, 7500, 9000, 10500, 12000]),
"Maximum size of blobs in private channel")
self.setting_service.register_new("core.system", "accept_commands_from_slave_bots", False, BooleanSettingType(),
self.setting_service.register_new("core.system", "accept_commands_from_slave_bots", True, BooleanSettingType(),
"Accept and respond to commands sent to slave bots (only applies if you have "
"added slave bots in the config)")