Badge cards: seven AI artworks for the hunting achievements, the hunter's name stamped on the ribbon server-side (ffmpeg), public share pages /b/<who>/<id> with OG cards, badge strip + share modal + unlock celebration on the board, Telegram photo post gated by OUTBOUND
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
+9
-1
@@ -105,6 +105,14 @@ function rankOf(memberId, period) {
|
||||
|
||||
// the member's share link: PolHunter's landing with their IAP referral, which the landing turns into
|
||||
// their instantadpay.com/join/<ref> link for everyone who signs up from it
|
||||
// the public name used in share URLs: the IAP username, else m<memberId>; and back again
|
||||
function nameOf(me) { return me.username ? String(me.username).toLowerCase() : 'm' + me.memberId; }
|
||||
function memberByName(who) {
|
||||
const w = String(who || '').toLowerCase(); if (!w) return null;
|
||||
const all = store.read('payouts', []);
|
||||
const p = all.find(x => (x.username && String(x.username).toLowerCase() === w) || 'm' + x.memberId === w);
|
||||
return p ? { memberId: p.memberId, username: p.username || null, who: p.username ? '@' + p.username : '#' + p.memberId } : null;
|
||||
}
|
||||
function shareLink(site, me) { const ref = me.username || me.memberId; return site + '/?r=' + encodeURIComponent(String(ref)); }
|
||||
|
||||
module.exports = { BADGES, badgesFor, leaderboard, rankOf, shareLink, weekOf, weekRows, awardWeek, awardDue, prizes, prizeRules };
|
||||
module.exports = { BADGES, badgesFor, leaderboard, rankOf, shareLink, weekOf, weekRows, awardWeek, awardDue, prizes, prizeRules, nameOf, memberByName };
|
||||
|
||||
Reference in New Issue
Block a user