error handling

This commit is contained in:
Robin Appelman 2020-12-06 16:21:12 +01:00
commit e32eb8895d

View file

@ -64,6 +64,7 @@ export class Steam {
} else if (p.client.users[steamIdString]) { } else if (p.client.users[steamIdString]) {
return p.client.users[steamIdString]; return p.client.users[steamIdString];
} else { } else {
log.info(`Getting persona for ${steamid}`);
let {personas} = await p.client.getPersonas([steamid]); let {personas} = await p.client.getPersonas([steamid]);
let persona = personas[steamIdString]; let persona = personas[steamIdString];
p.knownPersonas.set(steamIdString, persona); p.knownPersonas.set(steamIdString, persona);
@ -76,8 +77,10 @@ export class Steam {
if (app) { if (app) {
return app; return app;
} else { } else {
log.info(`Getting product info for ${appId}`);
let {apps} = await p.client.getProductInfo([parseInt(appId, 10)], []); let {apps} = await p.client.getProductInfo([parseInt(appId, 10)], []);
let app = apps[appId]; let app: AppInfo = apps[appId];
log.info(`Got product info for ${appId}: ${app.appinfo.common.name}`);
p.knownApps.set(appId, app); p.knownApps.set(appId, app);
return app; return app;
} }
@ -182,22 +185,26 @@ export class Steam {
if (steamId.toString() != client.steamID.toString()) { if (steamId.toString() != client.steamID.toString()) {
await this.bridge.setUserPresence({ try {
puppetId, await this.bridge.setUserPresence({
userId: steamId.toString() puppetId,
}, state); userId: steamId.toString()
}, state);
if (persona.gameid && persona.gameid !== '0') { if (persona.gameid && persona.gameid !== '0') {
let app = await this.getProduct(p, persona.gameid); let app = await this.getProduct(p, persona.gameid);
await this.bridge.setUserStatus({ await this.bridge.setUserStatus({
puppetId, puppetId,
userId: steamId.toString() userId: steamId.toString()
}, `Now playing: ${app.appinfo.common.name}`); }, `Now playing: ${app.appinfo.common.name}`);
} else { } else {
await this.bridge.setUserStatus({ await this.bridge.setUserStatus({
puppetId, puppetId,
userId: steamId.toString() userId: steamId.toString()
}, ""); }, "");
}
} catch (e) {
log.error(`Error while setting user presence ${e}`)
} }
} }
}); });
@ -330,20 +337,25 @@ export class Steam {
msg: string, msg: string,
mediaId?: string, mediaId?: string,
) { ) {
if (this.getRoomSteamId(room)) { try {
const sendMessage = await p.client.chat.sendFriendMessage(room.roomId, msg); log.info(`Sending chat message to ${room.roomId}`);
let id = `${sendMessage.server_timestamp.toISOString()}::${sendMessage.ordinal}`; if (this.getRoomSteamId(room)) {
const sendMessage = await p.client.chat.sendFriendMessage(room.roomId, msg);
let id = `${sendMessage.server_timestamp.toISOString()}::${sendMessage.ordinal}`;
await this.bridge.eventSync.insert(room, eventId, id); await this.bridge.eventSync.insert(room, eventId, id);
p.sentEventIds.push(id); p.sentEventIds.push(id);
} else { } else {
let [groupId, chatId] = this.parseChatRoomId(room.roomId); let [groupId, chatId] = this.parseChatRoomId(room.roomId);
const sendMessage = await p.client.chat.sendChatMessage(groupId, chatId, msg); const sendMessage = await p.client.chat.sendChatMessage(groupId, chatId, msg);
let id = `${sendMessage.server_timestamp.toISOString()}::${sendMessage.ordinal}`; let id = `${sendMessage.server_timestamp.toISOString()}::${sendMessage.ordinal}`;
await this.bridge.eventSync.insert(room, eventId, id); await this.bridge.eventSync.insert(room, eventId, id);
p.sentEventIds.push(id); p.sentEventIds.push(id);
}
} catch (e) {
log.error(`Error while sending message ${e}`);
} }
} }
@ -367,16 +379,20 @@ export class Steam {
let steamId = this.getRoomSteamId(room); let steamId = this.getRoomSteamId(room);
if (steamId) { if (steamId) {
const buffer = await Util.DownloadFile(data.url); const buffer = await Util.DownloadFile(data.url);
let sendUrl: string = await new Promise((resolve, reject) => p.community.sendImageToUser(steamId, buffer, (err, imageUrl) => { try {
if (err) { let sendUrl: string = await new Promise((resolve, reject) => p.community.sendImageToUser(steamId, buffer, (err, imageUrl) => {
reject(err); if (err) {
} else { reject(err);
resolve(imageUrl); } else {
} resolve(imageUrl);
})); }
// since we send images trough SteamCommunity and not SteamUser we get them back as `friendMessageEcho` }));
// so we need to track them to make sure we dont double post them // since we send images trough SteamCommunity and not SteamUser we get them back as `friendMessageEcho`
p.ourSendImages.push(sendUrl); // so we need to track them to make sure we dont double post them
p.ourSendImages.push(sendUrl);
} catch (e) {
log.error(`Error while sending image ${e}`);
}
} else { } else {
await this.bridge.sendStatusMessage(room.puppetId, `Sending images to groups is currently not supported`); await this.bridge.sendStatusMessage(room.puppetId, `Sending images to groups is currently not supported`);
} }
@ -460,6 +476,7 @@ export class Steam {
} }
public async getGroupInfo(puppet: ISteamPuppet, groupId: string): Promise<IGroupDetails | null> { public async getGroupInfo(puppet: ISteamPuppet, groupId: string): Promise<IGroupDetails | null> {
log.info(`Getting group info for ${groupId}`);
let {chat_room_groups} = await new Promise((resolve, reject) => puppet.client.chat.getGroups((err, response) => { let {chat_room_groups} = await new Promise((resolve, reject) => puppet.client.chat.getGroups((err, response) => {
if (err) { if (err) {
reject(err); reject(err);
@ -500,29 +517,31 @@ export class Steam {
const p = this.puppets[room.puppetId]; const p = this.puppets[room.puppetId];
let steamId = this.getRoomSteamId(room); let steamId = this.getRoomSteamId(room);
if (steamId && typing) { if (steamId && typing) {
p.client.chat.sendFriendTyping(steamId); log.info(`sending typing notification to ${steamId}`);
p.client.chat.sendFriendTyping(steamId).catch(e => log.error(`Error while sending typing notification ${e}`));
} }
} }
public handleMatrixRead(room: IRemoteRoom, eventId: string) { public handleMatrixRead(room: IRemoteRoom, eventId: string) {
const p = this.puppets[room.puppetId]; const p = this.puppets[room.puppetId];
log.info(`sending read marker for ${room.roomId}`);
let steamId = this.getRoomSteamId(room); let steamId = this.getRoomSteamId(room);
if (steamId) { if (steamId) {
p.client.chat.ackFriendMessage(steamId, new Date()); p.client.chat.ackFriendMessage(steamId, new Date()).catch(() => {});
} else { } else {
let [groupId, chatId] = this.parseChatRoomId(room.roomId); let [groupId, chatId] = this.parseChatRoomId(room.roomId);
p.client.chat.ackChatMessage(groupId, chatId, new Date()); p.client.chat.ackChatMessage(groupId, chatId, new Date()).catch(e => log.error(`Error while sending read marker ${e}`));
} }
} }
public handleMatrixPresence(puppetId, presence: IPresenceEvent) { public handleMatrixPresence(puppetId, presence: IPresenceEvent) {
const p = this.puppets[puppetId]; const p = this.puppets[puppetId];
if (presence.presence === "offline") { if (presence.presence === "offline") {
p.client.setPersona(EPersonaState.Offline); p.client.setPersona(EPersonaState.Offline).catch(e => log.error(`Error while sending presence ${e}`));
} else if (presence.presence === "online") { } else if (presence.presence === "online") {
p.client.setPersona(EPersonaState.Online); p.client.setPersona(EPersonaState.Online).catch(e => log.error(`Error while sending presence ${e}`));
} else if (presence.presence === "unavailable") { } else if (presence.presence === "unavailable") {
p.client.setPersona(EPersonaState.Away); p.client.setPersona(EPersonaState.Away).catch(e => log.error(`Error while sending presence ${e}`));
} }
} }
} }