Compare commits
15
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5155744ec5 | ||
|
|
fedc8be778 | ||
|
|
125939e5b3 | ||
|
|
3b410b5f90 | ||
|
|
d7bac2048f | ||
|
|
dd4bee73c6 | ||
|
|
d21683fb59 | ||
|
|
44b3d7a80b | ||
|
|
af5017c95d | ||
|
|
3087c6bc39 | ||
|
|
cf0ef96edc | ||
|
|
9ba37c22bb | ||
|
|
8eeda14119 | ||
|
|
115e3dd3d0 | ||
|
|
82f47ac136 |
@@ -28,11 +28,16 @@ class SubmissionListener(commands.Cog, name="Message Listener"):
|
|||||||
if proof_message.channel.id == highscores_data["submission_channel_id"]:
|
if proof_message.channel.id == highscores_data["submission_channel_id"]:
|
||||||
|
|
||||||
embed = submission_message.embeds[0]
|
embed = submission_message.embeds[0]
|
||||||
embed.add_field(name="Score", value=proof_message.content, inline=False)
|
if proof_message.content:
|
||||||
await submission_message.edit(
|
embed.add_field(name="Score", value=proof_message.content, inline=False)
|
||||||
files=[await attch.to_file() for attch in proof_message.attachments],
|
await submission_message.edit(
|
||||||
embed=embed,
|
embed=embed,
|
||||||
)
|
)
|
||||||
|
if len(proof_message.attachments) > 0:
|
||||||
|
await submission_message.edit(
|
||||||
|
files=[await attch.to_file() for attch in proof_message.attachments],
|
||||||
|
)
|
||||||
|
|
||||||
await proof_message.delete()
|
await proof_message.delete()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -37,8 +37,10 @@ class PostHighscores(commands.Cog, name="Post Highscores"):
|
|||||||
Register with "?register" command.'
|
Register with "?register" command.'
|
||||||
assert channel is not None, await ctx.send(error_response)
|
assert channel is not None, await ctx.send(error_response)
|
||||||
|
|
||||||
for boss in highscores_config["bosses"]:
|
for boss, categories in highscores_config[ # pylint: disable=unused-variable
|
||||||
message: nextcord.Message = await send_highscore_message(channel, boss["boss"])
|
"highscore_table"
|
||||||
|
].items():
|
||||||
|
message: nextcord.Message = await send_highscore_message(channel, boss)
|
||||||
await message.edit(view=SubmissionButton(self.bot))
|
await message.edit(view=SubmissionButton(self.bot))
|
||||||
|
|
||||||
save_highscores_data(highscores_data)
|
save_highscores_data(highscores_data)
|
||||||
|
|||||||
@@ -10,7 +10,9 @@ class VerificationView(nextcord.ui.View):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(timeout=None)
|
super().__init__(timeout=None)
|
||||||
|
|
||||||
@nextcord.ui.button(label="Approve", style=nextcord.ButtonStyle.green, custom_id="approve")
|
@nextcord.ui.button(
|
||||||
|
label="Approve", style=nextcord.ButtonStyle.green, custom_id="approve-score-command"
|
||||||
|
)
|
||||||
async def approve_button(
|
async def approve_button(
|
||||||
self, button: nextcord.ui.Button, interaction: nextcord.Interaction
|
self, button: nextcord.ui.Button, interaction: nextcord.Interaction
|
||||||
): # pylint: disable=unused-argument
|
): # pylint: disable=unused-argument
|
||||||
@@ -28,7 +30,9 @@ class VerificationView(nextcord.ui.View):
|
|||||||
files=[await attch.to_file() for attch in interaction.message.attachments],
|
files=[await attch.to_file() for attch in interaction.message.attachments],
|
||||||
)
|
)
|
||||||
|
|
||||||
@nextcord.ui.button(label="Deny", style=nextcord.ButtonStyle.red, custom_id="deny")
|
@nextcord.ui.button(
|
||||||
|
label="Deny", style=nextcord.ButtonStyle.red, custom_id="deny-score-command"
|
||||||
|
)
|
||||||
async def deny_button(
|
async def deny_button(
|
||||||
self, button: nextcord.ui.Button, interaction: nextcord.Interaction
|
self, button: nextcord.ui.Button, interaction: nextcord.Interaction
|
||||||
): # pylint: disable=unused-argument
|
): # pylint: disable=unused-argument
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ Cog for creating submission process.
|
|||||||
from nextcord.ext import commands
|
from nextcord.ext import commands
|
||||||
|
|
||||||
from .submission_views import SubmissionButton
|
from .submission_views import SubmissionButton
|
||||||
|
from .verification_view import VerificationView
|
||||||
|
|
||||||
|
|
||||||
class SubmissionCog(commands.Cog, name="Submission Cog"):
|
class SubmissionCog(commands.Cog, name="Submission Cog"):
|
||||||
@@ -17,6 +18,7 @@ class SubmissionCog(commands.Cog, name="Submission Cog"):
|
|||||||
async def on_ready(self):
|
async def on_ready(self):
|
||||||
"""Called when cog is loaded"""
|
"""Called when cog is loaded"""
|
||||||
self.bot.add_view(SubmissionButton(self.bot))
|
self.bot.add_view(SubmissionButton(self.bot))
|
||||||
|
self.bot.add_view(VerificationView())
|
||||||
|
|
||||||
|
|
||||||
# This function will be called when this extension is loaded.
|
# This function will be called when this extension is loaded.
|
||||||
|
|||||||
@@ -10,7 +10,9 @@ class VerificationView(nextcord.ui.View):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(timeout=None)
|
super().__init__(timeout=None)
|
||||||
|
|
||||||
@nextcord.ui.button(label="Approve", style=nextcord.ButtonStyle.green, custom_id="approve")
|
@nextcord.ui.button(
|
||||||
|
label="Approve", style=nextcord.ButtonStyle.green, custom_id="approve-button-submission"
|
||||||
|
)
|
||||||
async def approve_button(
|
async def approve_button(
|
||||||
self, button: nextcord.ui.Button, interaction: nextcord.Interaction
|
self, button: nextcord.ui.Button, interaction: nextcord.Interaction
|
||||||
): # pylint: disable=unused-argument
|
): # pylint: disable=unused-argument
|
||||||
@@ -29,12 +31,14 @@ class VerificationView(nextcord.ui.View):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
await submit_score(interaction, user, boss_name, category, score)
|
await submit_score(interaction, user, boss_name, category, score)
|
||||||
await interaction.message.edit("Approved.", view=None)
|
await interaction.message.edit(f"Approved by <@{interaction.user.id}>.", view=None)
|
||||||
except UnboundLocalError:
|
except UnboundLocalError:
|
||||||
await interaction.send("Instruct user to submit with all fields.")
|
await interaction.send("Instruct user to submit with all fields.")
|
||||||
await interaction.message.edit(view=None)
|
await interaction.message.edit(view=None)
|
||||||
|
|
||||||
@nextcord.ui.button(label="Deny", style=nextcord.ButtonStyle.red, custom_id="deny")
|
@nextcord.ui.button(
|
||||||
|
label="Deny", style=nextcord.ButtonStyle.red, custom_id="deny-button-submission"
|
||||||
|
)
|
||||||
async def deny_button(
|
async def deny_button(
|
||||||
self, button: nextcord.ui.Button, interaction: nextcord.Interaction
|
self, button: nextcord.ui.Button, interaction: nextcord.Interaction
|
||||||
): # pylint: disable=unused-argument
|
): # pylint: disable=unused-argument
|
||||||
|
|||||||
@@ -1,203 +1,324 @@
|
|||||||
{
|
{
|
||||||
"bosses": [
|
"highscore_table": {
|
||||||
{
|
"The Ambassador": [
|
||||||
"boss": "The Ambassador",
|
"Kill Count",
|
||||||
"hardmode": true
|
"Kill Time",
|
||||||
},
|
"Group Kill Count",
|
||||||
{
|
"Group Kill Time",
|
||||||
"boss": "Araxxi",
|
"Spooned Log"
|
||||||
"hardmode": false
|
],
|
||||||
},
|
"Araxxi": [
|
||||||
{
|
"Kill Count",
|
||||||
"boss": "Arch-Glacor",
|
"Kill Time",
|
||||||
"hardmode": true
|
"Spooned Log"
|
||||||
},
|
],
|
||||||
{
|
"Arch-Glacor": [
|
||||||
"boss": "Astellarn",
|
"Kill Count",
|
||||||
"hardmode": true
|
"Kill Time",
|
||||||
},
|
"Hardmode Kill Count",
|
||||||
{
|
"Hardmode Kill Time",
|
||||||
"boss": "The Barrows Brothers",
|
"Enrage",
|
||||||
"hardmode": false
|
"Spooned Log"
|
||||||
},
|
],
|
||||||
{
|
"Astellarn": [
|
||||||
"boss": "The Barrows: Rise of the Six",
|
"Kill Count",
|
||||||
"hardmode": false
|
"Kill Time",
|
||||||
},
|
"Group Kill Count",
|
||||||
{
|
"Group Kill Time",
|
||||||
"boss": "Beastmaster Durzag",
|
"Spooned Log"
|
||||||
"hardmode": false
|
],
|
||||||
},
|
"The Barrows Brothers": [
|
||||||
{
|
"Kill Count",
|
||||||
"boss": "Black Stone Dragon",
|
"Spooned Log"
|
||||||
"hardmode": true
|
],
|
||||||
},
|
"The Barrows: Rise of the Six": [
|
||||||
{
|
"Kill Count",
|
||||||
"boss": "Chaos Elemental",
|
"Kill Time",
|
||||||
"hardmode": false
|
"Spooned Log"
|
||||||
},
|
],
|
||||||
{
|
"Beastmaster Durzag": [
|
||||||
"boss": "Commander Zilyana",
|
"Kill Count",
|
||||||
"hardmode": true
|
"Kill Time",
|
||||||
},
|
"Spooned Log"
|
||||||
{
|
],
|
||||||
"boss": "Corporeal Beast",
|
"Black Stone Dragon": [
|
||||||
"hardmode": false
|
"Kill Count",
|
||||||
},
|
"Kill Time",
|
||||||
{
|
"Group Kill Count",
|
||||||
"boss": "Crassian Leviathan",
|
"Group Kill Time",
|
||||||
"hardmode": true
|
"Spooned Log"
|
||||||
},
|
],
|
||||||
{
|
"Chaos Elemental": [
|
||||||
"boss": "Croesus",
|
"Kill Count",
|
||||||
"hardmode": false
|
"Spooned Log"
|
||||||
},
|
],
|
||||||
{
|
"Commander Zilyana": [
|
||||||
"boss": "Dagannoth Kings",
|
"Kill Count",
|
||||||
"hardmode": false
|
"Kill Time",
|
||||||
},
|
"Hardmode Kill Count",
|
||||||
{
|
"Hardmode Kill Time",
|
||||||
"boss": "General Graardor",
|
"Spooned Log"
|
||||||
"hardmode": true
|
],
|
||||||
},
|
"Corporeal Beast": [
|
||||||
{
|
"Kill Count",
|
||||||
"boss": "Giant Mole",
|
"Kill Time",
|
||||||
"hardmode": true
|
"Spooned Log"
|
||||||
},
|
],
|
||||||
{
|
"Crassian Leviathan": [
|
||||||
"boss": "Gregorovic",
|
"Kill Count",
|
||||||
"hardmode": true
|
"Kill Time",
|
||||||
},
|
"Group Kill Count",
|
||||||
{
|
"Group Kill Time",
|
||||||
"boss": "Har-Aken",
|
"Spooned Log"
|
||||||
"hardmode": false
|
],
|
||||||
},
|
"Croesus": [
|
||||||
{
|
"Kill Count",
|
||||||
"boss": "Helwyr",
|
"Kill Time",
|
||||||
"hardmode": true
|
"Spooned Log"
|
||||||
},
|
],
|
||||||
{
|
"Dagannoth Kings": [
|
||||||
"boss": "Kalphite King",
|
"Kill Count",
|
||||||
"hardmode": false
|
"Spooned Log"
|
||||||
},
|
],
|
||||||
{
|
"General Graardor": [
|
||||||
"boss": "Kalphite Queen",
|
"Kill Count",
|
||||||
"hardmode": false
|
"Kill Time",
|
||||||
},
|
"Hardmode Kill Count",
|
||||||
{
|
"Hardmode Kill Time",
|
||||||
"boss": "Kerapac",
|
"Spooned Log"
|
||||||
"hardmode": true
|
],
|
||||||
},
|
"Giant Mole": [
|
||||||
{
|
"Kill Count",
|
||||||
"boss": "King Black Dragon",
|
"Kill Time",
|
||||||
"hardmode": false
|
"Hardmode Kill Count",
|
||||||
},
|
"Hardmode Kill Time",
|
||||||
{
|
"Spooned Log"
|
||||||
"boss": "Kree'arra",
|
],
|
||||||
"hardmode": true
|
"Gregorovic": [
|
||||||
},
|
"Kill Count",
|
||||||
{
|
"Kill Time",
|
||||||
"boss": "K'ril Tsutsaroth",
|
"Hardmode Kill Count",
|
||||||
"hardmode": true
|
"Hardmode Kill Time",
|
||||||
},
|
"Spooned Log"
|
||||||
{
|
],
|
||||||
"boss": "Legiones",
|
"Har-Aken": [
|
||||||
"hardmode": false
|
"Kill Count",
|
||||||
},
|
"Kill Time",
|
||||||
{
|
"Spooned Log"
|
||||||
"boss": "The Magister",
|
],
|
||||||
"hardmode": false
|
"Helwyr": [
|
||||||
},
|
"Kill Count",
|
||||||
{
|
"Kill Time",
|
||||||
"boss": "Masuta the Ascended",
|
"Hardmode Kill Count",
|
||||||
"hardmode": true
|
"Hardmode Kill Time",
|
||||||
},
|
"Spooned Log"
|
||||||
{
|
],
|
||||||
"boss": "Nex",
|
"Kalphite King": [
|
||||||
"hardmode": false
|
"Kill Count",
|
||||||
},
|
"Kill Time",
|
||||||
{
|
"Spooned Log"
|
||||||
"boss": "Nex - Angel of Death",
|
],
|
||||||
"hardmode": false
|
"Kalphite Queen": [
|
||||||
},
|
"Kill Count",
|
||||||
{
|
"Kill Time",
|
||||||
"boss": "Queen Black Dragon",
|
"Spooned Log"
|
||||||
"hardmode": false
|
],
|
||||||
},
|
"Kerapac": [
|
||||||
{
|
"Kill Count",
|
||||||
"boss": "Raksha",
|
"Kill Time",
|
||||||
"hardmode": true
|
"Hardmode Kill Count",
|
||||||
},
|
"Hardmode Kill Time",
|
||||||
{
|
"Spooned Log"
|
||||||
"boss": "Rex Matriarchs",
|
],
|
||||||
"hardmode": false
|
"King Black Dragon": [
|
||||||
},
|
"Kill Count",
|
||||||
{
|
"Kill Time",
|
||||||
"boss": "The Sanctum Guardian",
|
"Spooned Log"
|
||||||
"hardmode": true
|
],
|
||||||
},
|
"Kree'arra": [
|
||||||
{
|
"Kill Count",
|
||||||
"boss": "Seiryu the Azure Serpent",
|
"Kill Time",
|
||||||
"hardmode": true
|
"Hardmode Kill Count",
|
||||||
},
|
"Hardmode Kill Time",
|
||||||
{
|
"Spooned Log"
|
||||||
"boss": "Solak",
|
],
|
||||||
"hardmode": false
|
"K'ril Tsutsaroth": [
|
||||||
},
|
"Kill Count",
|
||||||
{
|
"Kill Time",
|
||||||
"boss": "Taraket the Necromancer",
|
"Hardmode Kill Count",
|
||||||
"hardmode": true
|
"Hardmode Kill Time",
|
||||||
},
|
"Spooned Log"
|
||||||
{
|
],
|
||||||
"boss": "Telos",
|
"Legiones": [
|
||||||
"hardmode": false
|
"Kill Count",
|
||||||
},
|
"Kill Time",
|
||||||
{
|
"Spooned Log"
|
||||||
"boss": "The Twin Furies",
|
],
|
||||||
"hardmode": true
|
"The Magister": [
|
||||||
},
|
"Kill Count",
|
||||||
{
|
"Kill Time",
|
||||||
"boss": "TzKal-Zuk",
|
"Spooned Log"
|
||||||
"hardmode": true
|
],
|
||||||
},
|
"Masuta the Ascended": [
|
||||||
{
|
"Kill Count",
|
||||||
"boss": "TzTok-Jad",
|
"Kill Time",
|
||||||
"hardmode": false
|
"Group Kill Count",
|
||||||
},
|
"Group Kill Time",
|
||||||
{
|
"Spooned Log"
|
||||||
"boss": "Verak Lith",
|
],
|
||||||
"hardmode": true
|
"Nex": [
|
||||||
},
|
"Kill Count",
|
||||||
{
|
"Kill Time",
|
||||||
"boss": "Vindicta & Gorvek",
|
"Spooned Log"
|
||||||
"hardmode": true
|
],
|
||||||
},
|
"Nex - Angel of Death": [
|
||||||
{
|
"Kill Count",
|
||||||
"boss": "Vorago",
|
"Kill Time",
|
||||||
"hardmode": true
|
"Spooned Log"
|
||||||
},
|
],
|
||||||
{
|
"Queen Black Dragon": [
|
||||||
"boss": "Yakamaru",
|
"Kill Count",
|
||||||
"hardmode": false
|
"Kill Time",
|
||||||
},
|
"Spooned Log"
|
||||||
{
|
],
|
||||||
"boss": "Zamorak, Lord of Chaos",
|
"Raksha": [
|
||||||
"hardmode": true
|
"Solo Kill Count",
|
||||||
}
|
"Solo Kill Time",
|
||||||
],
|
"Duo Kill Count",
|
||||||
|
"Duo Kill Time",
|
||||||
|
"Spooned Log"
|
||||||
|
],
|
||||||
|
"Rex Matriarchs": [
|
||||||
|
"Kill Count",
|
||||||
|
"Spooned Log"
|
||||||
|
],
|
||||||
|
"The Sanctum Guardian": [
|
||||||
|
"Kill Count",
|
||||||
|
"Kill Time",
|
||||||
|
"Group Kill Count",
|
||||||
|
"Group Kill Time",
|
||||||
|
"Spooned Log"
|
||||||
|
],
|
||||||
|
"Seiryu the Azure Serpent": [
|
||||||
|
"Kill Count",
|
||||||
|
"Kill Time",
|
||||||
|
"Group Kill Count",
|
||||||
|
"Group Kill Time",
|
||||||
|
"Spooned Log"
|
||||||
|
],
|
||||||
|
"Solak": [
|
||||||
|
"Kill Count",
|
||||||
|
"Kill Time",
|
||||||
|
"Spooned Log"
|
||||||
|
],
|
||||||
|
"Taraket the Necromancer": [
|
||||||
|
"Kill Count",
|
||||||
|
"Kill Time",
|
||||||
|
"Group Kill Count",
|
||||||
|
"Group Kill Time",
|
||||||
|
"Spooned Log"
|
||||||
|
],
|
||||||
|
"Telos": [
|
||||||
|
"Kill Count",
|
||||||
|
"Kill Time",
|
||||||
|
"Enrage",
|
||||||
|
"Spooned Log"
|
||||||
|
],
|
||||||
|
"The Twin Furies": [
|
||||||
|
"Kill Count",
|
||||||
|
"Kill Time",
|
||||||
|
"Hardmode Kill Count",
|
||||||
|
"Hardmode Kill Time",
|
||||||
|
"Spooned Log"
|
||||||
|
],
|
||||||
|
"TzKal-Zuk": [
|
||||||
|
"Kill Count",
|
||||||
|
"Kill Time",
|
||||||
|
"Hardmode Kill Count",
|
||||||
|
"Hardmode Kill Time",
|
||||||
|
"Spooned Log"
|
||||||
|
],
|
||||||
|
"TzTok-Jad": [
|
||||||
|
"Kill Count",
|
||||||
|
"Kill Time",
|
||||||
|
"Spooned Log"
|
||||||
|
],
|
||||||
|
"Verak Lith": [
|
||||||
|
"Kill Count",
|
||||||
|
"Kill Time",
|
||||||
|
"Group Kill Count",
|
||||||
|
"Group Kill Time",
|
||||||
|
"Spooned Log"
|
||||||
|
],
|
||||||
|
"Vindicta & Gorvek": [
|
||||||
|
"Kill Count",
|
||||||
|
"Kill Time",
|
||||||
|
"Hardmode Kill Count",
|
||||||
|
"Hardmode Kill Time",
|
||||||
|
"Spooned Log"
|
||||||
|
],
|
||||||
|
"Vorago": [
|
||||||
|
"Kill Count",
|
||||||
|
"Kill Time",
|
||||||
|
"Hardmode Kill Count",
|
||||||
|
"Hardmode Kill Time",
|
||||||
|
"Spooned Log"
|
||||||
|
],
|
||||||
|
"Yakamaru": [
|
||||||
|
"Kill Count",
|
||||||
|
"Kill Time",
|
||||||
|
"Spooned Log"
|
||||||
|
],
|
||||||
|
"Zamorak, Lord of Chaos (solo)": [
|
||||||
|
"Kill Count",
|
||||||
|
"Kill Time",
|
||||||
|
"Enrage",
|
||||||
|
"Spooned Log"
|
||||||
|
],
|
||||||
|
"Zamorak, Lord of Chaos (group)": [
|
||||||
|
"Kill Count",
|
||||||
|
"Kill Time",
|
||||||
|
"Enrage"
|
||||||
|
]
|
||||||
|
},
|
||||||
"categories": {
|
"categories": {
|
||||||
|
"Duo Kill Count": {
|
||||||
|
"ascending": false,
|
||||||
|
"is_time_record": false
|
||||||
|
},
|
||||||
|
"Duo Kill Time": {
|
||||||
|
"ascending": true,
|
||||||
|
"is_time_record": true
|
||||||
|
},
|
||||||
|
"Enrage": {
|
||||||
|
"ascending": false,
|
||||||
|
"is_time_record": false
|
||||||
|
},
|
||||||
|
"Group Kill Count": {
|
||||||
|
"ascending": false,
|
||||||
|
"is_time_record": false
|
||||||
|
},
|
||||||
|
"Group Kill Time": {
|
||||||
|
"ascending": true,
|
||||||
|
"is_time_record": true
|
||||||
|
},
|
||||||
|
"Hardmode Kill Count": {
|
||||||
|
"ascending": false,
|
||||||
|
"is_time_record": false
|
||||||
|
},
|
||||||
|
"Hardmode Kill Time": {
|
||||||
|
"ascending": true,
|
||||||
|
"is_time_record": true
|
||||||
|
},
|
||||||
"Kill Count": {
|
"Kill Count": {
|
||||||
"hardmode": true,
|
|
||||||
"ascending": false,
|
"ascending": false,
|
||||||
"is_time_record": false
|
"is_time_record": false
|
||||||
},
|
},
|
||||||
"Kill Time": {
|
"Kill Time": {
|
||||||
"hardmode": true,
|
|
||||||
"ascending": true,
|
"ascending": true,
|
||||||
"is_time_record": true
|
"is_time_record": true
|
||||||
},
|
},
|
||||||
"Spooned Log": {
|
"Spooned Log": {
|
||||||
"hardmode": false,
|
|
||||||
"ascending": true,
|
"ascending": true,
|
||||||
"is_time_record": false
|
"is_time_record": false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,17 +29,14 @@ def open_highscores_data():
|
|||||||
else:
|
else:
|
||||||
# create the json object
|
# create the json object
|
||||||
data = {"highscore_channel_id": -1, "verification_channel_id": -1}
|
data = {"highscore_channel_id": -1, "verification_channel_id": -1}
|
||||||
config = open_highscores_config()
|
config: dict = open_highscores_config()
|
||||||
for boss in config["bosses"]:
|
for boss, categories in config["highscore_table"].items():
|
||||||
data[boss["boss"]] = {"message_id": 0}
|
data[boss] = {"message_id": 0}
|
||||||
boss_categories = {}
|
boss_categories = {}
|
||||||
for key, value in config["categories"].items():
|
for category in categories: # pylint: disable=unused-variable
|
||||||
rank_list = []
|
rank_list = []
|
||||||
boss_categories[key] = rank_list
|
boss_categories[category] = rank_list
|
||||||
if boss["hardmode"] and value["hardmode"]:
|
data[boss]["categories"] = boss_categories
|
||||||
rank_list = []
|
|
||||||
boss_categories["Hardmode " + key] = rank_list
|
|
||||||
data[boss["boss"]]["categories"] = boss_categories
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+36
-15
@@ -21,7 +21,7 @@ def format_highscore_message(boss_name: str):
|
|||||||
|
|
||||||
# Gather all categories and add to string
|
# Gather all categories and add to string
|
||||||
for key, value in boss_data["categories"].items():
|
for key, value in boss_data["categories"].items():
|
||||||
ret_string += f"{key}".ljust(30, " ")
|
ret_string += f"{key}".ljust(25, " ")
|
||||||
ret_string += "\n"
|
ret_string += "\n"
|
||||||
|
|
||||||
highscore_size = highscores_config["highscore_size"]
|
highscore_size = highscores_config["highscore_size"]
|
||||||
@@ -31,9 +31,9 @@ def format_highscore_message(boss_name: str):
|
|||||||
for key, value in boss_data["categories"].items():
|
for key, value in boss_data["categories"].items():
|
||||||
if len(value) > i:
|
if len(value) > i:
|
||||||
score = value[i]
|
score = value[i]
|
||||||
ret_string += f"{i+1}: {score[0]} - {score[1]}".ljust(30, " ")
|
ret_string += f"{i+1}: {score[0]} - {score[1]}".ljust(25, " ")
|
||||||
else:
|
else:
|
||||||
ret_string += f"{i+1}: submit your score".ljust(30, " ")
|
ret_string += f"{i+1}: submit your score".ljust(25, " ")
|
||||||
ret_string += "\n"
|
ret_string += "\n"
|
||||||
|
|
||||||
return ret_string + "```"
|
return ret_string + "```"
|
||||||
@@ -74,20 +74,19 @@ async def submit_score(
|
|||||||
@param user: user who submitted score
|
@param user: user who submitted score
|
||||||
@param score: score to add
|
@param score: score to add
|
||||||
"""
|
"""
|
||||||
# TODO update user submission to not have dupe users
|
|
||||||
|
|
||||||
# hardmode category, must have different category variable for config access.
|
boss_category_config = highscores_config["categories"][category]
|
||||||
if category.find("Hardmode ") != -1:
|
|
||||||
config_category = category.replace("Hardmode ", "")
|
|
||||||
else:
|
|
||||||
config_category = category
|
|
||||||
|
|
||||||
# capping to 12 characters because runescape names are 12 characters long.
|
# capping to 12 characters because runescape names are 12 characters long.
|
||||||
user = user[:12]
|
# Splitting on pipe. My discord has multiple names on account split by pipe.
|
||||||
|
user = user.split("|")[0][:12]
|
||||||
|
|
||||||
|
# strip leading zeros and colon from score
|
||||||
|
score = score.lstrip("0:")
|
||||||
|
|
||||||
# create score tuple for either time or int
|
# create score tuple for either time or int
|
||||||
# define sort index
|
# define sort index
|
||||||
if highscores_config["categories"][config_category]["is_time_record"]:
|
if boss_category_config["is_time_record"]:
|
||||||
if score.find(":") == -1:
|
if score.find(":") == -1:
|
||||||
score_seconds = float(score)
|
score_seconds = float(score)
|
||||||
else:
|
else:
|
||||||
@@ -101,13 +100,35 @@ async def submit_score(
|
|||||||
score_tuple = (user, int(score))
|
score_tuple = (user, int(score))
|
||||||
sort_index = 1
|
sort_index = 1
|
||||||
|
|
||||||
scores = highscores_data[boss_name]["categories"][category]
|
scores: "list[tuple]" = highscores_data[boss_name]["categories"][category]
|
||||||
scores.append(score_tuple)
|
|
||||||
|
# if user is in an existing tuple, delete it.
|
||||||
|
users_scores: "list[tuple]" = [score_tuple]
|
||||||
|
for tup in scores:
|
||||||
|
if user == tup[0]:
|
||||||
|
# Add tup to users_scores, remove from scores
|
||||||
|
users_scores.append(tup)
|
||||||
|
|
||||||
|
# sort users_scores
|
||||||
|
users_scores.sort(
|
||||||
|
key=lambda x: x[sort_index],
|
||||||
|
reverse=not boss_category_config["ascending"],
|
||||||
|
)
|
||||||
|
|
||||||
|
for index, tup in enumerate(users_scores):
|
||||||
|
if index == 0:
|
||||||
|
# first score is the best score.
|
||||||
|
if tup not in scores:
|
||||||
|
scores.append(tup)
|
||||||
|
else:
|
||||||
|
# discard all other scores from scores list.
|
||||||
|
if tup in scores:
|
||||||
|
scores.remove(tup)
|
||||||
|
|
||||||
# sort scores.
|
# sort scores.
|
||||||
scores.sort(
|
scores.sort(
|
||||||
key=lambda x: x[sort_index],
|
key=lambda x: x[sort_index],
|
||||||
reverse=not highscores_config["categories"][config_category]["ascending"],
|
reverse=not boss_category_config["ascending"],
|
||||||
)
|
)
|
||||||
|
|
||||||
# enforce highscore size
|
# enforce highscore size
|
||||||
@@ -122,7 +143,7 @@ async def submit_score(
|
|||||||
|
|
||||||
error_response = 'Registered Highscores channel does not exist or was never registered. \
|
error_response = 'Registered Highscores channel does not exist or was never registered. \
|
||||||
Register with "?register" command.'
|
Register with "?register" command.'
|
||||||
assert channel is not None, await interaction.send(error_response)
|
assert channel is not None, await interaction.send(error_response, ephemeral=True)
|
||||||
|
|
||||||
await send_highscore_message(channel, boss_name)
|
await send_highscore_message(channel, boss_name)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user