158 lines
3.4 KiB
Plaintext
158 lines
3.4 KiB
Plaintext
/'
|
|
Copyright (C) 2024 CSharp.Discord.API
|
|
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
'/
|
|
|
|
@startuml Object structure
|
|
|
|
struct ID <<readonly>>{
|
|
+ uint64 id
|
|
}
|
|
|
|
class LifeSpan{
|
|
+ bool Alive
|
|
+ {event} Expired
|
|
+ {static} Infinite
|
|
~ Kill()
|
|
}
|
|
|
|
abstract class DiscordObject{
|
|
+ ID Id
|
|
+ ReadonlyDictionary<string, string> UnmanagedFields
|
|
+ LifeSpan LifeSpan
|
|
~ void Update(ModifyEvent e)
|
|
+ {static} DiscordObject CreateNew(CreateEvent e)
|
|
}
|
|
|
|
class DiscordList <<generic>> implements "IReadonlyDictionary<ID; DiscordObject>"{
|
|
- Dictionary<ID, DiscordObject> Items
|
|
+ void UpdateMany(IEnumerable<Event> events)
|
|
}
|
|
|
|
class Application extends DiscordObject {
|
|
+ string Name
|
|
' There are a lot of extra fields not accounted for here
|
|
}
|
|
|
|
abstract class Channel extends DiscordObject{
|
|
' Type will be expressed by the dynamic type of the object
|
|
' This is a broad parent class for all channels
|
|
}
|
|
|
|
abstract class GuildChannel extends Channel{
|
|
' Channels inside guilds
|
|
+ string Name
|
|
+ Guild Guild
|
|
+ Channel? Parent
|
|
}
|
|
|
|
class DirectChannel extends Channel{
|
|
' Direct channels between two users
|
|
}
|
|
|
|
class GroupDMChannel extends DirectChannel{
|
|
|
|
}
|
|
|
|
class GuildCategoryChannel extends GuildChannel{
|
|
|
|
}
|
|
|
|
class GuildTextChannel extends GuildChannel{
|
|
|
|
}
|
|
|
|
class GuildAnnouncementChannel extends GuildTextChannel{
|
|
|
|
}
|
|
|
|
class GuildForumChannel extends GuildTextChannel{
|
|
|
|
}
|
|
|
|
class GuildThreadChannel extends GuildTextChannel{
|
|
|
|
}
|
|
|
|
class GuildAnnouncementThreadChannel extends GuildThreadChannel{
|
|
|
|
}
|
|
|
|
class GuildPublicThreadChannel extends GuildThreadChannel{
|
|
|
|
}
|
|
|
|
class GuildPrivateThreadChannel extends GuildThreadChannel{
|
|
|
|
}
|
|
|
|
class GuildVoiceChannel extends GuildChannel{
|
|
+ int Bitrate
|
|
}
|
|
|
|
class GuildStageChannel extends GuildVoiceChannel{
|
|
|
|
}
|
|
|
|
class Emoji extends DiscordObject{
|
|
+ string Name
|
|
+ ID[]? AllowedRoles
|
|
}
|
|
|
|
class Sticker extends DiscordObject{
|
|
+ string Name
|
|
+ string? Description
|
|
+ int Type
|
|
+ int FormatType
|
|
+ Guild? Guild
|
|
}
|
|
|
|
class User extends DiscordObject{
|
|
+ string Username
|
|
+ string? Discriminator
|
|
+ string? GlobalName
|
|
}
|
|
|
|
class GuildMember extends DiscordObject{
|
|
+ User? User
|
|
+ string? Nickname
|
|
+ List<Role> Roles
|
|
+ DateTime JoinedAt
|
|
+ bool Mute
|
|
+ bool Deaf
|
|
}
|
|
|
|
class Role extends DiscordObject {
|
|
+ string Name
|
|
+ uint Color
|
|
+ bool Hoist
|
|
+ int Position
|
|
+ bool Mentionable
|
|
}
|
|
|
|
class Guild extends DiscordObject{
|
|
+ string Name
|
|
+ string? Description
|
|
+ ID OwnerId
|
|
+ Channel? AfkChannel
|
|
+ Channel? SystemChannel
|
|
+ Channel? RulesChannelId
|
|
+ int AfkTimeout
|
|
+ DiscordList<Role> Roles
|
|
+ DiscordList<Emoji> Emojis
|
|
+ DiscordList<GuildMember> Members
|
|
+ DiscordList<GuildChannel> Channels
|
|
}
|
|
|
|
ID *-- DiscordObject
|
|
User *-- GuildMember
|
|
GuildMember "0..*" <-- Guild
|
|
Role "0..*" <-- Guild
|
|
Emoji "0..*" <-- Guild
|
|
Sticker "0..*" <-- Guild
|
|
GuildChannel "0..*" <-- Guild
|
|
LifeSpan *-- DiscordObject
|
|
DiscordObject "0..*" <-- DiscordList
|
|
|
|
@enduml |