Rewrite audio (multivoice) (#249)

This commit is contained in:
Twentysix 2016-05-13 02:28:21 +02:00
parent de5710082e
commit eb6451a317
2 changed files with 1611 additions and 947 deletions

File diff suppressed because it is too large Load Diff

View File

@ -5,8 +5,6 @@ from .utils import checks
from __main__ import send_cmd_help, settings from __main__ import send_cmd_help, settings
import os import os
import logging import logging
import json
import asyncio
class Mod: class Mod:
"""Moderation tools.""" """Moderation tools."""
@ -56,7 +54,8 @@ class Mod:
author = ctx.message.author author = ctx.message.author
try: try:
await self.bot.kick(user) await self.bot.kick(user)
logger.info("{}({}) kicked {}({})".format(author.name, author.id, user.name, user.id)) logger.info("{}({}) kicked {}({})".format(
author.name, author.id, user.name, user.id))
await self.bot.say("Done. That felt good.") await self.bot.say("Done. That felt good.")
except discord.errors.Forbidden: except discord.errors.Forbidden:
await self.bot.say("I'm not allowed to do that.") await self.bot.say("I'm not allowed to do that.")
@ -75,7 +74,8 @@ class Mod:
return return
try: try:
await self.bot.ban(user, days) await self.bot.ban(user, days)
logger.info("{}({}) banned {}({}), deleting {} days worth of messages".format(author.name, author.id, user.name, user.id, str(days))) logger.info("{}({}) banned {}({}), deleting {} days worth of messages".format(
author.name, author.id, user.name, user.id, str(days)))
await self.bot.say("Done. It was about time.") await self.bot.say("Done. It was about time.")
except discord.errors.Forbidden: except discord.errors.Forbidden:
await self.bot.say("I'm not allowed to do that.") await self.bot.say("I'm not allowed to do that.")
@ -120,24 +120,25 @@ class Mod:
author = ctx.message.author author = ctx.message.author
message = ctx.message message = ctx.message
cmdmsg = message cmdmsg = message
logger.info("{}({}) deleted {} messages containing '{}' in channel {}".format(author.name, author.id, str(number), text, message.channel.name)) logger.info("{}({}) deleted {} messages containing '{}' in channel {}".format(
author.name, author.id, str(number), text, message.channel.name))
try: try:
if number > 0 and number < 10000: if number > 0 and number < 10000:
while True: while True:
new = False new = False
async for x in self.bot.logs_from(message.channel, limit=100, before=message): async for x in self.bot.logs_from(message.channel, limit=100, before=message):
if number == 0: if number == 0:
await self.bot.delete_message(cmdmsg) await self._delete_message(cmdmsg)
await asyncio.sleep(0.25) await asyncio.sleep(0.25)
return return
if text in x.content: if text in x.content:
await self.bot.delete_message(x) await self._delete_message(x)
await asyncio.sleep(0.25) await asyncio.sleep(0.25)
number -= 1 number -= 1
new = True new = True
message = x message = x
if not new or number == 0: if not new or number == 0:
await self.bot.delete_message(cmdmsg) await self._delete_message(cmdmsg)
await asyncio.sleep(0.25) await asyncio.sleep(0.25)
break break
except discord.errors.Forbidden: except discord.errors.Forbidden:
@ -153,24 +154,25 @@ class Mod:
author = ctx.message.author author = ctx.message.author
message = ctx.message message = ctx.message
cmdmsg = message cmdmsg = message
logger.info("{}({}) deleted {} messages made by {}({}) in channel {}".format(author.name, author.id, str(number), user.name, user.id, message.channel.name)) logger.info("{}({}) deleted {} messages made by {}({}) in channel {}".format(
author.name, author.id, str(number), user.name, user.id, message.channel.name))
try: try:
if number > 0 and number < 10000: if number > 0 and number < 10000:
while True: while True:
new = False new = False
async for x in self.bot.logs_from(message.channel, limit=100, before=message): async for x in self.bot.logs_from(message.channel, limit=100, before=message):
if number == 0: if number == 0:
await self.bot.delete_message(cmdmsg) await self._delete_message(cmdmsg)
await asyncio.sleep(0.25) await asyncio.sleep(0.25)
return return
if x.author.id == user.id: if x.author.id == user.id:
await self.bot.delete_message(x) await self._delete_message(x)
await asyncio.sleep(0.25) await asyncio.sleep(0.25)
number -= 1 number -= 1
new = True new = True
message = x message = x
if not new or number == 0: if not new or number == 0:
await self.bot.delete_message(cmdmsg) await self._delete_message(cmdmsg)
await asyncio.sleep(0.25) await asyncio.sleep(0.25)
break break
except discord.errors.Forbidden: except discord.errors.Forbidden:
@ -184,11 +186,12 @@ class Mod:
cleanup messages 26""" cleanup messages 26"""
author = ctx.message.author author = ctx.message.author
channel = ctx.message.channel channel = ctx.message.channel
logger.info("{}({}) deleted {} messages in channel {}".format(author.name, author.id, str(number), channel.name)) logger.info("{}({}) deleted {} messages in channel {}".format(
author.name, author.id, str(number), channel.name))
try: try:
if number > 0 and number < 10000: if number > 0 and number < 10000:
async for x in self.bot.logs_from(channel, limit=number + 1): async for x in self.bot.logs_from(channel, limit=number + 1):
await self.bot.delete_message(x) await self._delete_message(x)
await asyncio.sleep(0.25) await asyncio.sleep(0.25)
except discord.errors.Forbidden: except discord.errors.Forbidden:
await self.bot.say("I need permissions to manage messages in this channel.") await self.bot.say("I need permissions to manage messages in this channel.")
@ -220,7 +223,6 @@ class Mod:
else: else:
await self.bot.say("User is not in blacklist.") await self.bot.say("User is not in blacklist.")
@commands.group(pass_context=True) @commands.group(pass_context=True)
@checks.is_owner() @checks.is_owner()
async def whitelist(self, ctx): async def whitelist(self, ctx):
@ -281,7 +283,6 @@ class Mod:
else: else:
await self.bot.say("Channel already in ignore list.") await self.bot.say("Channel already in ignore list.")
@ignore.command(name="server", pass_context=True) @ignore.command(name="server", pass_context=True)
async def ignore_server(self, ctx): async def ignore_server(self, ctx):
"""Ignores current server""" """Ignores current server"""
@ -322,7 +323,6 @@ class Mod:
else: else:
await self.bot.say("That channel is not in the ignore list.") await self.bot.say("That channel is not in the ignore list.")
@unignore.command(name="server", pass_context=True) @unignore.command(name="server", pass_context=True)
async def unignore_server(self, ctx): async def unignore_server(self, ctx):
"""Removes current server from ignore list""" """Removes current server from ignore list"""
@ -432,7 +432,8 @@ class Mod:
author = ctx.message.author author = ctx.message.author
try: try:
await self.bot.edit_role(ctx.message.server, role, color=value) await self.bot.edit_role(ctx.message.server, role, color=value)
logger.info("{}({}) changed the colour of role '{}'".format(author.name, author.id, role.name)) logger.info("{}({}) changed the colour of role '{}'".format(
author.name, author.id, role.name))
await self.bot.say("Done.") await self.bot.say("Done.")
except discord.Forbidden: except discord.Forbidden:
await self.bot.say("I need permissions to manage roles first.") await self.bot.say("I need permissions to manage roles first.")
@ -454,7 +455,8 @@ class Mod:
author = ctx.message.author author = ctx.message.author
old_name = role.name # probably not necessary? old_name = role.name # probably not necessary?
await self.bot.edit_role(ctx.message.server, role, name=name) await self.bot.edit_role(ctx.message.server, role, name=name)
logger.info("{}({}) changed the name of role '{}' to '{}'".format(author.name, author.id, old_name, name)) logger.info("{}({}) changed the name of role '{}' to '{}'".format(
author.name, author.id, old_name, name))
await self.bot.say("Done.") await self.bot.say("Done.")
except discord.Forbidden: except discord.Forbidden:
await self.bot.say("I need permissions to manage roles first.") await self.bot.say("I need permissions to manage roles first.")
@ -476,6 +478,14 @@ class Mod:
else: else:
await self.bot.say("That user doesn't have any recorded name change.") await self.bot.say("That user doesn't have any recorded name change.")
async def _delete_message(self, message):
try:
await self.bot.delete_message(message)
except discord.errors.NotFound:
pass
except:
raise
def immune_from_filter(self, message): def immune_from_filter(self, message):
user = message.author user = message.author
server = message.server server = message.server
@ -497,18 +507,22 @@ class Mod:
server = message.server server = message.server
can_delete = message.channel.permissions_for(server.me).manage_messages can_delete = message.channel.permissions_for(server.me).manage_messages
if message.author.id == self.bot.user.id or self.immune_from_filter(message) or not can_delete: # Owner, admins and mods are immune to the filter # Owner, admins and mods are immune to the filter
if message.author.id == self.bot.user.id or self.immune_from_filter(message) or not can_delete:
return return
if server.id in self.filter.keys(): if server.id in self.filter.keys():
for w in self.filter[server.id]: for w in self.filter[server.id]:
if w in message.content.lower(): if w in message.content.lower():
try: # Something else in discord.py is throwing a 404 error after deletion # Something else in discord.py is throwing a 404 error
await self.bot.delete_message(message) # after deletion
try:
await self._delete_message(message)
except: except:
pass pass
print("Message deleted. Filtered: " + w) print("Message deleted. Filtered: " + w)
async def check_names(self, before, after): async def check_names(self, before, after):
if before.name != after.name: if before.name != after.name:
if before.id not in self.past_names.keys(): if before.id not in self.past_names.keys():
@ -525,6 +539,7 @@ def check_folders():
print("Creating " + folder + " folder...") print("Creating " + folder + " folder...")
os.makedirs(folder) os.makedirs(folder)
def check_files(): def check_files():
ignore_list = {"SERVERS": [], "CHANNELS": []} ignore_list = {"SERVERS": [], "CHANNELS": []}
@ -548,15 +563,20 @@ def check_files():
print("Creating empty past_names.json...") print("Creating empty past_names.json...")
fileIO("data/mod/past_names.json", "save", {}) fileIO("data/mod/past_names.json", "save", {})
def setup(bot): def setup(bot):
global logger global logger
check_folders() check_folders()
check_files() check_files()
logger = logging.getLogger("mod") logger = logging.getLogger("mod")
if logger.level == 0: # Prevents the logger from being loaded again in case of module reload # Prevents the logger from being loaded again in case of module reload
if logger.level == 0:
logger.setLevel(logging.INFO) logger.setLevel(logging.INFO)
handler = logging.FileHandler(filename='data/mod/mod.log', encoding='utf-8', mode='a') handler = logging.FileHandler(
handler.setFormatter(logging.Formatter('%(asctime)s %(message)s', datefmt="[%d/%m/%Y %H:%M]")) filename='data/mod/mod.log', encoding='utf-8', mode='a')
handler.setFormatter(
logging.Formatter('%(asctime)s %(message)s', datefmt="[%d/%m/%Y %H:%M]"))
logger.addHandler(handler) logger.addHandler(handler)
n = Mod(bot) n = Mod(bot)
bot.add_listener(n.check_filter, "on_message") bot.add_listener(n.check_filter, "on_message")