Added !set status and way to disable songs' titles as status

This commit is contained in:
Twentysix 2016-02-21 14:32:26 +01:00
parent b505c1ba9a
commit 1936635758
2 changed files with 36 additions and 15 deletions

View File

@ -8,6 +8,7 @@ from random import choice as rndchoice
from random import shuffle from random import shuffle
from .utils.dataIO import fileIO from .utils.dataIO import fileIO
from .utils import checks from .utils import checks
from __main__ import send_cmd_help
import glob import glob
import re import re
import aiohttp import aiohttp
@ -44,6 +45,7 @@ class Audio:
self.downloader = {"DONE" : False, "TITLE" : False, "ID" : False, "URL" : False, "DURATION" : False, "DOWNLOADING" : False} self.downloader = {"DONE" : False, "TITLE" : False, "ID" : False, "URL" : False, "DURATION" : False, "DOWNLOADING" : False}
self.skip_votes = [] self.skip_votes = []
self.cleanup_timer = int(time.perf_counter()) self.cleanup_timer = int(time.perf_counter())
self.past_titles = [] # This is to prevent the audio module from setting the status to None if a status other than a track's title gets set
self.sing = ["https://www.youtube.com/watch?v=zGTkAVsrfg8", "https://www.youtube.com/watch?v=cGMWL8cOeAU", self.sing = ["https://www.youtube.com/watch?v=zGTkAVsrfg8", "https://www.youtube.com/watch?v=cGMWL8cOeAU",
"https://www.youtube.com/watch?v=vFrjMq4aL-g", "https://www.youtube.com/watch?v=WROI5WYBU_A", "https://www.youtube.com/watch?v=vFrjMq4aL-g", "https://www.youtube.com/watch?v=WROI5WYBU_A",
@ -324,7 +326,7 @@ class Audio:
async def _list(self, ctx): async def _list(self, ctx):
"""Lists playlists""" """Lists playlists"""
if ctx.invoked_subcommand is None: if ctx.invoked_subcommand is None:
await self.bot.say("Type help list for info.") await send_cmd_help(ctx)
@_list.command(name="playlist", pass_context=True) @_list.command(name="playlist", pass_context=True)
async def list_playlist(self, ctx): async def list_playlist(self, ctx):
@ -387,25 +389,31 @@ class Audio:
async def audioset(self, ctx): async def audioset(self, ctx):
"""Changes audio module settings""" """Changes audio module settings"""
if ctx.invoked_subcommand is None: if ctx.invoked_subcommand is None:
await send_cmd_help(ctx)
msg = "```" msg = "```"
for k, v in self.settings.items(): for k, v in self.settings.items():
msg += str(k) + ": " + str(v) + "\n" msg += str(k) + ": " + str(v) + "\n"
msg += "\nType help audioset to see the list of commands.```" msg += "```"
await self.bot.say(msg) await self.bot.say(msg)
@audioset.command(name="queue") @audioset.command(name="queue")
async def queueset(self, status : str): async def queueset(self):
"""Enables/disables queue""" """Enables/disables forced queue"""
status = status.lower() self.settings["QUEUE_MODE"] = not self.settings["QUEUE_MODE"]
if status == "on" or status == "true": if self.settings["QUEUE_MODE"]:
self.settings["QUEUE_MODE"] = True
await self.bot.say("Queue mode is now on.") await self.bot.say("Queue mode is now on.")
elif status == "off" or status == "false":
self.settings["QUEUE_MODE"] = False
await self.bot.say("Queue mode is now off.")
else: else:
await self.bot.say("Queue status can be either on or off.") await self.bot.say("Queue mode is now off.")
return fileIO("data/audio/settings.json", "save", self.settings)
@audioset.command(name="status")
async def songstatus(self):
"""Enables/disables songs' titles as status"""
self.settings["TITLE_STATUS"] = not self.settings["TITLE_STATUS"]
if self.settings["TITLE_STATUS"]:
await self.bot.say("Songs' titles will show up as status.")
else:
await self.bot.say("Songs' titles will no longer show up as status.")
fileIO("data/audio/settings.json", "save", self.settings) fileIO("data/audio/settings.json", "save", self.settings)
@audioset.command() @audioset.command()
@ -495,7 +503,9 @@ class Audio:
self.music_player = self.bot.voice.create_ffmpeg_player(path + self.downloader["ID"], options='''-filter:a "volume={}"'''.format(self.settings["VOLUME"])) self.music_player = self.bot.voice.create_ffmpeg_player(path + self.downloader["ID"], options='''-filter:a "volume={}"'''.format(self.settings["VOLUME"]))
self.music_player.paused = False self.music_player.paused = False
self.music_player.start() self.music_player.start()
if path != "": await self.bot.change_status(discord.Game(name=self.downloader["TITLE"])) if path != "" and self.settings["TITLE_STATUS"]:
self.past_titles.append(self.downloader["TITLE"])
await self.bot.change_status(discord.Game(name=self.downloader["TITLE"]))
except discord.errors.ClientException: except discord.errors.ClientException:
print("Error: I can't play music without ffmpeg. Install it.") print("Error: I can't play music without ffmpeg. Install it.")
self.downloader = {"DONE" : False, "TITLE" : False, "ID" : False, "URL": False, "DURATION" : False, "DOWNLOADING" : False} self.downloader = {"DONE" : False, "TITLE" : False, "ID" : False, "URL": False, "DURATION" : False, "DOWNLOADING" : False}
@ -587,7 +597,8 @@ class Audio:
if msg.channel.is_private and msg.attachments != []: if msg.channel.is_private and msg.attachments != []:
await self.transfer_playlist(msg) await self.transfer_playlist(msg)
if not msg.channel.is_private: if not msg.channel.is_private:
if not self.playlist and not self.queue and not self.music_player.is_playing() and msg.server.me.game != None: if not self.playlist and not self.queue and not self.music_player.is_playing() and str(msg.server.me.game) in self.past_titles:
self.past_titles = []
await self.bot.change_status(None) await self.bot.change_status(None)
def get_local_playlists(self): def get_local_playlists(self):
@ -744,7 +755,7 @@ def check_folders():
def check_files(): def check_files():
default = {"VOLUME" : 0.5, "MAX_LENGTH" : 3700, "QUEUE_MODE" : True, "MAX_CACHE" : 0, "SOUNDCLOUD_CLIENT_ID": None} default = {"VOLUME" : 0.5, "MAX_LENGTH" : 3700, "QUEUE_MODE" : True, "MAX_CACHE" : 0, "SOUNDCLOUD_CLIENT_ID": None, "TITLE_STATUS" : True}
settings_path = "data/audio/settings.json" settings_path = "data/audio/settings.json"
if not os.path.isfile(settings_path): if not os.path.isfile(settings_path):

10
red.py
View File

@ -209,6 +209,16 @@ async def name(ctx, *name : str):
await bot.edit_profile(settings["PASSWORD"], username=" ".join(name)) await bot.edit_profile(settings["PASSWORD"], username=" ".join(name))
await bot.say("Done.") await bot.say("Done.")
@_set.command(pass_context=True)
@checks.is_owner()
async def status(ctx, *status : str):
"""Sets Red's status"""
if status != ():
await bot.change_status(discord.Game(name=" ".join(status)))
else:
await self.bot.change_status(None)
await bot.say("Done.")
@bot.command() @bot.command()
@checks.is_owner() @checks.is_owner()
async def shutdown(): async def shutdown():