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]) {
return p.client.users[steamIdString];
} else {
log.info(`Getting persona for ${steamid}`);
let {personas} = await p.client.getPersonas([steamid]);
let persona = personas[steamIdString];
p.knownPersonas.set(steamIdString, persona);
@ -76,8 +77,10 @@ export class Steam {
if (app) {
return app;
} else {
log.info(`Getting product info for ${appId}`);
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);
return app;
}
@ -182,6 +185,7 @@ export class Steam {
if (steamId.toString() != client.steamID.toString()) {
try {
await this.bridge.setUserPresence({
puppetId,
userId: steamId.toString()
@ -199,6 +203,9 @@ export class Steam {
userId: steamId.toString()
}, "");
}
} catch (e) {
log.error(`Error while setting user presence ${e}`)
}
}
});
@ -330,6 +337,8 @@ export class Steam {
msg: string,
mediaId?: string,
) {
try {
log.info(`Sending chat message to ${room.roomId}`);
if (this.getRoomSteamId(room)) {
const sendMessage = await p.client.chat.sendFriendMessage(room.roomId, msg);
let id = `${sendMessage.server_timestamp.toISOString()}::${sendMessage.ordinal}`;
@ -345,6 +354,9 @@ export class Steam {
await this.bridge.eventSync.insert(room, eventId, id);
p.sentEventIds.push(id);
}
} catch (e) {
log.error(`Error while sending message ${e}`);
}
}
public async handleMatrixMessage(room: IRemoteRoom, data: IMessageEvent, event: any) {
@ -367,6 +379,7 @@ export class Steam {
let steamId = this.getRoomSteamId(room);
if (steamId) {
const buffer = await Util.DownloadFile(data.url);
try {
let sendUrl: string = await new Promise((resolve, reject) => p.community.sendImageToUser(steamId, buffer, (err, imageUrl) => {
if (err) {
reject(err);
@ -377,6 +390,9 @@ export class Steam {
// 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
p.ourSendImages.push(sendUrl);
} catch (e) {
log.error(`Error while sending image ${e}`);
}
} else {
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> {
log.info(`Getting group info for ${groupId}`);
let {chat_room_groups} = await new Promise((resolve, reject) => puppet.client.chat.getGroups((err, response) => {
if (err) {
reject(err);
@ -500,29 +517,31 @@ export class Steam {
const p = this.puppets[room.puppetId];
let steamId = this.getRoomSteamId(room);
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) {
const p = this.puppets[room.puppetId];
log.info(`sending read marker for ${room.roomId}`);
let steamId = this.getRoomSteamId(room);
if (steamId) {
p.client.chat.ackFriendMessage(steamId, new Date());
p.client.chat.ackFriendMessage(steamId, new Date()).catch(() => {});
} else {
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) {
const p = this.puppets[puppetId];
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") {
p.client.setPersona(EPersonaState.Online);
p.client.setPersona(EPersonaState.Online).catch(e => log.error(`Error while sending presence ${e}`));
} else if (presence.presence === "unavailable") {
p.client.setPersona(EPersonaState.Away);
p.client.setPersona(EPersonaState.Away).catch(e => log.error(`Error while sending presence ${e}`));
}
}
}