diff --git a/src/app/browser/main/discord.tsx b/src/app/browser/main/discord.tsx
index 342e445..e43801c 100644
--- a/src/app/browser/main/discord.tsx
+++ b/src/app/browser/main/discord.tsx
@@ -17,7 +17,7 @@ export default function DiscordPresenceSource(props: {
return ipc.showDiscordModal()}>
{renderDiscordPresenceSource(props.source)}
- {props.presence && props.user ? : null}
+ {props.presence || props.user ? : null}
;
}
@@ -78,26 +78,35 @@ function DiscordPresenceInactive() {
}
function DiscordPresence(props: {
- presence: DiscordPresence;
- user: User;
+ presence: DiscordPresence | null;
+ user: User | null;
}) {
- const large_image_url = props.presence.activity.largeImageKey?.match(/^\d{16}$/) ?
+ const large_image_url = props.presence ? props.presence.activity.largeImageKey?.match(/^\d{16}$/) ?
'https://cdn.discordapp.com/app-assets/' + props.presence.id + '/' +
props.presence.activity.largeImageKey + '.png' :
- props.presence.activity.largeImageKey;
- const user_image_url = 'https://cdn.discordapp.com/avatars/' + props.user.id + '/' + props.user.avatar + '.png';
+ props.presence.activity.largeImageKey : undefined;
- return <>
-
+ const user_image_url = props.user ?
+ props.user.avatar ? 'https://cdn.discordapp.com/avatars/' + props.user.id + '/' + props.user.avatar + '.png' :
+ !props.user.discriminator || props.user.discriminator === '0' ?
+ 'https://cdn.discordapp.com/embed/avatars/' + ((parseInt(props.user.id) >> 22) % 5) + '.png' :
+ 'https://cdn.discordapp.com/embed/avatars/' + (parseInt(props.user.discriminator) % 5) + '.png' : undefined;
+
+ return
+ {props.presence ?
Playing
-
+ : null}
-
+ {props.user ?
- {props.user.username}#{props.user.discriminator}
-
- >;
+
+ {props.user.username}#{props.user.discriminator}
+
+ :
+ Not connected to Discord
+ }
+ ;
}
const styles = StyleSheet.create({
@@ -125,8 +134,12 @@ const styles = StyleSheet.create({
userSelect: 'all',
},
+ discordPresenceContainer: {
+ marginTop: 2,
+ },
+
discordPresence: {
- marginTop: 12,
+ marginTop: 10,
flexDirection: 'row',
alignItems: 'center',
},
@@ -150,4 +163,7 @@ const styles = StyleSheet.create({
discordUserText: {
color: TEXT_COLOUR_DARK,
},
+ discordUserDiscriminator: {
+ opacity: 0.7,
+ },
});
diff --git a/src/app/main/monitor.ts b/src/app/main/monitor.ts
index 0f637d7..f483d8b 100644
--- a/src/app/main/monitor.ts
+++ b/src/app/main/monitor.ts
@@ -42,6 +42,7 @@ export class PresenceMonitorManager {
i.presence_user = null;
i.user_notifications = false;
i.friend_notifications = false;
+ i.discord_preconnect = true;
i.discord.onUpdateActivity = (presence: DiscordPresence | null) => {
this.app.store.emit('update-discord-presence', presence ? {...presence, config: undefined} : null);
@@ -88,6 +89,7 @@ export class PresenceMonitorManager {
const i = new EmbeddedProxyPresenceMonitor(presence_url);
i.notifications = this.notifications;
+ i.discord_preconnect = true;
i.discord.onUpdateActivity = (presence: DiscordPresence | null) => {
this.app.store.emit('update-discord-presence', presence ? {...presence, config: undefined} : null);
diff --git a/src/common/presence.ts b/src/common/presence.ts
index bdc975c..20cecae 100644
--- a/src/common/presence.ts
+++ b/src/common/presence.ts
@@ -79,8 +79,9 @@ class ZncDiscordPresenceClient {
if (this.m.presence_enabled && this.m.discord_preconnect) {
if (this.rpc) {
- debugDiscord('No presence but Discord preconnect enabled - clearing Discord activity');
+ if (this.title) debugDiscord('No presence but Discord preconnect enabled - clearing Discord activity');
this.setActivity(this.rpc.id);
+ this.title = null;
} else {
debugDiscord('No presence but Discord preconnect enabled - connecting');
const discordpresence = getInactiveDiscordPresence(PresenceState.OFFLINE, 0);
@@ -235,7 +236,8 @@ class ZncDiscordPresenceClient {
if (!this.rpc) {
this.connect(client_id, this.m.discord_client_filter);
} else {
- this.rpc.client.setActivity(typeof activity === 'string' ? undefined : activity.activity);
+ if (typeof activity === 'string') this.rpc.client.clearActivity();
+ else this.rpc.client.setActivity(activity.activity);
}
}