Logger (Server-side)
Logger
onPlayerConnectionSpam
ทำงานเมื่อผู้เล่นเชื่อมต่อบ่อยและเร็วเกินกำ หนด
function Logger.onPlayerConnectionSpam(payload)
local isBlocked <const> = payload.data.isBlocked
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_ConnectionSpam',
content = '### ผู้เล่นพยายามเชื่อมต่อบ่อยและเร็วเกินกำหนด',
fields = {
{ name = 'IDENTIFIER', value = ('```%s```'):format(payload.player.identifier), inline = false },
{ name = 'ACTIONS', value = ('```%s```'):format(isBlocked and '🚫 ➔ Blocked' or '⏳ ➔ Cooldown'), inline = true },
{ name = 'ATTEMPTS', value = ('```%s```'):format(payload.data.attempts), inline = true },
{ name = 'LAST ATTEMPTS', value = ('```%s```'):format(os.date('%Y-%m-%d %H:%M:%S', payload.data.lastAttempt)), inline = false }
},
source = 0,
color = (isBlocked and 1 or 3),
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ player: table, data: table }>
- ตารางข้อมูล
- player:
table<{ [key]: any }>
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- tempId:
integer
- Temp ID ของผู้เล่น
- identifier:
string
- ตัวระบุหลัก ของผู้เล่น
- bindId:
string
|nil
- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- tempId:
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- data:
table<{ [key]: any }>
- ข้อมูลการเชื่อมต่อบ่อยและเร็วเกินกำหนด
- attempts:
integer
- จำนวนครั้งที่พยายาม
- lastAttempt:
integer
- พยายามครั้งสุดท้ายเวลา (Unix time)
- isBlocked:
boolean
- ค่าเป็น
true
หากถูกบล็อคแล้ว
- ค่าเป็น
- reason:
string
- เหตุผลที่ปฏิเสธการเชื่อมต่อ
- attempts:
- ข้อมูลการเชื่อมต่อบ่อยและเร็วเกินกำหนด
- player:
- ตารางข้อมูล
onPlayerPingExceeded
ทำงานเมื่อการตอบสนองของเครือข่ายผู้เล่นช้าเกินกำหนด
function Logger.onPlayerPingExceeded(payload)
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_PingExceeded',
content = '### การตอบสนองของเครือข่ายผู้เล่นช้าเกินกำหนด',
fields = {
{ name = 'IDENTIFIER', value = ('```%s```'):format(payload.player.identifier), inline = false },
{ name = 'PLAYER PING', value = ('```📶 ➔ %d ms```'):format(payload.player.ping), inline = false }
},
source = 0,
color = 1,
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ player: table }>
- ตารางข้อมูล
- player:
table<{ [key]: any }>
- ข้อมูลข องผู้เล่นเมื่อเชื่อมต่อ
- tempId:
integer
- Temp ID ของผู้เล่น
- identifier:
string
- ตัวระบุหลัก ของผู้เล่น
- bindId:
string
|nil
- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- ping:
integer
- ค่า Ping ของผู้เล่น
- tempId:
- ข้อมูลข องผู้เล่นเมื่อเชื่อมต่อ
- player:
- ตารางข้อมูล
onBannedHwidDetected
ทำงานเมื่อผู้เล่นเชื่อมต่อและตรวจพบ HWIDs ของผู้เล่นอื่นที่ถูกแบน
function Logger.onBannedHwidDetected(payload)
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_BannedHwidDetected',
content = '### ตรวจพบการเชื่อมต่อจาก HWID Tokens ที่เกี่ยวข้องกับผู้เล่นที่ถูกแบน',
fields = {
{ name = 'IDENTIFIER', value = ('```%s```'):format(payload.player.identifier), inline = false },
{ name = 'MATCHED HWIDs', value = ('```%s```'):format(json.encode(payload.data.matchedHwids, { indent = true })), inline = false },
{ name = 'BAN REFERENCE ID', value = ('```%s```'):format(payload.data.banId), inline = false },
{ name = 'BANNED IDENTIFIER', value = ('```%s```'):format(payload.data.identifier), inline = false },
{ name = 'BANNED DETAILS', value = ('```%s```'):format(json.encode(payload.data.banDetails, { indent = true })), inline = false }
},
source = 0,
color = payload.data.banDetails?.type == 'temporary' and 3 or 1,
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ player: table, data: table }>
- ตารางข้อมูล
- player:
table<{ [key]: any }>
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- tempId:
integer
- Temp ID ของผู้เล่น
- identifier:
string
- ตัวระบุหลัก ของผู้เล่น
- bindId:
string
|nil
- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- hwids:
table<{ [index]: string }>
- ข้อมูล HWIDs ของผู้เล่นที่พบเมื่อเชื่อมต่อ
- tempId:
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- data:
table<{ [key]: any }>
- ข้อมูลของผู้เล่นที่ถูกแบน
- matchedHwids:
table<{ [index]: string }>
- ข้อมูล HWIDs ที่ตรงกัน
- identifier:
string
- ตัวระบุของผู้เล่นที่ถูกแบน
- banId:
string
- รหัสอ้างอิงการแบน
- banDetails:
table<{ [key]: any }>
|nil
- matchedHwids:
- ข้อมูลของผู้เล่นที่ถูกแบน
- player:
- ตารางข้อมูล
onBannedIdentifierDetected
ทำงานเมื่อผู้เล่นเชื่อมต่อและตรวจพบ Identifiers ของผู้เล่นที่ถูกแบน
function Logger.onBannedIdentifierDetected(payload)
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_BannedIdDetected',
content = '### ตรวจพบการเชื่อมต่อจาก Identifier ของผู้เล่นที่ถูกแบน',
fields = {
{ name = 'IDENTIFIER', value = ('```%s```'):format(payload.player.identifier), inline = false },
{ name = 'BANNED DETAILS', value = ('```%s```'):format(json.encode(payload.data.banDetails, { indent = true })), inline = false }
},
source = 0,
color = payload.data.banDetails?.type == 'temporary' and 3 or 1,
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ player: table, data: table }>
- ตารางข้อมูล
- player:
table<{ [key]: any }>
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- tempId:
integer
- Temp ID ของผู้เล่น
- identifier:
string
- ตัวระบุหลัก ของผู้เล่น
- bindId:
string
|nil
- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- tempId:
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- data:
table<{ [key]: any }>
- ข้อมูลการแบน
- status:
table<{ id: integer, name: string }>
- ข้อมูลสถานะการถูกแบน
- banDetails:
table<{ [key]: any }>
|nil
- status:
- ข้อมูลการแบน
- player:
- ตารางข้อมูล
onPlayerTempPointsExpired
ทำงานเมื่อคิวพอยท์แบบชั่วคราวของผู้เล่นหมดอายุแล้ว
function Logger.onPlayerTempPointsExpired(payload)
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_TempPointsExpired',
content = ('### คิวพอยท์ของผู้เล่นหมดอายุแล้ว `%d` พอยท์ จาก `%d` คงเหลือ `%d` พอยท์'):format(payload.data.expiredPoints, payload.data.totalPoints, payload.data.currentPoints),
fields = {
{ name = 'IDENTIFIER', value = ('```%s```'):format(payload.player.identifier), inline = false },
{ name = 'EXPIRED POINTS', value = ('```%s```'):format(json.encode(payload.data.expiredData, { indent = true })), inline = false },
{ name = 'CURRENT POINTS', value = ('```%s```'):format(json.encode(payload.data.currentData, { indent = true })), inline = false }
},
source = 0,
color = 1,
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ player: table, data: table }>
- ตารางข้อมูล
- player:
table<{ [key]: any }>
- ข้อมูลของผู้เล่น
- identifier:
string
- ตัวระบุหลัก ของผู้เล่น
- identifier:
- ข้อมูลของผู้เล่น
- data:
table<{ [key]: any }>
- ข้อมูลคิวพ้อยท์
- totalPoints:
integer
- จำนวนคิวพ้อยท์ทั้งหมด
- expiredPoints:
integer
- จำนวนคิวพ้อยท์ที่หมดอายุ
- currentPoints:
integer
- จำนวนคิวพ้อยท์ปัจจุบัน
- expiredData:
table<{ [index]: table<{ value: integer, expiry_datetime: string }> }>
- ข้อมูลคิวพ้อยท์แบบชั่วคราวที่หมดอายุแล้ว
- currentData:
table<{ permanent: integer, temporary: table<{ [index]: table }> }>
- totalPoints:
- ข้อมูลคิวพ้อยท์
- player:
- ตารางข้อมูล
onPlayerBanned
ทำงานเมื่อผู้เล่นถูกแบนชั่วคราวหรือถาวร
function Logger.onPlayerBanned(payload)
local banType <const> = payload.data.banDetails.type
local fields <const> = { { name = 'IDENTIFIER', value = ('```%s```'):format(payload.player.identifier), inline = false } }
if payload.player.bindId then
fields[#fields + 1] = { name = 'BOUND ID', value = ('```%s```'):format(payload.player.bindId), inline = false }
end
if payload.data.banId then
fields[#fields + 1] = { name = 'BAN REFERENCE ID', value = ('```%s```'):format(payload.data.banId), inline = false }
end
if payload.data.banHwids then
fields[#fields + 1] = { name = 'BANNED HWIDs', value = ('```%s```'):format(json.encode(payload.data.banHwids, { indent = true })), inline = false }
end
fields[#fields + 1] = { name = 'BANNED DETAILS', value = ('```%s```'):format(json.encode(payload.data.banDetails, { indent = true })), inline = false }
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_PlayerBanned',
content = ('### ผู้เล่นถูกแบน %s เนื่องจาก "%s"'):format((banType == 'permanent' and 'ถาวร' or 'ชั่วคราว'), payload.data.banDetails.reason),
fields = fields,
source = 0,
color = (banType == 'permanent' and 1 or 3),
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ player: table, data: table }>
- ตารางข้อมูล
- player:
table<{ [key]: any }>
- ข้อมูลของผู้เล่น
- tempId:
integer
|nil
- Temp ID ของผู้เล่น
- identifier:
string
- ตัวระบุหลัก ของผู้เล่น
- bindId:
string
|nil
- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- tempId:
- ข้อมูลของผู้เล่น
- data:
table<{ [key]: any }>
- ข้อมูลของผู้เล่นที่ถูกแบน
- banId:
string
|nil
- รหัสอ้างอิงการแบน
- banHwids:
table<{ [index]: string }>
|nil
- ข้อมูล HWIDs ทีถูกแบน
- banDetails:
table<{ [key]: any }>
- banId:
- ข้อมูลของผู้เล่นที่ถูกแบน
- player:
- ตารางข้อมูล
onPlayerUnbanned
ทำงานเมื่อผู้เล่นถูกยกเลิกการแบนแล้ว
function Logger.onPlayerUnbanned(payload)
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_PlayerUnbanned',
content = '### ผู้เล่นถูกยกเลิกการแบนแล้ว',
fields = {
{ name = 'IDENTIFIER', value = ('```%s```'):format(payload.player.identifier), inline = false },
{ name = 'BOUND ID', value = ('```%s```'):format(payload.player.bindId), inline = false },
{ name = 'HWIDs', value = ('```%s```'):format(json.encode(payload.data.banHwids, { indent = true })), inline = false },
{ name = 'BAN DETAILS', value = ('```%s```'):format(json.encode(payload.data.banDetails, { indent = true })), inline = false },
{ name = 'UNBAN BY', value = ('```%s```'):format(payload.data.unbanBy), inline = false }
},
source = 0,
color = 2,
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ player: table, data: table }>
- ตารางข้อมูล
- player:
table<{ [key]: any }>
- ข้อมูลของผู้เล่น
- tempId:
integer
|nil
- Temp ID ของผู้เล่น
- identifier:
string
- ตัวระบุหลัก ของผู้เล่น
- bindId:
string
|nil
- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- tempId:
- ข้อมูลของผู้เล่น
- data:
table<{ [key]: any }>
- ข้อมูลยกเลิกการแบน
- unbanBy:
string
- ยกเลิกแบนโดย
- banHwids:
table<{ [index]: string }>
|nil
- ข้อมูล HWIDs ทียกเลิกแบน
- banDetails:
table<{ [key]: any }>
- unbanBy:
- ข้อมูลยกเลิกการแบน
- player:
- ตารางข้อมูล
onPlayerInactiveDetected
ทำงานเมื่อผู้เล่นไม่ได้เข้าร่วมเซิร์ฟเวอร์ตามระยะเวลาที่กำหนดและถูกระงับการใช้งานแล้ว
function Logger.onPlayerInactiveDetected(payload)
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_InactiveDetected',
content = ('### ผู้เล่นไม่ได้เชื่อมต่อกับเซิร์ฟเวอร์นานเกิน `%s` วัน และสิ ทธิ์การเชื่อมต่อของผู้เล่นถูกระงับ'):format(payload.data.limit_days),
fields = {
{ name = 'IDENTIFIER', value = ('```%s```'):format(payload.player.identifier), inline = false },
{ name = 'LAST SEEN', value = ('```%s```'):format(payload.data.last_seen), inline = false }
},
source = 0,
color = 1,
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ player: table, data: table }>
- ตารางข้อมูล
- player:
table<{ [key]: any }>
- ข้อมูลของผู้เล่น
- tempId:
integer
|nil
- Temp ID ของผู้เล่น
- identifier:
string
- ตัวระบุหลัก ของผู้เล่น
- bindId:
string
|nil
- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- tempId:
- ข้อมูลของผู้เล่น
- data:
table<{ [key]: any }>
- ข้อมูลการถูกระงับ
- last_seen:
string
- วันที่และเวลาที่พบผู้เล่นครั้งล่าสุด ในรูปแบบ
YYYY-MM-DD HH:MM:SS
เช่น"2026-05-21 14:33:00"
- วันที่และเวลาที่พบผู้เล่นครั้งล่าสุด ในรูปแบบ
- limit_days:
integer
- last_seen:
- ข้อมูลการถูกระงับ
- player:
- ตารางข้อมูล
onPlayerBoundIdMismatch
ทำงานเมื่อผู้เล่นเชื่อมต่อและใช้งานบัญชีที่ผูกไว้ไม่ตรงกับฐานข้อมูล
function Logger.onPlayerBoundIdMismatch(payload)
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_BoundIdMismatch',
content = '### ผู้เล่นเชื่อมต่อด้วยตัวระบุบัญชีที่ไม่ตรงกับบัญชีที่ผูกไว้ในฐานข้อมูล',
fields = {
{ name = 'IDENTIFIER', value = ('```%s```'):format(payload.player.identifier), inline = false },
{ name = 'BOUND ID', value = ('```%s```'):format(payload.data.boundId), inline = false },
{ name = 'CONNECTION ID', value = ('```%s```'):format(payload.player.bindId), inline = false },
},
source = 0,
color = 1,
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ player: table, data: table }>
- ตารางข้อมูล
- player:
table<{ [key]: any }>
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- tempId:
integer
- Temp ID ของผู้เล่น
- identifier:
string
- ตัวระบุหลัก ของผู้เล่น
- bindId:
string
|nil
- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- tempId:
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- data:
table<{ [key]: any }>
- ข้อมูลของผู้เล่น
- boundId:
string
- ตัวระบุที่ผูกไว้กับตัวระบุหลัก บนฐานข้อมูล
- boundId:
- ข้อมูลของผู้เล่น
- player:
- ตารางข้อมูล
onPlayerDataStored
ทำงานเมื่อมีการบันทึกข้อมูลผู้เล่นไปยังฐานข้อมูลของเซิร์ฟเวอร์
function Logger.onPlayerDataStored(payload)
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_PlayerDataStored',
content = '### บันทึกข้อมูลผู้เล่นไปยังฐานข้อมูลของเซิร์ฟเวอร์',
fields = {
{ name = 'IDENTIFIER', value = ('```%s```'):format(payload.player.identifier), inline = false },
{ name = 'BOUND ID', value = ('```%s```'):format(payload.player.bindId), inline = false },
{ name = 'PLAYER DATA', value = ('```%s```'):format(json.encode(payload.data, { indent = true })), inline = false }
},
source = 0,
color = 2,
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ player: table, data: table }>
- ตารางข้อมูล
- player:
table<{ [key]: any }>
- ข้อมูลของผู้เล่น
- identifier:
string
- ตัวระบุหลัก ของผู้เล่น
- bindId:
string
|nil
- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- identifier:
- ข้อมูลของผู้เล่น
- data:
table<{ [key]: any }>
- ข้อมูลของผู้เล่น ที่บันทึกไปยังฐานข้อมูล
- player:
- ตารางข้อมูล
onPlayerDataDeleted
ทำงานเมื่อข้อมูลผู้เล่นถูกลบออกจากฐานข้อมูลของเซิร์ฟเวอร์
function Logger.onPlayerDataDeleted(payload)
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_PlayerDataDeleted',
content = '### ลบข้อมูลผู้เล่นออกจากฐานข้อมูลของเซิร์ฟเวอร์',
fields = {
{ name = 'IDENTIFIER', value = ('```%s```'):format(payload.player.identifier), inline = false },
{ name = 'PLAYER DATA', value = ('```%s```'):format(json.encode(payload.data, { indent = true })), inline = false }
},
source = 0,
color = 1,
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ player: table, data: table }>
- ตารางข้อมูล
- player:
table<{ [key]: any }>
- ข้อมูลของผู้เล่น
- identifier:
string
- ตัวระบุหลัก ของผู้เล่น
- identifier:
- ข้อมูลของผู้เล่น
- data:
table<{ [key]: any }>
- ข้อมูลของผู้เล่น ที่ถูกลบออกจากฐานข้อมูล
- player:
- ตารางข้อมูล
onPlayerIdentifierUpdated
ทำงานเมื่อมีการอัปเดทตัวระบุของผู้เล่นใหม่
function Logger.onPlayerIdentifierUpdated(payload)
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_IdentifierUpdated',
content = '### อัปเดตตัวระบุหลักของผู้เล่นใหม่',
fields = {
{ name = 'OLD IDENTIFIER', value = ('```%s```'):format(payload.player.identifier), inline = false },
{ name = 'NEW IDENTIFIER', value = ('```%s```'):format(payload.player.newIdentifier), inline = false },
{ name = 'PLAYER DATA', value = ('```%s```'):format(json.encode(payload.data, { indent = true })), inline = false }
},
source = 0,
color = 5,
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ player: table, data: table }>
- ตา รางข้อมูล
- player:
table<{ [key]: any }>
- ข้อมูลของผู้เล่น
- identifier:
string
- ตัวระบุเก่า ของผู้เล่น
- newIdentifier:
string
- ตัวระบุใหม่ ของผู้เล่น
- identifier:
- ข้อมูลของผู้เล่น
- data:
table<{ [key]: any }>
- ข้อมูลของผู้เล่น บนฐานข้อมูล
- player:
- ตา รางข้อมูล
onPlayerBoundIdUpdated
ทำงานเมื่อผู้เล่นเชื่อมต่อและอัปเดตตัวระบุการผูกบัญชีใหม่
function Logger.onPlayerBoundIdUpdated(payload)
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_BoundIdUpdated',
content = '### ผู้เล่นเชื่อมต่อและอัปเดตตัวระบุการผูกบัญชีใหม่',
fields = {
{ name = 'IDENTIFIER', value = ('```%s```'):format(payload.player.identifier), inline = false },
{ name = 'BOUND ID', value = ('```%s```'):format(payload.data.boundId), inline = false }
},
source = 0,
color = 5,
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ player: table, data: table }>
- ตารางข้อมูล
- player:
table<{ [key]: any }>
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- tempId:
integer
- Temp ID ของผู้เล่น
- identifier:
string
- ตัวระบุหลัก ของผู้เล่น
- bindId:
string
|nil
- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- tempId:
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- data:
table<{ [key]: any }>
- ข้อมูลของผู้เล่น
- boundId:
string
- boundId:
- ข้อมูลของผู้เล่น
- player:
- ตารางข้อมูล
onPlayerAwardedLuckySlots
ทำงานเมื่อผู้เล่นได้รับรางวัลจากกิจกรรม Lucky Slots ของระบบ Queue
function Logger.onPlayerAwardedLuckySlots(payload)
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_AwardedLuckySlots',
content = ('### ผู้เล่นชนะ Lucky Slots ทั้งหมด `%d` ครั้ง และได้รับรางวัล Queue Points จำนวน `%d` แต้ม'):format(#payload.data.rawData, payload.data.rewardPoints),
fields = {
{ name = 'IDENTIFIER', value = ('```%s```'):format(payload.player.identifier), inline = false },
{ name = 'PREV POINTS', value = ('```%s```'):format((payload.data.totalPoints - payload.data.rewardPoints)), inline = true },
{ name = 'NEW POINTS', value = ('```%s```'):format(payload.data.rewardPoints), inline = true },
{ name = 'TOTAL POINTS', value = ('```%s```'):format(payload.data.totalPoints), inline = true },
{ name = 'RAW DATA', value = ('```%s```'):format(json.encode(payload.data.rawData, { indent = true })), inline = false },
{ name = 'MERGED DATA', value = ('```%s```'):format(json.encode(payload.data.mergedData, { indent = true })), inline = false }
},
source = 0,
color = 2,
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ player: table, data: table }>
- ตารางข้อมูล
- player:
table<{ [key]: any }>
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- tempId:
integer
|nil
- Temp ID ของผู้เล่น
- identifier:
string
- ตัวระบุหลัก ของผู้เล่น
- tempId:
- ข้อมูลของผู้เล่นเมื่อเชื่อมต่อ
- data:
table<{ [key]: any }>
- ข้อมูลรางวัลคิวพ้อยท์ที่ได้รับ
- rawData:
table<{ [index]: table<{ points: integer, days: integer|nil }> }>
- ข้อมูลดิบคิวพ้อยท์ (ยังไม่ได้รวมข้อมูลคิวพ้อยท์ทีเหมือนกัน)
- points:
integer
- จำนวนคิวพ้อยท์ที่ได้รับ
- days:
integer
|nil
- จำนวนวันหมดอายุของคิวพอยท์
- points:
- ข้อมูลดิบคิวพ้อยท์ (ยังไม่ได้รวมข้อมูลคิวพ้อยท์ทีเหมือนกัน)
- mergedData:
table<{ [index]: table<{ points: integer, days: integer|nil }> }>
- ข้อมูลคิวพ้อยท์ที่ได้รับ (รวมข้อมูลคิวพ้อยท์ทีเหมือนกันแล้ว)
- points:
integer
- จำนวนคิวพ้อยท์ที่ได้รับ
- days:
integer
|nil
- จำนวนวันหมดอายุของคิวพอยท์
- points:
- ข้อมูลคิวพ้อยท์ที่ได้รับ (รวมข้อมูลคิวพ้อยท์ทีเหมือนกันแล้ว)
- rewardPoints:
integer
- จำนวน คิวพ้อยท์ที่ได้รับ
- totalPoints:
integer
- จำนวนคิวพ้อยท์ทั้งหมดที่ผู้เล่นมีอยู่
- rawData:
- ข้อมูลรางวัลคิวพ้อยท์ที่ได้รับ
- player:
- ตารางข้อมูล
onPlayerAirtimeUpdated
ทำงานเมื่อแอร์ไทม์ของผู้เล่นมีการเปลี่ยนแปลง
function Logger.onPlayerAirtimeUpdated(payload)
local oldAirtime <const> = payload.data.oldAirtime
local newAirtime <const> = payload.data.newAirtime
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_AirtimeUpdated',
content = ('### แอร์ไทม์ของผู้เล่นมีการเปลี่ยนแปลง `%d` วินาที'):format((newAirtime - oldAirtime)),
fields = {
{ name = 'IDENTIFIER', value = ('```%s```'):format(payload.player.identifier), inline = false },
{ name = 'PREVIOUS AIRTIME', value = ('```%s```'):format(oldAirtime), inline = true },
{ name = 'CURRENT AIRTIME', value = ('```%s```'):format(newAirtime), inline = true },
{ name = 'REMAINING AIRTIME', value = ('```%s```'):format(payload.data.airtimeLeft), inline = false }
},
source = (payload.player.netId or 0),
color = (newAirtime > oldAirtime and 2 or 1),
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ player: table, data: table }>
- ตารางข้อมูล
- player:
table<{ [key]: any }>
- ข้อมูลของผู้เล่น
- netId:
integer
|nil
- Net ID ของผู้เล่น
- identifier:
string
|nil
- ตัวระบุหลัก ของ ผู้เล่น
- bindId:
string
|nil
- ตัวระบุที่ผูกไว้กับตัวระบุหลัก ของผู้เล่น
- netId:
- ข้อมูลของผู้เล่น
- data:
table<{ [key]: any }>
- ข้อมูลการเปลี่ยนแปลงของแอร์ไทม์
- oldAirtime:
integer
- จำนวนแอร์ไทม์คงเหลือก่อนมีการเปลี่ยนแปลง
- newAirtime:
integer
- จำนวนแอร์ไทม์คงเหลือหลังมีการเปลี่ยนแปลง
- airtimeLeft:
string
- แอร์ไทม์คงเหลือ (ตัวอย่าง:
"1 วัน 18 ชั่วโมง 22 นาที 2 วินาที"
)
- แอร์ไทม์คงเหลือ (ตัวอย่าง:
- oldAirtime:
- ข้อมูลการเปลี่ยนแปลงของแอร์ไทม์
- player:
- ตารางข้อมูล
onCommandExecuted
ทำงานเมื่อดำเนินการใช้คำสั่งเสร็จสิ้นแล้ว
function Logger.onCommandExecuted(payload)
local command <const> = payload.data.command
local success <const> = payload.data.success
local actionBy <const> = payload.type == 'http' and payload.invoker.address
or payload.type == 'export' and payload.invoker.resource
or (payload.type == 'console' and payload.invoker.player.netId > 0) and 'Client Console'
or payload.type == 'console' and 'Server Console'
or 'Unknown'
pcall(function()
exports['azael_dc-serverlogs']:insertData({
event = 'APP_ExecuteCommands',
content = ('### ใช้งานคำสั่ง `%s` %s'):format(command.name, (success and 'สำเร็จ' or 'ล้มเหลว')),
fields = {
{ name = 'COMMAND KEY', value = ('```%s```'):format(command.key), inline = true },
{ name = 'COMMAND NAME', value = ('```%s```'):format(command.name), inline = true },
{ name = 'RAW COMMAND', value = ('```%s```'):format(command.raw), inline = false },
{ name = 'EXECUTED FROM', value = ('```%s```'):format(actionBy), inline = false },
{ name = 'EXECUTED STATUS', value = ('```%s```'):format((success and '✔️ ➔ Success' or '❌ ➔ Failed')), inline = false },
{ name = 'EXECUTED RESPONSE', value = ('```%s```'):format(json.encode(payload.data.response, { indent = true })), inline = false }
},
source = (payload.type == 'console' and payload.invoker.player.netId or 0),
color = (success and 2 or 1),
options = {
codeblock = false
}
})
end)
end
Parameters
- payload:
table<{ [key]: any }>
- ตารางข้อมูลของคำสั่งที่ใช้งาน
- type:
string
- ใช้คำสั่งผ่านช่องทางใด
http
,export
,console
- ใช้คำสั่งผ่านช่องทางใด
- invoker:
table<{ [key]: any }>
- ข้อมูลของการเรียกใช้คำสั่ง
- resource:
string
|nil
- ชื่อทรัพยากรที่เรียกใช้คำสั่งผ่าน Export Functions
- address:
string
|nil
- ที่อยู่ IP และหมายเลข Port ที่เรียกใช้คำสั่งผ่าน HTTP Handler
- player:
table<{ netId: integer, identifier: string|nil }>
|nil
- resource:
- ข้อมูลของการเรียกใช้คำสั่ง
- data:
table<{ [key]: any }>
- ข้อมูลของคำสั่งที่ใช้งาน
- command:
table<{ [key]: any }>
- ข้อมูลของคำสั่งที่ใช้งาน (ดูรายละเอียดด้านล่าง)
- success:
boolean
- สถานะการใช้งานคำสั่ง
- response:
table<{ [key]: any }>
- ข้อมูลตอบกลับของคำสั่ง (ดูรายละเอียดด้านล่าง)
- command:
- ข้อมูลของคำสั่งที่ใช้งาน
- type:
- ตารางข้อมูลของคำสั่งที่ใช้งาน
- command
- response
Field | Type | Description |
---|---|---|
key | string | คีย์ของคำสั่ง |
name | string | ชื่อของคำสั่ง |
raw | string | ข้อมูลของคำสั่งที่ใช้ |
args | table<{ [index]: string }> | ข้อมูลอาร์กิวเมนต์ของคำสั่งที่ใช้ |
ข้อมูลตอบกลับเมื่อใช้คำสั่งสำเร็จ คุณสามารถดูรายละเอียดได้ที่ respHandler
Field | Type | Description |
---|---|---|
type | string | ประเภทของข้อผิดพลาด |
message | string | ข้อความของข้อผิดพลาด |