a cache for slack profile pictures and emojis

feat: add pronouns to stored data

dunkirk.sh cf200505 d42ded40

verified
Changed files
+23 -3
src
+16 -3
src/cache.ts
···
interface User extends CacheItem {
type: "user";
displayName: string;
+
pronouns: string;
userId: string;
}
···
id TEXT PRIMARY KEY,
userId TEXT UNIQUE,
displayName TEXT,
+
pronouns TEXT,
imageUrl TEXT,
expiration INTEGER
)
···
async insertUser(
userId: string,
displayName: string,
+
pronouns: string,
imageUrl: string,
expirationHours?: number,
) {
···
try {
this.db.run(
-
`INSERT INTO users (id, userId, displayName, imageUrl, expiration)
-
VALUES (?, ?, ?, ?, ?)
+
`INSERT INTO users (id, userId, displayName, pronouns, imageUrl, expiration)
+
VALUES (?, ?, ?, ?, ?, ?)
ON CONFLICT(userId)
DO UPDATE SET imageUrl = ?, expiration = ?`,
-
[id, userId, displayName, imageUrl, expiration, imageUrl, expiration],
+
[
+
id,
+
userId,
+
displayName,
+
pronouns,
+
imageUrl,
+
expiration,
+
imageUrl,
+
expiration,
+
],
);
return true;
} catch (error) {
···
id: result.id,
userId: result.userId,
displayName: result.displayName,
+
pronouns: result.pronouns,
imageUrl: result.imageUrl,
expiration: new Date(result.expiration),
};
+5
src/index.ts
···
await cache.insertUser(
slackUser.id,
displayName,
+
slackUser.profile.pronouns,
slackUser.profile.image_512,
);
···
expiration: new Date().toISOString(),
user: slackUser.id,
displayName: displayName,
+
pronouns: slackUser.profile.pronouns,
image: slackUser.profile.image_512,
};
}
···
expiration: user.expiration.toISOString(),
user: user.userId,
displayName: user.displayName,
+
pronouns: user.pronouns,
image: user.imageUrl,
};
},
···
displayName: t.String({
default: "krn",
}),
+
pronouns: t.String({ default: "possibly blank" }),
image: t.String({
default:
"https://avatars.slack-edge.com/2024-11-30/8105375749571_53898493372773a01a1f_original.jpg",
···
slackUser.id,
slackUser.profile.display_name_normalized ||
slackUser.profile.real_name_normalized,
+
slackUser.profile.pronouns,
slackUser.profile.image_512,
);
+2
src/slack.d.ts
···
display_name_normalized: string;
/** User's email address */
email: string;
+
/** User's pronouns */
+
pronouns: string;
/** Original size profile image URL */
image_original: string;
/** 24x24 profile image URL */