functional ttv-obfuscated-names
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
import { NameConfigInstance, NameConfig, nameList, colorList } from './options'
|
||||
|
||||
type StoredUsers = {
|
||||
[username: string]: NameConfigInstance
|
||||
}
|
||||
type NameListUsed = {
|
||||
[username: string]: number
|
||||
}
|
||||
|
||||
interface StoredData {
|
||||
storedUsers: StoredUsers
|
||||
nameListUsed: NameListUsed
|
||||
nameListCount: number
|
||||
}
|
||||
|
||||
let { storedUsers, nameListUsed, nameListCount } = loadStoredUserData()
|
||||
|
||||
export function getStoredUser(name: string): NameConfigInstance | null {
|
||||
if (name in storedUsers) {
|
||||
return storedUsers[name]
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
export function setStoredUser(name: string, details: NameConfigInstance) {
|
||||
storedUsers[name] = details
|
||||
updateStorageData()
|
||||
}
|
||||
|
||||
export function increaseNameListUsed(name: string) {
|
||||
nameListUsed[name] = (nameListUsed[name] ?? 0) + 1
|
||||
updateStorageData()
|
||||
}
|
||||
|
||||
export function increaseNameListCount() {
|
||||
nameListCount++
|
||||
updateStorageData()
|
||||
}
|
||||
|
||||
function updateStorageData() {
|
||||
localStorage.setItem(
|
||||
'obf-data',
|
||||
JSON.stringify({
|
||||
storedUsers,
|
||||
nameListUsed,
|
||||
nameListCount,
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
function loadStoredUserData(): StoredData {
|
||||
const dataStr = localStorage.getItem('obf-data')
|
||||
if (dataStr === null) {
|
||||
return {
|
||||
storedUsers: {},
|
||||
nameListUsed: {},
|
||||
nameListCount: 0,
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
const data = JSON.parse(dataStr)
|
||||
return data as StoredData
|
||||
} catch (e) {
|
||||
return {
|
||||
storedUsers: {},
|
||||
nameListUsed: {},
|
||||
nameListCount: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO will be useful for better options
|
||||
export function clearStoredUsers() {}
|
||||
|
||||
export function getRandomName(): NameConfigInstance {
|
||||
const startingIndex = Math.round(Math.random() * (nameList.length - 1))
|
||||
let foundName = false
|
||||
let currentIndex = startingIndex
|
||||
|
||||
for (let i = 0; i < nameList.length; i++) {
|
||||
currentIndex = (startingIndex + i) % nameList.length
|
||||
|
||||
let isUsed = nameListUsed[nameList[currentIndex].username] ?? 0
|
||||
if (isUsed === nameListCount) {
|
||||
foundName = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if (!foundName) {
|
||||
increaseNameListCount()
|
||||
currentIndex = startingIndex
|
||||
}
|
||||
|
||||
increaseNameListUsed(nameList[currentIndex].username)
|
||||
|
||||
const newName = nameList[currentIndex]
|
||||
const newNameInstance: NameConfigInstance = {
|
||||
username: newName.username,
|
||||
image: newName.image,
|
||||
color: '',
|
||||
nameCount: nameListCount,
|
||||
}
|
||||
|
||||
// choose a random color from the list
|
||||
if (Array.isArray(newName.color)) {
|
||||
const color =
|
||||
newName.color[
|
||||
Math.round(Math.random() * (newName.color.length - 1))
|
||||
]
|
||||
|
||||
newNameInstance.color = color
|
||||
return newNameInstance
|
||||
}
|
||||
|
||||
// choose a random color from the global list
|
||||
if (newName.color === null) {
|
||||
const color =
|
||||
colorList[Math.round(Math.random() * (colorList.length - 1))]
|
||||
|
||||
newNameInstance.color = color
|
||||
return newNameInstance
|
||||
}
|
||||
|
||||
// copy individual carbing
|
||||
newNameInstance.color = newName.color
|
||||
return newNameInstance
|
||||
}
|
||||
Reference in New Issue
Block a user