Control updates

fight-fixes
Bobloy 7 years ago
parent 94f8ceb5f9
commit 4e50eed667

@ -10,7 +10,7 @@ from redbot.core.bot import Red
from chatterbot import ChatBot
from chatterbot.trainers import ListTrainer
from datetime import datetime,timedelta
class Chatter:
"""
@ -21,34 +21,45 @@ class Chatter:
self.bot = bot
self.config = Config.get_conf(self, identifier=6710497116116101114)
default_global = {}
default_guild = {}
default_guild = {
"whitelist": None,
"days": 1
}
self.chatbot = ChatBot("Chatter", trainer=ListTrainer)
self.chatbot = ChatBot("ChatterBot")
self.chatbot.set_trainer(ListTrainer)
self.config.register_global(**default_global)
self.config.register_guild(**default_guild)
async def _get_conversation(guild: discord.Guild):
async def _get_conversation(self, ctx, in_channel: discord.TextChannel):
"""
Compiles all conversation on the server this bot can get it's hands on
Compiles all conversation in the Guild this bot can get it's hands on
Currently takes a stupid long time
Returns a list of text
"""
out = []
after = datetime.today() - timedelta(days=(await self.config.guild(ctx.guild).days()))
for channel in guild.textchannels:
for channel in ctx.guild.text_channels:
if in_channel:
channel = in_channel
await ctx.send("Gathering {}".format(channel.mention))
try:
async for message in channel.history(limit=None, reverse=True):
async for message in channel.history(limit=None, reverse=True, after=after):
out.append(message.content)
except discord.Forbidden:
pass
except discord.HTTPException:
pass
if in_channel:
break
return out
async def _train(data):
async def _train(self, data):
try:
self.chatbot.train(data)
except:
@ -61,20 +72,52 @@ class Chatter:
"""
if ctx.invoked_subcommand is None:
await ctx.send_help()
@reactrestrict.command()
async def train(self, ctx: commands.Context):
@chatter.command()
async def age(self, ctx: commands.Context, days: int):
"""
Sets the number of days to look back
Will train on 1 day otherwise
"""
await self.config.guild(ctx.guild).days.set(days)
await ctx.send("Success")
@chatter.command()
async def train(self, ctx: commands.Context, channel: discord.TextChannel = None):
"""
Trains the bot based on language in this guild
"""
conversation = await _get_conversation(ctx.guild)
conversation = await self._get_conversation(ctx, channel)
await ctx.send("Gather successful! Training begins now")
if not conversation:
await ctx.send("Failed to gather training data")
return
if await _train(conversation):
await ctx.send("Training successful")
if await self._train(conversation):
await ctx.send("Training successful!")
else:
await ctx.send("Error occurred")
await ctx.send("Error occurred :(")
async def on_message(self, message):
"""
Credit to https://github.com/Twentysix26/26-Cogs/blob/master/cleverbot/cleverbot.py
for on_message recognition of @bot
"""
author = message.author
channel = message.channel
if message.author.id != self.bot.user.id:
to_strip = "@" + author.guild.me.display_name + " "
text = message.clean_content
if not text.startswith(to_strip):
return
text = text.replace(to_strip, "", 1)
async with channel.typing():
response = self.chatbot.get_response(text)
if response:
await channel.send(response)
else:
await channel.send(":thinking:")

Loading…
Cancel
Save