V3/start screen (#1038)

* Added new start screen

* Added Bordered util

Bordered function required for boxes in start screen

* Update events.py

Added Color to the Title
Added Shard count

* Update events.py

Added Discord.py version
Added package checking for docs and tests
Added package checking for voice

* Update chat_formatting.py

Cleaned up the border function a bit.
This commit is contained in:
Redjumpman 2017-10-20 14:29:55 -05:00 committed by palmtree5
parent 815678584f
commit 6f103174aa
2 changed files with 76 additions and 9 deletions

View File

@ -1,21 +1,30 @@
import datetime import datetime
import logging import logging
import traceback import traceback
from pkg_resources import get_distribution
from importlib.util import find_spec as find_package
import discord import discord
from .sentry_setup import should_log from .sentry_setup import should_log
from discord.ext import commands from discord.ext import commands
from .utils.chat_formatting import inline from .data_manager import storage_type
from .utils.chat_formatting import inline, bordered
from .core_commands import find_spec from .core_commands import find_spec
from colorama import Fore, Style
log = logging.getLogger("red") log = logging.getLogger("red")
sentry_log = logging.getLogger("red.sentry") sentry_log = logging.getLogger("red.sentry")
INTRO = ("{0}===================\n" INTRO = """
"{0} Red - Discord Bot \n" ______ _ ______ _ _ ______ _
"{0}===================\n" | ___ \ | | | _ (_) | | | ___ \ | |
"".format(" " * 20)) | |_/ /___ __| | ______ | | | |_ ___ ___ ___ _ __ __| | | |_/ / ___ | |_
| // _ \/ _` | |______| | | | | / __|/ __/ _ \| '__/ _` | | ___ \/ _ \| __|
| |\ \ __/ (_| | | |/ /| \__ \ (_| (_) | | | (_| | | |_/ / (_) | |_
\_| \_\___|\__,_| |___/ |_|___/\___\___/|_| \__,_| \____/ \___/ \__|
"""
def init_events(bot, cli_flags): def init_events(bot, cli_flags):
@ -32,8 +41,6 @@ def init_events(bot, cli_flags):
bot.uptime = datetime.datetime.utcnow() bot.uptime = datetime.datetime.utcnow()
print(INTRO)
if cli_flags.no_cogs is False: if cli_flags.no_cogs is False:
print("Loading packages...") print("Loading packages...")
failed = [] failed = []
@ -62,12 +69,53 @@ def init_events(bot, cli_flags):
else: else:
invite_url = None invite_url = None
prefixes = await bot.db.prefix()
lang = await bot.db.locale()
INFO = [str(bot.user), "Prefixes: {}".format(', '.join(prefixes)),
'Language: {}'.format(lang),
"Red Bot Version: {}".format(get_distribution('Red_DiscordBot').version),
"Discord.py Version: {}".format(get_distribution('discord.py').version),
"Shards: {}".format(bot.shard_count)]
if guilds: if guilds:
print("Ready and operational on {} servers with a total of {} " INFO.extend(("Servers: {}".format(guilds), "Users: {}".format(users)))
"users.".format(guilds, users))
else: else:
print("Ready. I'm not in any server yet!") print("Ready. I'm not in any server yet!")
INFO.append('{} cogs with {} commands'.format(len(bot.cogs), len(bot.commands)))
INFO2 = []
sentry = await bot.db.enable_sentry()
test_docs = all(find_package(x) for x in ['sphinx', 'sphinxcontrib', 'sphinx_rtd_theme',
'pytest_asyncio', 'pytest'])
voice = find_package('PyNaCl')
if sentry:
INFO2.append("√ Report Errors")
else:
INFO2.append("X Report Errors")
if storage_type() == "JSON":
INFO2.append("X MongoDB")
else:
INFO2.append("√ MongoDB")
if voice:
INFO2.append("√ Voice")
else:
INFO2.append("X Voice")
if test_docs:
INFO2.append("√ Tests and Docs")
else:
INFO2.append("X Tests and Docs")
print(Fore.RED + INTRO)
print(Style.RESET_ALL)
print(bordered(INFO, INFO2))
if invite_url: if invite_url:
print("\nInvite URL: {}\n".format(invite_url)) print("\nInvite URL: {}\n".format(invite_url))

View File

@ -1,3 +1,5 @@
import itertools
def error(text): def error(text):
return "\N{NO ENTRY SIGN} {}".format(text) return "\N{NO ENTRY SIGN} {}".format(text)
@ -31,6 +33,23 @@ def italics(text):
return "*{}*".format(text) return "*{}*".format(text)
def bordered(text1: list, text2: list):
width1, width2 = max((len(s1) + 9, len(s2) + 9) for s1 in text1 for s2 in text2)
res = ['{}{}{}'.format(""*width1, " "*4, ""*width2)]
flag = True
for x, y in itertools.zip_longest(text1, text2):
if y:
m = "{}{}{}".format((x + " " * width1)[:width1], " "*4, (y + " " * width2)[:width2])
elif x and flag and not y:
m = "{}{}{}".format((x + " " * width1)[:width1], " "*4, "" * width2)
flag = False
else:
m = "{}".format((x + " " * width1)[:width1])
res.append(m)
res.append("" + "" * width1 + "")
return "\n".join(res)
def pagify(text, delims=["\n"], *, escape_mass_mentions=True, shorten_by=8, def pagify(text, delims=["\n"], *, escape_mass_mentions=True, shorten_by=8,
page_length=2000): page_length=2000):
"""DOES NOT RESPECT MARKDOWN BOXES OR INLINE CODE""" """DOES NOT RESPECT MARKDOWN BOXES OR INLINE CODE"""