(client: TelegramClient, winner: any, prizeText: string, lottery: any)
| 582 | `🏆 <b>活动名称:</b> ${htmlEscape(lottery.title)}\n` + |
| 583 | `🎁 <b>奖品内容:</b> ${htmlEscape(prizeText)}\n\n` + |
| 584 | `📝 <b>中奖详情:</b>\n` + |
| 585 | `• 活动: ${htmlEscape(lottery.title)}\n` + |
| 586 | `• 中奖用户: ${htmlEscape(displayName)}\n` + |
| 587 | `• 中奖时间: ${new Date().toLocaleString("zh-CN", { timeZone: "Asia/Shanghai" })}\n\n` + |
| 588 | `🎊 <b>感谢您的参与,祝您好运!</b>\n` + |
| 589 | `💡 <b>提示:</b> 如有疑问请联系活动发起者`; |
| 590 | |
| 591 | await client.sendMessage(winner.user_id, { |
| 592 | message: prizeMessage, |
| 593 | parseMode: "html", |
| 594 | }); |
| 595 | |
| 596 | // Update status to sent |
| 597 | const updateStmt = db.prepare(` |
| 598 | UPDATE lottery_winners |
| 599 | SET status = ?, claimed_at = ? |
| 600 | WHERE lottery_id = ? AND user_id = ? |
| 601 | `); |
| 602 | updateStmt.run(PrizeStatus.SENT, Date.now(), lottery.id, String(winner.user_id)); |
| 603 | |
| 604 | console.log(`Prize sent to user ${winner.user_id} (${displayName})`); |
| 605 | return true; |
| 606 | } catch (error) { |
| 607 | console.error(`Failed to send prize to user ${winner.user_id}:`, error); |
| 608 | return false; |
| 609 | } |
| 610 | } |
| 611 | |
| 612 | // Format user line for display |
| 613 | function formatUserLine(uid: number, userObj?: any): string { |
| 614 | let displayName = ""; |
| 615 | let username = ""; |
| 616 | |
| 617 | if (userObj) { |
| 618 | if (userObj.firstName && userObj.lastName) { |
| 619 | displayName = `${userObj.firstName} ${userObj.lastName}`; |
| 620 | } else if (userObj.firstName) { |
| 621 | displayName = userObj.firstName; |
| 622 | } else if (userObj.lastName) { |
no test coverage detected