Devil HunterDevil Docs
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

โครงสร้างหลัก

config/config.js
const config = {
  database: { ... },
  discord: { ... },
  api: { ... },
  game: { ... },
  debug: { ... },
  thunderVerify: { ... },
  promptpay: { ... },
  promptpayQR: { ... },
  mobileUpload: { ... },
  twvoucher: { ... },
  tmweasyapi: { ... },
  qrCode: { ... }
}

ฐานข้อมูล (database)

config/config.js
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

config/config.js
discord: {
  token: process.env.DISCORD_BOT_TOKEN || '',

  guildIds: ['946242086456422401'],          // ID เซิร์ฟเวอร์ที่อนุญาต
  roleAdmin: '1041366153341173823',          // Role ที่มีสิทธิ์แอดมิน
  enableDonationPanel: false,                // true = แสดงปุ่มโดเนท
}

ห้อง Discord

config/config.js
channels: {
  donation: '949189626965418034',            // ห้องให้ผู้เล่นกดโดเนท
  donationLog: '949189662122053672',         // ห้อง log
  adminConfirm: '946484662728019978',        // ห้องแอดมินยืนยันสลิป
  acceptPersonal: '1220853097509814392',     // แจ้งผลแอดมิน (มีรูป)
  cancelPersonal: '1220853111279849483',
  acceptPublic: '1220853062441242715',       // แจ้งผลผู้เล่น (ไม่มีรูป)
  cancelPublic: '1220853080782798848'
}

หน้าตาปุ่มโดเนท

config/config.js
donationPanel: {
  buttonMessage: 'กดปุ่มเพื่อโดเนท',
  buttonEmoji: '✅',
  buttonStyle: ButtonStyle.Danger,
  title: 'Devil Donation Bot',
  iconURL: 'https://...',
  description: 'คำอธิบาย...',
  imageURL: 'https://...',
  colors: '#ff0003'
}

API Server (api)

config/config.js
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 ในฝั่ง FiveM
  • bodyLimit - รูปภาพ base64 จะมีขนาดใหญ่กว่าต้นฉบับ ~33%
  • ถ้าไม่มี publicBaseUrl ระบบจะใช้ localhost.run อัตโนมัติ (ไม่ต้องสมัคร)

เกม (game)

config/config.js
game: {
  rateDonate: 1,                             // 1 บาท = X Point
  pointTable: 'devil_point',                 // ชื่อตารางเก็บ Point
  identifier: {
    type: 'char',                            // 'steam' หรือ 'char'
    steamPrefix: 'steam:',
    charPrefix: 'char1:'
  }
}

โหมด Debug

config/config.js
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

config/config.js
thunderVerify: {
  apiUrl: process.env.THUNDER_API_URL || 'https://api.thunder.in.th/v2/verify/bank',
  apiKey: process.env.THUNDER_API_KEY || ''
}

PromptPay (Stripe)

config/config.js
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 (ธรรมดา)

config/config.js
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

config/config.js
mobileUpload: {
  enabled: true,
  minAmount: 10,
  maxAmount: 100000,
  sessionTimeoutSeconds: 900,
  pollIntervalMs: 3000,
  maxFileSizeBytes: 5 * 1024 * 1024,          // 5 MB
  allowedMimeTypes: ['image/jpeg', 'image/png']
}

TrueMoney Voucher

config/config.js
twvoucher: {
  enabled: true,
  phoneNumber: process.env.TW_VOUCHER_PHONE || '',
  exchangeRate: 1
}

TMWeasyAPI

config/config.js
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

config/config.js
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/config.js
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

config/config.js
game: {
  rateDonate: 10                             // 1 บาท = 10 Point
}

เปิดใช้เฉพาะบางช่องทางเติมเงิน

ปิดช่องทางที่ไม่ใช้:

config/config.js
promptpay: {
  enabled: false                             // ปิด Stripe
},
tmweasyapi: {
  enabled: false                             // ปิด TMWeasyAPI
}

เปลี่ยน Port API

config/config.js
api: {
  port: 30001                                // เปลี่ยน port
}

อย่าลืม sync ค่ากับฝั่ง FiveM

ถ้าเปลี่ยน api.port ต้องแก้ apiUrl ใน devil_market/config/config_topup.lua ให้ตรงกันด้วย มิฉะนั้นฝั่งเกมจะเชื่อมต่อ API ไม่ได้

On this page