Skip to content

Commit 7ac3e77

Browse files
settings: prompt messages weights (#720)
1 parent 7e571e8 commit 7ac3e77

File tree

2 files changed

+36
-12
lines changed

2 files changed

+36
-12
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Generated by Django 6.0 on 2026-01-27 01:49
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
dependencies = [("settings", "0004_settings_site_base_url")]
8+
9+
operations = [
10+
migrations.AddField(
11+
model_name="promptmessage",
12+
name="rarity",
13+
field=models.FloatField(default=1.0, help_text="Weight of message."),
14+
)
15+
]

admin_panel/settings/models.py

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -177,31 +177,39 @@ def co_owners(self):
177177
prompts: models.QuerySet[PromptMessage]
178178

179179
@cached_property
180-
def catch_messages(self):
181-
return [x.message for x in self.prompts.all() if x.category == PromptMessage.PromptType.CATCH]
180+
def catch_messages(self) -> dict[str, float]:
181+
return {x.message: x.rarity for x in self.prompts.all() if x.category == PromptMessage.PromptType.CATCH}
182182

183183
@cached_property
184-
def wrong_messages(self):
185-
return [x.message for x in self.prompts.all() if x.category == PromptMessage.PromptType.WRONG]
184+
def wrong_messages(self) -> dict[str, float]:
185+
return {x.message: x.rarity for x in self.prompts.all() if x.category == PromptMessage.PromptType.WRONG}
186186

187187
@cached_property
188-
def spawn_messages(self):
189-
return [x.message for x in self.prompts.all() if x.category == PromptMessage.PromptType.SPAWN]
188+
def spawn_messages(self) -> dict[str, float]:
189+
return {x.message: x.rarity for x in self.prompts.all() if x.category == PromptMessage.PromptType.SPAWN}
190190

191191
@cached_property
192-
def slow_messages(self):
193-
return [x.message for x in self.prompts.all() if x.category == PromptMessage.PromptType.SLOW]
192+
def slow_messages(self) -> dict[str, float]:
193+
return {x.message: x.rarity for x in self.prompts.all() if x.category == PromptMessage.PromptType.SLOW}
194194

195195
def get_random_message(self, category: PromptMessage.PromptType):
196196
match category:
197197
case PromptMessage.PromptType.CATCH:
198-
return random.choice(self.catch_messages)
198+
return random.choices(
199+
population=list(self.catch_messages.keys()), weights=list(self.catch_messages.values()), k=1
200+
)[0]
199201
case PromptMessage.PromptType.WRONG:
200-
return random.choice(self.wrong_messages)
202+
return random.choices(
203+
population=list(self.wrong_messages.keys()), weights=list(self.wrong_messages.values()), k=1
204+
)[0]
201205
case PromptMessage.PromptType.SPAWN:
202-
return random.choice(self.spawn_messages)
206+
return random.choices(
207+
population=list(self.spawn_messages.keys()), weights=list(self.spawn_messages.values()), k=1
208+
)[0]
203209
case PromptMessage.PromptType.SLOW:
204-
return random.choice(self.slow_messages)
210+
return random.choices(
211+
population=list(self.slow_messages.keys()), weights=list(self.slow_messages.values()), k=1
212+
)[0]
205213

206214
@property
207215
@warnings.deprecated("This setting returns nothing, Webhook notifications must be used instead")
@@ -243,6 +251,7 @@ class PromptType(models.IntegerChoices):
243251
settings = models.ForeignKey(Settings, on_delete=models.CASCADE, related_name="prompts")
244252
message = models.TextField(help_text="The message to send")
245253
category = models.PositiveSmallIntegerField(help_text="Message category", choices=PromptType)
254+
rarity = models.FloatField(default=1.0, help_text="Weight of message.")
246255

247256
class Meta:
248257
constraints = (

0 commit comments

Comments
 (0)