import BDV2 from "../modules/v2"; import V2C_SettingsTitle from "./settingsTitle"; import V2C_SettingsGroup from "./settingsGroup"; import dataStore from "../modules/dataStore"; import { defaultRPC, settingsRPC } from "../0globals"; import CustomRichPresence from "../modules/CustomRichPresence" import Select from "./select"; import timestampRender from "./timestampRender" import { remote } from "electron"; /** * @type {typeof import("react")} */ const React = BDV2.React; export default class V2C_PresenceSettings extends React.Component { constructor(props) { super(props); this.state = { data: dataStore.getSettingGroup("rpc") || defaultRPC, assets: [] } this.preview = null this.isfetching = false if(this.state.data.application_id){ this.fetchAssets() } } /** * * @param {InputText} setting */ onChange(setting, value){ let defaultSetting = RPCProps.find(e => e.id === setting.props.id) this.setState({ data: Object.assign(settingsRPC, this.state.data, { [defaultSetting.id]: !!value ? value : null }), assets: this.state.assets }) if(setting.props.id === "application_id"){ this.fetchAssets() } dataStore.setSettingGroup("rpc", settingsRPC); this.preview.forceUpdate() CustomRichPresence.set(settingsRPC) } fetchAssets(){ if(this.isfetching === true){ let app = this.state.data.application_id setTimeout(() => { if(this.state.data.application_id !== app){ return } this.fetchAssets() }, 5000); } if(!this.state.data.application_id){ this.setState({ data: this.state.data, assets: [] }) return } this.isfetching = true CustomRichPresence.fetchAssets(this.state.data.application_id) .then(assets => { this.isfetching = false this.setState({ data: this.state.data, assets: Object.keys(assets).map(k => { let asset = assets[k] return { id: asset.id, name: asset.name, type: asset.type } }) }) this.forceUpdate() }).catch(() => { this.isfetching = false this.setState({ data: this.state.data, assets: [] }) this.forceUpdate() }) } updatePreview(data){ this.setState({ data }) } render() { let contentModule = BDModules.get(e => e.contentColumn)[0] return (
{/** options */} {RPCProps.map(e => { if(e.type === "text"){ return }else if(e.type === "number"){ let array = []/* if(e.id === "timestamps.start"){ array.unshift( { DiscordNative.clipboard.copy(Date.now()+"") }} />) }*/ return array }else if(e.type === "choice"){ if(["assets.small", "assets.large"].includes(e.id)){ return { return { value: "asset-"+e.id, label: e.name } }))}/> }else{ return "Unknown choice." } } })}
{/** preview */}
e.marginBottom20)[0].marginBottom20}>
) } } const RPCProps = [ { title: "Application ID", id: "application_id", type: "number" }, { title: "Name", id: "name", type: "text" }, { title: "Details", id: "details", type: "text" }, { title: "State", id: "state", type: "text" }, { title: "Timestamp Start", id: "timestamps.start", type: "number" }, { title: "LargeAsset", id: "assets.large", type: "choice" }, { title: "SmallAsset", id: "assets.small", type: "choice" }, ] class InputText extends React.Component { render(){ let setting = this.props.setting let rowModule = BDModules.get(e => e.removeKeybind)[0] let marginModule = BDModules.get(e => e.marginBottom20)[0] let marginModule2 = BDModules.get(e => e.defaultMarginh5)[0] let colorModule = BDModules.get(e => e.colorStandard)[0] let sizeModule = BDModules.get(e => e.size32)[0] let flexModule = BDModules.get(e => e._horizontal)[0] let inputModule = BDModules.get(e => e.inputMini)[0] let sizeModule2 = BDModules.get(e => e.size16 && e.size20)[0] return (
{setting.title}
{ this.props.manager.onChange(this, ev.target.value) }} />
e.divider && Object.keys(e).length === 1)[0].divider} ${BDModules.get(e => e.dividerDefault)[0].dividerDefault}`}>
) } } class InputNumber extends React.Component { render(){ let setting = this.props.setting let rowModule = BDModules.get(e => e.removeKeybind)[0] let marginModule = BDModules.get(e => e.marginBottom20)[0] let marginModule2 = BDModules.get(e => e.defaultMarginh5)[0] let colorModule = BDModules.get(e => e.colorStandard)[0] let sizeModule = BDModules.get(e => e.size32)[0] let flexModule = BDModules.get(e => e._horizontal)[0] let inputModule = BDModules.get(e => e.inputMini)[0] let sizeModule2 = BDModules.get(e => e.size16 && e.size20)[0] let euhModule1 = BDModules.get(e => e.colorTransparent)[0] return (
{setting.title}
{ let newValue = ev.target.value.replace(/[^\d]+/g, "") if(newValue !== ev.target.value){ ev.target.value = newValue } this.props.manager.onChange(this, newValue) }} />
{setting.id === "timestamps.start" ?
e.buttonWrapper)[0].buttonWrapper}>
: null}
e.divider && Object.keys(e).length === 1)[0].divider} ${BDModules.get(e => e.dividerDefault)[0].dividerDefault}`}>
) } } class InputChoice extends React.Component { onChange(data){ this.props.manager.onChange(this, data.value === "none" ? null : data.value.replace("asset-", "")) } render(){ let setting = this.props.setting let rowModule = BDModules.get(e => e.removeKeybind)[0] let marginModule = BDModules.get(e => e.marginBottom20)[0] let marginModule2 = BDModules.get(e => e.defaultMarginh5)[0] let colorModule = BDModules.get(e => e.colorStandard)[0] let sizeModule = BDModules.get(e => e.size32)[0] let flexModule = BDModules.get(e => e._horizontal)[0] let options = this.props.choices return (
{setting.title}

{Messages.PINNED_MESSAGES_PRO_TIP}

{Messages.CONTEXT_MENU_HINT}
) } } class Status extends React.Component { render(){ let status = BDModules.get(e => e.default && e.default.getPresence)[0].default.getPresence().status if(status === "invisible")status = "offline" let className = BDModules.get(e => e.pointerEvents)[0].pointerEvents return } } let timestampClass = "" class Profile extends React.Component { render(){ let user = BDModules.get(e => e.default && e.default.getCurrentUser)[0].default.getCurrentUser() let avatarURL = user.getAvatarURL(user.avatar.startsWith("a_") ? "gif" : "png") let [ flexModule1, stylingModule1, rootModule1, avatarModule1, nameTagModule1, activityModule1, textModule1, sizeModule1, scrollerModule1, noteModule1, Messages ] = [ BDModules.get(e => e.flex && e._horizontal)[0], BDModules.get(e => e.vertical && e.alignStretch && !e.streamerModeEnabledBtn)[0], BDModules.get(e => e.topSectionStreaming)[0], BDModules.get(e => e.pointerEvents)[0], BDModules.get(e => e.bot)[0], BDModules.get(e => e.activityProfile)[0], BDModules.get(e => e.muted && e.wrapper && e.base)[0], BDModules.get(e => e.size32)[0], BDModules.get(e => e.scrollerFade)[0], BDModules.get(e => e.note && Object.keys(e).length === 1)[0], BDModules.get(e => e.default && e.default.Messages)[0].default.Messages ] let data = Object.assign({}, defaultRPC, this.props.preview.props.settings.state.data) timestampClass = timestampClass || activityModule1.timestamp return [
{user.username} #{user.discriminator}

{Messages.USER_ACTIVITY_HEADER_PLAYING}

{(() => { if(!data["assets.large"])return null let images = [] if(data["assets.large"]){ images.push() } if(data["assets.small"]){ images.push() } return
{images}
})()}
{(() => { if(!data.name)return null return

{data.name}

})()} {(() => { if(!data.details)return null return
{data.details}
})()} {(() => { if(!data.state)return null return
{data.state}
})()} {(() => { if(!data["timestamps.start"])return null let timeComponent = timestampRender(Timestamp, Messages) return (
{React.createElement(timeComponent, { timestamps: { end: null, start: data["timestamps.start"] } })}
) })()}
{Messages.NOTE}
,
] } } class ConnectedAccounts extends React.Component { render(){ let accounts = [] let rootModule1 = BDModules.get(e => e.topSectionStreaming)[0] let AccountModule1 = BDModules.get(e => e.default && e.default.getAccounts)[0].default let accs = AccountModule1.getAccounts().filter(e => e.visibility === 1) for(let acc of accs){ accounts.push() } if(accounts.length > 0){ return (
{accounts}
) } return null } } class ConnectedAccount extends React.Component { render(){ let [ flexModule1, stylingModule1, rootModule1, flowerModule1, anchorModule1, SocialConstants ] = [ BDModules.get(e => e.flex && e._horizontal)[0], BDModules.get(e => e.vertical && e.alignStretch && !e.streamerModeEnabledBtn)[0], BDModules.get(e => e.topSectionStreaming)[0], BDModules.get(e => e.flowerStarContainer)[0], BDModules.get(e => e.anchor)[0], BDModules.get(e => e.default && e.default.get && e.default.map)[0].default ] let acc = this.props.acc let constantsSocial = SocialConstants.get(acc.type) return (
{`Logo
{acc.name}
{acc.verified ? (
) : null}
) } } class Badges extends React.Component { render(){ let user = BDModules.get(e => e.default && e.default.getCurrentUser)[0].default.getCurrentUser() let rootModule = BDModules.get(e => e.topSectionStreaming)[0] let UserFlags = BDModules.get(e => e.UserFlags)[0].UserFlags let badges = [] let serialized = [] for(let flagName in UserFlags){ if(user.hasFlag(UserFlags[flagName]))serialized.push(flagName) } for(let flagName of serialized){ let searchable = `profileBadge${flagName.toLowerCase().replace(/_/g, " ").split(" ").map(e => e[0].toUpperCase()+e.slice(1)).join("")}` searchable = searchable.replace("HypesquadOnline", "HypeSquadOnline") if(!rootModule[searchable])continue badges.push() } if(user.hasPremiumSubscription){ badges.push() } return badges } } class Badge extends React.Component { render(){ let rootModule1 = BDModules.get(e => e.topSectionStreaming)[0] return (
) } } class Timestamp extends React.Component { render(){ return
{this.props.message}
} }