Added auto role filter #162
This commit is contained in:
@@ -14,7 +14,7 @@ class QueryABC(ObjectType):
|
||||
def __init__(self, name: str):
|
||||
ObjectType.__init__(self, name)
|
||||
|
||||
def _add_collection(self, name: str, get_collection: Callable, filter_type: type = None):
|
||||
def add_collection(self, name: str, get_collection: Callable, filter_type: type = None):
|
||||
def wrapper(*args, **kwargs):
|
||||
if filter_type is not None and "filter" in kwargs:
|
||||
kwargs["filter"] = FilterABC.get_collection_filter(filter_type, kwargs["filter"])
|
||||
|
@@ -1,3 +1,4 @@
|
||||
from cpl_discord.service import DiscordBotServiceABC
|
||||
from cpl_query.extension import List
|
||||
|
||||
from bot_data.model.auto_role import AutoRole
|
||||
@@ -5,22 +6,39 @@ from bot_graphql.abc.filter_abc import FilterABC
|
||||
|
||||
|
||||
class AutoRoleFilter(FilterABC):
|
||||
def __init__(self):
|
||||
def __init__(
|
||||
self,
|
||||
bot: DiscordBotServiceABC,
|
||||
):
|
||||
FilterABC.__init__(self)
|
||||
|
||||
self._bot = bot
|
||||
|
||||
self._id = None
|
||||
self._channel_id = None
|
||||
self._channel_name = None
|
||||
self._message_id = None
|
||||
self._server = None
|
||||
|
||||
def from_dict(self, values: dict):
|
||||
if "id" in values:
|
||||
self._id = values["id"]
|
||||
self._id = int(values["id"])
|
||||
|
||||
if "channel_id" in values:
|
||||
self._channel_id = values["channel_id"]
|
||||
self._channel_id = int(values["channel_id"])
|
||||
|
||||
if "channel_name" in values:
|
||||
self._channel_name = values["channel_name"]
|
||||
|
||||
if "message_id" in values:
|
||||
self._message_id = values["message_id"]
|
||||
self._message_id = int(values["message_id"])
|
||||
|
||||
if "server" in values:
|
||||
from bot_graphql.filter.server_filter import ServerFilter
|
||||
|
||||
server = ServerFilter()
|
||||
server.from_dict(values["server"])
|
||||
self._server = server
|
||||
|
||||
def filter(self, query: List[AutoRole]) -> List[AutoRole]:
|
||||
if self._id is not None:
|
||||
@@ -29,10 +47,17 @@ class AutoRoleFilter(FilterABC):
|
||||
if self._channel_id is not None:
|
||||
query = query.where(lambda x: x.discord_channel_id == self._channel_id)
|
||||
|
||||
if self._channel_name is not None and self._channel_id is not None:
|
||||
query = query.where(
|
||||
lambda x: self._bot.get_channel(x.discord_channel_id).name == self._channel_name
|
||||
or self._channel_name in self._bot.get_channel(x.discord_channel_id).name
|
||||
)
|
||||
|
||||
if self._message_id is not None:
|
||||
query = query.where(lambda x: x.discord_message_id == self._message_id)
|
||||
|
||||
# if self._server_id is not None:
|
||||
# query = query.where(lambda x: x.server.server_id == self._server_id)
|
||||
if self._server is not None:
|
||||
servers = self._server.filter(query.select(lambda x: x.server)).select(lambda x: x.server_id)
|
||||
query = query.where(lambda x: x.server.server_id in servers)
|
||||
|
||||
return query
|
||||
|
@@ -15,16 +15,16 @@ class AutoRoleRuleFilter(FilterABC):
|
||||
|
||||
def from_dict(self, values: dict):
|
||||
if "id" in values:
|
||||
self._id = values["id"]
|
||||
self._id = int(values["id"])
|
||||
|
||||
if "emoji_name" in values:
|
||||
self._emoji_name = values["emoji_name"]
|
||||
|
||||
if "role_id" in values:
|
||||
self._role_id = values["role_id"]
|
||||
self._role_id = int(values["role_id"])
|
||||
|
||||
if "auto_role_id" in values:
|
||||
self._auto_role_id = values["auto_role_id"]
|
||||
self._auto_role_id = int(values["auto_role_id"])
|
||||
|
||||
def filter(self, query: List[AutoRoleRule]) -> List[AutoRoleRule]:
|
||||
if self._id is not None:
|
||||
|
@@ -14,7 +14,7 @@ class LevelFilter(FilterABC):
|
||||
|
||||
def from_dict(self, values: dict):
|
||||
if "id" in values:
|
||||
self._id = values["id"]
|
||||
self._id = int(values["id"])
|
||||
|
||||
if "name" in values:
|
||||
self._name = values["name"]
|
||||
|
@@ -11,10 +11,10 @@ class Page(FilterABC):
|
||||
|
||||
def from_dict(self, values: dict):
|
||||
if "page_index" in values:
|
||||
self._page_index = values["page_index"]
|
||||
self._page_index = int(values["page_index"])
|
||||
|
||||
if "page_size" in values:
|
||||
self._page_size = values["page_size"]
|
||||
self._page_size = int(values["page_size"])
|
||||
|
||||
def filter(self, query: List, *args) -> List:
|
||||
if self._page_size is not None and self._page_index is not None:
|
||||
|
@@ -20,7 +20,7 @@ class ServerFilter(FilterABC):
|
||||
self._id = int(values["id"])
|
||||
|
||||
if "discord_id" in values:
|
||||
self._discord_id = values["discord_id"]
|
||||
self._discord_id = int(values["discord_id"])
|
||||
|
||||
if "name" in values:
|
||||
self._name = values["name"]
|
||||
|
@@ -35,15 +35,15 @@ class UserFilter(FilterABC):
|
||||
|
||||
def from_dict(self, values: dict):
|
||||
if "id" in values:
|
||||
self._id = values["id"]
|
||||
self._id = int(values["id"])
|
||||
if "discord_id" in values:
|
||||
self._discord_id = values["discord_id"]
|
||||
self._discord_id = int(values["discord_id"])
|
||||
if "name" in values:
|
||||
self._name = values["name"]
|
||||
if "xp" in values:
|
||||
self._xp = values["xp"]
|
||||
self._xp = int(values["xp"])
|
||||
if "ontime" in values:
|
||||
self._ontime = values["ontime"]
|
||||
self._ontime = int(values["ontime"])
|
||||
if "level" in values:
|
||||
self._level: LevelFilter = self._services.get_service(LevelFilter)
|
||||
self._level.from_dict(values["level"])
|
||||
|
@@ -1,6 +1,7 @@
|
||||
type AutoRole implements TableQuery {
|
||||
id: ID
|
||||
channel_id: String
|
||||
channel_name: String
|
||||
message_id: String
|
||||
|
||||
server: Server
|
||||
@@ -15,6 +16,7 @@ type AutoRole implements TableQuery {
|
||||
input AutoRoleFilter {
|
||||
id: ID
|
||||
channel_id: String
|
||||
channel_name: String
|
||||
message_id: String
|
||||
server: ServerFilter
|
||||
}
|
@@ -1,3 +1,5 @@
|
||||
from cpl_discord.service import DiscordBotServiceABC
|
||||
|
||||
from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
|
||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||
from bot_data.model.auto_role import AutoRole
|
||||
@@ -8,19 +10,22 @@ from bot_graphql.filter.server_filter import ServerFilter
|
||||
class AutoRoleQuery(DataQueryABC):
|
||||
def __init__(
|
||||
self,
|
||||
bot: DiscordBotServiceABC,
|
||||
auto_role_rules: AutoRoleRepositoryABC,
|
||||
servers: ServerRepositoryABC,
|
||||
):
|
||||
DataQueryABC.__init__(self, "AutoRole")
|
||||
|
||||
self._bot = bot
|
||||
self._auto_role_rules = auto_role_rules
|
||||
self._servers = servers
|
||||
|
||||
self.set_field("id", self.resolve_id)
|
||||
self.set_field("channel_id", self.resolve_channel_id)
|
||||
self.set_field("channel_name", self.resolve_channel_name)
|
||||
self.set_field("message_id", self.resolve_message_id)
|
||||
self.set_field("server", self.resolve_server)
|
||||
self._add_collection(
|
||||
self.add_collection(
|
||||
"auto_role_rule", lambda x, *_: self._auto_role_rules.get_auto_role_rules_by_auto_role_id(x.auto_role_id)
|
||||
)
|
||||
|
||||
@@ -32,12 +37,16 @@ class AutoRoleQuery(DataQueryABC):
|
||||
def resolve_channel_id(x: AutoRole, *_):
|
||||
return x.discord_channel_id
|
||||
|
||||
def resolve_channel_name(self, x: AutoRole, *_):
|
||||
channel = self._bot.get_channel(x.discord_channel_id)
|
||||
return None if channel is None else channel.name
|
||||
|
||||
@staticmethod
|
||||
def resolve_message_id(x: AutoRole, *_):
|
||||
return x.discord_message_id
|
||||
|
||||
def resolve_server(self, x: AutoRole, *_, filter: ServerFilter = None):
|
||||
if filter is not None:
|
||||
return filter.filter(self._servers.get_server_by_id(x.server_id))
|
||||
return filter.filter(self._servers.get_server_by_id(x.server.server_id))
|
||||
|
||||
return self._servers.get_server_by_id(x.server_id)
|
||||
return self._servers.get_server_by_id(x.server.server_id)
|
||||
|
@@ -31,14 +31,12 @@ class ServerQuery(DataQueryABC):
|
||||
self.set_field("discord_id", self.resolve_discord_id)
|
||||
self.set_field("name", self.resolve_name)
|
||||
|
||||
self._add_collection(
|
||||
self.add_collection(
|
||||
"auto_role", lambda server, *_: self._auto_roles.get_auto_roles_by_server_id(server.server_id)
|
||||
)
|
||||
self._add_collection("client", lambda server, *_: self._clients.get_clients_by_server_id(server.server_id))
|
||||
self._add_collection(
|
||||
"user", lambda server, *_: self._users.get_users_by_server_id(server.server_id), UserFilter
|
||||
)
|
||||
self._add_collection("level", lambda server, *_: self._levels.get_levels_by_server_id(server.server_id))
|
||||
self.add_collection("client", lambda server, *_: self._clients.get_clients_by_server_id(server.server_id))
|
||||
self.add_collection("user", lambda server, *_: self._users.get_users_by_server_id(server.server_id), UserFilter)
|
||||
self.add_collection("level", lambda server, *_: self._levels.get_levels_by_server_id(server.server_id))
|
||||
|
||||
@staticmethod
|
||||
def resolve_id(server: Server, *_):
|
||||
|
@@ -31,10 +31,10 @@ class UserQuery(DataQueryABC):
|
||||
self.set_field("xp", self.resolve_xp)
|
||||
self.set_field("ontime", self.resolve_ontime)
|
||||
self.set_field("level", self.resolve_level)
|
||||
self._add_collection(
|
||||
self.add_collection(
|
||||
"joined_server", lambda user, *_: self._ujs.get_user_joined_servers_by_user_id(user.user_id)
|
||||
)
|
||||
self._add_collection(
|
||||
self.add_collection(
|
||||
"joined_voice_channel", lambda user, *_: self._ujvs.get_user_joined_voice_channels_by_user_id(user.user_id)
|
||||
)
|
||||
self.set_field("server", self.resolve_server)
|
||||
|
@@ -36,14 +36,14 @@ class Query(QueryABC):
|
||||
self._user_joined_voice_channels = user_joined_voice_channel
|
||||
self._users = users
|
||||
|
||||
self._add_collection("auto_role", lambda *_: self._auto_roles.get_auto_roles(), AutoRoleFilter)
|
||||
self._add_collection("auto_role_rule", lambda *_: self._auto_roles.get_auto_role_rules(), AutoRoleRuleFilter)
|
||||
self._add_collection("client", lambda *_: self._clients.get_clients())
|
||||
self._add_collection("known_user", lambda *_: self._known_users.get_users())
|
||||
self._add_collection("level", lambda *_: self._levels.get_levels(), LevelFilter)
|
||||
self._add_collection("server", lambda *_: self._servers.get_servers(), ServerFilter)
|
||||
self._add_collection("user_joined_server", lambda *_: self._user_joined_servers.get_user_joined_servers())
|
||||
self._add_collection(
|
||||
self.add_collection("auto_role", lambda *_: self._auto_roles.get_auto_roles(), AutoRoleFilter)
|
||||
self.add_collection("auto_role_rule", lambda *_: self._auto_roles.get_auto_role_rules(), AutoRoleRuleFilter)
|
||||
self.add_collection("client", lambda *_: self._clients.get_clients())
|
||||
self.add_collection("known_user", lambda *_: self._known_users.get_users())
|
||||
self.add_collection("level", lambda *_: self._levels.get_levels(), LevelFilter)
|
||||
self.add_collection("server", lambda *_: self._servers.get_servers(), ServerFilter)
|
||||
self.add_collection("user_joined_server", lambda *_: self._user_joined_servers.get_user_joined_servers())
|
||||
self.add_collection(
|
||||
"user_joined_voice_channel", lambda *_: self._user_joined_voice_channels.get_user_joined_voice_channels()
|
||||
)
|
||||
self._add_collection("user", lambda *_: self._users.get_users(), UserFilter)
|
||||
self.add_collection("user", lambda *_: self._users.get_users(), UserFilter)
|
||||
|
Reference in New Issue
Block a user