2023-08-01 02:39:20 +02:00
|
|
|
"""Bot base."""
|
2023-07-21 23:49:54 +02:00
|
|
|
|
|
|
|
import os
|
2023-07-23 23:57:41 +02:00
|
|
|
import nextcord
|
2023-07-25 03:39:17 +02:00
|
|
|
|
2023-08-06 23:20:38 +02:00
|
|
|
import api
|
2023-07-25 03:39:17 +02:00
|
|
|
import chatbot
|
|
|
|
import embedder
|
2023-07-27 02:45:11 +02:00
|
|
|
import autochat
|
2023-08-01 02:39:20 +02:00
|
|
|
import accounts
|
2023-07-27 02:45:11 +02:00
|
|
|
import community
|
2023-08-02 17:00:18 +02:00
|
|
|
import tutorials
|
2023-08-01 02:39:20 +02:00
|
|
|
import credential_manager
|
2023-07-21 23:49:54 +02:00
|
|
|
|
|
|
|
from dotenv import load_dotenv
|
2023-07-23 23:57:41 +02:00
|
|
|
from nextcord.ext import commands
|
|
|
|
from nextcord import SlashOption
|
2023-07-21 23:49:54 +02:00
|
|
|
|
|
|
|
load_dotenv()
|
|
|
|
|
2023-08-01 02:39:20 +02:00
|
|
|
guild_ids = [int(guild_id) for guild_id in os.getenv('DISCORD_GUILD_IDS').split()]
|
|
|
|
|
2023-07-23 23:57:41 +02:00
|
|
|
bot = commands.Bot(
|
|
|
|
intents=nextcord.Intents.all(),
|
2023-08-01 02:39:20 +02:00
|
|
|
default_guild_ids=guild_ids # so slash commands work
|
2023-07-23 23:57:41 +02:00
|
|
|
)
|
2023-07-21 23:49:54 +02:00
|
|
|
|
|
|
|
@bot.event
|
|
|
|
async def on_ready():
|
|
|
|
print(f'Online as {bot.user} (ID: {bot.user.id})')
|
2023-08-06 23:20:38 +02:00
|
|
|
|
|
|
|
await api.start(bot)
|
|
|
|
|
2023-07-23 23:57:41 +02:00
|
|
|
await bot.change_presence(activity=nextcord.Game(name='with fire'))
|
2023-07-21 23:49:54 +02:00
|
|
|
|
|
|
|
@bot.event
|
|
|
|
async def on_message(message):
|
2023-07-27 02:45:11 +02:00
|
|
|
if message.author.bot: # block bots
|
|
|
|
return
|
|
|
|
|
|
|
|
await autochat.process(message)
|
2023-07-21 23:49:54 +02:00
|
|
|
await bot.process_commands(message)
|
|
|
|
|
2023-08-08 01:04:06 +02:00
|
|
|
# @bot.slash_command(description='Chat with AI')
|
|
|
|
# async def chat(interaction: nextcord.Interaction,
|
|
|
|
# prompt: str = SlashOption(description='AI Prompt', required=True)
|
|
|
|
# ):
|
|
|
|
# await chatbot.respond(interaction, prompt)
|
2023-07-25 03:39:17 +02:00
|
|
|
|
|
|
|
@bot.slash_command(description='Sets your DMs up, so you can write the bot.')
|
2023-08-01 02:39:20 +02:00
|
|
|
async def dm_setup(interaction: nextcord.Interaction):
|
2023-07-25 03:39:17 +02:00
|
|
|
try:
|
|
|
|
await interaction.user.create_dm()
|
|
|
|
await embedder.info(interaction.user.dm_channel, 'Hello!')
|
|
|
|
except nextcord.Forbidden:
|
2023-07-27 02:45:11 +02:00
|
|
|
await embedder.error(interaction, text="""Please open this server\'s options,
|
|
|
|
go to `Privacy Settings` and enable `Direct Messages` as well as `Message Requests`.""")
|
2023-08-01 02:39:20 +02:00
|
|
|
|
|
|
|
else:
|
2023-07-25 03:39:17 +02:00
|
|
|
await embedder.ok(interaction, 'Great, DMs are set up successfully!')
|
|
|
|
|
2023-08-01 02:39:20 +02:00
|
|
|
@bot.slash_command(description='Create your account and get your API key.')
|
2023-07-27 02:45:11 +02:00
|
|
|
async def credentials(interaction: nextcord.Interaction):
|
2023-08-01 02:39:20 +02:00
|
|
|
return await credential_manager.get_credentials(interaction)
|
2023-07-23 23:57:41 +02:00
|
|
|
|
2023-07-27 02:45:11 +02:00
|
|
|
@bot.slash_command(description='Leaderboard.')
|
|
|
|
async def leaderboard(interaction: nextcord.Interaction):
|
2023-08-01 02:39:20 +02:00
|
|
|
return await community.leaderboard(interaction)
|
|
|
|
|
|
|
|
@bot.slash_command(description='Get info and stats about your NovaAI API account.')
|
|
|
|
async def account(interaction: nextcord.Interaction):
|
2023-08-02 17:00:18 +02:00
|
|
|
return await accounts.get_info(interaction)
|
|
|
|
|
|
|
|
@bot.slash_command(name='credits', description='Get information about the amount of credits you have on your NovaAI API account.')
|
|
|
|
async def credits_(interaction: nextcord.Interaction):
|
|
|
|
return await accounts.get_credits(interaction)
|
|
|
|
|
2023-08-08 14:27:31 +02:00
|
|
|
@bot.slash_command(description='Get credits of a certain user. Admin only.')
|
|
|
|
async def credits_of(interaction: nextcord.Interaction, user: nextcord.User):
|
|
|
|
return await accounts.get_credits_of(interaction, user)
|
|
|
|
|
2023-08-09 13:04:00 +02:00
|
|
|
@bot.slash_command(description='Manually set the credits of a certain user. Admin only.')
|
|
|
|
async def set_credits(interaction: nextcord.Interaction, user: nextcord.User, amount: int):
|
|
|
|
return await accounts.set_credits(interaction, user, amount)
|
|
|
|
|
2023-08-02 17:00:18 +02:00
|
|
|
@bot.slash_command(description='View examples and tips for implementing NovaAI\'s API.')
|
|
|
|
async def tutorial(interaction: nextcord.Interaction,
|
|
|
|
how_can_i: str = SlashOption(#
|
|
|
|
description='Read a tutorial on how to...',
|
|
|
|
required=True,
|
2023-08-03 20:40:54 +02:00
|
|
|
choices=[
|
|
|
|
'fix error 401 (invalid key)',
|
|
|
|
'fix error 429 (ratelimit/not enough credits)',
|
|
|
|
'use GPT-4',
|
|
|
|
'use curl',
|
|
|
|
'use Node.js',
|
|
|
|
'get my NovaAI API key',
|
|
|
|
'use the Python library',
|
|
|
|
'fix ModuleNotFoundErrors',
|
|
|
|
'use the API in custom front-ends',
|
|
|
|
'program a Python Discord Bot with streaming',
|
|
|
|
]
|
2023-08-02 17:00:18 +02:00
|
|
|
)
|
|
|
|
):
|
|
|
|
return await tutorials.send(interaction, how_can_i)
|
2023-07-23 23:57:41 +02:00
|
|
|
|
2023-08-01 17:02:54 +02:00
|
|
|
@bot.slash_command(description='Lookup members by their Discord ID.')
|
|
|
|
async def lookup(interaction: nextcord.Interaction,
|
|
|
|
discord_id: int = SlashOption(description='Discord ID', required=True)
|
|
|
|
):
|
|
|
|
for member in interaction.guild.members:
|
|
|
|
if str(member.id).startswith(str(discord_id)):
|
|
|
|
return await embedder.ok(interaction, f'Result: {member.mention} (`{member.id}`)')
|
|
|
|
|
2023-07-21 23:49:54 +02:00
|
|
|
bot.run(os.getenv('DISCORD_TOKEN'))
|