Esempio n. 1
0
    async def postauto(self, ctx, lov):
        """
        Sender en melding som automatisk oppdateres når reglene oppdateres.
        """
        rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
        rule_text = rules.get_rule_text(lov)

        if rule_text is None:
            await ctx.send('Sjekk at reglene finnes.\n' +
                           '**Liste over lovene i lovherket:**\n' +
                           f'{rules.get_rules_formatted()}')
            return

        if rule_text == "":
            await ctx.send("Den regelen er helt tom.")
            return

        msg = await ctx.send(rule_text)
        added = rules.add_link_setting('auto_update',
                                       lov,
                                       f'{self._format_message_link(msg)}')

        conf_msg = await ctx.send("Meldingen oppdateres nå automatisk")
        await asyncio.sleep(5)
        await conf_msg.delete()
Esempio n. 2
0
    async def link_alternate(self, ctx, lov, link):
        """
        Setter en gammel melding til å automatisk oppdateres når regler endres.
        """
        msg = await self._get_linked_message(ctx, link)
        if msg is None:
            await ctx.send("Klarte ikke finne meldingen")
            return

        rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
        added = rules.add_link_setting('react_rules',
                                       lov,
                                       f'{self._format_message_link(msg)}')

        self._react_messages.append(msg.id)
        with codecs.open(self.REACT_MSGS, "w+", encoding='utf8') as f:
            json.dump(self._react_messages, f, indent=4)

        if added == -1:
            await ctx.send("Melding allerede satt opp for reaksjoner")
        elif added:
            try:
                await msg.clear_reactions()
                await asyncio.sleep(1)
                await msg.add_reaction(self.emoji)
                await ctx.send("reaksjonsregler lagt til")
            except:
                await ctx.send("Får ikke reacta")
        else:
            await ctx.send("Reglene du skrev inn finnes ikke")
Esempio n. 3
0
    async def autorules(self, ctx, lov, link):
        """
        Setter en gammel melding til å automatisk oppdateres når regler endres.
        """
        msg = await self._get_linked_message(ctx, link)
        if msg is None:
            await ctx.send("Klarte ikke finne meldingen")
            return
        if msg.author != self.bot.user:
            await ctx.send("Sjekk at meldingen tilhører botten")
            return

        rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
        added = rules.add_link_setting('auto_update',
                                       lov,
                                       f'{self._format_message_link(msg)}')

        if added == -1:
            await ctx.send("Melding allerede satt til å oppdateres automatisk")
        elif added:
            await ctx.send("Melding satt til å oppdateres automatisk")
        else:
            await ctx.send("Reglene du skrev inn finnes ikke")

        await ctx.send("Oppdaterer meldinger")
        await self._update_messages(ctx, lov)
        await ctx.send("Oppdatert")
Esempio n. 4
0
 async def remove_auto(self, ctx, link):
     """
     Fjerner en melding fra lista av meldinger som oppdateres automatisk.
     """
     rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
     removed = rules.remove_link_setting("auto_update", "link", link)
     if removed:
         await ctx.send("autooppdatering fjernet")
     else:
         await ctx.send("Sjekk at linken er i bruk med §auto liste")
Esempio n. 5
0
 async def edit_alternate(self, ctx, lov, *, newrule):
     """
     Oppdaterer reaksjons-regler i lovherket.
     """
     rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
     edited = rules.edit_rule(lov, newrule, alternate=True)
     if edited:
         await ctx.send("Alternative regler oppdatert")
     else:
         await ctx.send("Sjekk at du skrev riktig.")
Esempio n. 6
0
 async def remove_alternate(self, ctx, lov):
     """
     Fjerner reaksjons-regler fra lovherket.
     """
     rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
     removed = rules.remove_rule(lov, alternate=True)
     if removed:
         await ctx.send("Alternative regler fjernet")
     else:
         await ctx.send("Reglene du skrev inn finnes ikke")
Esempio n. 7
0
    async def newrules(self, ctx, lov, *, newrule: str=None):
        """
        Legger til et nytt sett med regler i lovherket.
        """
        rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
        added = rules.add_rule(lov, newrule)

        if not added:
            await ctx.send("Det finnes allerede regler med det navnet.")
        else:
            await ctx.send("Regler laget")
Esempio n. 8
0
 async def show_alternate(self, ctx, lov: str=None):
     """
     Viser reaksjons-regler fra lovherket.
     """
     rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
     rule_text = rules.get_rule_text(lov, alternate=True)
     if rule_text is not None:
         await ctx.send("```\n" + rule_text + "\n```")
     else:
         await ctx.send('**Liste over react-regler i lovherket:**\n' +
                        f'{rules.get_rules_formatted(alternate=True)}')
Esempio n. 9
0
    async def on_message(self, message):

        if message.author.id == self.bot.user.id:
            return

        if not isinstance(message.channel, discord.TextChannel):
            return

        content = message.content

        if content is '' or content[0] is not "§":  # hardcoded atm
            return

        split = content.split('§')
        num = split[1]

        if num is '':
            return

        # crap way to avoid running when a command runs
        try:
            int(num.split()[0])
        except:
            return

        rules = RuleManager(message.guild.id, self.SERVERS_PATH)

        lov = rules.get_settings("default_rule")
        rule_text = rules.get_rule_text(lov)

        context = message.channel

        if rule_text is None:
            await context.send('**Du må sette default før dette fungerer\n' +
                               'Liste over lovene i lovherket:**\n' +
                               f'{rules.get_rules_formatted()}')
            return

        if rule_text == "":
            await context.send("Denne regelen er helt tom.")
            return

        # Get only specified rules
        partial_rules = ""
        no_dupes = remove_duplicates(num.split())
        for rule in no_dupes:
            ruleregex = r"(§ *" + re.escape(rule) + r"[a-z]?: [\S ]*)"
            m = re.search(ruleregex, rule_text)
            if m is not None:
                partial_rules += m.groups()[0] + "\n"

        if partial_rules is '':
            return
        await context.send(partial_rules)
Esempio n. 10
0
    async def plaintext(self, ctx, lov):
        """
        Sender reglene så de enkelt kan kopieres med formatering.
        """
        rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
        rule_text = rules.get_rule_text(lov)

        if rule_text is None:
            await ctx.send("Sjekk at du skrev riktig.")
        else:
            await ctx.send("```\n" + rule_text + "\n```")
Esempio n. 11
0
    async def removerules(self, ctx, lov):
        """
        Fjerner regler fra lovherket.
        """
        rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
        await self._remove_reactions(ctx, lov)
        removed = rules.remove_rule(lov)

        if removed:
            await ctx.send("Regler fjernet")
        else:
            await ctx.send("Reglene du skrev inn finnes ikke")
Esempio n. 12
0
 async def updaterules(self, ctx, lov, *, newrule):
     """
     Oppdaterer lover i lovherket.
     """
     rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
     edited = rules.edit_rule(lov, newrule)
     if edited:
         await ctx.send("Oppdaterer meldinger")
         await self._update_messages(ctx, lov)
         await ctx.send("Regler oppdatert")
     else:
         await ctx.send("Sjekk at du skrev riktig.")
Esempio n. 13
0
    async def rules(self, ctx,
                    lov: typing.Union[int, str]=None, *, num: str=None):
        """
        Se reglene i lovherket.
        """

        rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)

        if isinstance(lov, int):
            if num is None:
                num = str(lov)
            else:
                num = str(lov) + " " + num
            lov = rules.get_settings("default_rule")

        rule_text, date = rules.get_rule_text(lov)

        if rule_text is None:
            await ctx.send('**Liste over lovene i lovherket:**\n' +
                           f'{rules.get_rules_formatted()}')
            return

        if rule_text == "":
            await ctx.send("Denne regelen er helt tom.")
            return

        # Get only specified rules
        if num is not None:
            await ctx.message.delete()
            partial_rules = ""

            no_dupes = remove_duplicates(num.split())

            for rule in no_dupes:
                ruleregex = r"(§ *" + re.escape(rule) + r"[a-z]?: [\S ]*)"
                m = re.search(ruleregex, rule_text)
                if m is not None:
                    partial_rules += m.groups()[0] + "\n"

            if partial_rules == "":
                await ctx.send(f'Fant ikke reglene du ser etter')
            else:
                if lov != rules.get_settings("default_rule"):
                    partial_rules = f'**I reglene for {lov}:**\n' \
                        + partial_rules
                await ctx.send(partial_rules)
        else:
            embed = await self._create_embed(rule_text, date)
            await ctx.send(embed=embed)
Esempio n. 14
0
    async def set_default_rule(self, ctx, lov):
        """
        Setter default regler.
        """
        rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
        rule_text = rules.get_rule_text(lov)

        if rule_text is None:
            await ctx.send(f'Den regelen er ikke i lovherket.\n\n' +
                            '**Liste over lovene i lovherket:**\n' +
                            f'{rules.get_rules_formatted()}')
            return

        rules.change_setting("default_rule", lov.lower())
        await ctx.send(f'{lov} er nå serverens default regel')
Esempio n. 15
0
    async def _react_list(self, ctx):
        """
        Gir en liste over meldinger som er satt til å oppdateres automatisk.
        """
        rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
        react_messages = rules.get_settings('react_rules')

        list_message = '**Meldinger med react-regler:**\n'

        if len(react_messages) == 0:
            await ctx.send("Ingen meldinger er satt opp for reacts")
            return

        for message in react_messages:
            list_message += f'{message["name"]}: {message["link"]}\n'

        await ctx.send(list_message)
Esempio n. 16
0
    async def _auto_list(self, ctx):
        """
        Gir en liste over meldinger som er satt til å oppdateres automatisk.
        """
        rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
        auto_update_messages = rules.get_settings('auto_update')

        list_message = '**Meldinger satt til autooppdatering:**\n'

        if len(auto_update_messages) == 0:
            await ctx.send("Ingen meldinger er satt til autooppdatering")
            return

        for message in auto_update_messages:
            list_message += f'{message["name"]}: {message["link"]}\n'

        await ctx.send(list_message)
Esempio n. 17
0
    async def _dm_rules(self, user, msg):

        rules = RuleManager(msg.guild.id, self.SERVERS_PATH)
        react_rules = rules.get_settings("react_rules")
        msg_link = self._format_message_link(msg)
        rule_name = None
        for rule in react_rules:
            if rule["link"] == msg_link:
                rule_name = rule["name"]

        if rule_name is None:
            return

        rule_text = rules.get_rule_text(rule_name, alternate=True)
        try:
            await user.send(rule_text)
        except discord.Forbidden:
            await msg.channel.send(f"I can't send you messages {user.mention}")
Esempio n. 18
0
    async def unlink_alternate(self, ctx, message_link):
        """
        Fjerner en reaksjons-regler til en reaksjon på en melding lovherket.
        """

        rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)

        msg = await self._get_linked_message(ctx, message_link)
        if msg is None:
            await ctx.send("Sjekk at linken er gyldig")
            return
        link = self._format_message_link(msg)

        await self._remove_reactions(ctx, link)
        removed = rules.remove_link_setting("react_rules", "link", link)
        if removed:
            await ctx.send("Reaksjon-regler fjernet")
        else:
            await ctx.send("Meldingen var ikke satt til autooppdatering")
Esempio n. 19
0
    async def _remove_reactions(self, ctx, to_match):
        rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
        react_rules = rules.get_settings("react_rules")
        for rule in react_rules:
            if rule["name"] == to_match or rule["link"] == to_match:
                msg = await self._get_linked_message(ctx, rule["link"])
                if msg is None:
                    await ctx.send('Får ikke fjernet reaksjonen fra ' +
                                   f'følgende melding:\n{message["link"]}\n' +
                                   'Sjekk om den er tilgjengelig for botten' +
                                   ' eller slett reaksjonen manuelt')
                    continue

                await msg.remove_reaction(self.emoji, self.bot.user)

                self._react_messages.remove(msg.id)
                with codecs.open(self.REACT_MSGS, "w+", encoding='utf8') as f:
                    json.dump(self._react_messages, f, indent=4)

                await asyncio.sleep(2)
Esempio n. 20
0
    async def _update_messages(self, ctx, name=None):
        rules = RuleManager(ctx.guild.id, self.SERVERS_PATH)
        auto_update_messages = rules.get_settings('auto_update')

        for message in auto_update_messages:
            if message["name"] == name or name is None:
                msg = await self._get_linked_message(ctx, message["link"])
                if msg is None:
                    await ctx.send('Klarer ikke finne følgende melding:\n' +
                                   f'{message["link"]}\nSjekk om den finnes,' +
                                   ' hvis ikke fjern den med `§auto fjern`')
                    continue

                updated_text = rules.get_rule_text(message["name"])
                if updated_text is None:
                    await ctx.send('Fant ikke en regel med følgende navn:\n' +
                                   f'{message["name"]}.')
                    continue

                await asyncio.sleep(2)
                await msg.edit(content=updated_text)