Configure BTCPay with external nodes via Tor
- Set up Tor container for SOCKS proxy (port 9050) - Configured Monero wallet with remote onion node - Bitcoin node continues syncing in background (60% complete) - Created documentation for wallet configuration steps - All external connections routed through Tor for privacy BTCPay requires manual wallet configuration through web interface: - Bitcoin: Need to add xpub/zpub for watch-only wallet - Monero: Need to add address and view key System ready for payment acceptance once wallets configured.
This commit is contained in:
80
LittleShop/Models/BotContact.cs
Normal file
80
LittleShop/Models/BotContact.cs
Normal file
@@ -0,0 +1,80 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace LittleShop.Models;
|
||||
|
||||
/// <summary>
|
||||
/// Tracks all contacts for each bot, enabling contact recovery and migration
|
||||
/// </summary>
|
||||
public class BotContact
|
||||
{
|
||||
[Key]
|
||||
public Guid Id { get; set; }
|
||||
|
||||
// Bot Association
|
||||
[Required]
|
||||
public Guid BotId { get; set; }
|
||||
public virtual Bot Bot { get; set; } = null!;
|
||||
|
||||
// Telegram User Information
|
||||
[Required]
|
||||
public long TelegramUserId { get; set; }
|
||||
|
||||
[StringLength(100)]
|
||||
public string TelegramUsername { get; set; } = string.Empty;
|
||||
|
||||
[Required]
|
||||
[StringLength(200)]
|
||||
public string DisplayName { get; set; } = string.Empty;
|
||||
|
||||
[StringLength(50)]
|
||||
public string FirstName { get; set; } = string.Empty;
|
||||
|
||||
[StringLength(50)]
|
||||
public string LastName { get; set; } = string.Empty;
|
||||
|
||||
// Contact Metadata
|
||||
public DateTime FirstContactDate { get; set; }
|
||||
public DateTime LastContactDate { get; set; }
|
||||
public int TotalInteractions { get; set; }
|
||||
public string LastKnownLanguage { get; set; } = "en";
|
||||
|
||||
// Relationship Status
|
||||
public ContactStatus Status { get; set; } = ContactStatus.Active;
|
||||
public string? StatusReason { get; set; }
|
||||
|
||||
// Customer Link (if they've made purchases)
|
||||
public Guid? CustomerId { get; set; }
|
||||
public virtual Customer? Customer { get; set; }
|
||||
|
||||
// Recovery Information
|
||||
public bool IsRecovered { get; set; } = false;
|
||||
public Guid? RecoveredFromBotId { get; set; }
|
||||
public DateTime? RecoveredAt { get; set; }
|
||||
|
||||
// Backup Metadata
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public DateTime UpdatedAt { get; set; }
|
||||
public bool IsActive { get; set; } = true;
|
||||
|
||||
// Additional Contact Info (encrypted/hashed)
|
||||
[StringLength(500)]
|
||||
public string? EncryptedContactData { get; set; } // For storing additional contact methods
|
||||
|
||||
// Preferences and Notes
|
||||
[StringLength(500)]
|
||||
public string? Preferences { get; set; } // JSON string of user preferences
|
||||
|
||||
[StringLength(1000)]
|
||||
public string? Notes { get; set; } // Admin notes about this contact
|
||||
}
|
||||
|
||||
public enum ContactStatus
|
||||
{
|
||||
Active,
|
||||
Inactive,
|
||||
Blocked,
|
||||
Migrated,
|
||||
Lost,
|
||||
Recovered
|
||||
}
|
||||
Reference in New Issue
Block a user