fix: use wallet address in citizenship referral link

Replace ref_telegramId with SS58 wallet address in referral link.
Share message now includes invitation text, auto-fill link, and
wallet address for manual paste in the referrer field.
This commit is contained in:
2026-02-28 02:33:39 +03:00
parent 80debdc640
commit faf0faed69
10 changed files with 34 additions and 17 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "pezkuwi-telegram-miniapp", "name": "pezkuwi-telegram-miniapp",
"version": "1.0.227", "version": "1.0.229",
"type": "module", "type": "module",
"description": "Pezkuwichain Telegram Mini App - Forum, Announcements, Rewards", "description": "Pezkuwichain Telegram Mini App - Forum, Announcements, Rewards",
"author": "Pezkuwichain Team", "author": "Pezkuwichain Team",
+2 -1
View File
@@ -100,7 +100,8 @@ const ar: Translations = {
youAreActive: 'أنت نشط!', youAreActive: 'أنت نشط!',
iAmActive: 'أنا نشط!', iAmActive: 'أنا نشط!',
activatedAlert: 'أنت الآن نشط! انقر مجددًا بعد 24 ساعة.', activatedAlert: 'أنت الآن نشط! انقر مجددًا بعد 24 ساعة.',
shareText: 'Pezkuwichain - الدولة الرقمية لكردستان! انضم إلينا عبر رابطي:', shareText: 'صديقي العزيز، كردستان الرقمية تأسست، خذ مكانك!',
referralInstruction: 'الصق هذا العنوان في حقل الإحالة:',
copyAlert: 'تم النسخ', copyAlert: 'تم النسخ',
referralCount: '{count} إحالة (معتمدة KYC)', referralCount: '{count} إحالة (معتمدة KYC)',
noReferrals: 'ليس لديك إحالات بعد', noReferrals: 'ليس لديك إحالات بعد',
+2 -1
View File
@@ -101,7 +101,8 @@ const ckb: Translations = {
youAreActive: 'تۆ چالاکیت!', youAreActive: 'تۆ چالاکیت!',
iAmActive: 'من چالاکم!', iAmActive: 'من چالاکم!',
activatedAlert: 'ئێستا چالاکیت! دوای ٢٤ کاتژمێر دووبارە کلیک بکە.', activatedAlert: 'ئێستا چالاکیت! دوای ٢٤ کاتژمێر دووبارە کلیک بکە.',
shareText: 'پێزکوێچەین - دەوڵەتی دیجیتاڵی کوردستان! لە ڕێگەی لینکەکەمەوە پەیوەستمان ببە:', shareText: 'هاوڕێی خۆشەویستم، کوردستانی دیجیتاڵ دامەزرا، تۆش شوێنی خۆت بگرە!',
referralInstruction: 'ئەم ناونیشانە لە بەشی ڕیفێراڵ بلکێنە:',
copyAlert: 'لەبەرگیرا', copyAlert: 'لەبەرگیرا',
referralCount: '{count} بانگهێشتکراو (KYC پەسەندکراو)', referralCount: '{count} بانگهێشتکراو (KYC پەسەندکراو)',
noReferrals: 'هێشتا هیچ بانگهێشتکراوێکت نییە', noReferrals: 'هێشتا هیچ بانگهێشتکراوێکت نییە',
+2 -1
View File
@@ -100,7 +100,8 @@ const en: Translations = {
youAreActive: 'You are Active!', youAreActive: 'You are Active!',
iAmActive: 'I am Active!', iAmActive: 'I am Active!',
activatedAlert: 'You are now active! Click again after 24 hours.', activatedAlert: 'You are now active! Click again after 24 hours.',
shareText: 'Pezkuwichain - Digital State of Kurdistan! Join us through my link:', shareText: 'Dear friend, Digital Kurdistan has been established, take your place!',
referralInstruction: 'Paste this address in the referral field:',
copyAlert: 'Copied', copyAlert: 'Copied',
referralCount: '{count} referrals (KYC approved)', referralCount: '{count} referrals (KYC approved)',
noReferrals: 'You have no referrals yet', noReferrals: 'You have no referrals yet',
+2 -1
View File
@@ -100,7 +100,8 @@ const fa: Translations = {
youAreActive: 'شما فعال هستید!', youAreActive: 'شما فعال هستید!',
iAmActive: 'من فعال هستم!', iAmActive: 'من فعال هستم!',
activatedAlert: 'شما اکنون فعال هستید! پس از ۲۴ ساعت دوباره کلیک کنید.', activatedAlert: 'شما اکنون فعال هستید! پس از ۲۴ ساعت دوباره کلیک کنید.',
shareText: 'Pezkuwichain - دولت دیجیتال کردستان! از طریق لینک من بپیوندید:', shareText: 'دوست عزیزم، کردستان دیجیتال تأسیس شد، جایگاهت را بگیر!',
referralInstruction: 'این آدرس را در قسمت ارجاع بچسبانید:',
copyAlert: 'کپی شد', copyAlert: 'کپی شد',
referralCount: '{count} دعوت (KYC تأیید شده)', referralCount: '{count} دعوت (KYC تأیید شده)',
noReferrals: 'شما هنوز دعوتی ندارید', noReferrals: 'شما هنوز دعوتی ندارید',
+2 -1
View File
@@ -104,7 +104,8 @@ const krd: Translations = {
iAmActive: 'Ez Akt\u00eev im!', iAmActive: 'Ez Akt\u00eev im!',
activatedAlert: 'Tu niha akt\u00eev \u00ee! 24 saet pa\u015f\u00ea d\u00eesa bikirt\u00eene.', activatedAlert: 'Tu niha akt\u00eev \u00ee! 24 saet pa\u015f\u00ea d\u00eesa bikirt\u00eene.',
shareText: shareText:
'Pezkuwichain - Dewleta D\u00eej\u00eetal a Kurd! Bi l\u00eenka min ve tev li me bibe:', 'Heval\u00ea min \u00ea h\u00eaja, Kurdistan\u00ea D\u00eej\u00eetal hat ava kirin, tu j\u00ee c\u00eeh\u00ea xwe bigire!',
referralInstruction: 'V\u00ea navnî\u015fan\u00ea li beşa referral\u00ea bileq\u00eene:',
copyAlert: 'Kop\u00ee b\u00fb', copyAlert: 'Kop\u00ee b\u00fb',
referralCount: '{count} referral (KYC pejirand\u00ee)', referralCount: '{count} referral (KYC pejirand\u00ee)',
noReferrals: 'H\u00eaj referral\u00ean te tune ne', noReferrals: 'H\u00eaj referral\u00ean te tune ne',
+2 -1
View File
@@ -100,7 +100,8 @@ const tr: Translations = {
youAreActive: 'Aktifsiniz!', youAreActive: 'Aktifsiniz!',
iAmActive: 'Aktifim!', iAmActive: 'Aktifim!',
activatedAlert: 'Artık aktifsiniz! 24 saat sonra tekrar tıklayın.', activatedAlert: 'Artık aktifsiniz! 24 saat sonra tekrar tıklayın.',
shareText: 'Pezkuwichain - Kürdistan Dijital Devleti! Bağlantımdan bize katılın:', shareText: 'Sevgili dostum, Dijital Kurdistan kuruldu, sen de yerini al!',
referralInstruction: 'Referral kısmına bu adresi yapıştır:',
copyAlert: 'Kopyalandı', copyAlert: 'Kopyalandı',
referralCount: '{count} davet (KYC onaylı)', referralCount: '{count} davet (KYC onaylı)',
noReferrals: 'Henüz davetiniz yok', noReferrals: 'Henüz davetiniz yok',
+1
View File
@@ -103,6 +103,7 @@ export interface Translations {
iAmActive: string; iAmActive: string;
activatedAlert: string; activatedAlert: string;
shareText: string; shareText: string;
referralInstruction: string;
copyAlert: string; copyAlert: string;
referralCount: string; referralCount: string;
noReferrals: string; noReferrals: string;
+17 -7
View File
@@ -27,7 +27,7 @@ import {
} from 'lucide-react'; } from 'lucide-react';
import { cn, formatAddress } from '@/lib/utils'; import { cn, formatAddress } from '@/lib/utils';
import { useTelegram } from '@/hooks/useTelegram'; import { useTelegram } from '@/hooks/useTelegram';
import { useAuth } from '@/contexts/AuthContext';
import { useReferral } from '@/contexts/ReferralContext'; import { useReferral } from '@/contexts/ReferralContext';
import { useWallet } from '@/contexts/WalletContext'; import { useWallet } from '@/contexts/WalletContext';
import { SocialLinks } from '@/components/SocialLinks'; import { SocialLinks } from '@/components/SocialLinks';
@@ -72,7 +72,7 @@ const ACTIVITY_DURATION_MS = 24 * 60 * 60 * 1000; // 24 hours
export function RewardsSection() { export function RewardsSection() {
const { hapticImpact, hapticNotification, shareUrl, showAlert } = useTelegram(); const { hapticImpact, hapticNotification, shareUrl, showAlert } = useTelegram();
const { user: authUser } = useAuth();
const { stats, myReferrals, loading, refreshStats } = useReferral(); const { stats, myReferrals, loading, refreshStats } = useReferral();
const { isConnected, address, peopleApi, assetHubApi, keypair } = useWallet(); const { isConnected, address, peopleApi, assetHubApi, keypair } = useWallet();
const { t } = useTranslation(); const { t } = useTranslation();
@@ -358,14 +358,19 @@ export function RewardsSection() {
showAlert(t('rewards.activatedAlert')); showAlert(t('rewards.activatedAlert'));
}; };
// Telegram referral link (for sharing) - use authenticated user ID // Citizenship referral link - wallet address in start param for auto-fill
const referralLink = authUser?.telegram_id const referralLink = address
? `https://t.me/pezkuwichainBot?start=ref_${authUser.telegram_id}` ? `https://t.me/pezkuwichainBot?start=${address}`
: 'https://t.me/pezkuwichainBot'; : 'https://t.me/pezkuwichainBot';
// Full share message: invitation text + link + wallet address for manual paste
const shareMessage = address
? `${t('rewards.shareText')}\n${referralLink}\n\n${t('rewards.referralInstruction')}\n${address}`
: `${t('rewards.shareText')}\n${referralLink}`;
const handleCopy = async () => { const handleCopy = async () => {
try { try {
await window.navigator.clipboard.writeText(referralLink); await window.navigator.clipboard.writeText(shareMessage);
setCopied(true); setCopied(true);
hapticNotification('success'); hapticNotification('success');
setTimeout(() => setCopied(false), 2000); setTimeout(() => setCopied(false), 2000);
@@ -376,7 +381,12 @@ export function RewardsSection() {
const handleShare = () => { const handleShare = () => {
hapticImpact('medium'); hapticImpact('medium');
shareUrl(referralLink, t('rewards.shareText')); shareUrl(
referralLink,
address
? `${t('rewards.shareText')}\n\n${t('rewards.referralInstruction')}\n${address}`
: t('rewards.shareText')
);
}; };
const handleRefresh = () => { const handleRefresh = () => {
+3 -3
View File
@@ -1,5 +1,5 @@
{ {
"version": "1.0.227", "version": "1.0.229",
"buildTime": "2026-02-27T23:03:36.173Z", "buildTime": "2026-02-27T23:33:39.279Z",
"buildNumber": 1772233416174 "buildNumber": 1772235219280
} }