diff options
| author | 2022-09-18 15:41:27 +0100 | |
|---|---|---|
| committer | 2022-09-18 15:41:27 +0100 | |
| commit | c17ca61dcbe63b6f458e31c7d113de4a48cc3b45 (patch) | |
| tree | 0ba216127e14154536e9995dc681375ccfaab63a | |
| parent | stop matching as soon as an invalid kw is encountered (diff) | |
stop matching keywords when they're invalid upon triaging the rule numbers & keywords
| -rw-r--r-- | bot/exts/info/information.py | 36 | 
1 files changed, 17 insertions, 19 deletions
| diff --git a/bot/exts/info/information.py b/bot/exts/info/information.py index 1ba8cf87e..cd1f0f957 100644 --- a/bot/exts/info/information.py +++ b/bot/exts/info/information.py @@ -528,11 +528,19 @@ class Information(Cog):          rules_embed = Embed(title="Rules", color=Colour.og_blurple(), url="https://www.pythondiscord.com/pages/rules")          keywords, rule_numbers = [], [] +        full_rules = await self.bot.api_client.get("rules", params={"link_format": "md"}) +        available_keywords = set() + +        for _, rule_keywords in full_rules: +            available_keywords = available_keywords | set(rule_keywords) +          for word in args:              try:                  rule_numbers.append(int(word))              except ValueError: -                keywords.append(word.lower()) +                if (kw := word.lower()) not in available_keywords: +                    break +                keywords.append(kw)          if not rule_numbers and not keywords:              # Neither rules nor keywords were submitted. Return the default description. @@ -545,12 +553,6 @@ class Information(Cog):              await ctx.send(embed=rules_embed)              return -        full_rules = await self.bot.api_client.get("rules", params={"link_format": "md"}) -        available_keywords = set() - -        for _, rule_keywords in full_rules: -            available_keywords = available_keywords | set(rule_keywords) -          # Remove duplicates and sort the rule indices          rule_numbers = sorted(set(rule_numbers))          # Remove duplicate keywords and preserve the order of initial keywords @@ -566,15 +568,10 @@ class Information(Cog):          final_rule_numbers.extend(rule_numbers)          for keyword in keywords: -            if keyword not in available_keywords: -                break -              for pick, rule in enumerate(full_rules): -                if keyword not in rule[1]: -                    continue - -                final_rule_numbers.append(pick + 1) -                break +                if keyword in rule[1]: +                    final_rule_numbers.append(pick + 1) +                    break          if not rule_numbers and not final_rule_numbers:              # This would mean that only keywords where used and no match for them was found @@ -584,12 +581,13 @@ class Information(Cog):                  f"<#{constants.Channels.meta}> or <#{constants.Channels.dev_contrib}>")              return -        for rule_number in final_rule_numbers: -            self.bot.stats.incr(f"rule_uses.{rule_number}") - +        final_rules = []          final_rule_numbers.sort()          final_rule_numbers = set(final_rule_numbers) -        final_rules = [f"**{rule_number}.** {full_rules[rule_number - 1][0]}" for rule_number in final_rule_numbers] + +        for rule_number in final_rule_numbers: +            self.bot.stats.incr(f"rule_uses.{rule_number}") +            final_rules.append(f"**{rule_number}.** {full_rules[rule_number - 1][0]}")          await LinePaginator.paginate(final_rules, ctx, rules_embed, max_lines=3) | 
