mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-08 20:28:55 -05:00
Merge remote-tracking branch 'release/V3/develop' into V3/develop
This commit is contained in:
commit
9a82830f13
1
changelog.d/3183.enhance.rst
Normal file
1
changelog.d/3183.enhance.rst
Normal file
@ -0,0 +1 @@
|
||||
Add ``redbot --debuginfo`` flag that shows useful information for debugging.
|
||||
1
changelog.d/3184.enhance.rst
Normal file
1
changelog.d/3184.enhance.rst
Normal file
@ -0,0 +1 @@
|
||||
Add Python executable field to `[p]debuginfo` command.
|
||||
1
changelog.d/3188.docs.rst
Normal file
1
changelog.d/3188.docs.rst
Normal file
@ -0,0 +1 @@
|
||||
update windows docs with up to date dependency instructions
|
||||
1
changelog.d/audio/3176.misc.1.rst
Normal file
1
changelog.d/audio/3176.misc.1.rst
Normal file
@ -0,0 +1 @@
|
||||
Added an early exist to the `while` loop in the autoplay method, this is to that if a service is blacklisted it doesn't infinitely loop causing heartbeats.
|
||||
1
changelog.d/downloader/3179.bugfix.rst
Normal file
1
changelog.d/downloader/3179.bugfix.rst
Normal file
@ -0,0 +1 @@
|
||||
``[p]cog uninstall`` now fully unloads cog - bot will not try to load it on next startup.
|
||||
@ -27,15 +27,30 @@ Then run each of the following commands:
|
||||
Set-ExecutionPolicy Bypass -Scope Process -Force
|
||||
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
|
||||
choco install git --params "/GitOnlyOnPath /WindowsTerminal" -y
|
||||
choco install jre8 python -y; exit
|
||||
choco install visualstudio2019-workload-vctools -y
|
||||
choco install python3 --version=3.7.5 -y
|
||||
|
||||
From here, continue onto `installing Red <installing-red-windows>`.
|
||||
For Audio support, you should also run the following command before exiting:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
choco install adoptopenjdk11jre -y
|
||||
|
||||
|
||||
From here, exit the prompt then continue onto `installing Red <installing-red-windows>`.
|
||||
|
||||
********************************
|
||||
Manually installing dependencies
|
||||
********************************
|
||||
|
||||
* `Python <https://www.python.org/downloads/>`_ - Red needs Python 3.7.0 or greater
|
||||
.. attention:: There are additional configuration steps required which are
|
||||
not documented for installing dependencies manually.
|
||||
These dependencies are only listed seperately here for
|
||||
reference purposes.
|
||||
|
||||
* `MSVC Build tools <https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2019>`_
|
||||
|
||||
* `Python <https://www.python.org/downloads/>`_ - Red needs Python 3.7.2 or greater
|
||||
|
||||
.. attention:: Please make sure that the box to add Python to PATH is CHECKED, otherwise
|
||||
you may run into issues when trying to run Red.
|
||||
@ -44,9 +59,8 @@ Manually installing dependencies
|
||||
|
||||
.. attention:: Please choose the option to "Git from the command line and also from 3rd-party software" in Git's setup.
|
||||
|
||||
* `Java <https://java.com/en/download/manual.jsp>`_ - needed for Audio
|
||||
* `Java <https://adoptopenjdk.net/?variant=openjdk11&jvmVariant=hotspot>`_ - needed for Audio
|
||||
|
||||
.. attention:: Please choose the "Windows Online" installer.
|
||||
|
||||
.. _installing-red-windows:
|
||||
|
||||
|
||||
@ -3,9 +3,12 @@
|
||||
# Discord Version check
|
||||
|
||||
import asyncio
|
||||
import getpass
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import pip
|
||||
import platform
|
||||
import shutil
|
||||
import sys
|
||||
from copy import deepcopy
|
||||
@ -16,7 +19,7 @@ import discord
|
||||
# Set the event loop policies here so any subsequent `get_event_loop()`
|
||||
# calls, in particular those as a result of the following imports,
|
||||
# return the correct loop object.
|
||||
from redbot import _update_event_loop_policy
|
||||
from redbot import _update_event_loop_policy, __version__
|
||||
|
||||
_update_event_loop_policy()
|
||||
|
||||
@ -73,6 +76,44 @@ def list_instances():
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
def debug_info():
|
||||
"""Shows debug information useful for debugging."""
|
||||
if sys.platform == "linux":
|
||||
import distro # pylint: disable=import-error
|
||||
|
||||
IS_WINDOWS = os.name == "nt"
|
||||
IS_MAC = sys.platform == "darwin"
|
||||
IS_LINUX = sys.platform == "linux"
|
||||
|
||||
pyver = sys.version
|
||||
pipver = pip.__version__
|
||||
redver = __version__
|
||||
dpy_version = discord.__version__
|
||||
if IS_WINDOWS:
|
||||
os_info = platform.uname()
|
||||
osver = "{} {} (version {})".format(os_info.system, os_info.release, os_info.version)
|
||||
elif IS_MAC:
|
||||
os_info = platform.mac_ver()
|
||||
osver = "Mac OSX {} {}".format(os_info[0], os_info[2])
|
||||
else:
|
||||
os_info = distro.linux_distribution()
|
||||
osver = "{} {}".format(os_info[0], os_info[1]).strip()
|
||||
user_who_ran = getpass.getuser()
|
||||
info = (
|
||||
"Debug Info for Red\n\n"
|
||||
+ "Red version: {}\n".format(redver)
|
||||
+ "Python version: {}\n".format(pyver)
|
||||
+ "Python executable: {}\n".format(sys.executable)
|
||||
+ "Discord.py version: {}\n".format(dpy_version)
|
||||
+ "Pip version: {}\n".format(pipver)
|
||||
+ "OS version: {}\n".format(osver)
|
||||
+ "System arch: {}\n".format(platform.machine())
|
||||
+ "User: {}\n".format(user_who_ran)
|
||||
)
|
||||
print(info)
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
def edit_instance(red, cli_flags):
|
||||
no_prompt = cli_flags.no_prompt
|
||||
token = cli_flags.token
|
||||
@ -231,6 +272,8 @@ def main():
|
||||
print(description)
|
||||
print("Current Version: {}".format(__version__))
|
||||
sys.exit(0)
|
||||
elif cli_flags.debuginfo:
|
||||
debug_info()
|
||||
elif not cli_flags.instance_name and (not cli_flags.no_instance or cli_flags.edit):
|
||||
print("Error: No instance name was provided!")
|
||||
sys.exit(1)
|
||||
|
||||
@ -33,7 +33,7 @@ from redbot.core import Config, commands
|
||||
from redbot.core.bot import Red
|
||||
from redbot.core.i18n import Translator, cog_i18n
|
||||
from . import audio_dataclasses
|
||||
from .errors import InvalidTableError, SpotifyFetchError, YouTubeApiError
|
||||
from .errors import InvalidTableError, SpotifyFetchError, YouTubeApiError, DatabaseError
|
||||
from .playlists import get_playlist
|
||||
from .utils import CacheLevel, Notifier, is_allowed, queue_duration, track_limit
|
||||
|
||||
@ -1098,10 +1098,14 @@ class MusicCache:
|
||||
track = tracks[0]
|
||||
|
||||
valid = not multiple
|
||||
|
||||
tries = len(tracks)
|
||||
while valid is False and multiple:
|
||||
tries -= 1
|
||||
if tries <= 0:
|
||||
raise DatabaseError("No valid entry found")
|
||||
track = random.choice(tracks)
|
||||
query = audio_dataclasses.Query.process_input(track)
|
||||
await asyncio.sleep(0.001)
|
||||
if not query.valid:
|
||||
continue
|
||||
if query.is_local and not query.track.exists():
|
||||
|
||||
@ -39,7 +39,13 @@ from .apis import MusicCache, HAS_SQL, _ERROR
|
||||
from .checks import can_have_caching
|
||||
from .converters import ComplexScopeParser, ScopeParser, get_lazy_converter, get_playlist_converter
|
||||
from .equalizer import Equalizer
|
||||
from .errors import LavalinkDownloadFailed, MissingGuild, SpotifyFetchError, TooManyMatches
|
||||
from .errors import (
|
||||
DatabaseError,
|
||||
LavalinkDownloadFailed,
|
||||
MissingGuild,
|
||||
SpotifyFetchError,
|
||||
TooManyMatches,
|
||||
)
|
||||
from .manager import ServerManager
|
||||
from .playlists import (
|
||||
FakePlaylist,
|
||||
@ -448,7 +454,16 @@ class Audio(commands.Cog):
|
||||
)
|
||||
if autoplay and not player.queue and player.fetch("playing_song") is not None:
|
||||
if self.owns_autoplay is None:
|
||||
await self.music_cache.autoplay(player)
|
||||
try:
|
||||
await self.music_cache.autoplay(player)
|
||||
except DatabaseError:
|
||||
notify_channel = player.fetch("channel")
|
||||
if notify_channel:
|
||||
notify_channel = self.bot.get_channel(notify_channel)
|
||||
await self._embed_msg(
|
||||
notify_channel, _("Autoplay: Couldn't get a valid track.")
|
||||
)
|
||||
return
|
||||
else:
|
||||
self.bot.dispatch(
|
||||
"red_audio_should_auto_play",
|
||||
@ -2725,7 +2740,16 @@ class Audio(commands.Cog):
|
||||
if not await self._currency_check(ctx, guild_data["jukebox_price"]):
|
||||
return
|
||||
if self.owns_autoplay is None:
|
||||
await self.music_cache.autoplay(player)
|
||||
try:
|
||||
await self.music_cache.autoplay(player)
|
||||
except DatabaseError:
|
||||
notify_channel = player.fetch("channel")
|
||||
if notify_channel:
|
||||
notify_channel = self.bot.get_channel(notify_channel)
|
||||
await self._embed_msg(
|
||||
notify_channel, _("Autoplay: Couldn't get a valid track.")
|
||||
)
|
||||
return
|
||||
else:
|
||||
self.bot.dispatch(
|
||||
"red_audio_should_auto_play",
|
||||
|
||||
@ -647,6 +647,7 @@ class Downloader(commands.Cog):
|
||||
if poss_installed_path.exists():
|
||||
with contextlib.suppress(commands.ExtensionNotLoaded):
|
||||
ctx.bot.unload_extension(real_name)
|
||||
await ctx.bot.remove_loaded_package(real_name)
|
||||
await self._delete_cog(poss_installed_path)
|
||||
uninstalled_cogs.append(inline(real_name))
|
||||
else:
|
||||
|
||||
@ -73,6 +73,7 @@ def parse_cli_flags(args):
|
||||
description="Red - Discord Bot", usage="redbot <instance_name> [arguments]"
|
||||
)
|
||||
parser.add_argument("--version", "-V", action="store_true", help="Show Red's current version")
|
||||
parser.add_argument("--debuginfo", action="store_true", help="Show debug information.")
|
||||
parser.add_argument(
|
||||
"--list-instances",
|
||||
action="store_true",
|
||||
|
||||
@ -1592,12 +1592,14 @@ class Core(commands.Cog, CoreLogic):
|
||||
e.add_field(name="System arch", value=platform.machine(), inline=True)
|
||||
e.add_field(name="User", value=user_who_ran, inline=True)
|
||||
e.add_field(name="OS version", value=osver, inline=False)
|
||||
e.add_field(name="Python executable", value=sys.executable, inline=False)
|
||||
await ctx.send(embed=e)
|
||||
else:
|
||||
info = (
|
||||
"Debug Info for Red\n\n"
|
||||
+ "Red version: {}\n".format(redver)
|
||||
+ "Python version: {}\n".format(pyver)
|
||||
+ "Python executable: {}\n".format(sys.executable)
|
||||
+ "Discord.py version: {}\n".format(dpy_version)
|
||||
+ "Pip version: {}\n".format(pipver)
|
||||
+ "System arch: {}\n".format(platform.machine())
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user