diff --git a/chatter/__init__.py b/chatter/__init__.py new file mode 100644 index 0000000..2d7a8e8 --- /dev/null +++ b/chatter/__init__.py @@ -0,0 +1,5 @@ +from .chatter import Chatter + + +def setup(bot): + bot.add_cog(Chatter(bot)) diff --git a/chatter/chatter.py b/chatter/chatter.py new file mode 100644 index 0000000..ed22eae --- /dev/null +++ b/chatter/chatter.py @@ -0,0 +1,80 @@ +import asyncio +from typing import List, Union + +import discord +from discord.ext import commands + +from redbot.core import Config +from redbot.core.bot import Red + +from chatterbot import ChatBot +from chatterbot.trainers import ListTrainer + + + +class Chatter: + """ + This cog trains a chatbot that will talk like members of your Guild + """ + + def __init__(self, bot): + self.bot = bot + self.config = Config.get_conf(self, identifier=6710497116116101114) + default_global = {} + default_guild = {} + + self.chatbot = ChatBot("Chatter", trainer=ListTrainer) + + self.config.register_global(**default_global) + self.config.register_guild(**default_guild) + + async def _get_conversation(guild: discord.Guild): + """ + Compiles all conversation on the server this bot can get it's hands on + Currently takes a stupid long time + Returns a list of text + """ + out = [] + + for channel in guild.textchannels: + try: + async for message in channel.history(limit=None, reverse=True): + out.append(message.content) + except discord.Forbidden: + pass + except discord.HTTPException: + pass + + + return out + + async def _train(data): + try: + self.chatbot.train(data) + except: + return False + return True + @commands.group() + async def chatter(self, ctx: commands.Context): + """ + Base command for this cog. Check help for the commands list. + """ + if ctx.invoked_subcommand is None: + await ctx.send_help() + + @reactrestrict.command() + async def train(self, ctx: commands.Context): + """ + Trains the bot based on language in this guild + """ + + conversation = await _get_conversation(ctx.guild) + if not conversation: + await ctx.send("Failed to gather training data") + return + + if await _train(conversation): + await ctx.send("Training successful") + else: + await ctx.send("Error occurred") + diff --git a/chatter/info.json b/chatter/info.json new file mode 100644 index 0000000..2930162 --- /dev/null +++ b/chatter/info.json @@ -0,0 +1,10 @@ +{ + "author" : ["Bobloy"], + "bot_version" : [3,0,0], + "description" : "Create an offline chatbot that talks like your average member using Machine Learning", + "hidden" : false, + "install_msg" : "Thank you for installing Chatter.", + "requirements" : ["chatterbot"], + "short" : "Local Chatbot run on machine learning", + "tags" : ["chat", "chatbot", "cleverbot", "clever","bobloy"] +} \ No newline at end of file