[WIP] Improved auto roles #134

This commit is contained in:
2023-02-19 19:45:24 +01:00
parent e0ca057399
commit ed5564dc7c
15 changed files with 183 additions and 29 deletions

View File

@@ -0,0 +1,29 @@
type Guild {
id: ID
name: String
channels: [Channel]
roles: [Role]
emojis: [Emoji]
}
input GuildFilter {
id: ID
}
type Channel {
id: String
name: String
type: String
}
type Role {
id: String
name: String
}
type Emoji {
id: String
name: String
url: String
}

View File

@@ -28,4 +28,6 @@ type Query {
userCount: Int
users(filter: UserFilter, page: Page, sort: Sort): [User]
guilds(filter: GuildFilter): [Guild]
}

View File

@@ -0,0 +1,10 @@
from bot_graphql.abc.data_query_abc import DataQueryABC
class ChannelQuery(DataQueryABC):
def __init__(self):
DataQueryABC.__init__(self, "Channel")
self.set_field("id", lambda c, *_: c.id)
self.set_field("name", lambda c, *_: c.name)
self.set_field("type", lambda c, *_: type(c))

View File

@@ -0,0 +1,10 @@
from bot_graphql.abc.data_query_abc import DataQueryABC
class RoleQuery(DataQueryABC):
def __init__(self):
DataQueryABC.__init__(self, "Emoji")
self.set_field("id", lambda e, *_: e.id)
self.set_field("name", lambda e, *_: e.name)
self.set_field("url", lambda e, *_: e.url)

View File

@@ -0,0 +1,12 @@
from bot_graphql.abc.data_query_abc import DataQueryABC
class GuildQuery(DataQueryABC):
def __init__(self):
DataQueryABC.__init__(self, "Guild")
self.set_field("id", lambda g, *_: g.id)
self.set_field("name", lambda g, *_: g.name)
self.set_field("channels", lambda g, *_: g.channels)
self.set_field("roles", lambda g, *_: g.roles)
self.set_field("emojis", lambda g, *_: g.emojis)

View File

@@ -0,0 +1,9 @@
from bot_graphql.abc.data_query_abc import DataQueryABC
class RoleQuery(DataQueryABC):
def __init__(self):
DataQueryABC.__init__(self, "Role")
self.set_field("id", lambda r, *_: r.id)
self.set_field("name", lambda r, *_: r.name)

View File

@@ -1,3 +1,5 @@
from cpl_discord.service import DiscordBotServiceABC
from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
from bot_data.abc.client_repository_abc import ClientRepositoryABC
from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC
@@ -22,44 +24,46 @@ from bot_graphql.filter.user_joined_voice_channel_filter import UserJoinedVoiceC
class Query(QueryABC):
def __init__(
self,
bot: DiscordBotServiceABC,
auto_roles: AutoRoleRepositoryABC,
clients: ClientRepositoryABC,
known_users: KnownUserRepositoryABC,
levels: LevelRepositoryABC,
servers: ServerRepositoryABC,
user_joined_servers: UserJoinedServerRepositoryABC,
user_joined_voice_channel: UserJoinedVoiceChannelRepositoryABC,
user_joined_voice_channels: UserJoinedVoiceChannelRepositoryABC,
user_joined_game_server: UserJoinedGameServerRepositoryABC,
users: UserRepositoryABC,
):
QueryABC.__init__(self, "Query")
self._auto_roles = auto_roles
self._clients = clients
self._known_users = known_users
self._levels = levels
self._servers = servers
self._user_joined_servers = user_joined_servers
self._user_joined_voice_channels = user_joined_voice_channel
self._user_joined_game_server = user_joined_game_server
self._users = users
self.add_collection("autoRole", lambda *_: self._auto_roles.get_auto_roles(), AutoRoleFilter)
self.add_collection("autoRoleRule", lambda *_: self._auto_roles.get_auto_role_rules(), AutoRoleRuleFilter)
self.add_collection("client", lambda *_: self._clients.get_clients(), ClientFilter)
self.add_collection("knownUser", 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._bot = bot
self.add_collection("autoRole", lambda *_: auto_roles.get_auto_roles(), AutoRoleFilter)
self.add_collection("autoRoleRule", lambda *_: auto_roles.get_auto_role_rules(), AutoRoleRuleFilter)
self.add_collection("client", lambda *_: clients.get_clients(), ClientFilter)
self.add_collection("knownUser", lambda *_: known_users.get_users())
self.add_collection("level", lambda *_: levels.get_levels(), LevelFilter)
self.add_collection("server", lambda *_: servers.get_servers(), ServerFilter)
self.add_collection(
"userJoinedServer", lambda *_: self._user_joined_servers.get_user_joined_servers(), UserJoinedServerFilter
"userJoinedServer", lambda *_: user_joined_servers.get_user_joined_servers(), UserJoinedServerFilter
)
self.add_collection(
"userJoinedVoiceChannel",
lambda *_: self._user_joined_voice_channels.get_user_joined_voice_channels(),
lambda *_: user_joined_voice_channels.get_user_joined_voice_channels(),
UserJoinedVoiceChannelFilter,
)
self.add_collection(
"userJoinedGameServer",
lambda *_: self._user_joined_game_server.get_user_joined_game_servers(),
lambda *_: user_joined_game_server.get_user_joined_game_servers(),
UserJoinedGameServerFilter,
)
self.add_collection("user", lambda *_: self._users.get_users(), UserFilter)
self.add_collection("user", lambda *_: users.get_users(), UserFilter)
self.set_field("guilds", self._resolve_guilds)
def _resolve_guilds(self, *_, filter=None):
if filter is None and "id" not in filter:
return self._bot.guilds
return self._bot.guilds.where(lambda g: g.id == int(filter["id"]))