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()
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")
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")
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")
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.")
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")
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")
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)}')
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)
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```")
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")
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.")
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)
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')
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)
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)
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}")
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")
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)
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)