Move UserSettings and KnownModules to their own files
This commit is contained in:
parent
7ba9559b60
commit
1639b1aff8
|
@ -1,335 +0,0 @@
|
|||
/**
|
||||
* BetterDiscord Discord API
|
||||
* Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
|
||||
* All rights reserved.
|
||||
* https://betterdiscord.net
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import { List } from 'structs';
|
||||
import { User, Channel, Guild, Message } from 'discordstructs';
|
||||
import Reflection from './reflection/index';
|
||||
|
||||
export const Modules = {
|
||||
_getModule(name) {
|
||||
const foundModule = Reflection.module.byName(name);
|
||||
if (!foundModule) return null;
|
||||
delete this[name];
|
||||
return this[name] = foundModule;
|
||||
},
|
||||
|
||||
get ChannelSelector() { return this._getModule('ChannelSelector'); },
|
||||
get MessageActions() { return this._getModule('MessageActions'); },
|
||||
get MessageParser() { return this._getModule('MessageParser'); },
|
||||
get MessageStore() { return this._getModule('MessageStore'); },
|
||||
get EmojiUtils() { return this._getModule('EmojiUtils'); },
|
||||
get PermissionUtils() { return this._getModule('Permissions'); },
|
||||
get SortedGuildStore() { return this._getModule('SortedGuildStore'); },
|
||||
get PrivateChannelActions() { return this._getModule('PrivateChannelActions'); },
|
||||
get GuildMemberStore() { return this._getModule('GuildMemberStore'); },
|
||||
get GuildChannelsStore() { return this._getModule('GuildChannelsStore'); },
|
||||
get MemberCountStore() { return this._getModule('MemberCountStore'); },
|
||||
get GuildActions() { return this._getModule('GuildActions'); },
|
||||
get NavigationUtils() { return this._getModule('NavigationUtils'); },
|
||||
get GuildPermissions() { return this._getModule('GuildPermissions'); },
|
||||
get DiscordConstants() { return this._getModule('DiscordConstants'); },
|
||||
get ChannelStore() { return this._getModule('ChannelStore'); },
|
||||
get GuildStore() { return this._getModule('GuildStore'); },
|
||||
get SelectedGuildStore() { return this._getModule('SelectedGuildStore'); },
|
||||
get SelectedChannelStore() { return this._getModule('SelectedChannelStore'); },
|
||||
get UserStore() { return this._getModule('UserStore'); },
|
||||
get RelationshipStore() { return this._getModule('RelationshipStore'); },
|
||||
get RelationshipManager() { return this._getModule('RelationshipManager'); },
|
||||
get ChangeNicknameModal() { return this._getModule('ChangeNicknameModal'); },
|
||||
get UserSettingsStore() { return this._getModule('UserSettingsStore'); },
|
||||
get UserSettingsWindow() { return this._getModule('UserSettingsWindow'); },
|
||||
get UserStatusStore() { return this._getModule('UserStatusStore'); },
|
||||
get ChannelSettingsWindow() { return this._getModule('ChannelSettingsWindow'); },
|
||||
get GuildSettingsWindow() { return this._getModule('GuildSettingsWindow'); },
|
||||
get CreateChannelModal() { return this._getModule('CreateChannelModal'); },
|
||||
get PruneMembersModal() { return this._getModule('PruneMembersModal'); },
|
||||
get NotificationSettingsModal() { return this._getModule('NotificationSettingsModal'); },
|
||||
get PrivacySettingsModal() { return this._getModule('PrivacySettingsModal'); },
|
||||
get UserProfileModal() { return this._getModule('UserProfileModal'); },
|
||||
get APIModule() { return this._getModule('APIModule'); },
|
||||
get UserNoteStore() { return this._getModule('UserNoteStore'); },
|
||||
|
||||
get DiscordPermissions() { return this.DiscordConstants.Permissions; }
|
||||
};
|
||||
|
||||
export default class DiscordApi {
|
||||
|
||||
static get modules() { return Modules }
|
||||
static get User() { return User }
|
||||
static get Channel() { return Channel }
|
||||
static get Guild() { return Guild }
|
||||
static get Message() { return Message }
|
||||
|
||||
/**
|
||||
* A list of loaded guilds.
|
||||
* @type {List<Guild>}
|
||||
*/
|
||||
static get guilds() {
|
||||
const guilds = Modules.GuildStore.getGuilds();
|
||||
return List.from(Object.entries(guilds), ([i, g]) => Guild.from(g));
|
||||
}
|
||||
|
||||
/**
|
||||
* A list of loaded channels.
|
||||
* @type {List<Channel>}
|
||||
*/
|
||||
static get channels() {
|
||||
const channels = Modules.ChannelStore.getChannels();
|
||||
return List.from(Object.entries(channels), ([i, c]) => Channel.from(c));
|
||||
}
|
||||
|
||||
/**
|
||||
* A list of loaded users.
|
||||
* @type {List<User>}
|
||||
*/
|
||||
static get users() {
|
||||
const users = Modules.UserStore.getUsers();
|
||||
return List.from(Object.entries(users), ([i, u]) => User.from(u));
|
||||
}
|
||||
|
||||
/**
|
||||
* An object mapping guild IDs to their member counts.
|
||||
* @type {Object}
|
||||
*/
|
||||
static get memberCounts() {
|
||||
return Modules.MemberCountStore.getMemberCounts();
|
||||
}
|
||||
|
||||
/**
|
||||
* A list of guilds in the order they appear in the server list.
|
||||
* @type {List<Guild>}
|
||||
*/
|
||||
static get sortedGuilds() {
|
||||
const guilds = Modules.SortedGuildStore.getSortedGuilds();
|
||||
return List.from(guilds, g => Guild.from(g));
|
||||
}
|
||||
|
||||
/**
|
||||
* An array of guild IDs in the order they appear in the server list.
|
||||
* @type {Number[]}
|
||||
*/
|
||||
static get guildPositions() {
|
||||
return Modules.SortedGuildStore.guildPositions;
|
||||
}
|
||||
|
||||
/**
|
||||
* The currently selected guild.
|
||||
* @type {Guild}
|
||||
*/
|
||||
static get currentGuild() {
|
||||
const guild = Modules.GuildStore.getGuild(Modules.SelectedGuildStore.getGuildId());
|
||||
if (guild) return Guild.from(guild);
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* The currently selected channel.
|
||||
* @type {Channel}
|
||||
*/
|
||||
static get currentChannel() {
|
||||
const channel = Modules.ChannelStore.getChannel(Modules.SelectedChannelStore.getChannelId());
|
||||
if (channel) return Channel.from(channel);
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* The current user.
|
||||
* @type {User}
|
||||
*/
|
||||
static get currentUser() {
|
||||
const user = Modules.UserStore.getCurrentUser();
|
||||
if (user) return User.from(user);
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* A list of the current user's friends.
|
||||
* @type {List<User>}
|
||||
*/
|
||||
static get friends() {
|
||||
const friends = Modules.RelationshipStore.getFriendIDs();
|
||||
return List.from(friends, id => User.fromId(id));
|
||||
}
|
||||
/**
|
||||
* User settings
|
||||
*/
|
||||
static get UserSettings() {
|
||||
return UserSettings;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export class UserSettings {
|
||||
/**
|
||||
* Opens Discord's settings UI.
|
||||
*/
|
||||
static open(section = 'ACCOUNT') {
|
||||
Modules.UserSettingsWindow.setSection(section);
|
||||
Modules.UserSettingsWindow.open();
|
||||
}
|
||||
|
||||
/**
|
||||
* The user's current status. Either "online", "idle", "dnd" or "invisible".
|
||||
* @type {String}
|
||||
*/
|
||||
static get status() { return Modules.UserSettingsStore.status }
|
||||
|
||||
/**
|
||||
* The user's selected explicit content filter level.
|
||||
* 0 == off, 1 == everyone except friends, 2 == everyone
|
||||
* Configurable in the privacy and safety panel.
|
||||
* @type {Number}
|
||||
*/
|
||||
static get explicitContentFilter() { return Modules.UserSettingsStore.explicitContentFilter }
|
||||
|
||||
/**
|
||||
* Whether to disallow direct messages from server members by default.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
static get defaultGuildsRestricted() { return Modules.UserSettingsStore.defaultGuildsRestricted }
|
||||
|
||||
/**
|
||||
* An array of guilds to disallow direct messages from their members.
|
||||
* This is bypassed if the member is has another mutual guild with this disabled, or the member is friends with the current user.
|
||||
* Configurable in each server's privacy settings.
|
||||
* @type {Guild[]}
|
||||
*/
|
||||
static get restrictedGuildIds() { return Modules.UserSettingsStore.restrictedGuilds }
|
||||
|
||||
static get restrictedGuilds() {
|
||||
return List.from(this.restrictedGuildIds, id => Guild.fromId(id) || id);
|
||||
}
|
||||
|
||||
/**
|
||||
* An array of flags specifying who should be allowed to add the current user as a friend.
|
||||
* If everyone is checked, this will only have one item, "all". Otherwise it has either "mutual_friends", "mutual_guilds", both or neither.
|
||||
* Configurable in the privacy and safety panel.
|
||||
* @type {Array}
|
||||
*/
|
||||
static get friendSourceFlags() { return Object.keys(Modules.UserSettingsStore.friendSourceFlags) }
|
||||
static get friendSourceEveryone() { return this.friendSourceFlags.include('all') }
|
||||
static get friendSourceMutual_friends() { return this.friendSourceFlags.include('all') || this.friendSourceFlags.include('mutual_friends') }
|
||||
static get friendSourceMutual_guilds() { return this.friendSourceFlags.include('all') || this.friendSourceFlags.include('mutual_guilds') }
|
||||
static get friendSourceAnyone() { return this.friendSourceFlags.length > 0 }
|
||||
|
||||
/**
|
||||
* Whether to automatically add accounts from other platforms running on the user's computer.
|
||||
* Configurable in the connections panel.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
static get detectPlatformAccounts() { return Modules.UserSettingsStore.detectPlatformAccounts }
|
||||
|
||||
/**
|
||||
* The number of seconds Discord will wait for activity before sending mobile push notifications.
|
||||
* Configurable in the notifications panel.
|
||||
* @type {Number}
|
||||
*/
|
||||
static get afkTimeout() { return Modules.UserSettingsStore.afkTimeout }
|
||||
|
||||
/**
|
||||
* Whether to display the currently running game as a status message.
|
||||
* Configurable in the games panel.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
static get showCurrentGame() { return Modules.UserSettingsStore.showCurrentGame }
|
||||
|
||||
/**
|
||||
* Whether to show images uploaded directly to Discord.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
static get inlineAttachmentMedia() { return Modules.UserSettingsStore.inlineAttachmentMedia }
|
||||
|
||||
/**
|
||||
* Whether to show images linked in Discord.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
static get inlineEmbedMedia() { return Modules.UserSettingsStore.inlineEmbedMedia }
|
||||
|
||||
/**
|
||||
* Whether to automatically play GIFs when the Discord window is active without having to hover the mouse over the image.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
static get autoplayGifs() { return Modules.UserSettingsStore.gifAutoPlay }
|
||||
|
||||
/**
|
||||
* Whether to show content from HTTP[s] links as embeds.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
static get showEmbeds() { return Modules.UserSettingsStore.renderEmbeds }
|
||||
|
||||
/**
|
||||
* Whether to show a message's reactions.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
static get showReactions() { return Modules.UserSettingsStore.renderReactions }
|
||||
|
||||
/**
|
||||
* Whether to play animated emoji.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
static get animateEmoji() { return Modules.UserSettingsStore.animateEmoji }
|
||||
|
||||
/**
|
||||
* Whether to convert ASCII emoticons to emoji.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
static get convertEmoticons() { return Modules.UserSettingsStore.convertEmoticons }
|
||||
|
||||
/**
|
||||
* Whether to allow playing text-to-speech messages.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
static get allowTts() { return Modules.UserSettingsStore.enableTTSCommand }
|
||||
|
||||
/**
|
||||
* The user's selected theme. Either "dark" or "light".
|
||||
* Configurable in the appearance panel.
|
||||
* @type {String}
|
||||
*/
|
||||
static get theme() { return Modules.UserSettingsStore.theme }
|
||||
|
||||
/**
|
||||
* Whether the user has enabled compact mode.
|
||||
* `true` if compact mode is enabled, `false` if cozy mode is enabled.
|
||||
* Configurable in the appearance panel.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
static get displayCompact() { return Modules.UserSettingsStore.messageDisplayCompact }
|
||||
|
||||
/**
|
||||
* Whether the user has enabled developer mode.
|
||||
* Currently only adds a "Copy ID" option to the context menu on users, guilds and channels.
|
||||
* Configurable in the appearance panel.
|
||||
* @type {Boolean}
|
||||
*/
|
||||
static get developerMode() { return Modules.UserSettingsStore.developerMode }
|
||||
|
||||
/**
|
||||
* The user's selected language code.
|
||||
* Configurable in the language panel.
|
||||
* @type {String}
|
||||
*/
|
||||
static get locale() { return Modules.UserSettingsStore.locale }
|
||||
|
||||
/**
|
||||
* The user's timezone offset in hours.
|
||||
* This is not configurable.
|
||||
* @type {Number}
|
||||
*/
|
||||
static get timezoneOffset() { return Modules.UserSettingsStore.timezoneOffset }
|
||||
}
|
|
@ -0,0 +1,184 @@
|
|||
/**
|
||||
* BetterDiscord Discord API
|
||||
* Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
|
||||
* All rights reserved.
|
||||
* https://betterdiscord.net
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import { List } from 'structs';
|
||||
import { User, Channel, Guild, Message } from 'discordstructs';
|
||||
import Reflection from '../reflection';
|
||||
import UserSettings from './usersettings';
|
||||
|
||||
export { UserSettings };
|
||||
|
||||
export const Modules = {
|
||||
_getModule(name) {
|
||||
const foundModule = Reflection.module.byName(name);
|
||||
if (!foundModule) return null;
|
||||
delete this[name];
|
||||
return this[name] = foundModule;
|
||||
},
|
||||
|
||||
get ChannelSelector() { return this._getModule('ChannelSelector'); },
|
||||
get MessageActions() { return this._getModule('MessageActions'); },
|
||||
get MessageParser() { return this._getModule('MessageParser'); },
|
||||
get MessageStore() { return this._getModule('MessageStore'); },
|
||||
get EmojiUtils() { return this._getModule('EmojiUtils'); },
|
||||
get PermissionUtils() { return this._getModule('Permissions'); },
|
||||
get SortedGuildStore() { return this._getModule('SortedGuildStore'); },
|
||||
get PrivateChannelActions() { return this._getModule('PrivateChannelActions'); },
|
||||
get GuildMemberStore() { return this._getModule('GuildMemberStore'); },
|
||||
get GuildChannelsStore() { return this._getModule('GuildChannelsStore'); },
|
||||
get MemberCountStore() { return this._getModule('MemberCountStore'); },
|
||||
get GuildActions() { return this._getModule('GuildActions'); },
|
||||
get NavigationUtils() { return this._getModule('NavigationUtils'); },
|
||||
get GuildPermissions() { return this._getModule('GuildPermissions'); },
|
||||
get DiscordConstants() { return this._getModule('DiscordConstants'); },
|
||||
get ChannelStore() { return this._getModule('ChannelStore'); },
|
||||
get GuildStore() { return this._getModule('GuildStore'); },
|
||||
get SelectedGuildStore() { return this._getModule('SelectedGuildStore'); },
|
||||
get SelectedChannelStore() { return this._getModule('SelectedChannelStore'); },
|
||||
get UserStore() { return this._getModule('UserStore'); },
|
||||
get RelationshipStore() { return this._getModule('RelationshipStore'); },
|
||||
get RelationshipManager() { return this._getModule('RelationshipManager'); },
|
||||
get ChangeNicknameModal() { return this._getModule('ChangeNicknameModal'); },
|
||||
get UserInfoStore() { return this._getModule('UserInfoStore'); },
|
||||
get UserSettingsStore() { return this._getModule('UserSettingsStore'); },
|
||||
get UserSettingsUpdater() { return this._getModule('UserSettingsUpdater'); },
|
||||
get AccessibilityStore() { return this._getModule('AccessibilityStore'); },
|
||||
get AccessibilitySettingsUpdater() { return this._getModule('AccessibilitySettingsUpdater'); },
|
||||
get UserSettingsWindow() { return this._getModule('UserSettingsWindow'); },
|
||||
get UserStatusStore() { return this._getModule('UserStatusStore'); },
|
||||
get ChannelSettingsWindow() { return this._getModule('ChannelSettingsWindow'); },
|
||||
get GuildSettingsWindow() { return this._getModule('GuildSettingsWindow'); },
|
||||
get CreateChannelModal() { return this._getModule('CreateChannelModal'); },
|
||||
get PruneMembersModal() { return this._getModule('PruneMembersModal'); },
|
||||
get NotificationSettingsModal() { return this._getModule('NotificationSettingsModal'); },
|
||||
get PrivacySettingsModal() { return this._getModule('PrivacySettingsModal'); },
|
||||
get UserProfileModal() { return this._getModule('UserProfileModal'); },
|
||||
get APIModule() { return this._getModule('APIModule'); },
|
||||
get UserNoteStore() { return this._getModule('UserNoteStore'); },
|
||||
get KeyboardCombosModal() { return this._getModule('KeyboardCombosModal'); },
|
||||
|
||||
get DiscordPermissions() { return this.DiscordConstants.Permissions; }
|
||||
};
|
||||
|
||||
export default class DiscordApi {
|
||||
|
||||
static get modules() { return Modules }
|
||||
static get User() { return User }
|
||||
static get Channel() { return Channel }
|
||||
static get Guild() { return Guild }
|
||||
static get Message() { return Message }
|
||||
|
||||
/**
|
||||
* A list of loaded guilds.
|
||||
* @type {List<Guild>}
|
||||
*/
|
||||
static get guilds() {
|
||||
const guilds = Modules.GuildStore.getGuilds();
|
||||
return List.from(Object.values(guilds), g => Guild.from(g));
|
||||
}
|
||||
|
||||
/**
|
||||
* A list of loaded channels.
|
||||
* @type {List<Channel>}
|
||||
*/
|
||||
static get channels() {
|
||||
const channels = Modules.ChannelStore.getChannels();
|
||||
return List.from(Object.values(channels), c => Channel.from(c));
|
||||
}
|
||||
|
||||
/**
|
||||
* A list of loaded users.
|
||||
* @type {List<User>}
|
||||
*/
|
||||
static get users() {
|
||||
const users = Modules.UserStore.getUsers();
|
||||
return List.from(Object.values(users), u => User.from(u));
|
||||
}
|
||||
|
||||
/**
|
||||
* An object mapping guild IDs to their member counts.
|
||||
* @type {Object}
|
||||
*/
|
||||
static get memberCounts() {
|
||||
return Modules.MemberCountStore.getMemberCounts();
|
||||
}
|
||||
|
||||
/**
|
||||
* A list of guilds in the order they appear in the server list.
|
||||
* @type {List<Guild>}
|
||||
*/
|
||||
static get sortedGuilds() {
|
||||
const guilds = Modules.SortedGuildStore.getSortedGuilds();
|
||||
return List.from(guilds, g => Guild.from(g));
|
||||
}
|
||||
|
||||
/**
|
||||
* An array of guild IDs in the order they appear in the server list.
|
||||
* @type {Number[]}
|
||||
*/
|
||||
static get guildPositions() {
|
||||
return Modules.SortedGuildStore.guildPositions;
|
||||
}
|
||||
|
||||
/**
|
||||
* The currently selected guild.
|
||||
* @type {Guild}
|
||||
*/
|
||||
static get currentGuild() {
|
||||
const guild = Modules.GuildStore.getGuild(Modules.SelectedGuildStore.getGuildId());
|
||||
return guild ? Guild.from(guild) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* The currently selected channel.
|
||||
* @type {Channel}
|
||||
*/
|
||||
static get currentChannel() {
|
||||
const channel = Modules.ChannelStore.getChannel(Modules.SelectedChannelStore.getChannelId());
|
||||
return channel ? Channel.from(channel) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* The current user.
|
||||
* @type {User}
|
||||
*/
|
||||
static get currentUser() {
|
||||
const user = Modules.UserStore.getCurrentUser();
|
||||
return user ? User.from(user) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* A list of the current user's friends.
|
||||
* @type {List<User>}
|
||||
*/
|
||||
static get friends() {
|
||||
const friends = Modules.RelationshipStore.getFriendIDs();
|
||||
return List.from(friends, id => User.fromId(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether a user is logged in.
|
||||
*/
|
||||
static get authenticated() {
|
||||
return !Modules.UserInfoStore.isGuest();
|
||||
}
|
||||
|
||||
/**
|
||||
* User settings.
|
||||
*/
|
||||
static get UserSettings() {
|
||||
return UserSettings;
|
||||
}
|
||||
|
||||
static showKeyboardCombosModal() {
|
||||
Modules.KeyboardCombosModal.show();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,206 @@
|
|||
/**
|
||||
* BetterDiscord Discord API
|
||||
* Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
|
||||
* All rights reserved.
|
||||
* https://betterdiscord.net
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import DiscordApi, { Modules } from '.';
|
||||
import EventEmitter from 'events';
|
||||
import { Utils } from 'common';
|
||||
import { List } from 'structs';
|
||||
import { User, Channel, Guild, Message } from 'discordstructs';
|
||||
|
||||
export default new class UserSettings {
|
||||
|
||||
/**
|
||||
* Opens Discord's settings UI.
|
||||
*/
|
||||
open(section = 'ACCOUNT') {
|
||||
Modules.UserSettingsWindow.open();
|
||||
Modules.UserSettingsWindow.setSection(section);
|
||||
}
|
||||
|
||||
/**
|
||||
* The user's current status. Either "online", "idle", "dnd" or "invisible".
|
||||
* @type {string}
|
||||
*/
|
||||
get status() { return Modules.UserSettingsStore.status }
|
||||
|
||||
/**
|
||||
* The user's selected explicit content filter level.
|
||||
* 0 == off, 1 == everyone except friends, 2 == everyone
|
||||
* Configurable in the privacy and safety panel.
|
||||
* @type {number}
|
||||
*/
|
||||
get explicitContentFilter() { return Modules.UserSettingsStore.explicitContentFilter }
|
||||
|
||||
/**
|
||||
* Whether to disallow direct messages from server members by default.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get defaultGuildsRestricted() { return Modules.UserSettingsStore.defaultGuildsRestricted }
|
||||
|
||||
/**
|
||||
* An array of guilds to disallow direct messages from their members.
|
||||
* This is bypassed if the member is has another mutual guild with this disabled, or the member is friends with the current user.
|
||||
* Configurable in each server's privacy settings.
|
||||
* @type {Guild[]}
|
||||
*/
|
||||
get restrictedGuilds() {
|
||||
return List.from(this.restrictedGuildIds, id => Guild.fromId(id) || id);
|
||||
}
|
||||
|
||||
get restrictedGuildIds() { return Modules.UserSettingsStore.restrictedGuilds }
|
||||
|
||||
/**
|
||||
* An array of flags specifying who should be allowed to add the current user as a friend.
|
||||
* If everyone is checked, this will only have one item, "all". Otherwise it has either "mutual_friends", "mutual_guilds", both or neither.
|
||||
* Configurable in the privacy and safety panel.
|
||||
* @type {string[]}
|
||||
*/
|
||||
get friendSourceFlags() { return Object.keys(Modules.UserSettingsStore.friendSourceFlags).filter(f => Modules.UserSettingsStore.friendSourceFlags[f]) }
|
||||
get friendSourceEveryone() { return this.friendSourceFlags.includes('all') }
|
||||
get friendSourceMutualFriends() { return this.friendSourceFlags.includes('all') || this.friendSourceFlags.includes('mutual_friends') }
|
||||
get friendSourceMutualGuilds() { return this.friendSourceFlags.includes('all') || this.friendSourceFlags.includes('mutual_guilds') }
|
||||
get friendSourceAnyone() { return this.friendSourceFlags.length > 0 }
|
||||
|
||||
/**
|
||||
* Whether to automatically add accounts from other platforms running on the user's computer.
|
||||
* Configurable in the connections panel.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get detectPlatformAccounts() { return Modules.UserSettingsStore.detectPlatformAccounts }
|
||||
|
||||
/**
|
||||
* The number of seconds Discord will wait for activity before sending mobile push notifications.
|
||||
* Configurable in the notifications panel.
|
||||
* @type {number}
|
||||
*/
|
||||
get afkTimeout() { return Modules.UserSettingsStore.afkTimeout }
|
||||
|
||||
/**
|
||||
* Whether to display the currently running game as a status message.
|
||||
* Configurable in the games panel.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get showCurrentGame() { return Modules.UserSettingsStore.showCurrentGame }
|
||||
|
||||
/**
|
||||
* Whether to show images uploaded directly to Discord.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get inlineAttachmentMedia() { return Modules.UserSettingsStore.inlineAttachmentMedia }
|
||||
|
||||
/**
|
||||
* Whether to show images linked in Discord.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get inlineEmbedMedia() { return Modules.UserSettingsStore.inlineEmbedMedia }
|
||||
|
||||
/**
|
||||
* Whether to automatically play GIFs when the Discord window is active without having to hover the mouse over the image.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get autoplayGifs() { return Modules.UserSettingsStore.gifAutoPlay }
|
||||
|
||||
/**
|
||||
* Whether to show content from HTTP[s] links as embeds.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get showEmbeds() { return Modules.UserSettingsStore.renderEmbeds }
|
||||
|
||||
/**
|
||||
* Whether to show a message's reactions.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get showReactions() { return Modules.UserSettingsStore.renderReactions }
|
||||
|
||||
/**
|
||||
* When to show spoilers.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get showSpoilers() { return Modules.UserSettingsStore.renderSpoilers }
|
||||
|
||||
/**
|
||||
* Whether to play animated emoji.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get animateEmoji() { return Modules.UserSettingsStore.animateEmoji }
|
||||
|
||||
/**
|
||||
* Whether to convert ASCII emoticons to emoji.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get convertEmoticons() { return Modules.UserSettingsStore.convertEmoticons }
|
||||
|
||||
/**
|
||||
* Whether to allow playing text-to-speech messages.
|
||||
* Configurable in the text and images panel.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get allowTts() { return Modules.UserSettingsStore.enableTTSCommand }
|
||||
|
||||
/**
|
||||
* The user's selected theme. Either "dark" or "light".
|
||||
* Configurable in the appearance panel.
|
||||
* @type {string}
|
||||
*/
|
||||
get theme() { return Modules.UserSettingsStore.theme }
|
||||
|
||||
/**
|
||||
* Whether the user has enabled compact mode.
|
||||
* `true` if compact mode is enabled, `false` if cozy mode is enabled.
|
||||
* Configurable in the appearance panel.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get displayCompact() { return Modules.UserSettingsStore.messageDisplayCompact }
|
||||
|
||||
/**
|
||||
* Whether the user has enabled colourblind mode.
|
||||
* Configurable in the appearance panel.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get colourblindMode() { return Modules.AccessibilityStore.colorblindMode }
|
||||
|
||||
/**
|
||||
* Whether the user has enabled the activity tab.
|
||||
* Configurable in the appearance panel.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get showActivityTab() { return !Modules.UserSettingsStore.disableGamesTab }
|
||||
|
||||
/**
|
||||
* Whether the user has enabled developer mode.
|
||||
* Currently only adds a "Copy ID" option to the context menu on users, guilds and channels.
|
||||
* Configurable in the appearance panel.
|
||||
* @type {boolean}
|
||||
*/
|
||||
get developerMode() { return Modules.UserSettingsStore.developerMode }
|
||||
|
||||
/**
|
||||
* The user's selected language code.
|
||||
* Configurable in the language panel.
|
||||
* @type {string}
|
||||
*/
|
||||
get locale() { return Modules.UserSettingsStore.locale }
|
||||
|
||||
/**
|
||||
* The user's timezone offset in hours.
|
||||
* This is not configurable.
|
||||
* @type {number}
|
||||
*/
|
||||
get timezoneOffset() { return Modules.UserSettingsStore.timezoneOffset }
|
||||
|
||||
}
|
|
@ -0,0 +1,189 @@
|
|||
/**
|
||||
* BetterDiscord Reflection Modules
|
||||
* Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
|
||||
* All rights reserved.
|
||||
* https://betterdiscord.net
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import { Filters } from 'common';
|
||||
|
||||
const KnownModules = {
|
||||
|
||||
React: Filters.byProperties(['createElement', 'cloneElement']),
|
||||
ReactDOM: Filters.byProperties(['render', 'findDOMNode']),
|
||||
|
||||
Events: Filters.byPrototypeFields(['setMaxListeners', 'emit']),
|
||||
|
||||
/* Guild Info, Stores, and Utilities */
|
||||
GuildStore: Filters.byProperties(['getGuild']),
|
||||
SortedGuildStore: Filters.byProperties(['getSortedGuilds']),
|
||||
SelectedGuildStore: Filters.byProperties(['getLastSelectedGuildId']),
|
||||
GuildSync: Filters.byProperties(['getSyncedGuilds']),
|
||||
GuildInfo: Filters.byProperties(['getAcronym']),
|
||||
GuildChannelsStore: Filters.byProperties(['getChannels', 'getDefaultChannel']),
|
||||
GuildMemberStore: Filters.byProperties(['getMember']),
|
||||
MemberCountStore: Filters.byProperties(['getMemberCounts']),
|
||||
GuildEmojiStore: Filters.byProperties(['getEmojis']),
|
||||
GuildActions: Filters.byProperties(['markGuildAsRead']),
|
||||
GuildPermissions: Filters.byProperties(['getGuildPermissions']),
|
||||
|
||||
/* Channel Store & Actions */
|
||||
ChannelStore: Filters.byProperties(['getChannels', 'getDMFromUserId']),
|
||||
SelectedChannelStore: Filters.byProperties(['getLastSelectedChannelId']),
|
||||
ChannelActions: Filters.byProperties(['selectChannel']),
|
||||
PrivateChannelActions: Filters.byProperties(['openPrivateChannel']),
|
||||
ChannelSelector: Filters.byProperties(['selectGuild', 'selectChannel']),
|
||||
VoiceChannelActions: Filters.byProperties(['selectVoiceChannel']),
|
||||
|
||||
/* Current User Info, State and Settings */
|
||||
UserInfoStore: Filters.byProperties(['getToken']),
|
||||
UserSettingsStore: Filters.byProperties(['guildPositions']),
|
||||
AccessibilityStore: Filters.byProperties(['colorblindMode']),
|
||||
AccountManager: Filters.byProperties(['register', 'login']),
|
||||
UserSettingsUpdater: Filters.byProperties(['updateRemoteSettings']),
|
||||
AccessibilitySettingsUpdater: Filters.byProperties(['toggleColorblindMode']),
|
||||
OnlineWatcher: Filters.byProperties(['isOnline']),
|
||||
CurrentUserIdle: Filters.byProperties(['getIdleTime']),
|
||||
RelationshipStore: Filters.byProperties(['isBlocked', 'isFriend']),
|
||||
RelationshipManager: Filters.byProperties(['addRelationship']),
|
||||
MentionStore: Filters.byProperties(['getMentions']),
|
||||
|
||||
/* User Stores and Utils */
|
||||
UserStore: Filters.byProperties(['getCurrentUser']),
|
||||
UserStatusStore: Filters.byProperties(['getStatuses']),
|
||||
UserTypingStore: Filters.byProperties(['isTyping']),
|
||||
UserActivityStore: Filters.byProperties(['getActivity']),
|
||||
UserNameResolver: Filters.byProperties(['getName']),
|
||||
UserNoteStore: Filters.byProperties(['getNote']),
|
||||
UserNoteActions: Filters.byProperties(['updateNote']),
|
||||
DraftActions: Filters.byProperties(['changeDraft']),
|
||||
|
||||
/* Emoji Store and Utils */
|
||||
EmojiInfo: Filters.byProperties(['isEmojiDisabled']),
|
||||
EmojiUtils: Filters.byProperties(['getGuildEmoji']),
|
||||
EmojiStore: Filters.byProperties(['getByCategory', 'EMOJI_NAME_RE']),
|
||||
|
||||
/* Invite Store and Utils */
|
||||
InviteStore: Filters.byProperties(['getInvites']),
|
||||
InviteResolver: Filters.byProperties(['findInvite']),
|
||||
InviteActions: Filters.byProperties(['acceptInvite']),
|
||||
|
||||
/* Discord Objects & Utils */
|
||||
DiscordConstants: Filters.byProperties(['Permissions', 'ActivityTypes', 'StatusTypes']),
|
||||
Permissions: Filters.byProperties(['getHighestRole']),
|
||||
ColorConverter: Filters.byProperties(['hex2int']),
|
||||
ColorShader: Filters.byProperties(['darken']),
|
||||
TinyColor: Filters.byPrototypeFields(['toRgb']),
|
||||
ClassResolver: Filters.byProperties(['getClass']),
|
||||
ButtonData: Filters.byProperties(['ButtonSizes']),
|
||||
IconNames: Filters.byProperties(['IconNames']),
|
||||
NavigationUtils: Filters.byProperties(['transitionTo', 'replaceWith', 'getHistory']),
|
||||
|
||||
/* Discord Messages */
|
||||
MessageStore: Filters.byProperties(['getMessages']),
|
||||
MessageActions: Filters.byProperties(['jumpToMessage', '_sendMessage']),
|
||||
MessageQueue: Filters.byProperties(['enqueue']),
|
||||
MessageParser: Filters.byProperties(['createMessage', 'parse', 'unparse']),
|
||||
|
||||
/* In-Game Overlay */
|
||||
OverlayUserPopoutSettings: Filters.byProperties(['openUserPopout']),
|
||||
OverlayUserPopoutInfo: Filters.byProperties(['getOpenedUserPopout']),
|
||||
|
||||
/* Experiments */
|
||||
ExperimentStore: Filters.byProperties(['getExperimentOverrides']),
|
||||
ExperimentsManager: Filters.byProperties(['isDeveloper']),
|
||||
CurrentExperiment: Filters.byProperties(['getExperimentId']),
|
||||
|
||||
/* Images, Avatars and Utils */
|
||||
ImageResolver: Filters.byProperties(['getUserAvatarURL']),
|
||||
ImageUtils: Filters.byProperties(['getSizedImageSrc']),
|
||||
AvatarDefaults: Filters.byProperties(['getUserAvatarURL', 'DEFAULT_AVATARS']),
|
||||
|
||||
/* Drag & Drop */
|
||||
DNDActions: Filters.byProperties(['beginDrag']),
|
||||
DNDSources: Filters.byProperties(['addTarget']),
|
||||
DNDObjects: Filters.byProperties(['DragSource']),
|
||||
|
||||
/* Electron & Other Internals with Utils */
|
||||
ElectronModule: Filters.byProperties(['_getMainWindow']),
|
||||
Dispatcher: Filters.byProperties(['dirtyDispatch']),
|
||||
PathUtils: Filters.byProperties(['hasBasename']),
|
||||
NotificationModule: Filters.byProperties(['showNotification']),
|
||||
RouterModule: Filters.byProperties(['Router']),
|
||||
APIModule: Filters.byProperties(['getAPIBaseURL']),
|
||||
AnalyticEvents: Filters.byProperties(['AnalyticEventConfigs']),
|
||||
KeyGenerator: Filters.byCode(/"binary"/),
|
||||
Buffers: Filters.byProperties(['Buffer', 'kMaxLength']),
|
||||
DeviceStore: Filters.byProperties(['getDevices']),
|
||||
SoftwareInfo: Filters.byProperties(['os']),
|
||||
CurrentContext: Filters.byProperties(['setTagsContext']),
|
||||
|
||||
/* Media Stuff (Audio/Video) */
|
||||
MediaDeviceInfo: Filters.byProperties(['Codecs', 'SUPPORTED_BROWSERS']),
|
||||
MediaInfo: Filters.byProperties(['getOutputVolume']),
|
||||
MediaEngineInfo: Filters.byProperties(['MediaEngineFeatures']),
|
||||
VoiceInfo: Filters.byProperties(['EchoCancellation']),
|
||||
VideoStream: Filters.byProperties(['getVideoStream']),
|
||||
SoundModule: Filters.byProperties(['playSound']),
|
||||
|
||||
/* Window, DOM, HTML */
|
||||
WindowInfo: Filters.byProperties(['isFocused', 'windowSize']),
|
||||
TagInfo: Filters.byProperties(['VALID_TAG_NAMES']),
|
||||
DOMInfo: Filters.byProperties(['canUseDOM']),
|
||||
|
||||
/* Locale/Location and Time */
|
||||
LocaleManager: Filters.byProperties(['setLocale']),
|
||||
Moment: Filters.byProperties(['parseZone']),
|
||||
LocationManager: Filters.byProperties(['createLocation']),
|
||||
Timestamps: Filters.byProperties(['fromTimestamp']),
|
||||
TimeFormatter: Filters.byProperties(['dateFormat']),
|
||||
|
||||
/* Strings and Utils */
|
||||
Strings: Filters.byProperties(['TEXT', 'TEXTAREA_PLACEHOLDER']),
|
||||
StringFormats: Filters.byProperties(['a', 'z']),
|
||||
StringUtils: Filters.byProperties(['toASCII']),
|
||||
|
||||
/* URLs and Utils */
|
||||
URLParser: Filters.byProperties(['Url', 'parse']),
|
||||
ExtraURLs: Filters.byProperties(['getArticleURL']),
|
||||
|
||||
/* Text Processing */
|
||||
hljs: Filters.byProperties(['highlight', 'highlightBlock']),
|
||||
SimpleMarkdown: Filters.byProperties(['parseBlock', 'parseInline', 'defaultOutput']),
|
||||
|
||||
/* DOM/React Components */
|
||||
/* ==================== */
|
||||
LayerManager: Filters.byProperties(['popLayer', 'pushLayer']),
|
||||
UserSettingsWindow: Filters.byProperties(['open', 'updateAccount']),
|
||||
ChannelSettingsWindow: Filters.byProperties(['open', 'updateChannel']),
|
||||
GuildSettingsWindow: Filters.byProperties(['open', 'updateGuild']),
|
||||
KeyboardCombosModal: Filters.byProperties(['show', 'activateRagingDemon']),
|
||||
|
||||
/* Modals */
|
||||
ModalStack: Filters.byProperties(['push', 'update', 'pop', 'popWithKey']),
|
||||
ConfirmModal: Filters.byPrototypeFields(['handleCancel', 'handleSubmit', 'handleMinorConfirm']),
|
||||
UserProfileModal: Filters.byProperties(['fetchMutualFriends', 'setSection']),
|
||||
ChangeNicknameModal: Filters.byProperties(['open', 'changeNickname']),
|
||||
CreateChannelModal: Filters.byProperties(['open', 'createChannel']),
|
||||
PruneMembersModal: Filters.byProperties(['open', 'prune']),
|
||||
NotificationSettingsModal: Filters.byProperties(['open', 'updateNotificationSettings']),
|
||||
PrivacySettingsModal: Filters.byCode(/PRIVACY_SETTINGS_MODAL_OPEN/, m => m.open),
|
||||
CreateInviteModal: Filters.byProperties(['open', 'createInvite']),
|
||||
|
||||
/* Popouts */
|
||||
PopoutStack: Filters.byProperties(['open', 'close', 'closeAll']),
|
||||
PopoutOpener: Filters.byProperties(['openPopout']),
|
||||
EmojiPicker: Filters.byPrototypeFields(['onHoverEmoji', 'selectEmoji']),
|
||||
|
||||
/* Context Menus */
|
||||
ContextMenuActions: Filters.byCode(/CONTEXT_MENU_CLOSE/, c => c.close),
|
||||
ContextMenuItemsGroup: Filters.byCode(/itemGroup/),
|
||||
ContextMenuItem: Filters.byCode(/\.label\b.*\.hint\b.*\.action\b/),
|
||||
|
||||
/* In-Message Links */
|
||||
ExternalLink: Filters.byCode(/\.trusted\b/)
|
||||
|
||||
};
|
|
@ -11,179 +11,6 @@
|
|||
import { Utils, Filters } from 'common';
|
||||
import Events from '../events';
|
||||
|
||||
const KnownModules = {
|
||||
React: Filters.byProperties(['createElement', 'cloneElement']),
|
||||
ReactDOM: Filters.byProperties(['render', 'findDOMNode']),
|
||||
|
||||
Events: Filters.byPrototypeFields(['setMaxListeners', 'emit']),
|
||||
|
||||
/* Guild Info, Stores, and Utilities */
|
||||
GuildStore: Filters.byProperties(['getGuild']),
|
||||
SortedGuildStore: Filters.byProperties(['getSortedGuilds']),
|
||||
SelectedGuildStore: Filters.byProperties(['getLastSelectedGuildId']),
|
||||
GuildSync: Filters.byProperties(['getSyncedGuilds']),
|
||||
GuildInfo: Filters.byProperties(['getAcronym']),
|
||||
GuildChannelsStore: Filters.byProperties(['getChannels', 'getDefaultChannel']),
|
||||
GuildMemberStore: Filters.byProperties(['getMember']),
|
||||
MemberCountStore: Filters.byProperties(['getMemberCounts']),
|
||||
GuildEmojiStore: Filters.byProperties(['getEmojis']),
|
||||
GuildActions: Filters.byProperties(['markGuildAsRead']),
|
||||
GuildPermissions: Filters.byProperties(['getGuildPermissions']),
|
||||
|
||||
/* Channel Store & Actions */
|
||||
ChannelStore: Filters.byProperties(['getChannels', 'getDMFromUserId']),
|
||||
SelectedChannelStore: Filters.byProperties(['getLastSelectedChannelId']),
|
||||
ChannelActions: Filters.byProperties(['selectChannel']),
|
||||
PrivateChannelActions: Filters.byProperties(['openPrivateChannel']),
|
||||
ChannelSelector: Filters.byProperties(['selectGuild', 'selectChannel']),
|
||||
VoiceChannelActions: Filters.byProperties(['selectVoiceChannel']),
|
||||
|
||||
/* Current User Info, State and Settings */
|
||||
UserInfoStore: Filters.byProperties(['getToken']),
|
||||
UserSettingsStore: Filters.byProperties(['guildPositions']),
|
||||
AccountManager: Filters.byProperties(['register', 'login']),
|
||||
UserSettingsUpdater: Filters.byProperties(['updateRemoteSettings']),
|
||||
OnlineWatcher: Filters.byProperties(['isOnline']),
|
||||
CurrentUserIdle: Filters.byProperties(['getIdleTime']),
|
||||
RelationshipStore: Filters.byProperties(['isBlocked', 'isFriend']),
|
||||
RelationshipManager: Filters.byProperties(['addRelationship']),
|
||||
MentionStore: Filters.byProperties(['getMentions']),
|
||||
|
||||
/* User Stores and Utils */
|
||||
UserStore: Filters.byProperties(['getCurrentUser']),
|
||||
UserStatusStore: Filters.byProperties(['getStatuses']),
|
||||
UserTypingStore: Filters.byProperties(['isTyping']),
|
||||
UserActivityStore: Filters.byProperties(['getActivity']),
|
||||
UserNameResolver: Filters.byProperties(['getName']),
|
||||
UserNoteStore: Filters.byProperties(['getNote']),
|
||||
UserNoteActions: Filters.byProperties(['updateNote']),
|
||||
DraftActions: Filters.byProperties(['changeDraft']),
|
||||
|
||||
/* Emoji Store and Utils */
|
||||
EmojiInfo: Filters.byProperties(['isEmojiDisabled']),
|
||||
EmojiUtils: Filters.byProperties(['getGuildEmoji']),
|
||||
EmojiStore: Filters.byProperties(['getByCategory', 'EMOJI_NAME_RE']),
|
||||
|
||||
/* Invite Store and Utils */
|
||||
InviteStore: Filters.byProperties(['getInvites']),
|
||||
InviteResolver: Filters.byProperties(['findInvite']),
|
||||
InviteActions: Filters.byProperties(['acceptInvite']),
|
||||
|
||||
/* Discord Objects & Utils */
|
||||
DiscordConstants: Filters.byProperties(['Permissions', 'ActivityTypes', 'StatusTypes']),
|
||||
Permissions: Filters.byProperties(['getHighestRole']),
|
||||
ColorConverter: Filters.byProperties(['hex2int']),
|
||||
ColorShader: Filters.byProperties(['darken']),
|
||||
TinyColor: Filters.byPrototypeFields(['toRgb']),
|
||||
ClassResolver: Filters.byProperties(['getClass']),
|
||||
ButtonData: Filters.byProperties(['ButtonSizes']),
|
||||
IconNames: Filters.byProperties(['IconNames']),
|
||||
NavigationUtils: Filters.byProperties(['transitionTo', 'replaceWith', 'getHistory']),
|
||||
|
||||
/* Discord Messages */
|
||||
MessageStore: Filters.byProperties(['getMessages']),
|
||||
MessageActions: Filters.byProperties(['jumpToMessage', '_sendMessage']),
|
||||
MessageQueue: Filters.byProperties(['enqueue']),
|
||||
MessageParser: Filters.byProperties(['createMessage', 'parse', 'unparse']),
|
||||
|
||||
/* In-Game Overlay */
|
||||
OverlayUserPopoutSettings: Filters.byProperties(['openUserPopout']),
|
||||
OverlayUserPopoutInfo: Filters.byProperties(['getOpenedUserPopout']),
|
||||
|
||||
/* Experiments */
|
||||
ExperimentStore: Filters.byProperties(['getExperimentOverrides']),
|
||||
ExperimentsManager: Filters.byProperties(['isDeveloper']),
|
||||
CurrentExperiment: Filters.byProperties(['getExperimentId']),
|
||||
|
||||
/* Images, Avatars and Utils */
|
||||
ImageResolver: Filters.byProperties(['getUserAvatarURL']),
|
||||
ImageUtils: Filters.byProperties(['getSizedImageSrc']),
|
||||
AvatarDefaults: Filters.byProperties(['getUserAvatarURL', 'DEFAULT_AVATARS']),
|
||||
|
||||
/* Drag & Drop */
|
||||
DNDActions: Filters.byProperties(['beginDrag']),
|
||||
DNDSources: Filters.byProperties(['addTarget']),
|
||||
DNDObjects: Filters.byProperties(['DragSource']),
|
||||
|
||||
/* Electron & Other Internals with Utils */
|
||||
ElectronModule: Filters.byProperties(['_getMainWindow']),
|
||||
Dispatcher: Filters.byProperties(['dirtyDispatch']),
|
||||
PathUtils: Filters.byProperties(['hasBasename']),
|
||||
NotificationModule: Filters.byProperties(['showNotification']),
|
||||
RouterModule: Filters.byProperties(['Router']),
|
||||
APIModule: Filters.byProperties(['getAPIBaseURL']),
|
||||
AnalyticEvents: Filters.byProperties(['AnalyticEventConfigs']),
|
||||
KeyGenerator: Filters.byCode(/"binary"/),
|
||||
Buffers: Filters.byProperties(['Buffer', 'kMaxLength']),
|
||||
DeviceStore: Filters.byProperties(['getDevices']),
|
||||
SoftwareInfo: Filters.byProperties(['os']),
|
||||
CurrentContext: Filters.byProperties(['setTagsContext']),
|
||||
|
||||
/* Media Stuff (Audio/Video) */
|
||||
MediaDeviceInfo: Filters.byProperties(['Codecs', 'SUPPORTED_BROWSERS']),
|
||||
MediaInfo: Filters.byProperties(['getOutputVolume']),
|
||||
MediaEngineInfo: Filters.byProperties(['MediaEngineFeatures']),
|
||||
VoiceInfo: Filters.byProperties(['EchoCancellation']),
|
||||
VideoStream: Filters.byProperties(['getVideoStream']),
|
||||
SoundModule: Filters.byProperties(['playSound']),
|
||||
|
||||
/* Window, DOM, HTML */
|
||||
WindowInfo: Filters.byProperties(['isFocused', 'windowSize']),
|
||||
TagInfo: Filters.byProperties(['VALID_TAG_NAMES']),
|
||||
DOMInfo: Filters.byProperties(['canUseDOM']),
|
||||
|
||||
/* Locale/Location and Time */
|
||||
LocaleManager: Filters.byProperties(['setLocale']),
|
||||
Moment: Filters.byProperties(['parseZone']),
|
||||
LocationManager: Filters.byProperties(['createLocation']),
|
||||
Timestamps: Filters.byProperties(['fromTimestamp']),
|
||||
TimeFormatter: Filters.byProperties(['dateFormat']),
|
||||
|
||||
/* Strings and Utils */
|
||||
Strings: Filters.byProperties(['TEXT', 'TEXTAREA_PLACEHOLDER']),
|
||||
StringFormats: Filters.byProperties(['a', 'z']),
|
||||
StringUtils: Filters.byProperties(['toASCII']),
|
||||
|
||||
/* URLs and Utils */
|
||||
URLParser: Filters.byProperties(['Url', 'parse']),
|
||||
ExtraURLs: Filters.byProperties(['getArticleURL']),
|
||||
|
||||
/* Text Processing */
|
||||
hljs: Filters.byProperties(['highlight', 'highlightBlock']),
|
||||
SimpleMarkdown: Filters.byProperties(['parseBlock', 'parseInline', 'defaultOutput']),
|
||||
|
||||
/* DOM/React Components */
|
||||
/* ==================== */
|
||||
LayerManager: Filters.byProperties(['popLayer', 'pushLayer']),
|
||||
UserSettingsWindow: Filters.byProperties(['open', 'updateAccount']),
|
||||
ChannelSettingsWindow: Filters.byProperties(['open', 'updateChannel']),
|
||||
GuildSettingsWindow: Filters.byProperties(['open', 'updateGuild']),
|
||||
|
||||
/* Modals */
|
||||
ModalStack: Filters.byProperties(['push', 'update', 'pop', 'popWithKey']),
|
||||
ConfirmModal: Filters.byPrototypeFields(['handleCancel', 'handleSubmit', 'handleMinorConfirm']),
|
||||
UserProfileModal: Filters.byProperties(['fetchMutualFriends', 'setSection']),
|
||||
ChangeNicknameModal: Filters.byProperties(['open', 'changeNickname']),
|
||||
CreateChannelModal: Filters.byProperties(['open', 'createChannel']),
|
||||
PruneMembersModal: Filters.byProperties(['open', 'prune']),
|
||||
NotificationSettingsModal: Filters.byProperties(['open', 'updateNotificationSettings']),
|
||||
PrivacySettingsModal: Filters.byCode(/PRIVACY_SETTINGS_MODAL_OPEN/, m => m.open),
|
||||
CreateInviteModal: Filters.byProperties(['open', 'createInvite']),
|
||||
|
||||
/* Popouts */
|
||||
PopoutStack: Filters.byProperties(['open', 'close', 'closeAll']),
|
||||
PopoutOpener: Filters.byProperties(['openPopout']),
|
||||
EmojiPicker: Filters.byPrototypeFields(['onHoverEmoji', 'selectEmoji']),
|
||||
|
||||
/* Context Menus */
|
||||
ContextMenuActions: Filters.byCode(/CONTEXT_MENU_CLOSE/, c => c.close),
|
||||
ContextMenuItemsGroup: Filters.byCode(/itemGroup/),
|
||||
ContextMenuItem: Filters.byCode(/\.label\b.*\.hint\b.*\.action\b/),
|
||||
|
||||
/* In-Message Links */
|
||||
ExternalLink: Filters.byCode(/\.trusted\b/)
|
||||
};
|
||||
|
||||
class Module {
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue