Passed
Branch BonHowi (242417)
by Bartosz
01:38
created

build.cogs.spotcog.SpotCog.on_message()   C

Complexity

Conditions 9

Size

Total Lines 34
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 9
eloc 26
nop 2
dl 0
loc 34
rs 6.6666
c 0
b 0
f 0
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 self.count_spot(ctx, 4)
38
                await DatabaseCog.db_count_spot(ctx.author.id, monster_type_dict[4])
39
                await DatabaseCog.db_save_coords(ctx.content, monster_type_dict[4])
40
            else:
41
                await ctx.delete()
42
43
        elif ctx.channel.category and ctx.channel.category.id == self.bot.cat_spotting:
44
            if ctx.content.startswith(prefix):
45
                spotted_monster = await self.get_monster(ctx, ctx.content.replace(prefix, ""))
46
                if spotted_monster:
47
                    role = get(ctx.guild.roles, name=spotted_monster["name"])
48
                    await ctx.delete()
49
                    await ctx.channel.send(f"{role.mention}")
50
                    # await self.count_spot(ctx, spotted_monster["type"])
51
                    await DatabaseCog.db_count_spot(ctx.author.id,
52
                                                    monster_type_dict[spotted_monster["type"]])
53
                    return
54
                else:
55
                    await ctx.channel.send(
56
                        f"{ctx.author.mention} monster not found; are you sure that name is correct?", delete_after=5)
57
            elif ctx.content[0] in cords_beginning:
58
                await DatabaseCog.db_save_coords(ctx.content, ctx.channel.name)
59
                return
60
61
    # @cog_ext.cog_slash(name="setMemberSpotsCounter", guild_ids=cogbase.GUILD_IDS,
62
    #                    description="Function for managing user's spots",
63
    #                    default_permission=False,
64
    #                    permissions=cogbase.PERMISSION_MODS)
65
    # async def set_spot_count(self, ctx: SlashContext, user: discord.User, monster_type: int, number: int):
66
    #     """
67
    #
68
    #     :param ctx:
69
    #     :type ctx:
70
    #     :param user:
71
    #     :type user:
72
    #     :param monster_type:
73
    #     :type monster_type:
74
    #     :param number:
75
    #     :type number:
76
    #     :return:
77
    #     :rtype:
78
    #     """
79
    #     if number < 0:
80
    #         await ctx.channel.send("Nr of spots can't be lower than 0", delete_after=2)
81
    #         return
82
    #     with open("./server_files/monster_spots.json", encoding="utf-8") as f:
83
    #         try:
84
    #             spots = json.load(f)
85
    #         except ValueError:
86
    #             spots = {"users": []}
87
    #             await ctx.channel.send("monster_spots.json created", delete_after=1)
88
    #
89
    #     # TODO: Too many ifs? actually this whole function is written in bad way
90
    #     for current_user in spots["users"]:
91
    #         if current_user["id"] == user.id:
92
    #             if monster_type == 0:
93
    #                 current_user["rare_spots"] = number
94
    #             elif monster_type == 1:
95
    #                 current_user["lege_spots"] = number
96
    #             elif monster_type == 2:
97
    #                 pass
98
    #             elif monster_type == 3:
99
    #                 pass
100
    #             elif monster_type == 4:
101
    #                 current_user["common_spots"] = number
102
    #             else:
103
    #                 print("Wrong monster type(?)")
104
    #
105
    #             current_user["total"] = current_user["lege_spots"] * 5 + current_user["rare_spots"]
106
    #             break
107
    #
108
    #     with open("./server_files/monster_spots.json", "w+") as f:
109
    #         json.dump(spots, f, indent=4)
110
    #     await ctx.channel.send(f"Nr of spots changed for {user.display_name}", delete_after=4)
111
112
113
def setup(bot: commands.Bot):
114
    bot.add_cog(SpotCog(bot))
115