Payment In Game
การตั้งค่า config.js
การตั้งค่าหลักของ Devil Market Addons (config.js)
ไฟล์ devil_marketaddons/config/config.js เก็บค่าตั้งค่าทั้งหมดที่ไม่ใช่ secret ค่าที่เป็น secret ควรเก็บใน .env
แยก secret ออกจาก config.js
ค่าที่เป็นข้อมูลลับ (API Key, Token, Password) อย่าใส่ใน config.js ให้ใส่ใน .env แทน แล้วอ้างอิงผ่าน process.env.XXX
โครงสร้างหลัก
const config = {
database: { ... },
discord: { ... },
api: { ... },
game: { ... },
debug: { ... },
thunderVerify: { ... },
promptpay: { ... },
promptpayQR: { ... },
mobileUpload: { ... },
twvoucher: { ... },
tmweasyapi: { ... },
qrCode: { ... }
}ฐานข้อมูล (database)
database: {
host: process.env.DB_HOST || 'localhost',
user: process.env.DB_USER || 'root',
password: process.env.DB_PASSWORD || '',
database: process.env.DB_NAME || 'esxlegacy_c0e9d5'
}ค่า default จะใช้ถ้าไม่ได้ตั้งใน .env
Discord Bot (discord)
Token และ Server
discord: {
token: process.env.DISCORD_BOT_TOKEN || '',
guildIds: ['946242086456422401'], // ID เซิร์ฟเวอร์ที่อนุญาต
roleAdmin: '1041366153341173823', // Role ที่มีสิทธิ์แอดมิน
enableDonationPanel: false, // true = แสดงปุ่มโดเนท
}ห้อง Discord
channels: {
donation: '949189626965418034', // ห้องให้ผู้เล่นกดโดเนท
donationLog: '949189662122053672', // ห้อง log
adminConfirm: '946484662728019978', // ห้องแอดมินยืนยันสลิป
acceptPersonal: '1220853097509814392', // แจ้งผลแอดมิน (มีรูป)
cancelPersonal: '1220853111279849483',
acceptPublic: '1220853062441242715', // แจ้งผลผู้เล่น (ไม่มีรูป)
cancelPublic: '1220853080782798848'
}หน้าตาปุ่มโดเนท
donationPanel: {
buttonMessage: 'กดปุ่มเพื่อโดเนท',
buttonEmoji: '✅',
buttonStyle: ButtonStyle.Danger,
title: 'Devil Donation Bot',
iconURL: 'https://...',
description: 'คำอธิบาย...',
imageURL: 'https://...',
colors: '#ff0003'
}API Server (api)
api: {
port: 30000, // Port ที่ API ใช้
host: process.env.API_HOST || '127.0.0.1', // ผูก IP
apiSecret: process.env.DEVIL_API_SECRET || '',
requireApiSecret: process.env.DEVIL_API_SECRET_REQUIRED !== 'false',
bodyLimit: '10mb', // ขนาดไฟล์ที่รับได้ (base64 +33%)
publicBaseUrl: process.env.PUBLIC_BASE_URL || '',
enableLocalhostRun: process.env.LOCALHOST_RUN_ENABLED !== 'false',
localhostRunHost: 'localhost.run',
localhostRunUser: 'nokey',
localhostRunForwardHost: '127.0.0.1',
localhostRunRemotePort: 80,
sshPath: 'ssh'
}หมายเหตุ
apiSecretต้องตรงกับConfig_Main.Settings.Licenseในฝั่ง FiveMbodyLimit- รูปภาพ base64 จะมีขนาดใหญ่กว่าต้นฉบับ ~33%- ถ้าไม่มี
publicBaseUrlระบบจะใช้localhost.runอัตโนมัติ (ไม่ต้องสมัคร)
เกม (game)
game: {
rateDonate: 1, // 1 บาท = X Point
pointTable: 'devil_point', // ชื่อตารางเก็บ Point
identifier: {
type: 'char', // 'steam' หรือ 'char'
steamPrefix: 'steam:',
charPrefix: 'char1:'
}
}โหมด Debug
debug: {
enabled: process.env.NODE_ENV === 'development',
showDatabaseLogs: process.env.NODE_ENV === 'development',
showDiscordLogs: process.env.NODE_ENV === 'development',
showApiLogs: process.env.NODE_ENV === 'development',
showPromptPayLogs: process.env.NODE_ENV === 'development'
}ปิด Debug ใน production
แนะนำให้ปิดใน production เพื่อไม่ให้ข้อมูลสำคัญหลุดไปใน log
Thunder Verify
thunderVerify: {
apiUrl: process.env.THUNDER_API_URL || 'https://api.thunder.in.th/v2/verify/bank',
apiKey: process.env.THUNDER_API_KEY || ''
}PromptPay (Stripe)
promptpay: {
enabled: true,
stripeSecretKey: process.env.STRIPE_SECRET_KEY || '',
minAmount: 10,
maxAmount: 100000,
exchangeRate: 1,
sessionTimeout: 900, // หน่วย: วินาที
cacheTimeout: 5,
autoAddPoints: true,
saveToHistory: true,
notifyPlayer: true
}PromptPay QR (ธรรมดา)
promptpayQR: {
enabled: true,
promptpayNumber: process.env.PROMPTPAY_NUMBER || '',
accountName: 'Devil Market',
bankInfo: 'PromptPay',
minAmount: 10,
maxAmount: 100000,
exchangeRate: 1,
qrSize: 1000,
qrFormat: 'svg',
cacheEnabled: true,
cacheTTL: 900
}Mobile Upload
mobileUpload: {
enabled: true,
minAmount: 10,
maxAmount: 100000,
sessionTimeoutSeconds: 900,
pollIntervalMs: 3000,
maxFileSizeBytes: 5 * 1024 * 1024, // 5 MB
allowedMimeTypes: ['image/jpeg', 'image/png']
}TrueMoney Voucher
twvoucher: {
enabled: true,
phoneNumber: process.env.TW_VOUCHER_PHONE || '',
exchangeRate: 1
}TMWeasyAPI
tmweasyapi: {
enabled: true,
apiUrl: process.env.TMWEASY_API_URL || 'https://tmwallet.thaighost.net/api_pph.php',
username: process.env.TMWEASY_USERNAME || '',
password: process.env.TMWEASY_PASSWORD || '',
conId: process.env.TMWEASY_CON_ID || '',
apiKey: process.env.TMWEASY_API_KEY || '',
promptpayId: process.env.TMWEASY_PROMPTPAY_ID || '',
promptpayType: '01',
minAmount: 1,
maxAmount: 100000,
exchangeRate: 1,
sessionTimeout: 900,
autoAddPoints: true,
saveToHistory: true,
notifyPlayer: true
}QR Code Style
qrCode: {
enabled: true, // true = QR สวยงาม
apiUrl: 'https://api.qrcode-monkey.com/qr/custom',
style: {
body: 'rounded-pointed',
eye: 'frame6',
eyeBall: 'ball17',
bodyColor: '#000000',
bgColor: '#FFFFFF',
eye1Color: '#000000',
eye2Color: '#000000',
eye3Color: '#000000',
eyeBall1Color: '#000000',
eyeBall2Color: '#000000',
eyeBall3Color: '#000000',
gradientColor1: '#FFE100',
gradientColor2: '#FF0000',
gradientType: 'radial',
gradientOnEyes: 'true',
logo: 'b283becc4fea901148944f8486a2fbbc4285272e.png',
logoMode: 'clean'
},
size: 1000,
file: 'svg',
download: 'imageUrl',
cacheEnabled: true,
cacheTTL: 900
}Helper Functions
config.isDevelopment = () => process.env.NODE_ENV === 'development';
config.isProduction = () => process.env.NODE_ENV === 'production';
config.isTest = () => process.env.NODE_ENV === 'test';
config.getEnvironment = () => process.env.NODE_ENV || 'development';การปรับแต่งทั่วไป
เปลี่ยนอัตรา Point
game: {
rateDonate: 10 // 1 บาท = 10 Point
}เปิดใช้เฉพาะบางช่องทางเติมเงิน
ปิดช่องทางที่ไม่ใช้:
promptpay: {
enabled: false // ปิด Stripe
},
tmweasyapi: {
enabled: false // ปิด TMWeasyAPI
}เปลี่ยน Port API
api: {
port: 30001 // เปลี่ยน port
}อย่าลืม sync ค่ากับฝั่ง FiveM
ถ้าเปลี่ยน api.port ต้องแก้ apiUrl ใน devil_market/config/config_topup.lua ให้ตรงกันด้วย มิฉะนั้นฝั่งเกมจะเชื่อมต่อ API ไม่ได้