diff --git a/squad-server/plugins/db-log.js b/squad-server/plugins/db-log.js index e3eb64af..bfa7bc4b 100644 --- a/squad-server/plugins/db-log.js +++ b/squad-server/plugins/db-log.js @@ -146,6 +146,43 @@ export default class DBLog extends BasePlugin { } ); + this.createModel( + 'ChatMessage', + { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement: true + }, + time: { + type: DataTypes.DATE, + notNull: true + }, + chat: { + type: DataTypes.STRING + }, + message: { + type: DataTypes.TEXT + }, + steamid: { + type: DataTypes.STRING + }, + squadName: { + type: DataTypes.STRING + }, + squadID: { + type: DataTypes.INTEGER + }, + team: { + type: DataTypes.INTEGER + } + }, + { + charset: 'utf8mb4', + collate: 'utf8mb4_unicode_ci' + } + ); + this.createModel( 'Wound', { @@ -329,6 +366,11 @@ export default class DBLog extends BasePlugin { onDelete: 'CASCADE' }); + this.models.Server.hasMany(this.models.ChatMessage, { + foreignKey: { name: 'server', allowNull: false }, + onDelete: 'CASCADE' + }); + this.models.SteamUser.hasMany(this.models.Wound, { foreignKey: { name: 'attacker' }, onDelete: 'CASCADE' @@ -389,12 +431,18 @@ export default class DBLog extends BasePlugin { onDelete: 'CASCADE' }); + this.models.Match.hasMany(this.models.ChatMessage, { + foreignKey: { name: 'match' }, + onDelete: 'CASCADE' + }); + this.onTickRate = this.onTickRate.bind(this); this.onUpdatedA2SInformation = this.onUpdatedA2SInformation.bind(this); this.onNewGame = this.onNewGame.bind(this); this.onPlayerWounded = this.onPlayerWounded.bind(this); this.onPlayerDied = this.onPlayerDied.bind(this); this.onPlayerRevived = this.onPlayerRevived.bind(this); + this.onChatMessage = this.onChatMessage.bind(this); } createModel(name, schema) { @@ -412,6 +460,7 @@ export default class DBLog extends BasePlugin { await this.models.Wound.sync(); await this.models.Death.sync(); await this.models.Revive.sync(); + await this.models.ChatMessage.sync(); } async mount() { @@ -430,6 +479,7 @@ export default class DBLog extends BasePlugin { this.server.on('PLAYER_WOUNDED', this.onPlayerWounded); this.server.on('PLAYER_DIED', this.onPlayerDied); this.server.on('PLAYER_REVIVED', this.onPlayerRevived); + this.server.on('CHAT_MESSAGE', this.onChatMessage); } async unmount() { @@ -439,6 +489,21 @@ export default class DBLog extends BasePlugin { this.server.removeEventListener('PLAYER_WOUNDED', this.onPlayerWounded); this.server.removeEventListener('PLAYER_DIED', this.onPlayerDied); this.server.removeEventListener('PLAYER_REVIVED', this.onPlayerRevived); + this.server.removeEventListener('CHAT_MESSAGE', this.onChatMessage); + } + + async onChatMessage(info) { + await this.models.ChatMessage.create({ + server: this.options.overrideServerID || this.server.id, + match: this.match ? this.match.id : null, + time: info.time, + steamid: info.player.steamID, + chat: info.chat, + message: info.message, + squadName: info.player.squad ? info.player.squad.squadName : null, + squadID: info.player.squadID || null, + team: info.player.teamID + }); } async onTickRate(info) {