Custom prefix, can now change settings on the fly

!setting [setting] [value]
This commit is contained in:
Twentysix 2016-01-25 21:49:25 +01:00
parent ef05727477
commit 970c3a5ef0
3 changed files with 366 additions and 294 deletions

View File

@ -5,7 +5,7 @@ import glob
default_settings = ('{"TRIVIA_ADMIN_ONLY": false, "EDIT_CC_ADMIN_ONLY": false, "PASSWORD": "PASSWORDHERE", "FILTER": true, "CUSTOMCOMMANDS": true, ' +
'"TRIVIA_MAX_SCORE": 10, "TRIVIA_DELAY": 15, "LOGGING": true, "EMAIL": "EMAILHERE", "ADMINROLE": "Transistor", "DOWNLOADMODE" : true, ' +
'"VOLUME": 0.20, "TRIVIA_BOT_PLAYS" : false, "TRIVIA_TIMEOUT" : 120, "DEBUG_ID" : "IgnoreThis", "POLL_DURATION" : 60}')
'"VOLUME": 0.20, "TRIVIA_BOT_PLAYS" : false, "TRIVIA_TIMEOUT" : 120, "DEBUG_ID" : "IgnoreThis", "POLL_DURATION" : 60, "PREFIX" : "!"}')
default_apis = ('{"IMGFLIP_USERNAME": "USERNAMEHERE", "IMGFLIP_PASSWORD": "PASSWORDHERE", "MYAPIFILMS_TOKEN" : "TOKENHERE"}')
@ -99,12 +99,19 @@ def createEmptyFiles():
admin_role = input(">")
if admin_role == "":
admin_role = "Transistor"
print("Command prefix? Leave empty for default, '!'. Maximum 1 character.")
prefix = input(">")
if len(prefix) != 1 or prefix == " ":
print("Invalid prefix. Setting prefix as '!'...")
prefix = "!"
new_settings = json.loads(default_settings)
new_settings["EMAIL"] = email
new_settings["PASSWORD"] = password
new_settings["ADMINROLE"] = admin_role
new_settings["PREFIX"] = prefix
fileIO("json/settings.json", "save", new_settings )
logger.info("Settings have been saved.")
if not os.path.isfile("json/apis.json"):
logger.info("Missing apis.json. Creating it...\n")
fileIO("json/apis.json", "save", json.loads(default_apis))

View File

@ -4,6 +4,7 @@ import time
import dataIO
client = None
settings = []
#words = dataIO.loadWords()
#anagram_sessions_timestamps = {}
anagram_sessions = []
@ -11,6 +12,13 @@ payday_register = {}
PAYDAY_TIME = 300 # seconds between each payday
PAYDAY_CREDITS = 120 # credits received
bank = dataIO.fileIO("json/economy.json", "load")
def loadHelp():
global slot_help, economy_exp
if settings == []: return False #first run
slot_help = """ Slot machine payouts:
:two: :two: :six: Bet * 5000
:four_leaf_clover: :four_leaf_clover: :four_leaf_clover: +1000
@ -21,47 +29,42 @@ slot_help = """ Slot machine payouts:
Three symbols: +500
Two symbols: Bet * 2
You need an account to play. !register one.
You need an account to play. {0}register one.
Bet range: 5 - 100
"""
""".format(settings["PREFIX"])
economy_exp = """ **Economy. Get rich and have fun with imaginary currency!**
!register - Register an account at the Twentysix bank
!balance - Check your balance
!slot help - Slot machine explanation
!slot [bid] - Play the slot machine
!payday - Type it every {} seconds to receive some credits.
""".format(str(PAYDAY_TIME))
#!payday - Get some cash every 10 minutes
def initialize(c):
global client, bank
bank = dataIO.fileIO("json/economy.json", "load")
client = c
{0}register - Register an account at the Twentysix bank
{0}balance - Check your balance
{0}slot help - Slot machine explanation
{0}slot [bid] - Play the slot machine
{0}payday - Type it every {1} seconds to receive some credits.
""".format(settings["PREFIX"], str(PAYDAY_TIME))
async def checkCommands(message):
p = settings["PREFIX"]
cmd = message.content
user = message.author
if cmd == "!balance":
if cmd == p + "balance":
if accountCheck(user.id):
await client.send_message(message.channel, "{} `Your balance is: {}`".format(user.mention, str(checkBalance(user.id))))
else:
await client.send_message(message.channel, "{} `You don't have an account at the Twentysix bank. Type !register to open one.`".format(user.mention, str(checkBalance(user.id))))
elif cmd == "!register":
elif cmd == p + "register":
await registerAccount(user, message)
elif cmd == "!slot help":
elif cmd == p + "slot help":
await client.send_message(message.author, slot_help)
await client.send_message(message.channel, "{} `Check your DMs for the slot machine explanation.`".format(message.author.mention))
elif cmd.startswith("!slot"):
elif cmd.startswith(p + "slot"):
await slotMachineCheck(message)
elif cmd == "!economy":
elif cmd == p + "economy":
await client.send_message(message.author, economy_exp)
await client.send_message(message.channel, "{} `Check your DMs for the economy explanation.`".format(message.author.mention))
elif cmd == "!challenge":
elif cmd == p + "challenge":
#isChallengeOngoing(message)
pass
elif cmd == "!payday":
elif cmd == p + "payday":
await payday(message)
async def registerAccount(user, message):
@ -147,6 +150,7 @@ async def payday(message):
###############SLOT##############
async def slotMachineCheck(message):
p = settings["PREFIX"]
msg = message.content.split()
if len(msg) == 2:
if msg[1].isdigit():
@ -157,11 +161,11 @@ async def slotMachineCheck(message):
else:
await client.send_message(message.channel, "{} `Bid must be between 5 and 100.`".format(message.author.mention))
else:
await client.send_message(message.channel, "{} `You need an account with enough funds to play the slot machine. (!economy)`".format(message.author.mention))
await client.send_message(message.channel, "{0} `You need an account with enough funds to play the slot machine. ({1}economy)`".format(message.author.mention, settings["PREFIX"]))
else:
await client.send_message(message.channel, "{} `!slot [bid]`".format(message.author.mention))
await client.send_message(message.channel, "{} `".format(message.author.mention) + p + "slot [bid]`")
else:
await client.send_message(message.channel, "{} `!slot [bid]`".format(message.author.mention))
await client.send_message(message.channel, "{} `".format(message.author.mention) + p + "slot [bid]`")
async def slotMachine(message, bid):
reel_pattern = [":cherries:", ":cookie:", ":two:", ":four_leaf_clover:", ":cyclone:", ":sunflower:", ":six:", ":mushroom:", ":heart:", ":snowflake:"]

457
red.py
View File

@ -28,89 +28,83 @@ import youtubeparser
from sys import modules
#settings = {"PREFIX" : "!"} #prevents boot error
def loadHelp():
global help, audio_help, meme_help, admin_help, trivia_help
help = """**Commands list:**
!flip - Flip a coin
!rps [rock or paper o scissors] - Play rock paper scissors
!proverb
!choose option1 or option2 or option3 (...) - Random choice
!8 [question] - Ask 8 ball
!sw - Start/stop the stopwatch
!avatar [name or mention] - Shows user's avatar
!trivia start - Start a trivia session
!trivia stop - Stop a trivia session
!twitch [stream] - Check if stream is online
!twitchalert [stream] - Whenever the stream is online the bot will send an alert in the channel (admin only)
!stoptwitchalert [stream] - Stop sending alerts about the specified stream in the channel (admin only)
!roll [number] - Random number between 0 and [number]
!gif [text] - GIF search
!imdb - Retrieves a movie's information from IMDB using its title
!urban [text] - Search definitions in the urban dictionary
!meme [ID;Text1;Text2] - Create a meme
!imdb [search terms] - Search on IMDB
!customcommands - Custom commands' list
!addcom [command] [text] - Add a custom command
!editcom [command] [text] - Edit a custom command
!delcom [command] - Delete a custom command
{0}flip - Flip a coin
{0}rps [rock or paper o scissors] - Play rock paper scissors
{0}proverb
{0}choose option1 or option2 or option3 (...) - Random choice
{0}8 [question] - Ask 8 ball
{0}sw - Start/stop the stopwatch
{0}avatar [name or mention] - Shows user's avatar
{0}trivia start - Start a trivia session
{0}trivia stop - Stop a trivia session
{0}twitch [stream] - Check if stream is online
{0}twitchalert [stream] - Whenever the stream is online the bot will send an alert in the channel (admin only)
{0}stoptwitchalert [stream] - Stop sending alerts about the specified stream in the channel (admin only)
{0}roll [number] - Random number between 0 and [number]
{0}gif [text] - GIF search
{0}imdb - Retrieves a movie's information from IMDB using its title
{0}urban [text] - Search definitions in the urban dictionary
{0}meme [ID;Text1;Text2] - Create a meme
{0}imdb [search terms] - Search on IMDB
{0}customcommands - Custom commands' list
{0}addcom [command] [text] - Add a custom command
{0}editcom [command] [text] - Edit a custom command
{0}delcom [command] - Delete a custom command
!meme help - Memes help
!audio help - Audio related commands
!economy - Economy explanation, if available
!trivia - Trivia commands and lists
"""
youtube_dl_options = {
'format': 'bestaudio/best',
'extractaudio': True,
'audioformat': "mp3",
'outtmpl': '%(id)s',
'noplaylist': True,
'nocheckcertificate': True,
'ignoreerrors': True,
'quiet': True,
'no_warnings': True,
'outtmpl': "cache/%(id)s"}
{0}meme help - Memes help
{0}audio help - Audio related commands
{0}economy - Economy explanation, if available
{0}trivia - Trivia commands and lists
""".format(settings["PREFIX"])
audio_help = """
**General audio help commands:**
!next or !skip - Next song
!prev - Previous song
!pause - Pause song
!resume - Resume song
!repeat or !replay - Replay current song
!title or !song - Current song's title + link
!youtube [link] - Play a youtube video in a voice channel
!sing - Make Red sing
!stop - Stop any voice channel activity
!volume [0-1] - Sets the volume
!downloadmode - Disables/enables download mode (admin only)
{0}next or {0}skip - Next song
{0}prev - Previous song
{0}pause - Pause song
{0}resume - Resume song
{0}repeat or {0}replay - Replay current song
{0}title or {0}song - Current song's title + link
{0}youtube [link] - Play a youtube video in a voice channel
{0}sing - Make Red sing
{0}stop - Stop any voice channel activity
{0}volume [0-1] - Sets the volume
{0}downloadmode - Disables/enables download mode (admin only)
**Playlist commands:**
!play [playlist_name] - Play chosen playlist
!playlists - Playlists' list
!shuffle - Mix music list
!addplaylist [name] [link] - Add a youtube playlist. Link format example: https://www.youtube.com/playlist?list=PLe8jmEHFkvsaDOOWcREvkgFoj6MD0pXXX
!delplaylist [name] - Delete a youtube playlist. Limited to author and admins.
!getplaylist - Receive the current playlist through DM. This also works with favorites.
{0}play [playlist_name] - Play chosen playlist
{0}playlists - Playlists' list
{0}shuffle - Mix music list
{0}addplaylist [name] [link] - Add a youtube playlist. Link format example: https://www.youtube.com/playlist?list=PLe8jmEHFkvsaDOOWcREvkgFoj6MD0pXXX
{0}delplaylist [name] - Delete a youtube playlist. Limited to author and admins.
{0}getplaylist - Receive the current playlist through DM. This also works with favorites.
**Local commands:**
!local [playlist_name] - Play chosen local playlist
!locallist or !local or !locals - Local playlists' list
{0}local [playlist_name] - Play chosen local playlist
{0}locallist or {0}local or {0}locals - Local playlists' list
**Favorites:**
!addfavorite - Add song to your favorites
!delfavorite - Remove song from your favorites
!playfavorites - Play your favorites
{0}addfavorite - Add song to your favorites
{0}delfavorite - Remove song from your favorites
{0}playfavorites - Play your favorites
**You can submit your own playlist by doing the following:**
1) Make a txt file. Name must be only letters, numbers and underscores. It will be your playlist's name, so choose wisely.
2) One youtube link each line.
3) Send me the txt. If any line is incorrect I will reject it.
4) Listen to it with !play [playlist_name]!
"""
4) Listen to it with {0}play [playlist_name]!
""".format(settings["PREFIX"])
meme_help = """
Usage example:
One-Does-Not-Simply Template ID: 61579
!meme 61579;Test;Test
{0}meme 61579;Test;Test
Memes list:
ID Name
@ -161,34 +155,47 @@ ID Name
For more memes: `https://imgflip.com/memetemplates`
Choose a meme, click on "Blank Template" then add the ID
"""
""".format(settings["PREFIX"])
admin_help = """
**Admin commands:**
!addwords [word1 word2 (...)] [phrase/with/many/words] - Add words to message filter
!removewords [word1 word2 (...)] [phrase/with/many/words] - Remove words from message filter
!addregex [regex] - Add regular expression to message filter
!removeregex [regex] - Remove regular expression from message filter
!shutdown - Shutdown the bot
!join [invite] - Join another server
!leaveserver - Leave server
!shush - Ignore the current channel
!talk - Stop ignoring the current channel
!reload - Reload most files. Useful in case of manual edits
!name [name] - Change the bot's name
!cleanup [number] - Delete the last [number] messages
!cleanup [name/mention] [number] - Delete the last [number] of messages by [name]
!blacklist [name/mention] - Add user to Red's blacklist
!forgive [name/mention] - Removes user from Red's blacklist
"""
{0}addwords [word1 word2 (...)] [phrase/with/many/words] - Add words to message filter
{0}removewords [word1 word2 (...)] [phrase/with/many/words] - Remove words from message filter
{0}addregex [regex] - Add regular expression to message filter
{0}removeregex [regex] - Remove regular expression from message filter
{0}shutdown - Shutdown the bot
{0}join [invite] - Join another server
{0}leaveserver - Leave server
{0}shush - Ignore the current channel
{0}talk - Stop ignoring the current channel
{0}reload - Reload most files. Useful in case of manual edits
{0}name [name] - Change the bot's name
{0}cleanup [number] - Delete the last [number] messages
{0}cleanup [name/mention] [number] - Delete the last [number] of messages by [name]
{0}blacklist [name/mention] - Add user to Red's blacklist
{0}forgive [name/mention] - Removes user from Red's blacklist
{0}setting [setting] [value] - Modify setting
""".format(settings["PREFIX"])
trivia_help = """
**Trivia commands:**
!trivia - Trivia questions lists and help
!trivia [name] - Starts trivia session with specified list
!trivia random - Starts trivia session with random list
!trivia stop - Stop trivia session
"""
{0}trivia - Trivia questions lists and help
{0}trivia [name] - Starts trivia session with specified list
{0}trivia random - Starts trivia session with random list
{0}trivia stop - Stop trivia session
""".format(settings["PREFIX"])
youtube_dl_options = {
'format': 'bestaudio/best',
'extractaudio': True,
'audioformat': "mp3",
'outtmpl': '%(id)s',
'noplaylist': True,
'nocheckcertificate': True,
'ignoreerrors': True,
'quiet': True,
'no_warnings': True,
'outtmpl': "cache/%(id)s"}
client = discord.Client()
@ -199,6 +206,8 @@ if not discord.opus.is_loaded():
async def on_message(message):
global trivia_sessions
p = settings["PREFIX"]
await gameSwitcher.changeGame()
if message.author.id in blacklisted_users and not isMemberAdmin(message):
@ -211,7 +220,7 @@ async def on_message(message):
if settings["FILTER"] and not isMemberAdmin(message):
if await checkFilter(message) or await checkRegex(message):
return False #exits without checking for commands
if message.channel.id in shush_list and message.content == "!talk":
if message.channel.id in shush_list and message.content == p + "talk":
await talk(message)
if message.channel.id not in shush_list:
@ -221,117 +230,117 @@ async def on_message(message):
await client.send_message(message.channel, "`" + choice(greetings) + "`")
elif message.content == client.user.mention + " ?" or message.content == client.user.mention + "?":
await client.send_message(message.channel, "`" + choice(greetings) + "`")
elif message.content == "!flip":
elif message.content == p + "flip":
await client.send_message(message.channel, "*flips a coin and... " + choice(["HEADS!*", "TAILS!*"]))
elif message.content.startswith("!rps"):
elif message.content.startswith(p + "rps"):
await rpsgame(message)
elif message.content == "!proverb":
elif message.content == p + "proverb":
await client.send_message(message.channel, "`" + choice(proverbs) + "`")
elif message.content == "!help":
elif message.content == p + "help":
await client.send_message(message.author, help)
await client.send_message(message.channel, "{} `Check your DMs for the command list.`".format(message.author.mention))
elif message.content.startswith('!choose'):
elif message.content.startswith(p + 'choose'):
await randomchoice(message)
elif message.content.startswith('!8 ') and message.content.endswith("?") and len(message.content) > 5:
elif message.content.startswith(p + '8 ') and message.content.endswith("?") and len(message.content) > 5:
await client.send_message(message.channel, "{}: ".format(message.author.mention) + "`" + choice(ball) + "`")
elif message.content.startswith('!roll'):
elif message.content.startswith(p + 'roll'):
await roll(message)
elif message.content.startswith('!addcom'):
elif message.content.startswith(p + 'addcom'):
await addcom(message)
elif message.content.startswith('!editcom'):
elif message.content.startswith(p + 'editcom'):
await editcom(message)
elif message.content.startswith('!delcom'):
elif message.content.startswith(p + 'delcom'):
await delcom(message)
elif message.content == "!customcommands":
elif message.content == p + "customcommands":
await listCustomCommands(message)
elif message.content.startswith('!sw'):
elif message.content.startswith(p + 'sw'):
await stopwatch(message)
elif message.content.startswith('!id'):
elif message.content.startswith(p + 'id'):
await client.send_message(message.channel, "{} `Your id is {}`".format(message.author.mention, message.author.id))
elif message.content.startswith('!twitchalert'):
elif message.content.startswith(p + 'twitchalert'):
await addTwitchAlert(message)
elif message.content.startswith('!stoptwitchalert'):
elif message.content.startswith(p + 'stoptwitchalert'):
await removeTwitchAlert(message)
elif message.content.startswith('!twitch'):
elif message.content.startswith(p + 'twitch'):
await twitchCheck(message)
elif message.content.startswith('!image'):
elif message.content.startswith(p + 'image'):
#image(message)
pass
elif message.content.startswith('!gif'):
elif message.content.startswith(p + 'gif'):
await gif(message)
elif message.content.startswith('!imdb'):
elif message.content.startswith(p + 'imdb'):
await imdb(message)
elif message.content.startswith('!urban'):
elif message.content.startswith(p + 'urban'):
await urban(message)
elif message.content.startswith('!uptime'):
elif message.content.startswith(p + 'uptime'):
await uptime(message)
elif message.content.startswith('!avatar'):
elif message.content.startswith(p + 'avatar'):
await avatar(message)
elif message.content == '!meme help' or message.content == '!memes':
elif message.content == p + 'meme help' or message.content == p + 'memes':
await client.send_message(message.author, meme_help)
await client.send_message(message.channel, "{} `Check your DMs for !meme help.`".format(message.author.mention))
elif message.content.startswith ('!meme'):
await client.send_message(message.channel, "{} `Check your DMs for " + p +"meme help.`".format(message.author.mention))
elif message.content.startswith (p + 'meme'):
await memes(message)
################## music #######################
elif message.content == "!sing":
elif message.content == p + "sing":
await playPlaylist(message, sing=True)
elif message.content.startswith('!youtube'):
elif message.content.startswith(p + 'youtube'):
await playVideo(message)
elif message.content.startswith('!play '):
elif message.content.startswith(p + 'play '):
await playPlaylist(message)
elif message.content.startswith('!local '):
elif message.content.startswith(p + 'local '):
await playLocal(message)
elif message.content == "!local" or message.content == "!locallist" or message.content == "!locals":
elif message.content == p + "local" or message.content == p + "locallist" or message.content == p + "locals":
await listLocal(message)
await client.send_message(message.channel, "{} `Check your DMs for the local playlists list.`".format(message.author.mention))
elif message.content == "!stop":
elif message.content == p + "stop":
await leaveVoice()
elif message.content == "!playlist" or message.content == "!playlists":
elif message.content == p + "playlist" or message.content == p + "playlists":
await listPlaylists(message)
await client.send_message(message.channel, "{} `Check your DMs for the playlists list.`".format(message.author.mention))
elif message.content == "!skip" or message.content == "!next":
elif message.content == p + "skip" or message.content == p + "next":
if currentPlaylist: currentPlaylist.nextSong(currentPlaylist.getNextSong())
elif message.content == "!prev" or message.content == "!previous":
elif message.content == p + "prev" or message.content == p + "previous":
if currentPlaylist: currentPlaylist.nextSong(currentPlaylist.getPreviousSong())
elif message.content == "!repeat" or message.content == "!replay":
elif message.content == p + "repeat" or message.content == p + "replay":
if currentPlaylist: currentPlaylist.nextSong(currentPlaylist.current)
elif message.content == "!pause":
elif message.content == p + "pause":
if currentPlaylist: currentPlaylist.pause()
elif message.content == "!resume":
elif message.content == p + "resume":
if currentPlaylist: currentPlaylist.resume()
elif message.content == "!shuffle":
elif message.content == p + "shuffle":
if currentPlaylist: currentPlaylist.shuffle()
elif message.content == "!song" or message.content == "!title" :
elif message.content == p + "song" or message.content == p + "title" :
if currentPlaylist: await getSongTitle(message)
elif message.content == "!audio help":
elif message.content == p + "audio help":
await client.send_message(message.author, audio_help)
await client.send_message(message.channel, "{} `Check your DMs for the audio help.`".format(message.author.mention))
elif message.content.startswith("!addplaylist"):
elif message.content.startswith(p + "addplaylist"):
await addPlaylist(message)
elif message.content.startswith("!delplaylist"):
elif message.content.startswith(p + "delplaylist"):
await delPlaylist(message)
elif message.content == "!addfavorite":
elif message.content == p + "addfavorite":
await addToFavorites(message)
elif message.content == "!delfavorite":
elif message.content == p + "delfavorite":
await removeFromFavorites(message)
elif message.content == "!playfavorites":
elif message.content == p + "playfavorites":
await playFavorites(message)
elif message.content == "!getplaylist":
elif message.content == p + "getplaylist":
await sendPlaylist(message)
elif message.content.startswith("!volume"):
elif message.content.startswith(p + "volume"):
await setVolume(message)
elif message.content == "!downloadmode":
elif message.content == p + "downloadmode":
await downloadMode(message)
elif message.content == "!endpoll":
elif message.content == p + "endpoll":
await endPoll(message)
elif message.content.startswith("!poll"):
elif message.content.startswith(p + "poll"):
await startPoll(message)
################################################
elif message.content == "!trivia":
elif message.content == p + "trivia":
await triviaList(message)
elif message.content.startswith("!trivia"):
elif message.content.startswith(p + "trivia"):
if checkAuth("Trivia", message, settings):
if message.content == "!trivia stop":
if message.content == p + "trivia stop":
if getTriviabyChannel(message.channel):
await getTriviabyChannel(message.channel).endGame()
await client.send_message(message.channel, "`Trivia stopped.`")
@ -346,43 +355,45 @@ async def on_message(message):
else:
await client.send_message(message.channel, "`Trivia is currently admin-only.`")
######## Admin commands #######################
elif message.content.startswith('!addwords'):
elif message.content.startswith(p + 'addwords'):
await addBadWords(message)
elif message.content.startswith('!removewords'):
elif message.content.startswith(p + 'removewords'):
await removeBadWords(message)
elif message.content.startswith('!addregex ') and len(message.content) > 11:
elif message.content.startswith(p + 'addregex ') and len(message.content) > 11:
await addRegex(message)
elif message.content.startswith('!removeregex ') and len(message.content) > 14:
elif message.content.startswith(p + 'removeregex ') and len(message.content) > 14:
await removeRegex(message)
elif message.content == "!shutdown":
elif message.content == p + "shutdown":
await shutdown(message)
elif message.content.startswith('!join'):
elif message.content.startswith(p + 'join'):
await join(message)
elif message.content == "!leaveserver":
elif message.content == p + "leaveserver":
await leave(message)
elif message.content == "!shush":
elif message.content == p + "shush":
await shush(message)
elif message.content == "!talk": #prevents !talk custom command
elif message.content == p + "talk": #prevents !talk custom command
pass
elif message.content == "!reload":
elif message.content == p + "reload":
await reloadSettings(message)
elif message.content.startswith("!name"):
elif message.content.startswith(p + "name"):
await changeName(message)
elif message.content.startswith("!cleanup"):
elif message.content.startswith(p + "cleanup"):
await cleanup(message)
elif message.content == "!admin help":
elif message.content == p + "admin help":
if isMemberAdmin(message):
await client.send_message(message.author, admin_help)
else:
await client.send_message(message.channel, "`Admin status required.`")
elif message.content.startswith("!debug"):
elif message.content.startswith(p + "debug"):
await debug(message)
elif message.content.startswith("!exec"):
elif message.content.startswith(p + "exec"):
await execFunc(message)
elif message.content.startswith("!blacklist"):
elif message.content.startswith(p + "blacklist"):
await blacklist(message, "add")
elif message.content.startswith("!forgive"):
elif message.content.startswith(p + "forgive"):
await blacklist(message, "remove")
elif message.content.startswith(p + "setting"):
await modifySettings(message)
###################################
elif getTriviabyChannel(message.channel): #check if trivia is ongoing in the channel
trvsession = getTriviabyChannel(message.channel)
@ -393,7 +404,7 @@ async def on_message(message):
if getPollByChannel(message):
getPollByChannel(message).checkAnswer(message)
if message.content.startswith('!') and len(message.content) > 2 and settings["CUSTOMCOMMANDS"]:
if message.content.startswith(p) and len(message.content) > 2 and settings["CUSTOMCOMMANDS"]:
await customCommand(message)
@client.async_event
@ -466,7 +477,7 @@ class Trivia():
await client.send_message(self.channel, "`There is no list with that name.`")
await self.stopTrivia()
else:
await client.send_message(self.channel, "`!trivia [list name]`")
await client.send_message(self.channel, "`" + settings["PREFIX"] + "trivia [list name]`")
async def stopTrivia(self):
global trivia_sessions
@ -766,7 +777,7 @@ async def startPoll(message):
poll_sessions.append(p)
await p.start()
else:
await client.send_message(message.channel, "`!poll question;option1;option2 (...)`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "poll question;option1;option2 (...)`")
else:
await client.send_message(message.channel, "`A poll is already ongoing in this channel.`")
@ -806,10 +817,10 @@ async def addcom(message):
logger.info("Saved commands database.")
await client.send_message(message.channel, "`Custom command successfully added.`")
else:
await client.send_message(message.channel, "`This command already exists. Use !editcom [command] [text]`")
await client.send_message(message.channel, "`This command already exists. Use " + settings["PREFIX"] + "editcom [command] [text]`")
else:
await client.send_message(message.channel, "`!addcom [command] [text]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "addcom [command] [text]`")
else:
await client.send_message(message.channel, "`You don't have permissions to edit custom commands.`")
@ -829,12 +840,12 @@ async def editcom(message):
logger.info("Saved commands database.")
await client.send_message(message.channel, "`Custom command successfully edited.`")
else:
await client.send_message(message.channel, "`That command doesn't exist. Use !addcom [command] [text]`")
await client.send_message(message.channel, "`That command doesn't exist. Use " + settings["PREFIX"] + "addcom [command] [text]`")
else:
await client.send_message(message.channel, "`There are no custom commands in this server. Use !addcom [command] [text]`")
await client.send_message(message.channel, "`There are no custom commands in this server. Use " + settings["PREFIX"] + "addcom [command] [text]`")
else:
await client.send_message(message.channel, "`!editcom [command] [text]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "editcom [command] [text]`")
else:
await client.send_message(message.channel, "`You don't have permissions to edit custom commands.`")
@ -853,10 +864,10 @@ async def delcom(message):
else:
await client.send_message(message.channel, "`That command doesn't exist.`")
else:
await client.send_message(message.channel, "`There are no custom commands in this server. Use !addcom [command] [text]`")
await client.send_message(message.channel, "`There are no custom commands in this server. Use " + settings["PREFIX"] + "addcom [command] [text]`")
else:
await client.send_message(message.channel, "`!delcom [command]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "delcom [command]`")
else:
await client.send_message(message.channel, "`You don't have permissions to edit custom commands.`")
@ -929,16 +940,16 @@ async def rpsgame(message):
elif userchoice == "scissors" and botchoice == "paper":
await client.send_message(message.channel, rps[botchoice] + msgs["win"])
else:
await client.send_message(message.channel, "`!rps [rock or paper or scissors]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "rps [rock or paper or scissors]`")
else:
await client.send_message(message.channel, "`!rps [rock or paper or scissors]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "rps [rock or paper or scissors]`")
async def randomchoice(message):
sentences = ["Mmm... I think I'll choose ", "I choose ", "I prefer ", "This one is best: ", "This: "]
msg = message.content[8:] # removes !choose
msg = msg.split(" or ")
if len(msg) == 1:
await client.send_message(message.channel, "`!choose option1 or option2 or option3 (...)`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "choose option1 or option2 or option3 (...)`")
elif len(msg) >= 2:
await client.send_message(message.channel, "`" + choice(sentences) + choice(msg) + "`")
else:
@ -953,7 +964,7 @@ async def stopwatch(message):
stopwatches.pop(message.author.id, None)
else:
stopwatches[message.author.id] = int(time.perf_counter())
await client.send_message(message.channel, "`Stopwatch started! Use !sw to stop it.`")
await client.send_message(message.channel, "`Stopwatch started! Use " + settings["PREFIX"] + "sw to stop it.`")
"""
async def image(message): # API's dead.
@ -999,7 +1010,7 @@ async def imdb(message): # Method added by BananaWaffles.
else:
await client.send_message(message.channel, "`Invalid search.`")
else:
await client.send_message(message.channel, "`!imdb [text]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "imdb [text]`")
async def memes(message):
msg = message.content[6:]
@ -1020,9 +1031,9 @@ async def memes(message):
error = result["error_message"]
await client.send_message(message.channel, error)
else:
await client.send_message(message.channel, "`!meme id;text1;text2 | !meme help for full list`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "meme id;text1;text2 | " + settings["PREFIX"] + "meme help for full list`")
else:
await client.send_message(message.channel, "`!meme id;text1;text2 | !meme help for full list`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "meme id;text1;text2 | " + settings["PREFIX"] + "meme help for full list`")
async def urban(message):
msg = message.content.split()
@ -1045,7 +1056,7 @@ async def urban(message):
else:
await client.send_message(message.channel, "`Invalid search.`")
else:
await client.send_message(message.channel, "`!urban [text]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "urban [text]`")
async def gif(message):
msg = message.content.split()
@ -1067,7 +1078,7 @@ async def gif(message):
else:
await client.send_message(message.channel, "`Invalid search.`")
else:
await client.send_message(message.channel, "`!gif [text]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "gif [text]`")
async def avatar(message):
if message.mentions:
@ -1082,7 +1093,7 @@ async def avatar(message):
else:
await client.send_message(message.channel, "`User not found.`")
else:
await client.send_message(message.channel, "`!avatar [name or mention]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "avatar [name or mention]`")
def getTriviabyChannel(channel):
@ -1101,9 +1112,9 @@ async def roll(message):
else:
await client.send_message(message.channel, "{} `A number between 1 and 99999, maybe? :)`".format(message.author.mention))
else:
await client.send_message(message.channel, "`!roll [number]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "roll [number]`")
else:
await client.send_message(message.channel, "`!roll [number]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "roll [number]`")
async def checkFilter(message): #WIP
msg = message.content.lower()
@ -1153,7 +1164,7 @@ async def twitchCheck(message):
except:
await client.send_message(message.channel, "{} `Error.`".format(message.author.mention))
else:
await client.send_message(message.channel, "{} `!twitch [name]`".format(message.author.mention))
await client.send_message(message.channel, "{} `".format(message.author.mention) + settings["PREFIX"] + "twitch [name]`")
async def triviaList(message):
await client.send_message(message.author, trivia_help)
@ -1226,10 +1237,11 @@ async def playVideo(message):
async def playPlaylist(message, sing=False):
global musicPlayer, currentPlaylist
p = settings["PREFIX"]
msg = message.content
toDelete = None
if not sing:
if msg != "!play" or msg != "play ":
if msg != p + "play" or msg != "play ":
if await checkVoice(message):
msg = message.content[6:]
if dataIO.fileIO("playlists/" + msg + ".txt", "check"):
@ -1266,6 +1278,7 @@ async def playPlaylist(message, sing=False):
async def playLocal(message):
global currentPlaylist
p = settings["PREFIX"]
msg = message.content.split(" ")
if await checkVoice(message):
if len(msg) == 2:
@ -1283,11 +1296,11 @@ async def playLocal(message):
await asyncio.sleep(2)
await currentPlaylist.songSwitcher()
else:
await client.send_message(message.channel, "`There is no local playlist called {}. !local or !locallist to receive the list.`".format(msg[1]))
await client.send_message(message.channel, "`There is no local playlist called {}. " + p + "local or " + p + "locallist to receive the list.`".format(msg[1]))
else:
await client.send_message(message.channel, "`There are no valid playlists in the localtracks folder.`")
else:
await client.send_message(message.channel, "`!local [playlist]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "local [playlist]`")
def getLocalPlaylists():
dirs = []
@ -1359,7 +1372,7 @@ async def transferPlaylist(message):
dataIO.fileIO("playlists/" + msg["filename"], "save", data)
await client.send_message(message.channel, "`Playlist added. Name: {}`".format(msg["filename"].replace(".txt", "")))
else:
await client.send_message(message.channel, "`Something is wrong with the playlist or its filename. Type !audio help to read how to format it properly.`")
await client.send_message(message.channel, "`Something is wrong with the playlist or its filename. Type " + settings["PREFIX"] + "audio help to read how to format it properly.`")
else:
await client.send_message(message.channel, "`A playlist with that name already exists. Change the filename and resubmit it.`")
@ -1409,7 +1422,7 @@ async def addPlaylist(message):
await client.send_message(message.channel, "`Something is wrong with the playlist's link or its filename. Remember, the name must be with only numbers, letters and underscores. Link must be this format: https://www.youtube.com/playlist?list=PLe8jmEHFkvsaDOOWcREvkgFoj6MD0pXXX`")
else:
await client.send_message(message.channel, "`!addplaylist [name] [link]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "addplaylist [name] [link]`")
async def delPlaylist(message):
msg = message.content.split(" ")
@ -1425,7 +1438,7 @@ async def delPlaylist(message):
else:
await client.send_message(message.channel, "`There is no playlist with that name.`")
else:
await client.send_message(message.channel, "`!delplaylist [name]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "delplaylist [name]`")
async def getSongTitle(message):
title = await youtubeparser.getTitle(currentPlaylist.playlist[currentPlaylist.current])
@ -1458,7 +1471,7 @@ async def removeFromFavorites(message):
else:
await client.send_message(message.channel, "{} `This song isn't in your favorites.`".format(message.author.mention))
else:
await client.send_message(message.channel, "{} `You don't have any favorites yet. Start adding them with !addfavorite`".format(message.author.mention))
await client.send_message(message.channel, "{} `You don't have any favorites yet. Start adding them with " + settings["PREFIX"] + "addfavorite`".format(message.author.mention))
else:
await client.send_message(message.channel, "{} `No song is being played`".format(message.author.mention))
@ -1490,6 +1503,7 @@ async def sendPlaylist(message):
async def setVolume(message):
global settings
p = settings["PREFIX"]
msg = message.content
if len(msg.split(" ")) == 2:
msg = msg.split(" ")
@ -1500,11 +1514,11 @@ async def setVolume(message):
await(client.send_message(message.channel, "`Volume set. Next track will have the desired volume.`"))
dataIO.fileIO("json/settings.json", "save", settings)
else:
await(client.send_message(message.channel, "`Volume must be between 0 and 1. Example: !volume 0.50`"))
await(client.send_message(message.channel, "`Volume must be between 0 and 1. Example: " + p + "volume 0.50`"))
except:
await(client.send_message(message.channel, "`Volume must be between 0 and 1. Example: !volume 0.15`"))
await(client.send_message(message.channel, "`Volume must be between 0 and 1. Example: " + p + "volume 0.15`"))
else:
await(client.send_message(message.channel, "`Volume must be between 0 and 1. Example: !volume 0.15`"))
await(client.send_message(message.channel, "`Volume must be between 0 and 1. Example: " + p + "volume 0.15`"))
async def downloadMode(message):
if isMemberAdmin(message):
@ -1585,7 +1599,7 @@ async def addBadWords(message):
dataIO.fileIO("json/filter.json", "save", badwords)
logger.info("Saved filter words.")
else:
await client.send_message(message.channel, "`!addwords [word1] [word2] [phrase/with/many/words] (...)`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "addwords [word1] [word2] [phrase/with/many/words] (...)`")
else:
await client.send_message(message.channel, "`I don't take orders from you.`")
@ -1607,7 +1621,7 @@ async def removeBadWords(message):
dataIO.fileIO("json/filter.json", "save", badwords)
logger.info("Saved filter words.")
else:
await client.send_message(message.channel, "`!removewords [word1] [word2] [phrase/with/many/words](...)`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "removewords [word1] [word2] [phrase/with/many/words](...)`")
else:
await client.send_message(message.channel, "`I don't take orders from you.`")
@ -1621,7 +1635,7 @@ async def changeName(message):
except Exception as e:
logger.error(e)
else:
await client.send_message(message.channel, "`!name [new name]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "name [new name]`")
else:
await client.send_message(message.channel, "`I don't take orders from you.`")
@ -1663,7 +1677,7 @@ async def reloadSettings(message):
await client.send_message(message.channel, "`I don't take orders from you.`")
async def cleanup(message):
errorMsg = "`!cleanup [number] !cleanup [name/mention] [number]`"
errorMsg = "`" + settings["PREFIX"] + "cleanup [number] " + settings["PREFIX"] + "cleanup [name/mention] [number]`"
if isMemberAdmin(message):
if canDeleteMessages(message):
try:
@ -1745,7 +1759,7 @@ async def addTwitchAlert(message):
dataIO.fileIO("json/twitch.json", "save", twitchStreams)
await client.send_message(message.channel, "`I will always send an alert in this channel whenever {}'s stream is online. Use !stoptwitchalert [name] to stop it.`".format(msg[1]))
else:
await client.send_message(message.channel, "`!twitchalert [name]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "twitchalert [name]`")
else:
await client.send_message(message.channel, "`I don't take orders from you.`")
@ -1765,18 +1779,19 @@ async def removeTwitchAlert(message):
return True
await client.send_message(message.channel, "`There's no alert for {}'s stream in this channel.`".format(msg[1]))
else:
await client.send_message(message.channel, "`!stoptwitchalert [name]`")
await client.send_message(message.channel, "`" + settings["PREFIX"] + "stoptwitchalert [name]`")
else:
await client.send_message(message.channel, "`I don't take orders from you.`")
async def blacklist(message, mode):
global blacklisted_users
p = settings["PREFIX"]
if isMemberAdmin(message):
if message.mentions:
m = message.mentions[0]
else:
if len(message.content.split(" ")) >= 2:
if message.content.startswith("!blacklist"):
if message.content.startswith(p + "blacklist"):
name = message.content[11:]
else:
name = message.content[9:]
@ -1800,6 +1815,46 @@ async def blacklist(message, mode):
else:
await client.send_message(message.channel, "`I don't take orders from you.`")
async def modifySettings(message):
global settings
if isMemberAdmin(message):
msg = message.content.split(" ")
if len(msg) == 3:
_, key, value = msg
if key.lower() == "password" or key.lower() == "email" or key.lower() == "debug_id":
await client.send_message(message.channel, "`You cannot modify EMAIL, PASSWORD or DEBUG_ID`")
return False
if key.lower() == "prefix" and len(value) != 1:
await client.send_message(message.channel, "`Prefix cannot be more than one character.`")
return False
if key in settings.keys():
if value.lower() == "true": value = True
elif value.lower() == "false": value = False
else:
try:
value = int(value)
except:
pass
settings[key] = value
dataIO.fileIO("json/settings.json", "save", settings)
loadHelp()
if "economy" in modules:
economy.settings = settings
economy.loadHelp()
await client.send_message(message.channel, "`'{}' set to '{}'`".format(key, str(value)))
else:
await client.send_message(message.channel, "`That setting doesn't exist`")
else:
msg = "```"
for k, v in settings.items():
if k != "EMAIL" and k != "PASSWORD":
msg += k + ": " + str(v) + "\n"
msg += "```\n"
msg += settings["PREFIX"] + "setting [setting] [value]"
await client.send_message(message.channel, msg)
else:
await client.send_message(message.channel, "`I don't take orders from you.`")
################################################
@asyncio.coroutine
@ -1924,6 +1979,12 @@ def loadDataFromFiles(loadsettings=False):
global settings
settings = dataIO.fileIO("json/settings.json", "load")
loadHelp()
if "economy" in modules:
economy.settings = settings
economy.loadHelp()
def main():
global ball, greetings, greetings_caps, stopwatches, trivia_sessions, message, gameSwitcher, uptime_timer, musicPlayer, currentPlaylist
global logger, settings, poll_sessions
@ -1956,7 +2017,7 @@ def main():
gameSwitcher = botPlays()
if "economy" in modules:
economy.initialize(client)
economy.client = client
uptime_timer = int(time.perf_counter())