Passed
Push — main ( 4d254e...b95c28 )
by Bartosz
02:30 queued 01:14
created

build.cogs.spotcog.SpotCog.count_spot()   D

Complexity

Conditions 12

Size

Total Lines 56
Code Lines 38

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 38
dl 0
loc 56
rs 4.8
c 0
b 0
f 0
cc 12
nop 2

1 Method

Rating   Name   Duplication   Size   Complexity  
A build.cogs.spotcog.setup() 0 2 1

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

Complexity

Complex classes like build.cogs.spotcog.SpotCog.count_spot() often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
"""
2
Cog with role related commands available in the Bot.
3
4
Current commands:
5
/remove_spot
6
7
"""
8
import json
9
10
import cogs
11
import discord
12
import cogs.cogbase as cogbase
13
from cogs.databasecog import DatabaseCog
14
from discord.utils import get
15
from discord.ext import commands
16
from discord_slash import SlashContext, cog_ext
17
18
monster_type_dict = {0: "rare", 1: "legendary", 2: "event1", 3: "event2", 4: "common"}
19
20
21
class SpotCog(cogbase.BaseCog):
22
    def __init__(self, base):
23
        super().__init__(base)
24
25
    # Ping monster role
26
    @commands.Cog.listener()
27
    async def on_message(self, ctx):
28
        if ctx.author.id == self.bot.user.id:
29
            return
30
31
        prefix = "/"
32
        cords_beginning = ["-", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
33
34
        # If common spotted
35
        if ctx.channel.id == self.bot.ch_common:
36
            if ctx.content[0] in cords_beginning:
37
                await DatabaseCog.db_count_spot(ctx.author.id, monster_type_dict[4])
38
                await DatabaseCog.db_save_coords(ctx.content, monster_type_dict[4])
39
            else:
40
                await ctx.delete()
41
42
        elif ctx.channel.category and ctx.channel.category.id == self.bot.cat_spotting:
43
            if ctx.content.startswith(prefix):
44
                spotted_monster = await self.get_monster(ctx, ctx.content.replace(prefix, ""))
45
                if spotted_monster:
46
                    role = get(ctx.guild.roles, name=spotted_monster["name"])
47
                    await ctx.delete()
48
                    await ctx.channel.send(f"{role.mention}")
49
                    await DatabaseCog.db_count_spot(ctx.author.id,
50
                                                    monster_type_dict[spotted_monster["type"]])
51
                    return
52
                else:
53
                    await ctx.channel.send(
54
                        f"{ctx.author.mention} monster not found; are you sure that name is correct?", delete_after=5)
55
            elif ctx.content[0] in cords_beginning:
56
                await DatabaseCog.db_save_coords(ctx.content, ctx.channel.name)
57
                return
58
59
60
def setup(bot: commands.Bot):
61
    bot.add_cog(SpotCog(bot))
62