You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Fox-V3/howdoi/howdoi.py

86 lines
2.7 KiB

import discord
from discord.ext import commands
from .utils.chat_formatting import pagify
from .utils.chat_formatting import box
from .howdoi_source import howdoi as hdi, Answer
class Howdoi:
"""Cog for answering coding questions"""
def __init__(self, bot):
self.bot = bot
self.query = ""
self.config = Config.get_conf(self, identifier=72111119100111105)
default_global = {
"query": "",
"pos": 1,
"all": False,
"link": True,
"color": False,
"num_answers": 1,
"clear_cache": False,
"version": False
}
self.config.register_global(**default_global)
@commands.group(pass_context=True)
async def howdoiset(self, ctx):
"""Adjust howdoi settings
Settings are reset on reload"""
if ctx.invoked_subcommand is None:
await ctx.send_help()
@howdoiset.command(pass_context=True, name="answers")
async def howdoiset_answers(self, ctx, num_answers: int=1):
"""Adjust number of answers provided.
Defaults to 1"""
await self.config.num_answers.set(num_answers)
await ctx.send("Number of answers provided will now be {}".format(num_answers))
@howdoiset.command(pass_context=True, name="link")
async def howdoiset_link(self, ctx):
"""Toggles providing in-line answers or a link
Default On"""
await self.config.link.set(not (await self.config.link()))
if await self.config.link():
await ctx.send("Answers will now be provided as a link")
else:
await ctx.send("Answers will now be provided as the response")
@howdoiset.command(pass_context=True, name="full")
async def howdoiset_full(self, ctx):
"""Toggles providing full answers or just first code found
Default Off
Only works if links are turned off"""
await self.config.all.set(not (await self.config.all()))
if await self.config.all():
await ctx.send("Answers will now be provided in full context")
else:
await ctx.send("Answers will now be provided as a code snippet")
@commands.command(pass_context=True)
async def howdoi(self, ctx, *question):
"""Ask a coding question"""
self.query = " ".join(question)
await self.config.query.set(self.query)
out = hdi.howdoi(await self.config.all()) # .encode('utf-8', 'ignore')
if await self.config.links():
await ctx.send(out)
else:
await ctx.send(box(out,"python"))
# for page in pagify(out, shorten_by=24):
# await ctx.send(box(page))