@@ -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