add norank to wrank formatting

This commit is contained in:
Nuno Duque Nunes 2026-06-05 03:59:26 +01:00
parent 77c065114c
commit 88f53dff32
12 changed files with 142 additions and 505 deletions

16
.env
View file

@ -1,16 +0,0 @@
DISCORD_TOKEN=MTUxMDk1OTgxNDYyMzEwNTA0NA.GNY7A9.Boq4MruKRqvo1UZ5JmsCkYN7q1xCTNKuqyh1oA
POLL_CHANNEL_ID=1511006387293917355
RESULTS_CHANNEL_ID=1511006410627088544
SCORE_CHANNEL_ID=1511006435079884991
CLIENT_ID=1510959814623105044
GUILD_ID=1511006171681652858
EPHEMERAL_DELETE_MS=0
POLL_EPHEMERAL_ENABLED=false # voting messages (disabled during testing)
COMMAND_EPHEMERAL_ENABLED=true # command outputs (always on)
AUTO_VOTE_ON_CONFLICT_SWITCH=true
IMPERSONATE_RESET_ON_POLL=false
IMPERSONATE_INDICATOR=true
RECLAIM_NOTIFY_BORROWER=true
# Emoji upload servers
EMOJI_DONOR_GUILDS=1511903882224336926,1511904145810915449

4
.gitignore vendored
View file

@ -13,13 +13,11 @@ data/wrank.json
data/bringer.json data/bringer.json
data/sessionPreferences.json data/sessionPreferences.json
data/tg-history/ data/tg-history/
data/poll-state.json
<<<<<<< HEAD
=======
# Emoji data # Emoji data
emoji-uploads/ emoji-uploads/
>>>>>>> dev
# Keep the data directory structure but not the contents # Keep the data directory structure but not the contents
!data/.gitkeep !data/.gitkeep
!data/tg-history/.gitkeep !data/tg-history/.gitkeep

View file

@ -1,124 +0,0 @@
{
"flash": {
"characters": [
{
"name": "«Flash»",
"class": "FB",
"level": 79,
"nation": "Procyon",
"active": false,
"sharedWith": [
"invicjusz"
]
},
{
"name": "»Flash«",
"class": "WI",
"level": 79,
"nation": "Procyon",
"active": true,
"sharedWith": [
"invicjusz"
]
}
]
},
"zephyr": {
"characters": [
{
"name": "XefronYokuda",
"class": "FA",
"level": 79,
"nation": "Capella",
"active": true
}
]
},
"dey": {
"characters": [
{
"name": "«Deystroyer»",
"class": "BL",
"level": 79,
"nation": "Capella",
"active": true,
"sharedWith": [
"flash"
]
}
]
},
"keira": {
"characters": [
{
"name": "«Keira»",
"class": "WI",
"level": 79,
"nation": "Capella",
"active": true
}
]
},
"ayana": {
"characters": [
{
"name": "«MonkeyHunter»",
"class": "DM",
"level": 79,
"nation": "Procyon",
"active": true
}
]
},
"invicjusz": {
"characters": [
{
"name": "ElementalEnchant",
"class": "FB",
"level": 76,
"nation": "Procyon",
"active": true
}
]
},
"marin": {
"characters": [
{
"name": "iMarieLaveau",
"class": "DM",
"level": 79,
"nation": "Capella",
"active": true
}
]
},
"cobain": {
"characters": [
{
"name": "Ancano",
"class": "DM",
"level": 75,
"nation": "Capella",
"active": true
}
]
},
"sean": {
"characters": [
{
"name": "»No.1«",
"class": "FB",
"level": 79,
"nation": "Capella",
"active": true
},
{
"name": "«No.1»",
"class": "GL",
"level": 79,
"nation": "Capella",
"active": false
}
]
}
}

View file

@ -1,26 +0,0 @@
[
{
"messageId": "1511906795667456040",
"slot": 20,
"yes": [
[
"164487045052497920",
{
"userKey": "flash",
"displayName": "flash",
"characterName": "»Flash«",
"characterClass": "WI",
"characterLevel": 79,
"characterNation": "Procyon",
"discordId": "164487045052497920",
"votedAt": "03:53",
"previousNoAt": "03:53",
"publicMessage": "Flash? Flash? Flash!!"
}
]
],
"no": [],
"locked": false,
"confirmed": null
}
]

View file

@ -1,84 +0,0 @@
{
"slot": 20,
"date": "2026-06-01",
"confirmed": false,
"nationKD": {
"source": "Procyon",
"capella": {
"k": 8,
"d": 49
},
"procyon": {
"k": 49,
"d": 8
}
},
"scores": [
{
"usermapKey": "flash",
"characterName": "»Flash«",
"class": "WI",
"nation": "Procyon",
"pts": 2490,
"submittedAt": "2026-06-01T18:41:43.076Z",
"slot": 20,
"date": "2026-06-01",
"submittedByOfficer": false
},
{
"usermapKey": "invicjusz",
"characterName": "ElementalEnchant",
"class": "FB",
"nation": "Procyon",
"pts": 948,
"submittedAt": "2026-06-01T18:42:39.059Z",
"slot": 20,
"date": "2026-06-01",
"submittedByOfficer": true
},
{
"usermapKey": "ayana",
"characterName": "«MonkeyHunter»",
"class": "DM",
"nation": "Procyon",
"pts": 2535,
"submittedAt": "2026-06-01T18:48:50.902Z",
"slot": 20,
"date": "2026-06-01",
"submittedByOfficer": true
},
{
"usermapKey": "zephyr",
"characterName": "XefronYokuda",
"class": "FA",
"nation": "Capella",
"pts": 943,
"submittedAt": "2026-06-01T18:54:19.398Z",
"slot": 20,
"date": "2026-06-01",
"submittedByOfficer": false
},
{
"usermapKey": "dey",
"characterName": "«Deystroyer»",
"class": "BL",
"nation": "Capella",
"pts": 2236,
"submittedAt": "2026-06-01T19:09:05.313Z",
"slot": 20,
"date": "2026-06-01",
"submittedByOfficer": false
},
{
"usermapKey": "keira",
"characterName": "«Keira»",
"class": "WI",
"nation": "Capella",
"pts": 2000,
"submittedAt": "2026-06-02T10:15:05.313Z",
"slot": 20,
"date": "2026-06-01",
"submittedByOfficer": false
}
]
}

View file

@ -1,29 +0,0 @@
{
"slot": 22,
"date": "2026-06-01",
"confirmed": false,
"nationKD": {
"source": "Procyon",
"capella": {
"k": 0,
"d": 0
},
"procyon": {
"k": 0,
"d": 0
}
},
"scores": [
{
"usermapKey": "flash",
"characterName": "»Flash«",
"class": "WI",
"nation": "Procyon",
"pts": 1000,
"submittedAt": "2026-06-01T22:05:28.186Z",
"slot": 22,
"date": "2026-06-01",
"submittedByOfficer": false
}
]
}

View file

@ -1,119 +0,0 @@
{
"2026-W23": {
"weekKey": "2026-W23",
"entries": {
"capella": [
{
"userKey": "zephyr",
"characterName": "XefronYokuda",
"class": "FA",
"nation": "Capella",
"weeklyPoints": 2126,
"tgCount": 3,
"currentRank": 3,
"previousRank": 3
},
{
"userKey": "dey",
"characterName": "«Deystroyer»",
"class": "BL",
"nation": "Capella",
"weeklyPoints": 4940,
"tgCount": 3,
"currentRank": 1,
"previousRank": 2
},
{
"userKey": "keira",
"characterName": "«Keira»",
"class": "WI",
"nation": "Capella",
"weeklyPoints": 4000,
"tgCount": 2,
"currentRank": 2,
"previousRank": 1
},
{
"userKey": "sean",
"characterName": "»No.1«",
"class": "FB",
"nation": "Capella",
"weeklyPoints": 1666,
"tgCount": 1,
"currentRank": 4,
"previousRank": 4
}
],
"procyon": [
{
"userKey": "flash",
"characterName": "»Flash«",
"class": "WI",
"nation": "Procyon",
"weeklyPoints": 8872,
"tgCount": 3,
"currentRank": 1,
"previousRank": 1
},
{
"userKey": "invicjusz",
"characterName": "ElementalEnchant",
"class": "FB",
"nation": "Procyon",
"weeklyPoints": 2503,
"tgCount": 2,
"currentRank": 3,
"previousRank": 3
},
{
"userKey": "ayana",
"characterName": "«MonkeyHunter»",
"class": "DM",
"nation": "Procyon",
"weeklyPoints": 4741,
"tgCount": 2,
"currentRank": 2,
"previousRank": 2
}
]
},
"scoreIndex": {
"flash": [
"2026-06-01-20",
"2026-06-02-20",
"2026-06-03-20"
],
"invicjusz": [
"2026-06-01-20",
"2026-06-02-20"
],
"ayana": [
"2026-06-01-20",
"2026-06-02-20"
],
"zephyr": [
"2026-06-01-20",
"2026-06-02-20",
"2026-06-03-20"
],
"dey": [
"2026-06-01-20",
"2026-06-02-20",
"2026-06-03-20"
],
"keira": [
"2026-06-01-20",
"2026-06-02-20"
],
"sean": [
"2026-06-02-20"
]
},
"bringer": {
"capella": null,
"procyon": null,
"procyonOverride": "»Flash«",
"capellaOverride": "XefronYokuda"
}
}
}

View file

@ -1,17 +1,17 @@
services: services:
tg-bot-dev: tg-bot:
build: build:
context: /opt/docker/tg-bot-ts-dev context: /opt/docker/tg-bot-ts
image: tg-bot-ts-dev:latest image: tg-bot-ts:latest
container_name: tg-bot-ts-dev container_name: tg-bot-ts
restart: unless-stopped restart: unless-stopped
env_file: env_file:
- /opt/docker/tg-bot-ts-dev/.env - /opt/docker/tg-bot-ts/.env
volumes: volumes:
- /opt/docker/tg-bot-ts-dev/src:/app/src - /opt/docker/tg-bot-ts/src:/app/src
- /opt/docker/tg-bot-ts-dev/data:/app/data - /opt/docker/tg-bot-ts/data:/app/data
- /opt/docker/tg-bot-ts-dev/scripts:/app/scripts - /opt/docker/tg-bot-ts-dev/scripts:/app/scripts
- /opt/docker/tg-bot-ts-dev/messages:/app/messages - /opt/docker/tg-bot-ts/messages:/app/messages
- /opt/docker/tg-bot-ts-dev/emoji-uploads:/app/emoji-uploads - /opt/docker/tg-bot-ts-dev/emoji-uploads:/app/emoji-uploads
- /opt/docker/tg-bot-ts-dev/tsconfig.json:/app/tsconfig.json - /opt/docker/tg-bot-ts-dev/tsconfig.json:/app/tsconfig.json
- /opt/docker/tg-bot-ts-dev/data/sessionPreferences.json:/app/data/sessionPreferences.json - /opt/docker/tg-bot-ts-dev/data/sessionPreferences.json:/app/data/sessionPreferences.json

View file

@ -1,48 +1,4 @@
{ {
<<<<<<< HEAD
"capella": "<:Capella:1477082112560726238>",
"procyon": "<:Procyon:1477082175181426738>",
"bl": "<:bl:1510827912767475742>",
"fb": "<:fb:1510825907374395452>",
"fs": "<:fs:1510828058112954501>",
"fa": "<:fa:1510823955034935326>",
"fg": "<:fg:1510822372373037207>",
"gl": "<:gl:1510826513484873909>",
"dm": "<:dm:1510820686971670538>",
"wi": "<:wi:1510805237047230464>",
"wa": "<:wa:1510827932376109218>",
"wrank_up": "",
"wrank_down": "",
"atk": "",
"def": "",
"heal": "",
"wrank_neutral": "",
"wrank_1": "",
"wrank_1_gold": "",
"wrank_2": "",
"wrank_2_gold": "",
"wrank_3": "",
"wrank_3_gold": "",
"wrank_4": "",
"wrank_4_gold": "",
"wrank_5": "",
"wrank_5_gold": "",
"wrank_6": "",
"wrank_6_gold": "",
"wrank_7": "",
"wrank_7_gold": "",
"wrank_8": "",
"wrank_8_gold": "",
"wrank_9": "",
"wrank_9_gold": "",
"wrank_10": "",
"wrank_10_gold": "",
"kd": "<:kd:1510999195782217768>",
"score": "<:score:1510999256901750884>",
"rank": "<:rank:1510999225998249995>",
"borrowed": "<:share:1511000283973550080>"
}
=======
"bl": "<:bl:1511906439516651561>", "bl": "<:bl:1511906439516651561>",
"borrowed": "<:borrowed:1511906443245391944>", "borrowed": "<:borrowed:1511906443245391944>",
"capella": "<:capella:1511906447167062137>", "capella": "<:capella:1511906447167062137>",
@ -60,27 +16,90 @@
"storm_bringer": "<:storm_bringer:1511906496097554594>", "storm_bringer": "<:storm_bringer:1511906496097554594>",
"wa": "<:wa:1511906499889467492>", "wa": "<:wa:1511906499889467492>",
"wi": "<:wi:1511906503647563807>", "wi": "<:wi:1511906503647563807>",
"wrank_1": "<:wrank_1:1511906507485085736>", "wrank_1": "<:wrank_1:1512124887592996995>",
"wrank_1_gold": "<:wrank_1_gold:1511906510806978742>", "wrank_1_gold": "<:wrank_1_gold:1512125051728560278>",
"wrank_2": "<:wrank_2:1511906514745430217>", "wrank_2": "<:wrank_2:1512124931075342376>",
"wrank_2_gold": "<:wrank_2_gold:1511906518386212864>", "wrank_2_gold": "<:wrank_2_gold:1512125095974535271>",
"wrank_3": "<:wrank_3:1511906522265944154>", "wrank_3": "<:wrank_3:1512124938453254334>",
"wrank_3_gold": "<:wrank_3_gold:1511906526204530690>", "wrank_3_gold": "<:wrank_3_gold:1512125103964684390>",
"wrank_4": "<:wrank_4:1511906530692173915>", "wrank_4": "<:wrank_4:1512124943465316433>",
"wrank_4_gold": "<:wrank_4_gold:1511906534790266883>", "wrank_4_gold": "<:wrank_4_gold:1512125108154663133>",
"wrank_5": "<:wrank_5:1511906539223388322>", "wrank_5": "<:wrank_5:1512124947852431513>",
"wrank_5_gold": "<:wrank_5_gold:1511906543342452837>", "wrank_5_gold": "<:wrank_5_gold:1512125112084594818>",
"wrank_down": "<:wrank_down:1511906547104616643>", "wrank_down": "<:wrank_down:1511906547104616643>",
"wrank_down_1": "<:wrank_down_1:1511906550698999909>", "wrank_down_1": "<:wrank_down_1:1512124970698801244>",
"wrank_down_2": "<:wrank_down_2:1511906554507694120>", "wrank_down_2": "<:wrank_down_2:1512125016114729133>",
"wrank_down_3": "<:wrank_down_3:1511906558231969792>", "wrank_down_3": "<:wrank_down_3:1512125023199166536>",
"wrank_down_4": "<:wrank_down_4:1511906562011304007>", "wrank_down_4": "<:wrank_down_4:1512125027372237040>",
"wrank_down_5": "<:wrank_down_5:1511906565630984273>", "wrank_down_5": "<:wrank_down_5:1512125030765691072>",
"wrank_up": "<:wrank_up:1511906568877117576>", "wrank_neutral": "<:wrank_neutral:1511950713713070160>",
"wrank_up_1": "<:wrank_up_1:1511906573537120287>", "wrank_neutral_0": "<:wrank_neutral_0:1511950717290545354>",
"wrank_up_2": "<:wrank_up_2:1511906577970364536>", "wrank_no_rank": "<:wrank_no_rank:1511956384177062018>",
"wrank_up_3": "<:wrank_up_3:1511906581711945909>", "wrank_no_dash": "<:wrank_no_dash:1511956379403943979>",
"wrank_up_4": "<:wrank_up_4:1511906585503338616>", "wrank_up_1": "<:wrank_up_1:1512125132242554890>",
"wrank_up_5": "<:wrank_up_5:1511906588921954325>" "wrank_up_10": "<:wrank_up_10:1512125136445243503>",
} "wrank_up_2": "<:wrank_up_2:1512127569259135139>",
>>>>>>> dev "wrank_up_3": "<:wrank_up_3:1512127577051893843>",
"wrank_up_4": "<:wrank_up_4:1512127582068281455>",
"wrank_up_6": "<:wrank_up_6:1512127590062620723>",
"wrank_up_7": "<:wrank_up_7:1512127593883766978>",
"wrank_up_8": "<:wrank_up_8:1512127598044643428>",
"wrank_up_9": "<:wrank_up_9:1512127601811128501>",
"wrank_up": "<:wrank_up:1512114414474756132>",
"wrank_up_5": "<:wrank_up_5:1512127585826377928>",
"wrank_up_11": "<:wrank_up_11:1512125140454998018>",
"wrank_up_12": "<:wrank_up_12:1512125144984719630>",
"wrank_up_13": "<:wrank_up_13:1512125149057388667>",
"wrank_up_14": "<:wrank_up_14:1512125153671123124>",
"wrank_up_15": "<:wrank_up_15:1512127541995901100>",
"wrank_up_16": "<:wrank_up_16:1512127545753993439>",
"wrank_up_17": "<:wrank_up_17:1512127549956821002>",
"wrank_up_18": "<:wrank_up_18:1512127553995931959>",
"wrank_up_19": "<:wrank_up_19:1512127558143971534>",
"wrank_up_20": "<:wrank_up_20:1512127573092597840>",
"wrank_10": "<:wrank_10:1512124891250561096>",
"wrank_11": "<:wrank_11:1512124894694080576>",
"wrank_12": "<:wrank_12:1512124898611429387>",
"wrank_13": "<:wrank_13:1512124902831030282>",
"wrank_14": "<:wrank_14:1512124907511611537>",
"wrank_15": "<:wrank_15:1512124911550730452>",
"wrank_16": "<:wrank_16:1512124915367673886>",
"wrank_17": "<:wrank_17:1512124919029305434>",
"wrank_18": "<:wrank_18:1512124923018219721>",
"wrank_19": "<:wrank_19:1512124927262855239>",
"wrank_20": "<:wrank_20:1512124934762135684>",
"wrank_6": "<:wrank_6:1512124952738795581>",
"wrank_7": "<:wrank_7:1512124956622979143>",
"wrank_8": "<:wrank_8:1512124961450496020>",
"wrank_9": "<:wrank_9:1512124965363650631>",
"wrank_down_10": "<:wrank_down_10:1512124974582989000>",
"wrank_down_11": "<:wrank_down_11:1512124978504536114>",
"wrank_down_12": "<:wrank_down_12:1512124982728069192>",
"wrank_down_13": "<:wrank_down_13:1512124987501314150>",
"wrank_down_14": "<:wrank_down_14:1512124991292837918>",
"wrank_down_15": "<:wrank_down_15:1512124995340468335>",
"wrank_down_16": "<:wrank_down_16:1512124999576850462>",
"wrank_down_17": "<:wrank_down_17:1512125004353896642>",
"wrank_down_18": "<:wrank_down_18:1512125008132964486>",
"wrank_down_19": "<:wrank_down_19:1512125011857510410>",
"wrank_down_20": "<:wrank_down_20:1512125019814101173>",
"wrank_down_6": "<:wrank_down_6:1512125035123576922>",
"wrank_down_7": "<:wrank_down_7:1512125039091126434>",
"wrank_down_8": "<:wrank_down_8:1512125042757210123>",
"wrank_down_9": "<:wrank_down_9:1512125047798759706>",
"wrank_10_gold": "<:wrank_10_gold:1512125055432396910>",
"wrank_11_gold": "<:wrank_11_gold:1512125059123249242>",
"wrank_12_gold": "<:wrank_12_gold:1512125063304974438>",
"wrank_13_gold": "<:wrank_13_gold:1512125067201609908>",
"wrank_14_gold": "<:wrank_14_gold:1512125071043596520>",
"wrank_15_gold": "<:wrank_15_gold:1512125074893832443>",
"wrank_16_gold": "<:wrank_16_gold:1512125078966374420>",
"wrank_17_gold": "<:wrank_17_gold:1512125083605532715>",
"wrank_18_gold": "<:wrank_18_gold:1512125088378392718>",
"wrank_19_gold": "<:wrank_19_gold:1512125091960459508>",
"wrank_20_gold": "<:wrank_20_gold:1512125100265181204>",
"wrank_6_gold": "<:wrank_6_gold:1512125115956203601>",
"wrank_7_gold": "<:wrank_7_gold:1512125120204771338>",
"wrank_8_gold": "<:wrank_8_gold:1512125123874918661>",
"wrank_9_gold": "<:wrank_9_gold:1512125128299905104>"
}

View file

@ -92,7 +92,7 @@ function wrankDelta(entry: WRankEntry, options?: { brackets?: boolean }): string
const numEmoji = getEmoji(`wrank_down_${delta}`); const numEmoji = getEmoji(`wrank_down_${delta}`);
inner = (getEmoji("wrank_down") || "↓") + (numEmoji || delta); inner = (getEmoji("wrank_down") || "↓") + (numEmoji || delta);
} else { } else {
inner = (getEmoji("wrank_neutral") || "·") + "0"; inner = (getEmoji("wrank_no_dash") || "·") + (getEmoji("wrank_neutral_0") || "0");
} }
return brackets ? ` (${inner})` : ` ${inner}`; return brackets ? ` (${inner})` : ` ${inner}`;
@ -106,6 +106,16 @@ function wrankFull(entry: WRankEntry, options: WRankDisplayOptions): string {
return wrankRank(entry, options.goal) + wrankDelta(entry, { brackets: options.brackets }); return wrankRank(entry, options.goal) + wrankDelta(entry, { brackets: options.brackets });
} }
/**
* Placeholder for characters with no W.Rank when others in their nation have one.
* Output: ( [] )
*/
function wrankNoRank(): string {
const dash = getEmoji("wrank_no_dash") || "—";
const square = getEmoji("wrank_no_dash") || "■";
return `${dash} (${square} ${dash})`;
}
// ─── Namespace export ───────────────────────────────────────────────────────── // ─── Namespace export ─────────────────────────────────────────────────────────
export const format = { export const format = {
@ -117,5 +127,6 @@ export const format = {
rank: wrankRank, rank: wrankRank,
delta: wrankDelta, delta: wrankDelta,
full: wrankFull, full: wrankFull,
noRank: wrankNoRank,
}, },
}; };

View file

@ -69,18 +69,45 @@ export function lockPoll(slot: number): void {
persist.save(polls) persist.save(polls)
} }
// ─── Character display ──────────────────────────────────────────────────────── // ─── Character display ────────────────────────────────────────────────────────
function formatCharRow(entry: VoteEntry, showNationEmoji = false): string { function getNationBringerTitle(nation: Nation) {
const stormBringerIcon = getEmoji("storm_bringer") || "⚡";
const stormBringer = `${stormBringerIcon}`;
const luminousBringerIcon = getEmoji("luminous_bringer") || "🔆";
const luminousBringer = `${luminousBringerIcon}` || `🔆 Luminous Bringer`;
const nationMap = {
"Capella": luminousBringer,
"Procyon": stormBringer
};
return nationMap[nation];
}
function getBringerDisplay(nation: Nation): string {
const bringerMap: Record<Nation, string> = {
Capella: getEmoji("luminous_bringer") || "🔆 Luminous Bringer",
Procyon: getEmoji("storm_bringer") || "⚡ Storm Bringer",
};
return bringerMap[nation];
}
function formatCharRow(entry: VoteEntry, showNationEmoji = false, nationHasRank = false): string {
const cfgFormat = cfg("charDisplayFormat"); const cfgFormat = cfg("charDisplayFormat");
const nation = entry.characterNation; const nation = entry.characterNation;
const wRankEntry = entry.characterName ? getEntry(entry.characterName, nation ?? "Capella") : null; const wRankEntry = entry.characterName && entry.characterNation
? getEntry(entry.characterName, entry.characterNation)
: null;
let wrank = ""; let wrank = "";
if (wRankEntry) { if (wRankEntry) {
const wRankGoal = cfg("wRankGoal"); const wRankGoal = cfg("wRankGoal");
wrank = format.wrank.full(wRankEntry, { goal: wRankGoal, brackets: true }); wrank = format.wrank.full(wRankEntry, { goal: wRankGoal, brackets: true });
} else if (nationHasRank) {
wrank = format.wrank.noRank();
} }
const classStr = entry.characterClass const classStr = entry.characterClass
@ -100,33 +127,11 @@ function formatCharRow(entry: VoteEntry, showNationEmoji = false): string {
.trim(); .trim();
// Bringer title — independent of W.Rank so override always shows // Bringer title — independent of W.Rank so override always shows
function getNationBringerTitle(nation: Nation) {
const stormBringerIcon = getEmoji("storm_bringer") || "⚡";
const stormBringer = `${stormBringerIcon}`;
const luminousBringerIcon = getEmoji("luminous_bringer") || "⚡";
const luminousBringer = `${luminousBringerIcon}` || `⚡ Luminous Bringer`;
const nationMap = {
"Capella": luminousBringer,
"Procyon": stormBringer
};
return nationMap[nation];
}
if (nation && entry.userKey) { if (nation && entry.userKey) {
const bringer = getBringer(nation); const bringer = getBringer(nation);
if (bringer && bringer === entry.characterName) { if (bringer && bringer === entry.characterName) {
const bringerTitle = getNationBringerTitle(nation); row += ` · ${getBringerDisplay(nation)}`;
row += ` · ${bringerTitle}`;
} }
// if (bringer && bringer === entry.characterName) {
// const emoji = nation === "Capella"
// ? (getEmoji("luminous_bringer") || "🔆")
// : (getEmoji("storm_bringer") || "⚡");
// const title = nation === "Capella" ? "Luminous Bringer" : "Storm Bringer";
// row += ` · ${emoji} **${title}**`;
// }
} }
if (entry.borrowedFrom) { if (entry.borrowedFrom) {
@ -160,12 +165,13 @@ export function buildEmbed(state: PollState, overrideLockMsg?: string): EmbedBui
const formatNationField = (nation: Nation): string => { const formatNationField = (nation: Nation): string => {
const yesEntries = yesByNation[nation]; const yesEntries = yesByNation[nation];
const hasRank = yesEntries.some((e) => e.characterName && getEntry(e.characterName, nation) !== null);
const noEntries = showNoInline const noEntries = showNoInline
? noVoters.filter((e) => e.characterNation === nation) ? noVoters.filter((e) => e.characterNation === nation)
: []; : [];
const lines = [ const lines = [
...yesEntries.map((e) => formatCharRow(e)), ...yesEntries.map((e) => formatCharRow(e, false, hasRank)),
...noEntries.map((e) => `${formatCharRow(e)}`), ...noEntries.map((e) => `${formatCharRow(e, false, hasRank)}`),
]; ];
return lines.length > 0 ? lines.join("\n") : "—"; return lines.length > 0 ? lines.join("\n") : "—";
}; };

View file

@ -14,6 +14,7 @@
"paths": { "paths": {
"@src/*": ["src/*"], "@src/*": ["src/*"],
"@data/*": ["data/*"], "@data/*": ["data/*"],
"@tests/*": ["tests/*"],
"@messages/*": ["messages/*"], "@messages/*": ["messages/*"],
"@tgHistory/*": ["data/tg-history/*"], "@tgHistory/*": ["data/tg-history/*"],
"@scripts/*": ["scripts/*"], "@scripts/*": ["scripts/*"],