pull/1/head
Bobloy 7 years ago
parent b5c2d3d10b
commit e5a16c908e

@ -1,16 +1,13 @@
import asyncio
from typing import List, Union
from datetime import datetime, timedelta
import discord
from discord.ext import commands
from redbot.core import Config
from redbot.core.bot import Red
from .source import ChatBot
from .source.trainers import ListTrainer
from datetime import datetime,timedelta
class Chatter:
"""
@ -24,17 +21,17 @@ class Chatter:
default_guild = {
"whitelist": None,
"days": 1
}
}
self.chatbot = ChatBot("ChatterBot")
self.chatbot.set_trainer(ListTrainer)
self.config.register_global(**default_global)
self.config.register_guild(**default_guild)
self.loop = asyncio.get_event_loop()
async def _get_conversation(self, ctx, in_channel: discord.TextChannel=None):
async def _get_conversation(self, ctx, in_channel: discord.TextChannel = None):
"""
Compiles all conversation in the Guild this bot can get it's hands on
Currently takes a stupid long time
@ -42,9 +39,8 @@ class Chatter:
"""
out = []
after = datetime.today() - timedelta(days=(await self.config.guild(ctx.guild).days()))
for channel in ctx.guild.text_channels:
for channel in ctx.guild.text_channels:
if in_channel:
channel = in_channel
await ctx.send("Gathering {}".format(channel.mention))
@ -52,7 +48,7 @@ class Chatter:
try:
async for message in channel.history(limit=None, reverse=True, after=after):
if user == message.author:
out[-1] += "\n"+message.clean_content
out[-1] += "\n" + message.clean_content
else:
user = message.author
out.append(message.clean_content)
@ -60,12 +56,12 @@ class Chatter:
pass
except discord.HTTPException:
pass
if in_channel:
break
return out
def _train(self, data):
try:
self.chatbot.train(data)
@ -80,45 +76,46 @@ class Chatter:
"""
if ctx.invoked_subcommand is None:
await ctx.send_help()
@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 self._get_conversation(ctx, channel)
if not conversation:
await ctx.send("Failed to gather training data")
return
await ctx.send("Gather successful! Training begins now\n(**This will take a long time, be patient**)")
embed=discord.Embed(title="Loading")
embed = discord.Embed(title="Loading")
embed.set_image(url="http://www.loop.universaleverything.com/animations/1295.gif")
temp_message = await ctx.send(embed=embed)
future = await self.loop.run_in_executor(None, self._train, conversation)
try:
await temp_message.delete()
except:
pass
if future:
await ctx.send("Training successful!")
else:
await ctx.send("Error occurred :(")
async def on_message(self, message):
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
@ -137,5 +134,3 @@ class Chatter:
if not response:
response = ":thinking:"
await channel.send(response)

Loading…
Cancel
Save