1.0.0 #253
 Submodule kdb-bot/src/bot/config updated: eff27f4280...84d05a9c78
									
								
							 Submodule kdb-bot/src/bot_api/config updated: c712f856eb...81021418c2
									
								
							
							
								
								
									
										29
									
								
								kdb-bot/src/bot_graphql/model/discord.gql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								kdb-bot/src/bot_graphql/model/discord.gql
									
									
									
									
									
										Normal 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 | ||||
| } | ||||
| @@ -28,4 +28,6 @@ type Query { | ||||
|  | ||||
|     userCount: Int | ||||
|     users(filter: UserFilter, page: Page, sort: Sort): [User] | ||||
|  | ||||
|     guilds(filter: GuildFilter): [Guild] | ||||
| } | ||||
							
								
								
									
										0
									
								
								kdb-bot/src/bot_graphql/queries/discord/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								kdb-bot/src/bot_graphql/queries/discord/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										10
									
								
								kdb-bot/src/bot_graphql/queries/discord/channel_query.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								kdb-bot/src/bot_graphql/queries/discord/channel_query.py
									
									
									
									
									
										Normal 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)) | ||||
							
								
								
									
										10
									
								
								kdb-bot/src/bot_graphql/queries/discord/emoji_query.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								kdb-bot/src/bot_graphql/queries/discord/emoji_query.py
									
									
									
									
									
										Normal 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) | ||||
							
								
								
									
										12
									
								
								kdb-bot/src/bot_graphql/queries/discord/guild_query.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								kdb-bot/src/bot_graphql/queries/discord/guild_query.py
									
									
									
									
									
										Normal 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) | ||||
							
								
								
									
										9
									
								
								kdb-bot/src/bot_graphql/queries/discord/role_query.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								kdb-bot/src/bot_graphql/queries/discord/role_query.py
									
									
									
									
									
										Normal 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) | ||||
| @@ -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"])) | ||||
|   | ||||
							
								
								
									
										31
									
								
								kdb-web/src/app/models/data/discord.model.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								kdb-web/src/app/models/data/discord.model.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| export interface Guild { | ||||
|   id?: string; | ||||
|   name?: string; | ||||
|  | ||||
|   channels: [Channel] | ||||
|   role: [Role] | ||||
|   emojis: [Emoji] | ||||
| } | ||||
|  | ||||
| export interface Channel { | ||||
|   id?: string; | ||||
|   name?: string; | ||||
|   type?: ChannelType; | ||||
| } | ||||
|  | ||||
| export enum ChannelType { | ||||
|   category = "category", | ||||
|   text = "text", | ||||
|   voice = "voice" | ||||
| } | ||||
|  | ||||
| export interface Role { | ||||
|   id?: string; | ||||
|   name?: string; | ||||
| } | ||||
|  | ||||
| export interface Emoji { | ||||
|   id?: string; | ||||
|   name?: string; | ||||
|   url?: string; | ||||
| } | ||||
| @@ -1,5 +1,29 @@ | ||||
| export class Queries { | ||||
|  | ||||
|   static guildsQuery = ` | ||||
|     query GuildsQuery($id: ID) { | ||||
|       guilds(filter: {id: $id}) { | ||||
|         id | ||||
|         name | ||||
|  | ||||
|         channels { | ||||
|           id | ||||
|           name | ||||
|           type | ||||
|         } | ||||
|         roles { | ||||
|           id | ||||
|           name | ||||
|         } | ||||
|         emojis { | ||||
|           id | ||||
|           name | ||||
|           url | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   `; | ||||
|  | ||||
|   static serversQuery = ` | ||||
|     query ServerInfo($filter: ServerFilter, $page: Page, $sort: Sort) { | ||||
|       servers(filter: $filter, page: $page, sort: $sort) { | ||||
|   | ||||
| @@ -1,12 +1,17 @@ | ||||
| import { Server } from "../data/server.model"; | ||||
| import { User } from "../data/user.model"; | ||||
| import { AutoRole } from "../data/auto_role.model"; | ||||
| import { Guild } from "../data/discord.model"; | ||||
|  | ||||
| export interface Query { | ||||
|   serverCount: number; | ||||
|   servers: Server[]; | ||||
| } | ||||
|  | ||||
| export interface SingleDiscordQuery { | ||||
|   guilds: Guild[]; | ||||
| } | ||||
|  | ||||
| export interface UserListQuery { | ||||
|   userCount: number; | ||||
|   users: User[]; | ||||
|   | ||||
| @@ -63,13 +63,13 @@ | ||||
|             </div> | ||||
|           </th> | ||||
|  | ||||
|           <th class="table-header-small-dropdown"> | ||||
|           <th> | ||||
|             <div class="table-header-label"> | ||||
|               <div class="table-header-text">{{'common.created_at' | translate}}</div> | ||||
|             </div> | ||||
|           </th> | ||||
|  | ||||
|           <th class="table-header-small-dropdown"> | ||||
|           <th> | ||||
|             <div class="table-header-label"> | ||||
|               <div class="table-header-text">{{'common.modified_at' | translate}}</div> | ||||
|             </div> | ||||
| @@ -104,8 +104,8 @@ | ||||
|             </form> | ||||
|           </th> | ||||
|           <th></th> | ||||
|           <th></th> | ||||
|           <th></th> | ||||
|           <th class="table-header-small-dropdown"></th> | ||||
|           <th class="table-header-small-dropdown"></th> | ||||
|           <th class="table-header-actions"></th> | ||||
|         </tr> | ||||
|       </ng-template> | ||||
| @@ -127,6 +127,7 @@ | ||||
|             <p-cellEditor> | ||||
|               <ng-template pTemplate="input"> | ||||
|                 {{autoRole.channelId}} | ||||
|                 <p-dropdown [options]="channels" [(ngModel)]="autoRole.channelName" placeholder="{{'view.server.members.headers.level' | translate}}"></p-dropdown> | ||||
|               </ng-template> | ||||
|               <ng-template pTemplate="output"> | ||||
|                 {{autoRole.channelId}} | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import { Component, OnInit } from "@angular/core"; | ||||
| import { User } from "../../../../../../models/data/user.model"; | ||||
| import { LazyLoadEvent } from "primeng/api"; | ||||
| import { LazyLoadEvent, MenuItem } from "primeng/api"; | ||||
| import { FormBuilder, FormControl, FormGroup } from "@angular/forms"; | ||||
| import { Page } from "../../../../../../models/graphql/filter/page.model"; | ||||
| import { Sort, SortDirection } from "../../../../../../models/graphql/filter/sort.model"; | ||||
| @@ -12,7 +12,7 @@ import { TranslateService } from "@ngx-translate/core"; | ||||
| import { DataService } from "../../../../../../services/data/data.service"; | ||||
| import { SidebarService } from "../../../../../../services/sidebar/sidebar.service"; | ||||
| import { ActivatedRoute } from "@angular/router"; | ||||
| import { AutoRoleQuery } from "../../../../../../models/graphql/query.model"; | ||||
| import { AutoRoleQuery, SingleDiscordQuery } from "../../../../../../models/graphql/query.model"; | ||||
| import { Queries } from "../../../../../../models/graphql/queries.model"; | ||||
| import { catchError, debounceTime } from "rxjs/operators"; | ||||
| import { Table } from "primeng/table"; | ||||
| @@ -20,6 +20,7 @@ import { UpdateUserMutationResult } from "../../../../../../models/graphql/resul | ||||
| import { Mutations } from "../../../../../../models/graphql/mutations.model"; | ||||
| import { throwError } from "rxjs"; | ||||
| import { AutoRole, AutoRoleFilter } from "../../../../../../models/data/auto_role.model"; | ||||
| import { ChannelType, Guild } from "../../../../../../models/data/discord.model"; | ||||
|  | ||||
| @Component({ | ||||
|   selector: "app-auto-roles", | ||||
| @@ -28,6 +29,8 @@ import { AutoRole, AutoRoleFilter } from "../../../../../../models/data/auto_rol | ||||
| }) | ||||
| export class AutoRolesComponent implements OnInit { | ||||
|   auto_roles!: AutoRole[]; | ||||
|   guild!: Guild; | ||||
|   channels!: MenuItem[]; | ||||
|   loading = true; | ||||
|  | ||||
|   clonedUsers: { [s: string]: User; } = {}; | ||||
| @@ -74,6 +77,20 @@ export class AutoRolesComponent implements OnInit { | ||||
|   ngOnInit(): void { | ||||
|     this.data.getServerFromRoute(this.route); | ||||
|  | ||||
|     this.spinner.showSpinner(); | ||||
|     this.data.query<SingleDiscordQuery>(Queries.guildsQuery, { | ||||
|         filter: { | ||||
|           id: this.sidebar.server$.value?.discordId | ||||
|         } | ||||
|       } | ||||
|     ).subscribe(data => { | ||||
|       this.guild = data.guilds[0]; | ||||
|       this.channels = this.guild.channels | ||||
|         .filter(x => x.type === ChannelType.text) | ||||
|         .map(x => {return {value: x.name, label: x.id}}); | ||||
|       this.spinner.hideSpinner(); | ||||
|     }); | ||||
|  | ||||
|     this.setFilterForm(); | ||||
|     this.loadNextPage(); | ||||
|   } | ||||
| @@ -96,7 +113,7 @@ export class AutoRolesComponent implements OnInit { | ||||
|       id: new FormControl<number | null>(null), | ||||
|       channelId: new FormControl<string | null>(null), | ||||
|       channelName: new FormControl<string | null>(null), | ||||
|       messageId: new FormControl<string | null>(null), | ||||
|       messageId: new FormControl<string | null>(null) | ||||
|     }); | ||||
|  | ||||
|     this.filterForm.valueChanges.pipe( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user