Added help descriptions, revamped blog, removed memory length command
This commit is contained in:
parent
f0381bb77a
commit
56192b277b
1 changed files with 151 additions and 46 deletions
|
|
@ -23,7 +23,7 @@ import aiohttp
|
|||
import aioftp
|
||||
|
||||
#Stable Diffusion
|
||||
#Set this env variable to host:port or "disabled"
|
||||
#Set this env variable to http://host:port or "disabled"
|
||||
#os.getenv('stablediffusion_url')
|
||||
|
||||
#env vars START
|
||||
|
|
@ -31,7 +31,6 @@ load_dotenv()
|
|||
|
||||
imgflip_username = os.getenv('imgflip_username')
|
||||
imgflip_password = os.getenv('imgflip_password')
|
||||
openai.api_key = os.getenv('openai.api_key')
|
||||
discord_token = os.getenv('discord_token')
|
||||
eleven_labs_api_key = os.getenv('eleven_labs_api_key')
|
||||
ftp_server = os.getenv('ftp_server')
|
||||
|
|
@ -50,9 +49,12 @@ intents.message_content = True
|
|||
bot = commands.Bot(command_prefix='!', intents=intents)
|
||||
#discord stuff END
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Moderate",
|
||||
help="This currently tool works by replacing the filename on the ftp server with a black image. The description will remain the same and may need to be altered.",
|
||||
brief="Moderation Tools"
|
||||
)
|
||||
async def moderate(ctx, filename):
|
||||
await ctx.send("Reminder, this currently tool works by replacing the filename on the ftp server with a black image. The description will remain the same and may need to be altered.")
|
||||
await upload_ftp("blank_image.png", os.getenv('ftp_ai_webpage'), filename)
|
||||
output = "Image " + filename + " replaced"
|
||||
await ctx.send(output)
|
||||
|
|
@ -335,7 +337,7 @@ async def task_loop():
|
|||
failed_tasks = []
|
||||
await bot_stuff.send("<@242018983241318410> The current time is 5pm. Running daily tasks!")
|
||||
try:
|
||||
await blog(bot_stuff)
|
||||
await generate_blog(bot_stuff)
|
||||
except Exception as error:
|
||||
await handle_error(error)
|
||||
failed_tasks.append("Blogpost")
|
||||
|
|
@ -360,7 +362,11 @@ async def on_ready():
|
|||
await delete_all_files("tmp/")
|
||||
task_loop.start()
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Update",
|
||||
help="This will update sparkytron to the most recent version on github. Only privileged users can run this command! Usage: !update",
|
||||
brief="Runs git pull"
|
||||
)
|
||||
async def update(ctx):
|
||||
if ctx.author.id == 242018983241318410:
|
||||
output = subprocess.run(["git","pull"],capture_output=True)
|
||||
|
|
@ -372,7 +378,11 @@ async def update(ctx):
|
|||
else:
|
||||
await ctx.send("You don't have permission to do this.")
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Currency",
|
||||
help="Server currency. You can run !currency claim to get started!", #This needs an overhaul
|
||||
brief="Server currency tools"
|
||||
)
|
||||
async def currency(ctx, arg1=None, arg2=None, arg3=None, arg4=None):
|
||||
|
||||
def read_db(filepath):
|
||||
|
|
@ -575,7 +585,11 @@ async def currency(ctx, arg1=None, arg2=None, arg3=None, arg4=None):
|
|||
|
||||
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Meme",
|
||||
help="Generates a meme based on input. Usage: !meme (topic)",
|
||||
brief="Generate a meme"
|
||||
)
|
||||
async def meme(ctx):
|
||||
async def update_meme_webpage(filename):
|
||||
server_folder = os.getenv('ftp_ai_memes')
|
||||
|
|
@ -677,15 +691,23 @@ async def meme(ctx):
|
|||
await handle_error(error)
|
||||
await ctx.send('Something went wrong try again. Usage: !meme (topic)')
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="RSGP",
|
||||
help="Uses probably outdated information to calculate how much rsgp is worth in usd. Usage: !rsgp (amount)",
|
||||
brief="Runescape gold to usd"
|
||||
)
|
||||
async def rsgp(ctx, amount):
|
||||
cost_per_bil = 27 #1b rsgp to usd
|
||||
cost = (int(amount) * cost_per_bil / 1000000000)
|
||||
output = str(amount) + ' rsgp would cost: $' + str(cost)
|
||||
await ctx.send(output)
|
||||
|
||||
@bot.command()
|
||||
async def suggest_blog(ctx, *args):
|
||||
@bot.command(
|
||||
description="Blog",
|
||||
help="Adds your topic to the list of possible future blog topics. Usage: !suggest_blog (topic)",
|
||||
brief="Suggest a blog topic"
|
||||
)
|
||||
async def blog(ctx, *args):
|
||||
message = ' '.join(args)
|
||||
if '\n' in message:
|
||||
await ctx.send("Send only one topic at a time.")
|
||||
|
|
@ -696,8 +718,7 @@ async def suggest_blog(ctx, *args):
|
|||
f.writelines(message)
|
||||
await ctx.send("Saved suggestion!")
|
||||
|
||||
@bot.command()
|
||||
async def blog(ctx):
|
||||
async def generate_blog(ctx):
|
||||
start_time = time.time()
|
||||
topic = ''
|
||||
filename = "phixxy.com/ai-blog/index.html"
|
||||
|
|
@ -763,7 +784,11 @@ async def blog(ctx):
|
|||
await ctx.send(output)
|
||||
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Question",
|
||||
help="Ask a raw chatgpt question. Usage: !question (question)",
|
||||
brief="Get an answer"
|
||||
)
|
||||
async def question(ctx):
|
||||
question = ctx.message.content.split(" ", maxsplit=1)[1]
|
||||
answer = await answer_question(question)
|
||||
|
|
@ -771,7 +796,11 @@ async def question(ctx):
|
|||
for chunk in chunks:
|
||||
await ctx.send(chunk)
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Question GPT4",
|
||||
help="Ask GPT4 a question. Usage: !question_gpt4 (question)",
|
||||
brief="Get an answer"
|
||||
)
|
||||
async def question_gpt4(ctx):
|
||||
question = ctx.message.content.split(" ", maxsplit=1)[1]
|
||||
answer = await answer_question(question, "gpt-4")
|
||||
|
|
@ -779,7 +808,11 @@ async def question_gpt4(ctx):
|
|||
for chunk in chunks:
|
||||
await ctx.send(chunk)
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Highscores",
|
||||
help="Shows a bar graph of users in this channel and how many messages they have sent.",
|
||||
brief="Display chat highscores"
|
||||
)
|
||||
async def highscores(ctx, limit=0):
|
||||
filename = str(ctx.channel.id) + ".log"
|
||||
with open("channels/logs/" + filename, 'r', encoding="utf-8") as logfile:
|
||||
|
|
@ -832,7 +865,11 @@ async def highscores(ctx, limit=0):
|
|||
f = discord.File(fh, filename=str(ctx.channel.id) + '_hiscores.png')
|
||||
await ctx.send(file=f)
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Highscores Server",
|
||||
help="Shows a bar graph of users across all servers I am in and how many messages they have sent.",
|
||||
brief="Display chat highscores"
|
||||
)
|
||||
async def highscores_server(ctx, limit=0):
|
||||
user_message_counts = {}
|
||||
data = []
|
||||
|
|
@ -887,7 +924,11 @@ async def highscores_server(ctx, limit=0):
|
|||
f = discord.File(fh, filename=str(ctx.channel.id) + '_hiscores.png')
|
||||
await ctx.send(file=f)
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Website",
|
||||
help="Generates a website using gpt 3.5. Usage: !website (topic)",
|
||||
brief="Generate a website"
|
||||
)
|
||||
async def website(ctx):
|
||||
async def delete_local_pngs(local_folder):
|
||||
for filename in os.listdir(local_folder):
|
||||
|
|
@ -1008,7 +1049,11 @@ async def website(ctx):
|
|||
await handle_error(error)
|
||||
await ctx.send("Failed, Try again.")
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Feature",
|
||||
help="Suggest a feature. Usage: !feature (feature)",
|
||||
brief="Suggest a feature"
|
||||
)
|
||||
async def feature(ctx):
|
||||
try:
|
||||
feature = ctx.message.content.split(" ", maxsplit=1)[1]
|
||||
|
|
@ -1023,7 +1068,11 @@ async def feature(ctx):
|
|||
await ctx.send(features)
|
||||
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Draw",
|
||||
help="Generates a picture using stable diffusion and gpt 3.5. It generates a list of 10 random artistic words and feeds them into stable diffusion. Usage: !draw (amount of pictures)",
|
||||
brief="Generate a random image"
|
||||
)
|
||||
async def draw(ctx):
|
||||
url = os.getenv('stablediffusion_url')
|
||||
if url == "disabled":
|
||||
|
|
@ -1075,7 +1124,11 @@ async def draw(ctx):
|
|||
await handle_error(error)
|
||||
await ctx.send('Did you mean to use !imagine?. Usage: !draw (number)')
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Chat",
|
||||
help="Enable or disable bot chat in this channel. Usage !chat (enable|disable)",
|
||||
brief="Enable or disable bot chat"
|
||||
)
|
||||
async def chat(ctx, message):
|
||||
if "enable" in message:
|
||||
edit_channel_config(ctx.channel.id, "chat_enabled", True)
|
||||
|
|
@ -1086,7 +1139,11 @@ async def chat(ctx, message):
|
|||
else:
|
||||
await ctx.send("Usage: !chat (enable|disable)")
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Reactions",
|
||||
help="Enable or disable bot reactions in this channel. Usage !reactions (enable|disable)",
|
||||
brief="Enable or disable bot reactions"
|
||||
)
|
||||
async def reactions(ctx, message):
|
||||
if "enable" in message:
|
||||
edit_channel_config(ctx.channel.id, "react_to_msgs", True)
|
||||
|
|
@ -1097,16 +1154,11 @@ async def reactions(ctx, message):
|
|||
else:
|
||||
await ctx.send("Usage: !reactions (enable|disable)")
|
||||
|
||||
|
||||
@bot.command()
|
||||
async def memorylength(ctx, chat_history_len):
|
||||
if chat_history_len.isdigit():
|
||||
edit_channel_config(ctx.channel.id, "chat_history_len", chat_history_len)
|
||||
await ctx.send("Memory changed to " + chat_history_len)
|
||||
else:
|
||||
await ctx.send("Memory unchanged, must be int.")
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="View Images",
|
||||
help="Enable or disable bot viewing images in this channel. Usage !viewimages (enable|disable)",
|
||||
brief="Enable or disable bot viewing images"
|
||||
)
|
||||
async def viewimages(ctx, message):
|
||||
if "enable" in message:
|
||||
edit_channel_config(ctx.channel.id, "look_at_images", True)
|
||||
|
|
@ -1117,7 +1169,11 @@ async def viewimages(ctx, message):
|
|||
else:
|
||||
await ctx.send("Usage: !viewimages (enable|disable)")
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Commands",
|
||||
help="Enable or disable bot commands in this channel. Usage !enable_commands (enable|disable)",
|
||||
brief="Enable or disable bot commands"
|
||||
)
|
||||
async def enable_commands(ctx, message):
|
||||
if "disable" in message or "false" in message:
|
||||
edit_channel_config(ctx.channel.id, "commands_enabled", False)
|
||||
|
|
@ -1126,12 +1182,20 @@ async def enable_commands(ctx, message):
|
|||
edit_channel_config(ctx.channel.id, "commands_enabled", True)
|
||||
await ctx.send("Commands Enabled")
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Topic",
|
||||
help="Set the channel topic for the bot. Usage: !topic (topic)",
|
||||
brief="Set channel topic"
|
||||
)
|
||||
async def topic(ctx, channel_topic):
|
||||
edit_channel_config(ctx.channel.id, "channel_topic", channel_topic)
|
||||
await ctx.send("Topic changed to " + channel_topic)
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Python",
|
||||
help="Run some python code. Imports are disabled but random is imported for you. Usage !python (codeblock)",
|
||||
brief="Run some python code"
|
||||
)
|
||||
async def python(ctx):
|
||||
try:
|
||||
code = ctx.message.content
|
||||
|
|
@ -1171,7 +1235,11 @@ async def python(ctx):
|
|||
await ctx.send("Usage: !python (codeblock)")
|
||||
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="FTP",
|
||||
help="Enable or disable bot FTP to phixxy.com in this channel. Usage !ftp (enable|disable)",
|
||||
brief="Enable or disable uploading to web"
|
||||
)
|
||||
async def ftp(ctx, message):
|
||||
if "enable" in message:
|
||||
edit_channel_config(ctx.channel.id, "ftp_enabled", True)
|
||||
|
|
@ -1182,14 +1250,22 @@ async def ftp(ctx, message):
|
|||
else:
|
||||
await ctx.send("Usage: !ftp (enable|disable)")
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Personality",
|
||||
help="Set the personality of the bot. Usage: !personality (personality)",
|
||||
brief="Set the personality"
|
||||
)
|
||||
async def personality(ctx):
|
||||
personality_type = ctx.message.content.split(" ", maxsplit=1)[1]
|
||||
edit_channel_config(ctx.channel.id, "personality", personality_type)
|
||||
await ctx.send("Personality changed to " + personality_type)
|
||||
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Change Model",
|
||||
help="Choose from a list of stable diffusion models.",
|
||||
brief="Change stable diffusion model"
|
||||
)
|
||||
async def change_model(ctx, model_choice='0'):
|
||||
model_choices = {
|
||||
'1': ("deliberate_v2.safetensors [9aba26abdf]", "DeliberateV2"),
|
||||
|
|
@ -1225,7 +1301,11 @@ async def change_model(ctx, model_choice='0'):
|
|||
output += model_options
|
||||
await ctx.send(output)
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Imagine",
|
||||
help="Generate an image using stable diffusion. You can add keyword arguments to your prompt and they will be treated as stable diffusion options. Usage !imagine (topic)",
|
||||
brief="Generate an image"
|
||||
)
|
||||
async def imagine(ctx):
|
||||
url = os.getenv('stablediffusion_url')
|
||||
if url == "disabled":
|
||||
|
|
@ -1289,7 +1369,11 @@ async def imagine(ctx):
|
|||
|
||||
await ctx.send(file=f)
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Describe",
|
||||
help="Get better understanding of what the bot \"sees\" when you post an image! (Runs it through CLIP) Usage !describe (image link)",
|
||||
brief="Describe image"
|
||||
)
|
||||
async def describe(ctx):
|
||||
url = os.getenv('stablediffusion_url')
|
||||
if url == "disabled":
|
||||
|
|
@ -1333,7 +1417,11 @@ async def describe(ctx):
|
|||
await handle_error(error)
|
||||
await ctx.send("My image generation service may not be running.")
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Reimagine",
|
||||
help="Reimagine an image as something else. One example is reimagining a picture as anime. This command can be hard to use. \nUsage: !reimagine (image link) (topic)\nExample: !reimagine (image link) anime",
|
||||
brief="Reimagine an image"
|
||||
)
|
||||
async def reimagine(ctx):
|
||||
url = os.getenv('stablediffusion_url')
|
||||
if url == "disabled":
|
||||
|
|
@ -1405,7 +1493,11 @@ async def reimagine(ctx):
|
|||
await handle_error(error)
|
||||
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Poll",
|
||||
help='Create a poll with up to 9 options. Usage: !poll "Put question here" "option 1" "option 2"',
|
||||
brief="Enable or disable bot reactions"
|
||||
)
|
||||
async def poll(ctx, question, *options: str):
|
||||
if len(options) > 9:
|
||||
await ctx.send("Error: You cannot have more than 9 options")
|
||||
|
|
@ -1420,7 +1512,11 @@ async def poll(ctx, question, *options: str):
|
|||
for i in range(len(options)):
|
||||
await message.add_reaction(numbers.get(i+1))
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Roll",
|
||||
help="Rolls dice mostly for Dungeons and Dragons type games. Usage: !roll 3d6+2",
|
||||
brief="Simulate rolling dice"
|
||||
)
|
||||
async def roll(ctx, dice_string):
|
||||
dice_parts = dice_string.split('d')
|
||||
num_dice = int(dice_parts[0])
|
||||
|
|
@ -1442,14 +1538,23 @@ async def roll(ctx, dice_string):
|
|||
|
||||
await ctx.send(f'{dice_str} + {modifier} = {total}' if modifier != 0 else f'{dice_str} = {total}')
|
||||
|
||||
@bot.command()
|
||||
async def kill(ctx, help="Kills the bot"):
|
||||
@bot.command(
|
||||
description="Kill",
|
||||
help="Kills the bot in event of an emergency. Only special users can do this! Usage: !kill",
|
||||
brief="Kill the bot"
|
||||
)
|
||||
async def kill(ctx):
|
||||
"Kills the bot"
|
||||
if ctx.author.id == 242018983241318410:
|
||||
exit()
|
||||
else:
|
||||
await ctx.channel.send("You don't have permission to do that.")
|
||||
|
||||
@bot.command()
|
||||
@bot.command(
|
||||
description="Reset",
|
||||
help="Resets the bot in event of an emergency. Only special users can do this! Usage: !reset",
|
||||
brief="Reset the bot"
|
||||
)
|
||||
async def reset(ctx):
|
||||
if ctx.author.id == 242018983241318410:
|
||||
python = sys.executable
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue