( db: DatabaseAdapter, sessionName: string, ownerId: string | null | undefined )
| 837 | * Finds the "other" member (not the owner) in a private chat, falling back to name match or first with avatar. |
| 838 | */ |
| 839 | export function getPrivateChatMemberAvatar( |
| 840 | db: DatabaseAdapter, |
| 841 | sessionName: string, |
| 842 | ownerId: string | null | undefined |
| 843 | ): string | null { |
| 844 | const members = db |
| 845 | .prepare( |
| 846 | `SELECT |
| 847 | m.platform_id as platformId, |
| 848 | COALESCE(m.group_nickname, m.account_name, m.platform_id) as name, |
| 849 | m.avatar |
| 850 | FROM member m |
| 851 | WHERE COALESCE(m.account_name, '') != '系统消息' |
| 852 | ORDER BY (SELECT COUNT(*) FROM message WHERE sender_id = m.id) DESC` |
| 853 | ) |
| 854 | .all() as unknown as Array<{ platformId: string; name: string; avatar: string | null }> |
| 855 | |
| 856 | if (members.length === 0) return null |
| 857 | |
| 858 | if (ownerId) { |
| 859 | const other = members.find((m) => m.platformId !== ownerId) |
| 860 | if (other?.avatar) return other.avatar |
| 861 | } |
| 862 | |
| 863 | const sameName = members.find((m) => m.name === sessionName) |
| 864 | if (sameName?.avatar) return sameName.avatar |
| 865 | |
| 866 | const firstWithAvatar = members.find((m) => m.avatar) |
| 867 | return firstWithAvatar?.avatar || null |
| 868 | } |
no test coverage detected