diff --git a/manifest.json b/manifest.json index e320a2c..a6a3036 100644 --- a/manifest.json +++ b/manifest.json @@ -49,6 +49,7 @@ "src/faceit/service/service.js", "src/faceit/service/profiles.js", "src/faceit/service/integrations.js", + "src/faceit/reputation/reputation.js", "src/module/moduleManager.js" ] } diff --git a/src/faceit/reputation/reputation.js b/src/faceit/reputation/reputation.js new file mode 100644 index 0000000..24225bf --- /dev/null +++ b/src/faceit/reputation/reputation.js @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2025 TerraMiner. All Rights Reserved. + */ + +const REPUTATION_TOXIC = 'toxic'; +const REPUTATION_FRIENDLY = 'friendly'; +const REPUTATION_NEUTRAL = 'neutral'; +const REPUTATION_STORAGE_KEY = 'player_reputation'; + +async function getPlayerReputation(playerId) { + try { + const result = await CLIENT_STORAGE.get([REPUTATION_STORAGE_KEY]); + const data = result[REPUTATION_STORAGE_KEY] || {}; + const entry = data[playerId]; + if (!entry) return null; + return { rating: entry.rating, updatedAt: entry.updatedAt, meetCount: entry.meetCount || 0 }; + } catch (e) { + error('getPlayerReputation failed', e); + return null; + } +} + +async function setPlayerReputation(playerId, rating) { + try { + const result = await CLIENT_STORAGE.get([REPUTATION_STORAGE_KEY]); + const data = result[REPUTATION_STORAGE_KEY] || {}; + const existing = data[playerId] || {}; + data[playerId] = { rating, updatedAt: Date.now(), meetCount: existing.meetCount || 0 }; + await CLIENT_STORAGE.set({ [REPUTATION_STORAGE_KEY]: data }); + } catch (e) { + error('setPlayerReputation failed', e); + } +} + +async function incrementMeetCount(playerId) { + try { + const result = await CLIENT_STORAGE.get([REPUTATION_STORAGE_KEY]); + const data = result[REPUTATION_STORAGE_KEY] || {}; + const entry = data[playerId] || { rating: REPUTATION_NEUTRAL, updatedAt: 0, meetCount: 0 }; + entry.meetCount = (entry.meetCount || 0) + 1; + if (!data[playerId]) data[playerId] = { rating: REPUTATION_NEUTRAL, updatedAt: 0, meetCount: 0 }; + data[playerId] = { ...data[playerId], meetCount: entry.meetCount }; + await CLIENT_STORAGE.set({ [REPUTATION_STORAGE_KEY]: data }); + } catch (e) { + error('incrementMeetCount failed', e); + } +} + +async function resetPlayerReputation(playerId) { + try { + const result = await CLIENT_STORAGE.get([REPUTATION_STORAGE_KEY]); + const data = result[REPUTATION_STORAGE_KEY] || {}; + const existing = data[playerId]; + if (!existing) return; + const meetCount = existing.meetCount || 0; + data[playerId] = { rating: REPUTATION_NEUTRAL, updatedAt: Date.now(), meetCount }; + await CLIENT_STORAGE.set({ [REPUTATION_STORAGE_KEY]: data }); + } catch (e) { + error('resetPlayerReputation failed', e); + } +} + +async function getAllReputations() { + try { + const result = await CLIENT_STORAGE.get([REPUTATION_STORAGE_KEY]); + return result[REPUTATION_STORAGE_KEY] || {}; + } catch (e) { + error('getAllReputations failed', e); + return {}; + } +} diff --git a/src/faceit/resources/templates.js b/src/faceit/resources/templates.js index 70d0516..4eece02 100644 --- a/src/faceit/resources/templates.js +++ b/src/faceit/resources/templates.js @@ -12,6 +12,8 @@ let MATCH_COUNTER_ARROW_TEMPLATE; let MATCH_HISTORY_POPUP_TEMPLATE; let PLAYER_WINRATE_TABLE_TEMPLATE; let TEAM_WINRATE_TABLE_TEMPLATE; +let PLAYER_REPUTATION_BADGE_TEMPLATE; +let PLAYER_REPUTATION_INLINE_TEMPLATE; let SKILL_LEVELS_INFO_TABLE_TEMPLATE; let FORECAST_STYLES_TEMPLATE; @@ -28,6 +30,8 @@ function initTemplates() { MATCH_HISTORY_POPUP_TEMPLATE = htmlToElement(MATCH_HISTORY_POPUP_HTML); PLAYER_WINRATE_TABLE_TEMPLATE = htmlToElement(PLAYER_WINRATE_TABLE_HTML); TEAM_WINRATE_TABLE_TEMPLATE = htmlToElement(TEAM_WINRATE_TABLE_HTML); + PLAYER_REPUTATION_BADGE_TEMPLATE = htmlToElement(PLAYER_REPUTATION_BADGE_HTML); + PLAYER_REPUTATION_INLINE_TEMPLATE = htmlToElement(PLAYER_REPUTATION_INLINE_HTML); SKILL_LEVELS_INFO_TABLE_TEMPLATE = htmlToElement(SKILL_LEVELS_INFO_TABLE_HTML); FORECAST_STYLES_TEMPLATE = htmlToElement(FORECAST_STYLES_HTML); } @@ -519,6 +523,26 @@ const TEAM_WINRATE_TABLE_HTML = /*language=HTML*/ ` `; +const PLAYER_REPUTATION_INLINE_HTML = /*language=HTML*/ ` +