mirror of
https://github.com/Lightcord/Lightcord.git
synced 2025-04-12 00:55:40 +02:00
Compile all things
This commit is contained in:
parent
4939d69a19
commit
45ac98cb2d
2
BetterDiscordApp/dist/index.min.js
vendored
2
BetterDiscordApp/dist/index.min.js
vendored
File diff suppressed because one or more lines are too long
4365
BetterDiscordApp/dist/style.css
vendored
4365
BetterDiscordApp/dist/style.css
vendored
File diff suppressed because it is too large
Load Diff
2
BetterDiscordApp/dist/style.min.css
vendored
2
BetterDiscordApp/dist/style.min.css
vendored
File diff suppressed because one or more lines are too long
@ -7,9 +7,14 @@ gulp.task("watch-css", function() {
|
||||
return gulp.watch(["./src/styles/index.css"], minifyCSS);
|
||||
});
|
||||
|
||||
function minifyCSS() {
|
||||
return gulp.src("./src/styles/index.css")
|
||||
async function minifyCSS() {
|
||||
return [
|
||||
gulp.src("./src/styles/index.css")
|
||||
.pipe(csso({restructure: false}))
|
||||
.pipe(rename("style.min.css"))
|
||||
.pipe(gulp.dest("./dist")),
|
||||
gulp.src("./src/styles/index.css")
|
||||
.pipe(rename("style.css"))
|
||||
.pipe(gulp.dest("./dist"));
|
||||
.pipe(gulp.dest("./dist"))
|
||||
]
|
||||
}
|
2264
BetterDiscordApp/src/styles/index.css
Normal file
2264
BetterDiscordApp/src/styles/index.css
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,321 +1,334 @@
|
||||
import { Snowflake, Channel } from ".."
|
||||
import { DiscordGuild, channelsModule, guildModule, UserSettingsModule, ConstantsModule, CdnModule, AckModule } from "../util/DiscordToModules"
|
||||
import BaseStructure from "./BaseStructure"
|
||||
import { createChannel, createGuildMember, createRole, UserResolvable, resolveUserID, ChannelData, ChannelCreationOverwrites, PermissionOverwrites } from "../util/util"
|
||||
import Collection from "@discordjs/collection"
|
||||
import SnowflakeUtil from "../util/Snowflake"
|
||||
import GuildMember from "./GuildMember"
|
||||
import { MessageNotificationType } from "../util/Constants"
|
||||
import Role from "./Role"
|
||||
import DiscordJSError from "../util/DiscordJSError"
|
||||
|
||||
export default class Guild extends BaseStructure {
|
||||
DiscordGuild:DiscordGuild
|
||||
constructor(data:DiscordGuild){
|
||||
super()
|
||||
this.DiscordGuild = data
|
||||
}
|
||||
|
||||
get id(): Snowflake{
|
||||
return this.DiscordGuild.id
|
||||
}
|
||||
|
||||
get afkChannel():Channel{
|
||||
if(!this.afkChannelID)return null
|
||||
return createChannel(channelsModule.getChannel(this.afkChannelID))
|
||||
}
|
||||
|
||||
get afkChannelID():Snowflake{
|
||||
return this.DiscordGuild.afkChannelId
|
||||
}
|
||||
|
||||
get afkTimeout():number{
|
||||
return this.DiscordGuild.afkTimeout
|
||||
}
|
||||
|
||||
get applicationID():Snowflake{
|
||||
return this.DiscordGuild.application_id
|
||||
}
|
||||
|
||||
get available():boolean{
|
||||
return true
|
||||
}
|
||||
|
||||
get channels():Collection<Snowflake, Channel>{{
|
||||
return this.client.channels.filter(channel => channel.guild_id === this.id)
|
||||
}}
|
||||
|
||||
get createdAt():Date{
|
||||
return SnowflakeUtil.deconstruct(this.id).date
|
||||
}
|
||||
|
||||
get createdTimestamp():number{
|
||||
return this.createdAt.getTime()
|
||||
}
|
||||
|
||||
get defaultChannel(){
|
||||
return this.channels.get(this.id)
|
||||
}
|
||||
|
||||
get defaultMessageNotifications():number{
|
||||
return this.DiscordGuild.defaultMessageNotifications
|
||||
}
|
||||
|
||||
deleted:boolean = false
|
||||
|
||||
get embedEnabled(){
|
||||
return true
|
||||
}
|
||||
|
||||
get emojis(){
|
||||
return this.client.emojis.filter(e => e.guild_id === this.id)
|
||||
}
|
||||
|
||||
get explicitContentFilter(){
|
||||
return this.DiscordGuild.explicitContentFilter
|
||||
}
|
||||
|
||||
get features(){
|
||||
return Array.from(this.DiscordGuild.features)
|
||||
}
|
||||
|
||||
get icon(){
|
||||
return this.DiscordGuild.icon
|
||||
}
|
||||
|
||||
get iconURL(){
|
||||
return this.DiscordGuild.getIconURL().replace(".webp", ".jpg")
|
||||
}
|
||||
|
||||
get joinedAt(){
|
||||
return new Date(this.DiscordGuild.joinedAt)
|
||||
}
|
||||
|
||||
get joinedTimestamp(){
|
||||
return this.DiscordGuild.joinedAt.getTime()
|
||||
}
|
||||
|
||||
get large(){
|
||||
return false
|
||||
}
|
||||
|
||||
get me(){
|
||||
return this.members.find(member => member.id === this.client.user.id)
|
||||
}
|
||||
|
||||
get memberCount(){
|
||||
return guildModule.getMemberCount(this.id)
|
||||
}
|
||||
|
||||
get members(){
|
||||
return new Collection<Snowflake, GuildMember>(guildModule.getMembers(this.id).map(member => [member.userId, createGuildMember(member)]))
|
||||
}
|
||||
|
||||
get messageNotifications():MessageNotificationType{
|
||||
return MessageNotificationType[guildModule.getMessageNotifications(this.id)] as unknown as MessageNotificationType
|
||||
}
|
||||
|
||||
get mfaLevel(){
|
||||
return this.DiscordGuild.mfaLevel
|
||||
}
|
||||
|
||||
get mobilePush():boolean{
|
||||
return guildModule.getNotificationsState().userGuildSettings[this.id].mobile_push
|
||||
}
|
||||
|
||||
get muted(){
|
||||
return guildModule.getNotificationsState().userGuildSettings[this.id].muted
|
||||
}
|
||||
|
||||
get name(){
|
||||
return this.DiscordGuild.name
|
||||
}
|
||||
|
||||
get nameAcronym(){
|
||||
return this.DiscordGuild.acronym
|
||||
}
|
||||
|
||||
get owner(){
|
||||
return this.members.get(this.ownerID)
|
||||
}
|
||||
|
||||
get ownerID(){
|
||||
return this.DiscordGuild.ownerId
|
||||
}
|
||||
|
||||
get position(){
|
||||
let guildPositions = UserSettingsModule.getAllSettings().guildPositions
|
||||
if(!guildPositions)return 0
|
||||
return guildPositions.indexOf(this.id)
|
||||
}
|
||||
|
||||
get presences(){ // TODO: Add activities.
|
||||
return new Collection()
|
||||
}
|
||||
|
||||
get region(){
|
||||
return this.DiscordGuild.region
|
||||
}
|
||||
|
||||
get roles(){
|
||||
return new Collection<Snowflake, Role>(Object.values(this.DiscordGuild.roles).map(role => [role.id, createRole(role)]))
|
||||
}
|
||||
|
||||
get splash(){
|
||||
return this.DiscordGuild.splash
|
||||
}
|
||||
|
||||
get splashURL(){
|
||||
return CdnModule.getGuildSplashURL({
|
||||
id: this.id,
|
||||
splash: this.splash,
|
||||
size: ConstantsModule.SPLASH_SIZE
|
||||
})
|
||||
}
|
||||
|
||||
get suppressEveryone(){
|
||||
return guildModule.getNotificationsState().userGuildSettings[this.id].suppress_everyone
|
||||
}
|
||||
|
||||
get systemChannel(){
|
||||
return this.client.channels.get(this.systemChannelID)
|
||||
}
|
||||
|
||||
get systemChannelID(){
|
||||
return this.DiscordGuild.systemChannelId
|
||||
}
|
||||
|
||||
get verificationLevel(){
|
||||
return this.DiscordGuild.verificationLevel
|
||||
}
|
||||
|
||||
get verified(){
|
||||
return this.features.includes("VERIFIED")
|
||||
}
|
||||
|
||||
get voiceConnection(){// TODO: Implement if possible VoiceConnection. Maybe not fully like discord.js, but at least can see if you're connected.
|
||||
return null
|
||||
}
|
||||
|
||||
get banner(){
|
||||
return this.DiscordGuild.banner
|
||||
}
|
||||
|
||||
get bannerURL(){
|
||||
return CdnModule.getGuildBannerURL({
|
||||
id: this.id,
|
||||
banner: this.banner
|
||||
})
|
||||
}
|
||||
|
||||
get description(){
|
||||
return this.DiscordGuild.description
|
||||
}
|
||||
|
||||
get embedChannel(){ // TODO: Implement embedChannel
|
||||
return null
|
||||
}
|
||||
|
||||
get embedChannelID(){ // TODO: Implement embedChannelID
|
||||
return null
|
||||
}
|
||||
|
||||
get maximumMembers(){ // TODO: Correctly Implement maximumMembers if possible
|
||||
return 250000
|
||||
}
|
||||
|
||||
get maximumPresences(){ // TODO: Correctly Implement maximumPresences if possible
|
||||
return 5000
|
||||
}
|
||||
|
||||
get widgetEnabled(){ // TODO: Correctly Implement widgetEnabled if possible
|
||||
return false
|
||||
}
|
||||
|
||||
get widgetChannelID(){ // TODO: Correctly Implement widgetChannelID if possible
|
||||
return null
|
||||
}
|
||||
|
||||
get widgetChannel(){ // TODO: Correctly Implement widgetChannel if possible
|
||||
return null
|
||||
}
|
||||
|
||||
get vanityURLCode(){
|
||||
return this.DiscordGuild.vanityURLCode
|
||||
}
|
||||
/** FUNCTIONS */
|
||||
async acknowledge(){
|
||||
AckModule.bulkAck(this.channels.filter(e => e.type === "text").map(e => {
|
||||
return {
|
||||
channelId: e.id,
|
||||
messageId: channelsModule.lastMessageId(e.id)
|
||||
}
|
||||
}))
|
||||
}
|
||||
|
||||
addMember(...args:any):Promise<GuildMember>{
|
||||
return Promise.reject(new DiscordJSError("This method is not available on Lightcord."))
|
||||
}
|
||||
|
||||
allowDMs(allow:boolean){
|
||||
let restricted = UserSettingsModule.getAllSettings().restrictedGuilds
|
||||
if(allow){
|
||||
if(!restricted.includes(this.id))return Promise.resolve(this)
|
||||
restricted = restricted.filter(e => e !== this.id)
|
||||
}else{
|
||||
if(restricted.includes(this.id))return Promise.resolve(this)
|
||||
restricted.push(this.id)
|
||||
}
|
||||
return UserSettingsModule.updateRemoteSettings({
|
||||
restrictedGuilds: restricted
|
||||
}).then(() => this)
|
||||
}
|
||||
|
||||
async ban(user:UserResolvable, {
|
||||
days = 0,
|
||||
reason = null
|
||||
}: {
|
||||
days?: number,
|
||||
reason?: string
|
||||
} = {}):Promise<Snowflake>{ // always returning a snowflake
|
||||
let id = resolveUserID(user)
|
||||
if(!id)return Promise.reject(new DiscordJSError("Given user could not be resolved to an user ID."))
|
||||
|
||||
let result = await guildModule.banUser(this.id, id, days, reason).catch(err => err)
|
||||
if(result instanceof Error || result.status !== 204){
|
||||
let message = result.body
|
||||
if(Array.isArray(message)){
|
||||
message = message[0]
|
||||
}else{
|
||||
if(message.user_id){
|
||||
message = "User: "+ message.user_id[0]
|
||||
}else if(message.delete_message_days){
|
||||
message = "Days: "+ message.delete_message_days[0]
|
||||
}else if(message.reason){
|
||||
message = "Reason: "+ message.reason[0]
|
||||
}else{
|
||||
message = result.text
|
||||
}
|
||||
}
|
||||
throw new DiscordJSError(message)
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
createChannel(name:string, typeOrOptions:string|ChannelData = 'text', permissionOverwrites?: ChannelCreationOverwrites[] | Collection<Snowflake, PermissionOverwrites>, reason?: string){
|
||||
|
||||
}
|
||||
|
||||
fetch():Promise<Guild>{ // Guild is synced by Discord. Only refreshing from cache.
|
||||
let guild = guildModule.getGuild(this.id)
|
||||
if(!guild){
|
||||
this.deleted = true
|
||||
return Promise.resolve(this)
|
||||
}
|
||||
this.DiscordGuild = guild
|
||||
return Promise.resolve(this)
|
||||
}
|
||||
|
||||
|
||||
|
||||
import { Snowflake, Channel } from ".."
|
||||
import { DiscordGuild, channelsModule, guildModule, UserSettingsModule, ConstantsModule, CdnModule, AckModule } from "../util/DiscordToModules"
|
||||
import BaseStructure from "./BaseStructure"
|
||||
import { createChannel, createGuildMember, createRole, UserResolvable, resolveUserID, ChannelData, ChannelCreationOverwrites } from "../util/util"
|
||||
import Collection from "@discordjs/collection"
|
||||
import SnowflakeUtil from "../util/Snowflake"
|
||||
import GuildMember from "./GuildMember"
|
||||
import { MessageNotificationType, ChannelTypes } from "../util/Constants"
|
||||
import Role from "./Role"
|
||||
import DiscordJSError from "../util/DiscordJSError"
|
||||
import PermissionOverwrites from "./PermissionOverwrites"
|
||||
|
||||
export default class Guild extends BaseStructure {
|
||||
DiscordGuild:DiscordGuild
|
||||
constructor(data:DiscordGuild){
|
||||
super()
|
||||
this.DiscordGuild = data
|
||||
}
|
||||
|
||||
get id(): Snowflake{
|
||||
return this.DiscordGuild.id
|
||||
}
|
||||
|
||||
get afkChannel():Channel{
|
||||
if(!this.afkChannelID)return null
|
||||
return createChannel(channelsModule.getChannel(this.afkChannelID))
|
||||
}
|
||||
|
||||
get afkChannelID():Snowflake{
|
||||
return this.DiscordGuild.afkChannelId
|
||||
}
|
||||
|
||||
get afkTimeout():number{
|
||||
return this.DiscordGuild.afkTimeout
|
||||
}
|
||||
|
||||
get applicationID():Snowflake{
|
||||
return this.DiscordGuild.application_id
|
||||
}
|
||||
|
||||
get available():boolean{
|
||||
return true
|
||||
}
|
||||
|
||||
get channels():Collection<Snowflake, Channel>{{
|
||||
return this.client.channels.filter(channel => channel.guild_id === this.id)
|
||||
}}
|
||||
|
||||
get createdAt():Date{
|
||||
return SnowflakeUtil.deconstruct(this.id).date
|
||||
}
|
||||
|
||||
get createdTimestamp():number{
|
||||
return this.createdAt.getTime()
|
||||
}
|
||||
|
||||
get defaultChannel(){
|
||||
return this.channels.get(this.id)
|
||||
}
|
||||
|
||||
get defaultMessageNotifications():number{
|
||||
return this.DiscordGuild.defaultMessageNotifications
|
||||
}
|
||||
|
||||
deleted:boolean = false
|
||||
|
||||
get embedEnabled(){
|
||||
return true
|
||||
}
|
||||
|
||||
get emojis(){
|
||||
return this.client.emojis.filter(e => e.guild_id === this.id)
|
||||
}
|
||||
|
||||
get explicitContentFilter(){
|
||||
return this.DiscordGuild.explicitContentFilter
|
||||
}
|
||||
|
||||
get features(){
|
||||
return Array.from(this.DiscordGuild.features)
|
||||
}
|
||||
|
||||
get icon(){
|
||||
return this.DiscordGuild.icon
|
||||
}
|
||||
|
||||
get iconURL(){
|
||||
return this.DiscordGuild.getIconURL().replace(".webp", ".jpg")
|
||||
}
|
||||
|
||||
get joinedAt(){
|
||||
return new Date(this.DiscordGuild.joinedAt)
|
||||
}
|
||||
|
||||
get joinedTimestamp(){
|
||||
return this.DiscordGuild.joinedAt.getTime()
|
||||
}
|
||||
|
||||
get large(){
|
||||
return false
|
||||
}
|
||||
|
||||
get me(){
|
||||
return this.members.find(member => member.id === this.client.user.id)
|
||||
}
|
||||
|
||||
get memberCount(){
|
||||
return guildModule.getMemberCount(this.id)
|
||||
}
|
||||
|
||||
get members(){
|
||||
return new Collection<Snowflake, GuildMember>(guildModule.getMembers(this.id).map(member => [member.userId, createGuildMember(member)]))
|
||||
}
|
||||
|
||||
get messageNotifications():MessageNotificationType{
|
||||
return MessageNotificationType[guildModule.getMessageNotifications(this.id)] as unknown as MessageNotificationType
|
||||
}
|
||||
|
||||
get mfaLevel(){
|
||||
return this.DiscordGuild.mfaLevel
|
||||
}
|
||||
|
||||
get mobilePush():boolean{
|
||||
return guildModule.getNotificationsState().userGuildSettings[this.id].mobile_push
|
||||
}
|
||||
|
||||
get muted(){
|
||||
return guildModule.getNotificationsState().userGuildSettings[this.id].muted
|
||||
}
|
||||
|
||||
get name(){
|
||||
return this.DiscordGuild.name
|
||||
}
|
||||
|
||||
get nameAcronym(){
|
||||
return this.DiscordGuild.acronym
|
||||
}
|
||||
|
||||
get owner(){
|
||||
return this.members.get(this.ownerID)
|
||||
}
|
||||
|
||||
get ownerID(){
|
||||
return this.DiscordGuild.ownerId
|
||||
}
|
||||
|
||||
get position(){
|
||||
let guildPositions = UserSettingsModule.getAllSettings().guildPositions
|
||||
if(!guildPositions)return 0
|
||||
return guildPositions.indexOf(this.id)
|
||||
}
|
||||
|
||||
get presences(){ // TODO: Add activities.
|
||||
return new Collection()
|
||||
}
|
||||
|
||||
get region(){
|
||||
return this.DiscordGuild.region
|
||||
}
|
||||
|
||||
get roles(){
|
||||
return new Collection<Snowflake, Role>(Object.values(this.DiscordGuild.roles).map(role => [role.id, createRole(role)]))
|
||||
}
|
||||
|
||||
get splash(){
|
||||
return this.DiscordGuild.splash
|
||||
}
|
||||
|
||||
get splashURL(){
|
||||
return CdnModule.getGuildSplashURL({
|
||||
id: this.id,
|
||||
splash: this.splash,
|
||||
size: ConstantsModule.SPLASH_SIZE
|
||||
})
|
||||
}
|
||||
|
||||
get suppressEveryone(){
|
||||
return guildModule.getNotificationsState().userGuildSettings[this.id].suppress_everyone
|
||||
}
|
||||
|
||||
get systemChannel(){
|
||||
return this.client.channels.get(this.systemChannelID)
|
||||
}
|
||||
|
||||
get systemChannelID(){
|
||||
return this.DiscordGuild.systemChannelId
|
||||
}
|
||||
|
||||
get verificationLevel(){
|
||||
return this.DiscordGuild.verificationLevel
|
||||
}
|
||||
|
||||
get verified(){
|
||||
return this.features.includes("VERIFIED")
|
||||
}
|
||||
|
||||
get voiceConnection(){// TODO: Implement if possible VoiceConnection. Maybe not fully like discord.js, but at least can see if you're connected.
|
||||
return null
|
||||
}
|
||||
|
||||
get banner(){
|
||||
return this.DiscordGuild.banner
|
||||
}
|
||||
|
||||
get bannerURL(){
|
||||
return CdnModule.getGuildBannerURL({
|
||||
id: this.id,
|
||||
banner: this.banner
|
||||
})
|
||||
}
|
||||
|
||||
get description(){
|
||||
return this.DiscordGuild.description
|
||||
}
|
||||
|
||||
get embedChannel(){ // TODO: Implement embedChannel
|
||||
return null
|
||||
}
|
||||
|
||||
get embedChannelID(){ // TODO: Implement embedChannelID
|
||||
return null
|
||||
}
|
||||
|
||||
get maximumMembers(){ // TODO: Correctly Implement maximumMembers if possible
|
||||
return 250000
|
||||
}
|
||||
|
||||
get maximumPresences(){ // TODO: Correctly Implement maximumPresences if possible
|
||||
return 5000
|
||||
}
|
||||
|
||||
get widgetEnabled(){ // TODO: Correctly Implement widgetEnabled if possible
|
||||
return false
|
||||
}
|
||||
|
||||
get widgetChannelID(){ // TODO: Correctly Implement widgetChannelID if possible
|
||||
return null
|
||||
}
|
||||
|
||||
get widgetChannel(){ // TODO: Correctly Implement widgetChannel if possible
|
||||
return null
|
||||
}
|
||||
|
||||
get vanityURLCode(){
|
||||
return this.DiscordGuild.vanityURLCode
|
||||
}
|
||||
/** FUNCTIONS */
|
||||
async acknowledge(){
|
||||
AckModule.bulkAck(this.channels.filter(e => e.type === "text").map(e => {
|
||||
return {
|
||||
channelId: e.id,
|
||||
messageId: channelsModule.lastMessageId(e.id)
|
||||
}
|
||||
}))
|
||||
}
|
||||
|
||||
addMember(...args:any):Promise<GuildMember>{
|
||||
return Promise.reject(new DiscordJSError("This method is not available on Lightcord."))
|
||||
}
|
||||
|
||||
allowDMs(allow:boolean){
|
||||
let restricted = UserSettingsModule.getAllSettings().restrictedGuilds
|
||||
if(allow){
|
||||
if(!restricted.includes(this.id))return Promise.resolve(this)
|
||||
restricted = restricted.filter(e => e !== this.id)
|
||||
}else{
|
||||
if(restricted.includes(this.id))return Promise.resolve(this)
|
||||
restricted.push(this.id)
|
||||
}
|
||||
return UserSettingsModule.updateRemoteSettings({
|
||||
restrictedGuilds: restricted
|
||||
}).then(() => this)
|
||||
}
|
||||
|
||||
async ban(user:UserResolvable, {
|
||||
days = 0,
|
||||
reason = null
|
||||
}: {
|
||||
days?: number,
|
||||
reason?: string
|
||||
} = {}):Promise<Snowflake>{ // always returning a snowflake
|
||||
let id = resolveUserID(user)
|
||||
if(!id)return Promise.reject(new DiscordJSError("Given user could not be resolved to an user ID."))
|
||||
|
||||
let result = await guildModule.banUser(this.id, id, days, reason).catch(err => err)
|
||||
if(result instanceof Error || result.status !== 204){
|
||||
let message = result.body
|
||||
if(Array.isArray(message)){
|
||||
message = message[0]
|
||||
}else{
|
||||
if(message.user_id){
|
||||
message = "User: "+ message.user_id[0]
|
||||
}else if(message.delete_message_days){
|
||||
message = "Days: "+ message.delete_message_days[0]
|
||||
}else if(message.reason){
|
||||
message = "Reason: "+ message.reason[0]
|
||||
}else{
|
||||
message = result.text
|
||||
}
|
||||
}
|
||||
throw new DiscordJSError(message)
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
createChannel(name:string, typeOrOptions:ChannelTypes|ChannelData = ChannelTypes.TEXT, permissionOverwrites?: ChannelCreationOverwrites[] | Collection<Snowflake, PermissionOverwrites>, reason?: string){
|
||||
const [opts, type] = typeof typeOrOptions === "string" ? [
|
||||
{},
|
||||
typeOrOptions
|
||||
] : [
|
||||
typeOrOptions,
|
||||
typeOrOptions.type
|
||||
]
|
||||
const options = {
|
||||
name: name || "Unknown Channel",
|
||||
type: type || "text"
|
||||
}
|
||||
//TODO: CreateGuildChannels and handle permissions
|
||||
//channelsModule.createGuildChannel(this.id, options.type, optinos.name)
|
||||
}
|
||||
|
||||
fetch():Promise<Guild>{ // Guild is synced by Discord. Only refreshing from cache.
|
||||
let guild = guildModule.getGuild(this.id)
|
||||
if(!guild){
|
||||
this.deleted = true
|
||||
return Promise.resolve(this)
|
||||
}
|
||||
this.DiscordGuild = guild
|
||||
return Promise.resolve(this)
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
61
DiscordJS/src/structures/PermissionOverwrites.ts
Normal file
61
DiscordJS/src/structures/PermissionOverwrites.ts
Normal file
@ -0,0 +1,61 @@
|
||||
import Permissions from '../util/Permissions';
|
||||
import GuildChannel from './GuildChannel';
|
||||
import { Snowflake } from '..';
|
||||
|
||||
/**
|
||||
* Represents a permission overwrite for a role or member in a guild channel.
|
||||
*/
|
||||
export default class PermissionOverwrites {
|
||||
id: Snowflake;
|
||||
type: "role"|"member";
|
||||
deny: number;
|
||||
allow: number;
|
||||
channel: GuildChannel;
|
||||
constructor(guildChannel:GuildChannel, data) {
|
||||
/**
|
||||
* The GuildChannel this overwrite is for
|
||||
* @name PermissionOverwrites#channel
|
||||
* @type {GuildChannel}
|
||||
* @readonly
|
||||
*/
|
||||
Object.defineProperty(this, 'channel', { value: guildChannel });
|
||||
|
||||
if (data) this.setup(data);
|
||||
}
|
||||
|
||||
setup(data) {
|
||||
/**
|
||||
* The ID of this overwrite, either a user ID or a role ID
|
||||
* @type {Snowflake}
|
||||
*/
|
||||
this.id = data.id;
|
||||
|
||||
/**
|
||||
* The type of this overwrite
|
||||
* @type {string}
|
||||
*/
|
||||
this.type = data.type;
|
||||
|
||||
/**
|
||||
* The permissions that are denied for the user or role as a bitfield.
|
||||
* @type {number}
|
||||
*/
|
||||
this.deny = data.deny;
|
||||
|
||||
/**
|
||||
* The permissions that are allowed for the user or role as a bitfield.
|
||||
* @type {number}
|
||||
*/
|
||||
this.allow = data.allow;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete this Permission Overwrite.
|
||||
* @param {string} [reason] Reason for deleting this overwrite
|
||||
* @returns {Promise<PermissionOverwrites>}
|
||||
*/
|
||||
delete(reason) {
|
||||
// TODO: Delete permission overwrites
|
||||
//return this.channel.client.rest.methods.deletePermissionOverwrites(this, reason);
|
||||
}
|
||||
}
|
32
DiscordJS/src/structures/shared/resolvePermissions.ts
Normal file
32
DiscordJS/src/structures/shared/resolvePermissions.ts
Normal file
@ -0,0 +1,32 @@
|
||||
import Permissions from '../../util/Permissions';
|
||||
import Collection from '@discordjs/collection';
|
||||
import Guild from '../Guild';
|
||||
import { ChannelCreationOverwrites } from '../../util/util';
|
||||
import { Snowflake } from '../..';
|
||||
import PermissionOverwrites from '../PermissionOverwrites';
|
||||
|
||||
module.exports = function resolvePermissions(overwrites: ChannelCreationOverwrites[] | Collection<Snowflake, PermissionOverwrites>, guild:Guild) {
|
||||
if (overwrites instanceof Collection || overwrites instanceof Array) {
|
||||
//TODO: Remove ts-ignore
|
||||
// @ts-ignore
|
||||
overwrites = (Array.isArray(overwrites) ? overwrites : overwrites.array()).map(overwrite => {
|
||||
const role = this.client.resolver.resolveRole(guild, overwrite.id);
|
||||
if (role) {
|
||||
overwrite.id = role.id;
|
||||
overwrite.type = 'role';
|
||||
} else {
|
||||
overwrite.id = this.client.resolver.resolveUserID(overwrite.id);
|
||||
overwrite.type = 'member';
|
||||
}
|
||||
|
||||
return {
|
||||
allow: Permissions.resolve(overwrite.allow || overwrite.allowed || 0),
|
||||
deny: Permissions.resolve(overwrite.deny || overwrite.denied || 0),
|
||||
type: overwrite.type,
|
||||
id: overwrite.id,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
return overwrites;
|
||||
};
|
@ -1,210 +1,210 @@
|
||||
import BitField from "./BitField";
|
||||
import * as util from "util";
|
||||
|
||||
/**
|
||||
* Data structure that makes it easy to interact with a permission bitfield. All {@link GuildMember}s have a set of
|
||||
* permissions in their guild, and each channel in the guild may also have {@link PermissionOverwrites} for the member
|
||||
* that override their default permissions.
|
||||
* @extends {BitField}
|
||||
*/
|
||||
export default class Permissions extends BitField {
|
||||
/**
|
||||
* @param {number|PermissionResolvable} permissions Permissions or bitfield to read from
|
||||
*/
|
||||
constructor(permissions: number | PermissionResolvable) {
|
||||
super(permissions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bitfield of the packed permissions
|
||||
* @type {number}
|
||||
* @see {@link Permissions#bitfield}
|
||||
* @deprecated
|
||||
* @readonly
|
||||
*/
|
||||
get raw() {
|
||||
return this.bitfield;
|
||||
}
|
||||
|
||||
set raw(raw) {
|
||||
this.bitfield = raw;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the bitfield has a permission, or any of multiple permissions.
|
||||
* @param {PermissionResolvable} permission Permission(s) to check for
|
||||
* @param {boolean} [checkAdmin=true] Whether to allow the administrator permission to override
|
||||
* @returns {boolean}
|
||||
*/
|
||||
any(permission: PermissionResolvable, checkAdmin: boolean = true): boolean {
|
||||
return (
|
||||
(checkAdmin && super.has((this.constructor as any).FLAGS.ADMINISTRATOR)) ||
|
||||
super.any(permission)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the bitfield has a permission, or multiple permissions.
|
||||
* @param {PermissionResolvable} permission Permission(s) to check for
|
||||
* @param {boolean} [checkAdmin=true] Whether to allow the administrator permission to override
|
||||
* @returns {boolean}
|
||||
*/
|
||||
has(permission: PermissionResolvable, checkAdmin: boolean = true): boolean {
|
||||
return (
|
||||
(checkAdmin && super.has((this.constructor as any).FLAGS.ADMINISTRATOR)) ||
|
||||
super.has(permission)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Numeric permission flags. All available properties:
|
||||
* - `ADMINISTRATOR` (implicitly has *all* permissions, and bypasses all channel overwrites)
|
||||
* - `CREATE_INSTANT_INVITE` (create invitations to the guild)
|
||||
* - `KICK_MEMBERS`
|
||||
* - `BAN_MEMBERS`
|
||||
* - `MANAGE_CHANNELS` (edit and reorder channels)
|
||||
* - `MANAGE_GUILD` (edit the guild information, region, etc.)
|
||||
* - `ADD_REACTIONS` (add new reactions to messages)
|
||||
* - `VIEW_AUDIT_LOG`
|
||||
* - `PRIORITY_SPEAKER`
|
||||
* - `STREAM`
|
||||
* - `VIEW_CHANNEL`
|
||||
* - `READ_MESSAGES` **(deprecated)**
|
||||
* - `SEND_MESSAGES`
|
||||
* - `SEND_TTS_MESSAGES`
|
||||
* - `MANAGE_MESSAGES` (delete messages and reactions)
|
||||
* - `EMBED_LINKS` (links posted will have a preview embedded)
|
||||
* - `ATTACH_FILES`
|
||||
* - `READ_MESSAGE_HISTORY` (view messages that were posted prior to opening Discord)
|
||||
* - `MENTION_EVERYONE`
|
||||
* - `USE_EXTERNAL_EMOJIS` (use emojis from different guilds)
|
||||
* - `EXTERNAL_EMOJIS` **(deprecated)**
|
||||
* - `CONNECT` (connect to a voice channel)
|
||||
* - `SPEAK` (speak in a voice channel)
|
||||
* - `MUTE_MEMBERS` (mute members across all voice channels)
|
||||
* - `DEAFEN_MEMBERS` (deafen members across all voice channels)
|
||||
* - `MOVE_MEMBERS` (move members between voice channels)
|
||||
* - `USE_VAD` (use voice activity detection)
|
||||
* - `CHANGE_NICKNAME`
|
||||
* - `MANAGE_NICKNAMES` (change other members' nicknames)
|
||||
* - `MANAGE_ROLES`
|
||||
* - `MANAGE_ROLES_OR_PERMISSIONS` **(deprecated)**
|
||||
* - `MANAGE_WEBHOOKS`
|
||||
* - `MANAGE_EMOJIS`
|
||||
* @type {Object}
|
||||
* @see {@link https://discordapp.com/developers/docs/topics/permissions}
|
||||
*/
|
||||
static FLAGS:{
|
||||
CREATE_INSTANT_INVITE: number,
|
||||
KICK_MEMBERS: number,
|
||||
BAN_MEMBERS: number,
|
||||
ADMINISTRATOR: number,
|
||||
MANAGE_CHANNELS: number,
|
||||
MANAGE_GUILD: number,
|
||||
ADD_REACTIONS: number,
|
||||
VIEW_AUDIT_LOG: number,
|
||||
PRIORITY_SPEAKER: number,
|
||||
STREAM: number,
|
||||
|
||||
VIEW_CHANNEL: number,
|
||||
READ_MESSAGES: number,
|
||||
SEND_MESSAGES: number,
|
||||
SEND_TTS_MESSAGES: number,
|
||||
MANAGE_MESSAGES: number,
|
||||
EMBED_LINKS: number,
|
||||
ATTACH_FILES: number,
|
||||
READ_MESSAGE_HISTORY: number,
|
||||
MENTION_EVERYONE: number,
|
||||
EXTERNAL_EMOJIS: number,
|
||||
USE_EXTERNAL_EMOJIS: number,
|
||||
|
||||
CONNECT: number,
|
||||
SPEAK: number,
|
||||
MUTE_MEMBERS: number,
|
||||
DEAFEN_MEMBERS: number,
|
||||
MOVE_MEMBERS: number,
|
||||
USE_VAD: number,
|
||||
|
||||
CHANGE_NICKNAME: number,
|
||||
MANAGE_NICKNAMES: number,
|
||||
MANAGE_ROLES: number,
|
||||
MANAGE_ROLES_OR_PERMISSIONS: number,
|
||||
MANAGE_WEBHOOKS: number,
|
||||
MANAGE_EMOJIS: number,
|
||||
} = {
|
||||
CREATE_INSTANT_INVITE: 1 << 0,
|
||||
KICK_MEMBERS: 1 << 1,
|
||||
BAN_MEMBERS: 1 << 2,
|
||||
ADMINISTRATOR: 1 << 3,
|
||||
MANAGE_CHANNELS: 1 << 4,
|
||||
MANAGE_GUILD: 1 << 5,
|
||||
ADD_REACTIONS: 1 << 6,
|
||||
VIEW_AUDIT_LOG: 1 << 7,
|
||||
PRIORITY_SPEAKER: 1 << 8,
|
||||
STREAM: 1 << 9,
|
||||
|
||||
VIEW_CHANNEL: 1 << 10,
|
||||
READ_MESSAGES: 1 << 10,
|
||||
SEND_MESSAGES: 1 << 11,
|
||||
SEND_TTS_MESSAGES: 1 << 12,
|
||||
MANAGE_MESSAGES: 1 << 13,
|
||||
EMBED_LINKS: 1 << 14,
|
||||
ATTACH_FILES: 1 << 15,
|
||||
READ_MESSAGE_HISTORY: 1 << 16,
|
||||
MENTION_EVERYONE: 1 << 17,
|
||||
EXTERNAL_EMOJIS: 1 << 18,
|
||||
USE_EXTERNAL_EMOJIS: 1 << 18,
|
||||
|
||||
CONNECT: 1 << 20,
|
||||
SPEAK: 1 << 21,
|
||||
MUTE_MEMBERS: 1 << 22,
|
||||
DEAFEN_MEMBERS: 1 << 23,
|
||||
MOVE_MEMBERS: 1 << 24,
|
||||
USE_VAD: 1 << 25,
|
||||
|
||||
CHANGE_NICKNAME: 1 << 26,
|
||||
MANAGE_NICKNAMES: 1 << 27,
|
||||
MANAGE_ROLES: 1 << 28,
|
||||
MANAGE_ROLES_OR_PERMISSIONS: 1 << 28,
|
||||
MANAGE_WEBHOOKS: 1 << 29,
|
||||
MANAGE_EMOJIS: 1 << 30,
|
||||
};
|
||||
|
||||
/**
|
||||
* Bitfield representing every permission combined
|
||||
* @type {number}
|
||||
*/
|
||||
static ALL: number = Object.keys(Permissions.FLAGS).reduce(
|
||||
(all, p) => all | Permissions.FLAGS[p],
|
||||
0
|
||||
);
|
||||
|
||||
/**
|
||||
* Bitfield representing the default permissions for users
|
||||
* @type {number}
|
||||
*/
|
||||
static DEFAULT: number = 104324673;
|
||||
}
|
||||
|
||||
Object.defineProperty(Permissions.prototype, "raw", {
|
||||
get: util.deprecate(
|
||||
Object.getOwnPropertyDescriptor(Permissions.prototype, "raw").get,
|
||||
"EvaluatedPermissions#raw is deprecated use Permissions#bitfield instead"
|
||||
),
|
||||
set: util.deprecate(
|
||||
Object.getOwnPropertyDescriptor(Permissions.prototype, "raw").set,
|
||||
"EvaluatedPermissions#raw is deprecated use Permissions#bitfield instead"
|
||||
),
|
||||
});
|
||||
|
||||
/**
|
||||
* Data that can be resolved to give a permission number. This can be:
|
||||
* * A string (see {@link Permissions.FLAGS})
|
||||
* * A permission number
|
||||
* @typedef {string|number|Permissions|PermissionResolvable[]} PermissionResolvable
|
||||
*/
|
||||
export type PermissionResolvable =
|
||||
| string
|
||||
| number
|
||||
| Permissions
|
||||
| PermissionResolvable[];
|
||||
import BitField from "./BitField";
|
||||
import * as util from "util";
|
||||
|
||||
/**
|
||||
* Data structure that makes it easy to interact with a permission bitfield. All {@link GuildMember}s have a set of
|
||||
* permissions in their guild, and each channel in the guild may also have {@link PermissionOverwrites} for the member
|
||||
* that override their default permissions.
|
||||
* @extends {BitField}
|
||||
*/
|
||||
export default class Permissions extends BitField {
|
||||
/**
|
||||
* @param {number|PermissionResolvable} permissions Permissions or bitfield to read from
|
||||
*/
|
||||
constructor(permissions: number | PermissionResolvable) {
|
||||
super(permissions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bitfield of the packed permissions
|
||||
* @type {number}
|
||||
* @see {@link Permissions#bitfield}
|
||||
* @deprecated
|
||||
* @readonly
|
||||
*/
|
||||
get raw() {
|
||||
return this.bitfield;
|
||||
}
|
||||
|
||||
set raw(raw) {
|
||||
this.bitfield = raw;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the bitfield has a permission, or any of multiple permissions.
|
||||
* @param {PermissionResolvable} permission Permission(s) to check for
|
||||
* @param {boolean} [checkAdmin=true] Whether to allow the administrator permission to override
|
||||
* @returns {boolean}
|
||||
*/
|
||||
any(permission: PermissionResolvable, checkAdmin: boolean = true): boolean {
|
||||
return (
|
||||
(checkAdmin && super.has((this.constructor as any).FLAGS.ADMINISTRATOR)) ||
|
||||
super.any(permission)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the bitfield has a permission, or multiple permissions.
|
||||
* @param {PermissionResolvable} permission Permission(s) to check for
|
||||
* @param {boolean} [checkAdmin=true] Whether to allow the administrator permission to override
|
||||
* @returns {boolean}
|
||||
*/
|
||||
has(permission: PermissionResolvable, checkAdmin: boolean = true): boolean {
|
||||
return (
|
||||
(checkAdmin && super.has((this.constructor as any).FLAGS.ADMINISTRATOR)) ||
|
||||
super.has(permission)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Numeric permission flags. All available properties:
|
||||
* - `ADMINISTRATOR` (implicitly has *all* permissions, and bypasses all channel overwrites)
|
||||
* - `CREATE_INSTANT_INVITE` (create invitations to the guild)
|
||||
* - `KICK_MEMBERS`
|
||||
* - `BAN_MEMBERS`
|
||||
* - `MANAGE_CHANNELS` (edit and reorder channels)
|
||||
* - `MANAGE_GUILD` (edit the guild information, region, etc.)
|
||||
* - `ADD_REACTIONS` (add new reactions to messages)
|
||||
* - `VIEW_AUDIT_LOG`
|
||||
* - `PRIORITY_SPEAKER`
|
||||
* - `STREAM`
|
||||
* - `VIEW_CHANNEL`
|
||||
* - `READ_MESSAGES` **(deprecated)**
|
||||
* - `SEND_MESSAGES`
|
||||
* - `SEND_TTS_MESSAGES`
|
||||
* - `MANAGE_MESSAGES` (delete messages and reactions)
|
||||
* - `EMBED_LINKS` (links posted will have a preview embedded)
|
||||
* - `ATTACH_FILES`
|
||||
* - `READ_MESSAGE_HISTORY` (view messages that were posted prior to opening Discord)
|
||||
* - `MENTION_EVERYONE`
|
||||
* - `USE_EXTERNAL_EMOJIS` (use emojis from different guilds)
|
||||
* - `EXTERNAL_EMOJIS` **(deprecated)**
|
||||
* - `CONNECT` (connect to a voice channel)
|
||||
* - `SPEAK` (speak in a voice channel)
|
||||
* - `MUTE_MEMBERS` (mute members across all voice channels)
|
||||
* - `DEAFEN_MEMBERS` (deafen members across all voice channels)
|
||||
* - `MOVE_MEMBERS` (move members between voice channels)
|
||||
* - `USE_VAD` (use voice activity detection)
|
||||
* - `CHANGE_NICKNAME`
|
||||
* - `MANAGE_NICKNAMES` (change other members' nicknames)
|
||||
* - `MANAGE_ROLES`
|
||||
* - `MANAGE_ROLES_OR_PERMISSIONS` **(deprecated)**
|
||||
* - `MANAGE_WEBHOOKS`
|
||||
* - `MANAGE_EMOJIS`
|
||||
* @type {Object}
|
||||
* @see {@link https://discordapp.com/developers/docs/topics/permissions}
|
||||
*/
|
||||
static FLAGS:{
|
||||
CREATE_INSTANT_INVITE: number,
|
||||
KICK_MEMBERS: number,
|
||||
BAN_MEMBERS: number,
|
||||
ADMINISTRATOR: number,
|
||||
MANAGE_CHANNELS: number,
|
||||
MANAGE_GUILD: number,
|
||||
ADD_REACTIONS: number,
|
||||
VIEW_AUDIT_LOG: number,
|
||||
PRIORITY_SPEAKER: number,
|
||||
STREAM: number,
|
||||
|
||||
VIEW_CHANNEL: number,
|
||||
READ_MESSAGES: number,
|
||||
SEND_MESSAGES: number,
|
||||
SEND_TTS_MESSAGES: number,
|
||||
MANAGE_MESSAGES: number,
|
||||
EMBED_LINKS: number,
|
||||
ATTACH_FILES: number,
|
||||
READ_MESSAGE_HISTORY: number,
|
||||
MENTION_EVERYONE: number,
|
||||
EXTERNAL_EMOJIS: number,
|
||||
USE_EXTERNAL_EMOJIS: number,
|
||||
|
||||
CONNECT: number,
|
||||
SPEAK: number,
|
||||
MUTE_MEMBERS: number,
|
||||
DEAFEN_MEMBERS: number,
|
||||
MOVE_MEMBERS: number,
|
||||
USE_VAD: number,
|
||||
|
||||
CHANGE_NICKNAME: number,
|
||||
MANAGE_NICKNAMES: number,
|
||||
MANAGE_ROLES: number,
|
||||
MANAGE_ROLES_OR_PERMISSIONS: number,
|
||||
MANAGE_WEBHOOKS: number,
|
||||
MANAGE_EMOJIS: number,
|
||||
} = {
|
||||
CREATE_INSTANT_INVITE: 1 << 0,
|
||||
KICK_MEMBERS: 1 << 1,
|
||||
BAN_MEMBERS: 1 << 2,
|
||||
ADMINISTRATOR: 1 << 3,
|
||||
MANAGE_CHANNELS: 1 << 4,
|
||||
MANAGE_GUILD: 1 << 5,
|
||||
ADD_REACTIONS: 1 << 6,
|
||||
VIEW_AUDIT_LOG: 1 << 7,
|
||||
PRIORITY_SPEAKER: 1 << 8,
|
||||
STREAM: 1 << 9,
|
||||
|
||||
VIEW_CHANNEL: 1 << 10,
|
||||
READ_MESSAGES: 1 << 10,
|
||||
SEND_MESSAGES: 1 << 11,
|
||||
SEND_TTS_MESSAGES: 1 << 12,
|
||||
MANAGE_MESSAGES: 1 << 13,
|
||||
EMBED_LINKS: 1 << 14,
|
||||
ATTACH_FILES: 1 << 15,
|
||||
READ_MESSAGE_HISTORY: 1 << 16,
|
||||
MENTION_EVERYONE: 1 << 17,
|
||||
EXTERNAL_EMOJIS: 1 << 18,
|
||||
USE_EXTERNAL_EMOJIS: 1 << 18,
|
||||
|
||||
CONNECT: 1 << 20,
|
||||
SPEAK: 1 << 21,
|
||||
MUTE_MEMBERS: 1 << 22,
|
||||
DEAFEN_MEMBERS: 1 << 23,
|
||||
MOVE_MEMBERS: 1 << 24,
|
||||
USE_VAD: 1 << 25,
|
||||
|
||||
CHANGE_NICKNAME: 1 << 26,
|
||||
MANAGE_NICKNAMES: 1 << 27,
|
||||
MANAGE_ROLES: 1 << 28,
|
||||
MANAGE_ROLES_OR_PERMISSIONS: 1 << 28,
|
||||
MANAGE_WEBHOOKS: 1 << 29,
|
||||
MANAGE_EMOJIS: 1 << 30,
|
||||
};
|
||||
|
||||
/**
|
||||
* Bitfield representing every permission combined
|
||||
* @type {number}
|
||||
*/
|
||||
static ALL: number = Object.keys(Permissions.FLAGS).reduce(
|
||||
(all, p) => all | Permissions.FLAGS[p],
|
||||
0
|
||||
);
|
||||
|
||||
/**
|
||||
* Bitfield representing the default permissions for users
|
||||
* @type {number}
|
||||
*/
|
||||
static DEFAULT: number = 104324673;
|
||||
}
|
||||
|
||||
Object.defineProperty(Permissions.prototype, "raw", {
|
||||
get: util.deprecate(
|
||||
Object.getOwnPropertyDescriptor(Permissions.prototype, "raw").get,
|
||||
"EvaluatedPermissions#raw is deprecated use Permissions#bitfield instead"
|
||||
),
|
||||
set: util.deprecate(
|
||||
Object.getOwnPropertyDescriptor(Permissions.prototype, "raw").set,
|
||||
"EvaluatedPermissions#raw is deprecated use Permissions#bitfield instead"
|
||||
),
|
||||
});
|
||||
|
||||
/**
|
||||
* Data that can be resolved to give a permission number. This can be:
|
||||
* * A string (see {@link Permissions.FLAGS})
|
||||
* * A permission number
|
||||
* @typedef {string|number|Permissions|PermissionResolvable[]} PermissionResolvable
|
||||
*/
|
||||
export type PermissionResolvable =
|
||||
| keyof typeof Permissions.FLAGS
|
||||
| number
|
||||
| Permissions
|
||||
| PermissionResolvable[];
|
||||
|
@ -1,58 +1,69 @@
|
||||
import {requireModule, DiscordChannel} from "../DiscordToModules"
|
||||
import { Snowflake } from "../.."
|
||||
|
||||
let channelsModuleInternal1:{
|
||||
getChannel(id:Snowflake): DiscordChannel,
|
||||
getChannels(): {
|
||||
[k:string]: DiscordChannel
|
||||
},
|
||||
getDMFromUserId(id:string):Snowflake,
|
||||
getDMUserIds():Snowflake[],
|
||||
getFollowerStatsForChannel(id: Snowflake):{
|
||||
loadingStatus: "succeeded"|"failed",
|
||||
lastFetched: number,
|
||||
channelsFollowing: number,
|
||||
guildMembers: number,
|
||||
guildsFollowing: number,
|
||||
usersSeenEver: number,
|
||||
subscribersGainedSinceLastPost: number,
|
||||
subscribersLostSinceLastPost: number
|
||||
},
|
||||
getGDMsForRecipients(recipients: Snowflake[]):Set<Snowflake>
|
||||
} = requireModule(e => e.default && e.default.getChannels && e.default.getChannel)
|
||||
|
||||
let channelsModuleInternal2:{
|
||||
deleteChannel(id: Snowflake):void
|
||||
}
|
||||
|
||||
let channelsModuleInternal3:{
|
||||
hasUnread(channel_id:Snowflake):boolean,
|
||||
hasCategoryUnread(channel_id:Snowflake):boolean,
|
||||
getUnreadCount(channel_id:Snowflake):number,
|
||||
getMentionCount(channel_id:Snowflake):number,
|
||||
ackMessageId(channel_id:Snowflake):Snowflake,
|
||||
lastMessageId(channel_id:Snowflake):Snowflake,
|
||||
getOldestUnreadMessageId(channel_id:Snowflake):Snowflake,
|
||||
getOldestUnreadTimestamp(channel_id:Snowflake):number,
|
||||
isEstimated(channel_id:Snowflake):boolean,
|
||||
hasUnreadPins(channel_id:Snowflake):boolean,
|
||||
getAllReadStates()
|
||||
} = requireModule(e => e.default && e.default.lastMessageId)
|
||||
|
||||
function set3(){
|
||||
if(channelsModuleInternal3)return
|
||||
channelsModuleInternal3 = requireModule(e => e.default && e.default.lastMessageId)
|
||||
}
|
||||
|
||||
export = {
|
||||
getChannel: channelsModuleInternal1.getChannel,
|
||||
getAllChannels: channelsModuleInternal1.getChannels,
|
||||
get delete():typeof channelsModuleInternal2.deleteChannel{
|
||||
return channelsModuleInternal2 ? channelsModuleInternal2.deleteChannel : (channelsModuleInternal2 = requireModule(e => e.default && e.default.deleteChannel), channelsModuleInternal2.deleteChannel)
|
||||
},
|
||||
|
||||
get lastMessageId(){
|
||||
set3()
|
||||
return channelsModuleInternal3.lastMessageId
|
||||
}
|
||||
import {requireModule, DiscordChannel} from "../DiscordToModules"
|
||||
import { Snowflake } from "../.."
|
||||
|
||||
let channelsModuleInternal1:{
|
||||
getChannel(id:Snowflake): DiscordChannel,
|
||||
getChannels(): {
|
||||
[k:string]: DiscordChannel
|
||||
},
|
||||
getDMFromUserId(id:string):Snowflake,
|
||||
getDMUserIds():Snowflake[],
|
||||
getFollowerStatsForChannel(id: Snowflake):{
|
||||
loadingStatus: "succeeded"|"failed",
|
||||
lastFetched: number,
|
||||
channelsFollowing: number,
|
||||
guildMembers: number,
|
||||
guildsFollowing: number,
|
||||
usersSeenEver: number,
|
||||
subscribersGainedSinceLastPost: number,
|
||||
subscribersLostSinceLastPost: number
|
||||
},
|
||||
getGDMsForRecipients(recipients: Snowflake[]):Set<Snowflake>
|
||||
} = requireModule(e => e.default && e.default.getChannels && e.default.getChannel)
|
||||
|
||||
let channelsModuleInternal2:{
|
||||
deleteChannel(id: Snowflake):void
|
||||
}
|
||||
|
||||
let channelsModuleInternal4:{
|
||||
createChannel(guildId:Snowflake, type:string, name:string,
|
||||
permissionOverwrites: {
|
||||
id: Snowflake,
|
||||
type: "role"|"member",
|
||||
allow: number,
|
||||
deny: number
|
||||
}[], bitrate:number, userLimit:number, parentId:Snowflake, skuId:Snowflake, branchId:Snowflake):void
|
||||
} = requireModule(e => e.default && e.default.createChannel)
|
||||
|
||||
let channelsModuleInternal3:{
|
||||
hasUnread(channel_id:Snowflake):boolean,
|
||||
hasCategoryUnread(channel_id:Snowflake):boolean,
|
||||
getUnreadCount(channel_id:Snowflake):number,
|
||||
getMentionCount(channel_id:Snowflake):number,
|
||||
ackMessageId(channel_id:Snowflake):Snowflake,
|
||||
lastMessageId(channel_id:Snowflake):Snowflake,
|
||||
getOldestUnreadMessageId(channel_id:Snowflake):Snowflake,
|
||||
getOldestUnreadTimestamp(channel_id:Snowflake):number,
|
||||
isEstimated(channel_id:Snowflake):boolean,
|
||||
hasUnreadPins(channel_id:Snowflake):boolean,
|
||||
getAllReadStates()
|
||||
} = requireModule(e => e.default && e.default.lastMessageId)
|
||||
|
||||
function set3(){
|
||||
if(channelsModuleInternal3)return
|
||||
channelsModuleInternal3 = requireModule(e => e.default && e.default.lastMessageId)
|
||||
}
|
||||
|
||||
export = {
|
||||
getChannel: channelsModuleInternal1.getChannel,
|
||||
getAllChannels: channelsModuleInternal1.getChannels,
|
||||
get delete():typeof channelsModuleInternal2.deleteChannel{
|
||||
return channelsModuleInternal2 ? channelsModuleInternal2.deleteChannel : (channelsModuleInternal2 = requireModule(e => e.default && e.default.deleteChannel), channelsModuleInternal2.deleteChannel)
|
||||
},
|
||||
|
||||
get lastMessageId(){
|
||||
set3()
|
||||
return channelsModuleInternal3.lastMessageId
|
||||
},
|
||||
createGuildChannel: channelsModuleInternal4.createChannel
|
||||
}
|
@ -1,150 +1,149 @@
|
||||
import { DiscordChannel, DiscordGuild, DiscordGuildMember, DiscordRole, DiscordMessage, DiscordUser } from "./DiscordToModules"
|
||||
import { Channel, Snowflake } from "..";
|
||||
import BaseChannel from "../structures/BaseChannel";
|
||||
import Guild from "../structures/Guild";
|
||||
import TextChannel from "../structures/TextChannel";
|
||||
import GuildMember from "../structures/GuildMember";
|
||||
import Role from "../structures/Role";
|
||||
import User from "../structures/User";
|
||||
import Message from "../structures/Message";
|
||||
import { ChannelTypes } from "./Constants";
|
||||
import CategoryChannel from "../structures/CategoryChannel";
|
||||
import Collection from "@discordjs/collection";
|
||||
import Permissions, { PermissionResolvable } from "./Permissions";
|
||||
|
||||
export function createChannel(channel:DiscordChannel):Channel{
|
||||
let constructor = channels[channel.type] || BaseChannel
|
||||
return new constructor(channel)
|
||||
}
|
||||
|
||||
const channels:(new(channel:DiscordChannel) => Channel)[] = [
|
||||
TextChannel
|
||||
]
|
||||
|
||||
export function createGuild(guild:DiscordGuild):Guild{
|
||||
return new Guild(guild)
|
||||
}
|
||||
|
||||
export function createGuildMember(member:DiscordGuildMember):GuildMember{
|
||||
return new GuildMember(member)
|
||||
}
|
||||
|
||||
export function createRole(role:DiscordRole):Role{
|
||||
return new Role(role)
|
||||
}
|
||||
|
||||
export function createMessage(message:DiscordMessage):Message{
|
||||
return new Message(message)
|
||||
}
|
||||
|
||||
export function createUser(user:DiscordUser):User{
|
||||
return new User(user)
|
||||
}
|
||||
|
||||
export function applyMixins(derivedCtor: any, baseCtors: any[]) {
|
||||
baseCtors.forEach(baseCtor => {
|
||||
Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
|
||||
if (name !== 'constructor') {
|
||||
derivedCtor.prototype[name] = baseCtor.prototype[name];
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms a snowflake from a decimal string to a bit string.
|
||||
* @param {string} num Snowflake to be transformed
|
||||
* @returns {string}
|
||||
* @private
|
||||
*/
|
||||
export function idToBinary(num:string):string{
|
||||
let bin = '';
|
||||
let high = parseInt(num.slice(0, -10)) || 0;
|
||||
let low = parseInt(num.slice(-10));
|
||||
while (low > 0 || high > 0) {
|
||||
bin = String(low & 1) + bin;
|
||||
low = Math.floor(low / 2);
|
||||
if (high > 0) {
|
||||
low += 5000000000 * (high % 2);
|
||||
high = Math.floor(high / 2);
|
||||
}
|
||||
}
|
||||
return bin;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms a snowflake from a bit string to a decimal string.
|
||||
* @param {string} num Bit string to be transformed
|
||||
* @returns {string}
|
||||
* @private
|
||||
*/
|
||||
export function binaryToID(num:string):string {
|
||||
let dec = '';
|
||||
|
||||
while (num.length > 50) {
|
||||
const high = parseInt(num.slice(0, -32), 2);
|
||||
const low = parseInt((high % 10).toString(2) + num.slice(-32), 2);
|
||||
|
||||
dec = (low % 10).toString() + dec;
|
||||
num = Math.floor(high / 10).toString(2) +
|
||||
Math.floor(low / 10)
|
||||
.toString(2)
|
||||
.padStart(32, '0');
|
||||
}
|
||||
|
||||
let num2 = parseInt(num, 2);
|
||||
while (num2 > 0) {
|
||||
dec = (num2 % 10).toString() + dec;
|
||||
num2 = Math.floor(num2 / 10);
|
||||
}
|
||||
|
||||
return dec;
|
||||
}
|
||||
|
||||
|
||||
|
||||
export type UserResolvable = User | Snowflake | Message | Guild | GuildMember
|
||||
|
||||
export function resolveUserID(user:UserResolvable){
|
||||
if(typeof user === "string")return user // ID
|
||||
if(user instanceof User)return user.id // User
|
||||
if(user instanceof Message)return user.author.id // Message Author
|
||||
if(user instanceof Guild)return user.ownerID // Guild
|
||||
if(user instanceof GuildMember)return user.id // GuildMember
|
||||
return null
|
||||
}
|
||||
|
||||
export type ChannelData = {
|
||||
type?: ChannelTypes,
|
||||
name?: string,
|
||||
position?: number,
|
||||
topic?: string,
|
||||
nsfw?: boolean,
|
||||
bitrate?: number,
|
||||
userLimit?: number,
|
||||
parent?: CategoryChannel|Snowflake,
|
||||
permissionOverwrites?: ChannelCreationOverwrites[] | Collection<Snowflake, PermissionOverwrites>,
|
||||
rateLimitPerUser?: number
|
||||
}
|
||||
|
||||
export type ChannelCreationOverwrites = {
|
||||
allow?: PermissionResolvable,
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
allowed?: PermissionResolvable,
|
||||
deny?: PermissionResolvable,
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
denied?: PermissionResolvable,
|
||||
id?: GuildMemberResolvable | RoleResolvable
|
||||
}
|
||||
|
||||
export type PermissionOverwrites = keyof typeof Permissions.FLAGS | number | Permissions | PermissionResolvable[]
|
||||
|
||||
export {BitFieldResolvable} from "./BitField"
|
||||
|
||||
export type GuildMemberResolvable = GuildMember | User
|
||||
|
||||
import { DiscordChannel, DiscordGuild, DiscordGuildMember, DiscordRole, DiscordMessage, DiscordUser } from "./DiscordToModules"
|
||||
import { Channel, Snowflake } from "..";
|
||||
import BaseChannel from "../structures/BaseChannel";
|
||||
import Guild from "../structures/Guild";
|
||||
import TextChannel from "../structures/TextChannel";
|
||||
import GuildMember from "../structures/GuildMember";
|
||||
import Role from "../structures/Role";
|
||||
import User from "../structures/User";
|
||||
import Message from "../structures/Message";
|
||||
import { ChannelTypes } from "./Constants";
|
||||
import CategoryChannel from "../structures/CategoryChannel";
|
||||
import Collection from "@discordjs/collection";
|
||||
import Permissions, { PermissionResolvable } from "./Permissions";
|
||||
import PermissionOverwrites from "../structures/PermissionOverwrites";
|
||||
|
||||
export function createChannel(channel:DiscordChannel):Channel{
|
||||
let constructor = channels[channel.type] || BaseChannel
|
||||
return new constructor(channel)
|
||||
}
|
||||
|
||||
const channels:(new(channel:DiscordChannel) => Channel)[] = [
|
||||
TextChannel
|
||||
]
|
||||
|
||||
export function createGuild(guild:DiscordGuild):Guild{
|
||||
return new Guild(guild)
|
||||
}
|
||||
|
||||
export function createGuildMember(member:DiscordGuildMember):GuildMember{
|
||||
return new GuildMember(member)
|
||||
}
|
||||
|
||||
export function createRole(role:DiscordRole):Role{
|
||||
return new Role(role)
|
||||
}
|
||||
|
||||
export function createMessage(message:DiscordMessage):Message{
|
||||
return new Message(message)
|
||||
}
|
||||
|
||||
export function createUser(user:DiscordUser):User{
|
||||
return new User(user)
|
||||
}
|
||||
|
||||
export function applyMixins(derivedCtor: any, baseCtors: any[]) {
|
||||
baseCtors.forEach(baseCtor => {
|
||||
Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
|
||||
if (name !== 'constructor') {
|
||||
derivedCtor.prototype[name] = baseCtor.prototype[name];
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms a snowflake from a decimal string to a bit string.
|
||||
* @param {string} num Snowflake to be transformed
|
||||
* @returns {string}
|
||||
* @private
|
||||
*/
|
||||
export function idToBinary(num:string):string{
|
||||
let bin = '';
|
||||
let high = parseInt(num.slice(0, -10)) || 0;
|
||||
let low = parseInt(num.slice(-10));
|
||||
while (low > 0 || high > 0) {
|
||||
bin = String(low & 1) + bin;
|
||||
low = Math.floor(low / 2);
|
||||
if (high > 0) {
|
||||
low += 5000000000 * (high % 2);
|
||||
high = Math.floor(high / 2);
|
||||
}
|
||||
}
|
||||
return bin;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms a snowflake from a bit string to a decimal string.
|
||||
* @param {string} num Bit string to be transformed
|
||||
* @returns {string}
|
||||
* @private
|
||||
*/
|
||||
export function binaryToID(num:string):string {
|
||||
let dec = '';
|
||||
|
||||
while (num.length > 50) {
|
||||
const high = parseInt(num.slice(0, -32), 2);
|
||||
const low = parseInt((high % 10).toString(2) + num.slice(-32), 2);
|
||||
|
||||
dec = (low % 10).toString() + dec;
|
||||
num = Math.floor(high / 10).toString(2) +
|
||||
Math.floor(low / 10)
|
||||
.toString(2)
|
||||
.padStart(32, '0');
|
||||
}
|
||||
|
||||
let num2 = parseInt(num, 2);
|
||||
while (num2 > 0) {
|
||||
dec = (num2 % 10).toString() + dec;
|
||||
num2 = Math.floor(num2 / 10);
|
||||
}
|
||||
|
||||
return dec;
|
||||
}
|
||||
|
||||
|
||||
|
||||
export type UserResolvable = User | Snowflake | Message | Guild | GuildMember
|
||||
|
||||
export function resolveUserID(user:UserResolvable){
|
||||
if(typeof user === "string")return user // ID
|
||||
if(user instanceof User)return user.id // User
|
||||
if(user instanceof Message)return user.author.id // Message Author
|
||||
if(user instanceof Guild)return user.ownerID // Guild
|
||||
if(user instanceof GuildMember)return user.id // GuildMember
|
||||
return null
|
||||
}
|
||||
|
||||
export type ChannelData = {
|
||||
type?: ChannelTypes,
|
||||
name?: string,
|
||||
position?: number,
|
||||
topic?: string,
|
||||
nsfw?: boolean,
|
||||
bitrate?: number,
|
||||
userLimit?: number,
|
||||
parent?: CategoryChannel|Snowflake,
|
||||
permissionOverwrites?: ChannelCreationOverwrites[] | Collection<Snowflake, PermissionOverwrites>,
|
||||
rateLimitPerUser?: number
|
||||
}
|
||||
|
||||
export type ChannelCreationOverwrites = {
|
||||
allow?: PermissionResolvable,
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
allowed?: PermissionResolvable,
|
||||
deny?: PermissionResolvable,
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
denied?: PermissionResolvable,
|
||||
id?: GuildMemberResolvable | RoleResolvable
|
||||
}
|
||||
|
||||
export {BitFieldResolvable} from "./BitField"
|
||||
|
||||
export type GuildMemberResolvable = GuildMember | User
|
||||
|
||||
export type RoleResolvable = Role | Snowflake
|
File diff suppressed because one or more lines are too long
2
LightcordApi/js/main.min.js
vendored
2
LightcordApi/js/main.min.js
vendored
File diff suppressed because one or more lines are too long
@ -107,4 +107,8 @@ export default new class Utils {
|
||||
})}\n}`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export class LightcordApiError extends Error {
|
||||
name:string = "LightcordApiError"
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user