mirror of
https://github.com/samuelthomas2774/nxapi.git
synced 2026-04-21 14:37:59 -05:00
Add support for all Discord presence options for the app
This commit is contained in:
parent
7e5988685d
commit
1fc6cce5a6
|
|
@ -21,23 +21,25 @@ export enum ZncStatus {
|
|||
FORBIDDEN = 9405,
|
||||
UNAUTHORISED = 9406,
|
||||
NSA_NOT_LINKED = 9407,
|
||||
USER_NOT_FOUND = 9408,
|
||||
APPLICATION_ID_NOT_SUPPORTED = 9409,
|
||||
EVENT_NOT_ACTIVATED_ERROR = 9412,
|
||||
NOT_JOINED_VOICE_CHAT_ERROR = 9416,
|
||||
DUPLICATE_APPLICATION_ID_ERROR = 9417,
|
||||
OPERATION_NOT_ALLOWED_ERROR = 9422,
|
||||
RATING_AGE_ERROR = 9423,
|
||||
USER_NOT_ACTIVATED_ERROR = 9424,
|
||||
INVITATION_LIMIT_EXCEEDED_ERROR = 9425,
|
||||
MULTIPLE_LOGIN_ERROR = 9426,
|
||||
EVENT_NOT_FOUND = 9411,
|
||||
EVENT_NOT_ACTIVATED = 9412,
|
||||
NOT_JOINED_VOICE_CHAT = 9416,
|
||||
DUPLICATE_APPLICATION_ID = 9417,
|
||||
OPERATION_NOT_ALLOWED = 9422,
|
||||
RATING_AGE = 9423,
|
||||
USER_NOT_ACTIVATED = 9424,
|
||||
INVITATION_LIMIT_EXCEEDED = 9425,
|
||||
MULTIPLE_LOGIN = 9426,
|
||||
UPGRADE_REQUIRED = 9427,
|
||||
ACCOUNT_DISABLED_ERROR = 9428,
|
||||
MEMBERSHIP_REQUIRED_ERROR = 9450,
|
||||
SERVICE_CLOSED_ERROR = 9499,
|
||||
ACCOUNT_DISABLED = 9428,
|
||||
MEMBERSHIP_REQUIRED = 9450,
|
||||
SERVICE_CLOSED = 9499,
|
||||
INTERNAL_SERVER_ERROR = 9500,
|
||||
SERVICE_UNAVAILABLE = 9501,
|
||||
MAINTENANCE_ERROR = 9511,
|
||||
UNEXPECTED_ERROR = 9599,
|
||||
MAINTENANCE = 9511,
|
||||
UNEXPECTED = 9599,
|
||||
// UNKNOWN = -1,
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
import { DiscordPresencePlayTime } from '../../discord/util.js';
|
||||
|
||||
export enum WindowType {
|
||||
MAIN_WINDOW = 'App',
|
||||
FRIEND = 'Friend',
|
||||
|
|
@ -19,6 +21,11 @@ export interface DiscordPresenceConfiguration {
|
|||
source: DiscordPresenceSource;
|
||||
/** Discord user ID */
|
||||
user?: string;
|
||||
/** Friend code in the format "0000-0000-0000" */
|
||||
friend_code?: string;
|
||||
show_console_online?: boolean;
|
||||
show_active_event?: boolean;
|
||||
show_play_time?: DiscordPresencePlayTime;
|
||||
}
|
||||
|
||||
export type DiscordPresenceSource = DiscordPresenceSourceZnc | DiscordPresenceSourceUrl;
|
||||
|
|
|
|||
|
|
@ -200,8 +200,7 @@ export class Store extends EventEmitter {
|
|||
monitor.friend_notifications = user.friend_notifications;
|
||||
|
||||
if (monitor.presence_user) {
|
||||
monitor.discord_client_filter = state.discord_presence?.user ?
|
||||
monitors.createDiscordClientFilter(state.discord_presence.user) : undefined;
|
||||
monitors.setDiscordPresenceConfigurationForMonitor(monitor, state.discord_presence!);
|
||||
this.emit('update-discord-presence-source', monitors.getDiscordPresenceSource());
|
||||
}
|
||||
});
|
||||
|
|
@ -214,8 +213,8 @@ export class Store extends EventEmitter {
|
|||
if (state.discord_presence && 'url' in state.discord_presence.source) {
|
||||
try {
|
||||
const monitor = await monitors.startUrl(state.discord_presence.source.url);
|
||||
monitor.discord_client_filter = state.discord_presence?.user ?
|
||||
monitors.createDiscordClientFilter(state.discord_presence.user) : undefined;
|
||||
monitors.setDiscordPresenceConfigurationForMonitor(monitor, state.discord_presence);
|
||||
this.emit('update-discord-presence-source', monitors.getDiscordPresenceSource());
|
||||
} catch (err) {
|
||||
dialog.showErrorBox('Error restoring monitor for presence URL ' + state.discord_presence.source.url,
|
||||
err instanceof Error ? err.stack ?? err.message : err as any);
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import { LoopResult } from '../../util/loop.js';
|
|||
import { tryGetNativeImageFromUrl } from './util.js';
|
||||
import { App } from './index.js';
|
||||
import { DiscordPresenceConfiguration, DiscordPresenceSource } from '../common/types.js';
|
||||
import { DiscordPresence } from '../../discord/util.js';
|
||||
import { DiscordPresence, DiscordPresencePlayTime } from '../../discord/util.js';
|
||||
import { DiscordRpcClient } from '../../discord/rpc.js';
|
||||
|
||||
const debug = createDebug('app:main:monitor');
|
||||
|
|
@ -115,6 +115,11 @@ export class PresenceMonitorManager {
|
|||
return {
|
||||
source,
|
||||
user: this.getDiscordClientFilterConfiguration(monitor.discord_client_filter),
|
||||
friend_code: monitor.show_friend_code && monitor.force_friend_code ?
|
||||
monitor.force_friend_code.id : undefined,
|
||||
show_console_online: monitor.show_console_online,
|
||||
show_active_event: monitor.show_active_event,
|
||||
show_play_time: monitor.show_play_time,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -122,13 +127,26 @@ export class PresenceMonitorManager {
|
|||
if (!config) return this.setDiscordPresenceSource(null);
|
||||
|
||||
await this.setDiscordPresenceSource(config.source, monitor => {
|
||||
monitor.discord_client_filter = config.user ? this.createDiscordClientFilter(config.user) : undefined;
|
||||
this.setDiscordPresenceConfigurationForMonitor(monitor, config);
|
||||
monitor.skipIntervalInCurrentLoop();
|
||||
});
|
||||
|
||||
await this.app.store.saveMonitorState(this);
|
||||
}
|
||||
|
||||
setDiscordPresenceConfigurationForMonitor(
|
||||
monitor: EmbeddedPresenceMonitor | EmbeddedProxyPresenceMonitor,
|
||||
config: DiscordPresenceConfiguration
|
||||
) {
|
||||
monitor.discord_client_filter = config.user ? this.createDiscordClientFilter(config.user) : undefined;
|
||||
monitor.show_friend_code = !!config.friend_code;
|
||||
monitor.force_friend_code = config.friend_code ?
|
||||
{id: config.friend_code, regenerable: false, regenerableAt: 0} : undefined;
|
||||
monitor.show_console_online = config.show_console_online ?? false;
|
||||
if (monitor instanceof ZncDiscordPresence) monitor.show_active_event = config.show_active_event ?? false;
|
||||
monitor.show_play_time = config.show_play_time ?? DiscordPresencePlayTime.DETAILED_PLAY_TIME_SINCE;
|
||||
}
|
||||
|
||||
private discord_client_filter_config = new WeakMap<
|
||||
Exclude<ZncDiscordPresence['discord_client_filter'], undefined>,
|
||||
/** Discord user ID */
|
||||
|
|
@ -171,7 +189,7 @@ export class PresenceMonitorManager {
|
|||
) {
|
||||
await this.start(source.na_id, monitor => {
|
||||
monitor.presence_user = source.friend_nsa_id ?? monitor.data.nsoAccount.user.nsaId;
|
||||
monitor.discord_client_filter = existing.discord_client_filter;
|
||||
this.setDiscordPresenceSourceCopyConfiguration(monitor, existing);
|
||||
callback?.call(null, monitor);
|
||||
monitor.skipIntervalInCurrentLoop();
|
||||
});
|
||||
|
|
@ -207,13 +225,13 @@ export class PresenceMonitorManager {
|
|||
if (source && 'na_id' in source) {
|
||||
await this.start(source.na_id, monitor => {
|
||||
monitor.presence_user = source.friend_nsa_id ?? monitor.data.nsoAccount.user.nsaId;
|
||||
monitor.discord_client_filter = existing?.discord_client_filter;
|
||||
if (existing) this.setDiscordPresenceSourceCopyConfiguration(monitor, existing);
|
||||
callback?.call(null, monitor);
|
||||
monitor.skipIntervalInCurrentLoop();
|
||||
});
|
||||
} else if (source && 'url' in source) {
|
||||
const monitor = await this.startUrl(source.url);
|
||||
monitor.discord_client_filter = existing?.discord_client_filter;
|
||||
if (existing) this.setDiscordPresenceSourceCopyConfiguration(monitor, existing);
|
||||
callback?.call(null, monitor);
|
||||
}
|
||||
|
||||
|
|
@ -223,6 +241,18 @@ export class PresenceMonitorManager {
|
|||
this.app.store.emit('update-discord-presence-source', source);
|
||||
}
|
||||
}
|
||||
|
||||
private setDiscordPresenceSourceCopyConfiguration(
|
||||
monitor: EmbeddedPresenceMonitor | EmbeddedProxyPresenceMonitor,
|
||||
existing: EmbeddedPresenceMonitor | EmbeddedProxyPresenceMonitor,
|
||||
) {
|
||||
monitor.discord_client_filter = existing.discord_client_filter;
|
||||
monitor.show_friend_code = existing.show_friend_code && !!existing.force_friend_code;
|
||||
monitor.force_friend_code = existing.force_friend_code;
|
||||
monitor.show_console_online = existing.show_console_online;
|
||||
if (monitor instanceof ZncDiscordPresence) monitor.show_active_event = existing.show_active_event;
|
||||
monitor.show_play_time = existing.show_play_time;
|
||||
}
|
||||
}
|
||||
|
||||
export class EmbeddedPresenceMonitor extends ZncDiscordPresence {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user