mirror of
https://github.com/polyjitter/searchbot-discord.git
synced 2024-08-14 22:46:55 +00:00
More Documentation
This commit is contained in:
parent
997030587c
commit
38829722d5
2 changed files with 72 additions and 36 deletions
|
@ -16,13 +16,16 @@ class BotList(commands.Cog, name='Bot List'):
|
||||||
"""Provides various utilities for handling BotList stuff."""
|
"""Provides various utilities for handling BotList stuff."""
|
||||||
|
|
||||||
def __init__(self, bot):
|
def __init__(self, bot):
|
||||||
|
# Main Stuff
|
||||||
self.bot = bot
|
self.bot = bot
|
||||||
self.request = bot.request
|
self.request = bot.request
|
||||||
# Tokens
|
|
||||||
|
# List Tokens
|
||||||
self.dbl_token = bot.config['DBL']
|
self.dbl_token = bot.config['DBL']
|
||||||
self.dbots_token = bot.config['DBOTS']
|
self.dbots_token = bot.config['DBOTS']
|
||||||
self.bod_token = bot.config['BOD']
|
self.bod_token = bot.config['BOD']
|
||||||
self.dblcom_token = bot.config['DBLCOM']
|
self.dblcom_token = bot.config['DBLCOM']
|
||||||
|
|
||||||
# top.gg clent
|
# top.gg clent
|
||||||
self.dbl_client = dbl.DBLClient(
|
self.dbl_client = dbl.DBLClient(
|
||||||
self.bot, self.dbots_token)
|
self.bot, self.dbots_token)
|
||||||
|
@ -36,11 +39,16 @@ class BotList(commands.Cog, name='Bot List'):
|
||||||
dblcom_call = "https://discordbotlist.com/api"
|
dblcom_call = "https://discordbotlist.com/api"
|
||||||
responses = {}
|
responses = {}
|
||||||
|
|
||||||
|
# Calls
|
||||||
# bots.discord.gg
|
# bots.discord.gg
|
||||||
if self.dbots_token != '':
|
if self.dbots_token != '':
|
||||||
|
|
||||||
|
# Call Prereqs
|
||||||
dbots_call += f"/bots/{self.bot.user.id}/stats"
|
dbots_call += f"/bots/{self.bot.user.id}/stats"
|
||||||
dbots_data = {'guildCount': len(self.bot.guilds)}
|
dbots_data = {'guildCount': len(self.bot.guilds)}
|
||||||
dbots_headers = {'Authorization': self.dbots_token}
|
dbots_headers = {'Authorization': self.dbots_token}
|
||||||
|
|
||||||
|
# Call Handling
|
||||||
async with self.request.post(dbots_call,
|
async with self.request.post(dbots_call,
|
||||||
json=dbots_data,
|
json=dbots_data,
|
||||||
headers=dbots_headers) as resp:
|
headers=dbots_headers) as resp:
|
||||||
|
@ -50,9 +58,13 @@ class BotList(commands.Cog, name='Bot List'):
|
||||||
|
|
||||||
# bots.ondiscord.xyz
|
# bots.ondiscord.xyz
|
||||||
if self.bod_token != '':
|
if self.bod_token != '':
|
||||||
|
|
||||||
|
# Call Prereqs
|
||||||
bod_call += f"/bots/{self.bot.user.id}/guilds"
|
bod_call += f"/bots/{self.bot.user.id}/guilds"
|
||||||
bod_data = {'guildCount': len(self.bot.guilds)}
|
bod_data = {'guildCount': len(self.bot.guilds)}
|
||||||
bod_headers = {'Authorization': self.bod_token}
|
bod_headers = {'Authorization': self.bod_token}
|
||||||
|
|
||||||
|
# Call Handling
|
||||||
async with self.request.post(bod_call,
|
async with self.request.post(bod_call,
|
||||||
json=bod_data,
|
json=bod_data,
|
||||||
headers=bod_headers) as resp:
|
headers=bod_headers) as resp:
|
||||||
|
@ -62,9 +74,13 @@ class BotList(commands.Cog, name='Bot List'):
|
||||||
|
|
||||||
# discordbotlist.com
|
# discordbotlist.com
|
||||||
if self.dblcom_token != '':
|
if self.dblcom_token != '':
|
||||||
|
|
||||||
|
# Call Prereqs
|
||||||
dblcom_call += f"/bots/{self.bot.user.id}/stats"
|
dblcom_call += f"/bots/{self.bot.user.id}/stats"
|
||||||
dblcom_data = {'guilds': len(self.bot.guilds)}
|
dblcom_data = {'guilds': len(self.bot.guilds)}
|
||||||
dblcom_headers = {'Authorization': self.dblcom_token}
|
dblcom_headers = {'Authorization': self.dblcom_token}
|
||||||
|
|
||||||
|
# Call Handling
|
||||||
async with self.request.post(dblcom_call,
|
async with self.request.post(dblcom_call,
|
||||||
json=dblcom_data,
|
json=dblcom_data,
|
||||||
headers=dblcom_headers) as resp:
|
headers=dblcom_headers) as resp:
|
||||||
|
@ -74,13 +90,14 @@ class BotList(commands.Cog, name='Bot List'):
|
||||||
|
|
||||||
# top.gg
|
# top.gg
|
||||||
if self.dbl_token != '':
|
if self.dbl_token != '':
|
||||||
|
# NOTE top.gg has a lib so it gets different handling.
|
||||||
try:
|
try:
|
||||||
resp = await self.dbl_client.post_guild_count()
|
resp = await self.dbl_client.post_guild_count()
|
||||||
responses['dbl'] = resp
|
responses['dbl'] = resp
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
responses['dbl'] = e
|
responses['dbl'] = e
|
||||||
|
|
||||||
# Finishing up
|
# Finalization
|
||||||
return responses
|
return responses
|
||||||
|
|
||||||
# TODO Move to Core, hide behind check for any existing token
|
# TODO Move to Core, hide behind check for any existing token
|
||||||
|
@ -88,11 +105,14 @@ class BotList(commands.Cog, name='Bot List'):
|
||||||
async def vote(self, ctx):
|
async def vote(self, ctx):
|
||||||
"""Review and vote for this bot on various botlists."""
|
"""Review and vote for this bot on various botlists."""
|
||||||
|
|
||||||
|
# Header
|
||||||
msg = (
|
msg = (
|
||||||
"**Thank you for wanting to help us out!**\n"
|
"**Thank you for wanting to help us out!**\n"
|
||||||
"You can find us on the following lists:\n\n"
|
"You can find us on the following lists:\n\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Links
|
||||||
|
# XXX This is really stupidly done, I'm going to find a way to redo it.
|
||||||
if self.dbots_token != '':
|
if self.dbots_token != '':
|
||||||
msg += f"_bots.discord.gg_ <https://bots.discord.gg/bots/{self.bot.user.id}/>\n"
|
msg += f"_bots.discord.gg_ <https://bots.discord.gg/bots/{self.bot.user.id}/>\n"
|
||||||
if self.bod_token != '':
|
if self.bod_token != '':
|
||||||
|
@ -102,6 +122,7 @@ class BotList(commands.Cog, name='Bot List'):
|
||||||
if self.dbl_token != '':
|
if self.dbl_token != '':
|
||||||
msg += f"_top.gg_ <https://top.gg/bot/{self.bot.user.id}/>\n"
|
msg += f"_top.gg_ <https://top.gg/bot/{self.bot.user.id}/>\n"
|
||||||
|
|
||||||
|
# Sending
|
||||||
await ctx.send(msg)
|
await ctx.send(msg)
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
|
@ -119,8 +140,9 @@ class BotList(commands.Cog, name='Bot List'):
|
||||||
"""Automatically updates statistics every 15 minutes."""
|
"""Automatically updates statistics every 15 minutes."""
|
||||||
|
|
||||||
responses = await self._update_logic()
|
responses = await self._update_logic()
|
||||||
print(responses)
|
print(responses) # TODO See other todo
|
||||||
|
|
||||||
|
|
||||||
def setup(bot):
|
def setup(bot):
|
||||||
|
"""Adds the cog to the bot."""
|
||||||
bot.add_cog(BotList(bot))
|
bot.add_cog(BotList(bot))
|
||||||
|
|
66
main.py
66
main.py
|
@ -23,33 +23,39 @@ class Bot(commands.Bot):
|
||||||
def __init__(self, **options):
|
def __init__(self, **options):
|
||||||
"""Initializes the main parts of the bot."""
|
"""Initializes the main parts of the bot."""
|
||||||
|
|
||||||
super().__init__(self._get_prefix_new, **options)
|
# Logging
|
||||||
print('Performing initialization...\n')
|
print('Performing initialization...\n')
|
||||||
|
|
||||||
|
# Initializes parent class
|
||||||
|
super().__init__(self._get_prefix_new, **options)
|
||||||
|
|
||||||
# Get Config Values
|
# Get Config Values
|
||||||
with open('config.json') as f:
|
with open('config.json') as f:
|
||||||
self.config = json.load(f)
|
self.config = json.load(f)
|
||||||
self.prefix = self.config.get('PREFIX')
|
self.prefix = self.config['PREFIX']
|
||||||
self.version = self.config.get('VERSION')
|
self.version = self.config['VERSION']
|
||||||
self.maintenance = self.config.get('MAINTENANCE')
|
self.maintenance = self.config['MAINTENANCE']
|
||||||
self.description = self.config.get('DESCRIPTION')
|
self.description = self.config['DESCRIPTION']
|
||||||
|
self.case_insensitive = self.config['CASE_INSENSITIVE']
|
||||||
|
|
||||||
|
|
||||||
# Get Instances
|
# Get Instances
|
||||||
with open('searxes.txt') as f:
|
with open('searxes.txt') as f:
|
||||||
self.instances = f.read().split('\n')
|
self.instances = f.read().split('\n')
|
||||||
|
|
||||||
|
# Logging
|
||||||
print('Initialization complete.\n\n')
|
print('Initialization complete.\n\n')
|
||||||
|
|
||||||
async def _get_prefix_new(self, bot, msg):
|
async def _get_prefix_new(self, bot, msg):
|
||||||
"""Full flexible check for prefix."""
|
"""More flexible check for prefix."""
|
||||||
|
|
||||||
if isinstance(msg.channel, discord.DMChannel) and self.config['PREFIXLESS_DMS']:
|
|
||||||
# Adds empty prefix if in DMs
|
# Adds empty prefix if in DMs
|
||||||
plus_none = self.prefix.copy()
|
if isinstance(msg.channel, discord.DMChannel) and self.config['PREFIXLESS_DMS']:
|
||||||
plus_none.append('')
|
plus_empty = self.prefix.copy()
|
||||||
return commands.when_mentioned_or(*plus_none)(bot, msg)
|
plus_empty.append('')
|
||||||
else:
|
return commands.when_mentioned_or(*plus_empty)(bot, msg)
|
||||||
# Keeps regular if not
|
# Keeps regular if not
|
||||||
|
else:
|
||||||
return commands.when_mentioned_or(*self.prefix)(bot, msg)
|
return commands.when_mentioned_or(*self.prefix)(bot, msg)
|
||||||
|
|
||||||
async def on_ready(self):
|
async def on_ready(self):
|
||||||
|
@ -61,7 +67,8 @@ class Bot(commands.Bot):
|
||||||
if self.description == '':
|
if self.description == '':
|
||||||
self.description = self.appinfo.description
|
self.description = self.appinfo.description
|
||||||
|
|
||||||
# EXTENSION ENTRY POINT
|
# NOTE Extension Entry Point
|
||||||
|
# Loads core, which loads all other extensions
|
||||||
self.load_extension('extensions.core')
|
self.load_extension('extensions.core')
|
||||||
|
|
||||||
# Logging
|
# Logging
|
||||||
|
@ -73,48 +80,52 @@ class Bot(commands.Bot):
|
||||||
print(msg)
|
print(msg)
|
||||||
|
|
||||||
async def on_message(self, message):
|
async def on_message(self, message):
|
||||||
|
"""Handles what the bot does whenever a message comes across."""
|
||||||
|
|
||||||
# Prerequisites
|
# Prerequisites
|
||||||
mentions = [self.user.mention, f'<@!{self.user.id}>']
|
mentions = [self.user.mention, f'<@!{self.user.id}>']
|
||||||
ctx = await self.get_context(message)
|
ctx = await self.get_context(message)
|
||||||
|
|
||||||
# Handling
|
# Handling
|
||||||
if message.author.bot:
|
|
||||||
# Turn away bots
|
# Turn away bots
|
||||||
|
if message.author.bot:
|
||||||
return
|
return
|
||||||
elif message.author.id in self.config.get('BLOCKED'):
|
|
||||||
# Ignore blocked users
|
# Ignore blocked users
|
||||||
|
elif message.author.id in self.config.get('BLOCKED'):
|
||||||
return
|
return
|
||||||
elif self.maintenance and not message.author.is_owner():
|
|
||||||
# Maintenance mode
|
# Maintenance mode
|
||||||
|
elif self.maintenance and not message.author.is_owner():
|
||||||
return
|
return
|
||||||
elif message.content in mentions and self.config.get('MENTION_ASSIST'):
|
|
||||||
# Empty ping for assistance
|
# Empty ping for assistance
|
||||||
|
elif message.content in mentions and self.config.get('MENTION_ASSIST'):
|
||||||
assist_msg = (
|
assist_msg = (
|
||||||
"**Hi there! How can I help?**\n\n"
|
"**Hi there! How can I help?**\n\n"
|
||||||
# Two New Lines Here
|
# Two New Lines Here
|
||||||
f"You may use **{self.user.mention} `term here`** to search, "
|
f"You may use **{self.user.mention} `term here`** to search, "
|
||||||
f"or **{self.user.mention} `help`** for assistance.")
|
f"or **{self.user.mention} `help`** for assistance.")
|
||||||
await ctx.send(assist_msg)
|
await ctx.send(assist_msg)
|
||||||
else:
|
|
||||||
# Move on to command handling
|
# Move on to command handling
|
||||||
|
else:
|
||||||
await self.process_commands(message)
|
await self.process_commands(message)
|
||||||
|
|
||||||
|
# Creates Bot object
|
||||||
bot = Bot(
|
bot = Bot()
|
||||||
case_insensitive=True)
|
|
||||||
|
|
||||||
|
|
||||||
@bot.listen()
|
@bot.listen()
|
||||||
async def on_command_error(ctx, error):
|
async def on_command_error(ctx, error):
|
||||||
|
"""Handles all errors stemming from ext.commands."""
|
||||||
|
|
||||||
|
# Lets other cogs handle CommandNotFound.
|
||||||
|
# Change this if you want command not found handling
|
||||||
if isinstance(error, commands.CommandNotFound):
|
if isinstance(error, commands.CommandNotFound):
|
||||||
# Lets other cogs handle this.
|
|
||||||
# Change this if you want command not found handling.
|
|
||||||
return
|
return
|
||||||
|
|
||||||
elif isinstance(error, commands.CommandInvokeError):
|
|
||||||
# Provides a very pretty embed if something's actually a dev's fault.
|
# Provides a very pretty embed if something's actually a dev's fault.
|
||||||
|
elif isinstance(error, commands.CommandInvokeError):
|
||||||
# Prerequisites
|
# Prerequisites
|
||||||
error = error.original
|
error = error.original
|
||||||
_traceback = traceback.format_tb(error.__traceback__)
|
_traceback = traceback.format_tb(error.__traceback__)
|
||||||
|
@ -149,10 +160,13 @@ async def on_command_error(ctx, error):
|
||||||
if len(trace_content) > 1024
|
if len(trace_content) > 1024
|
||||||
else trace_content)
|
else trace_content)
|
||||||
|
|
||||||
|
# Sending
|
||||||
await ctx.send(embed_fallback, embed=error_embed)
|
await ctx.send(embed_fallback, embed=error_embed)
|
||||||
|
|
||||||
else:
|
|
||||||
# If anything else goes wrong, just go ahead and send it in chat.
|
# If anything else goes wrong, just go ahead and send it in chat.
|
||||||
|
else:
|
||||||
await ctx.send(error)
|
await ctx.send(error)
|
||||||
|
|
||||||
|
# NOTE Bot Entry Point
|
||||||
|
# Starts the bot
|
||||||
bot.run(bot.config['TOKEN'])
|
bot.run(bot.config['TOKEN'])
|
||||||
|
|
Loading…
Reference in a new issue