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,57 +12,59 @@ payday_register = {}
PAYDAY_TIME = 300 # seconds between each payday
PAYDAY_CREDITS = 120 # credits received
slot_help = """ Slot machine payouts:
:two: :two: :six: Bet * 5000
:four_leaf_clover: :four_leaf_clover: :four_leaf_clover: +1000
:cherries: :cherries: :cherries: +800
:two: :six: Bet * 4
:cherries: :cherries: Bet * 3
bank = dataIO.fileIO("json/economy.json", "load")
Three symbols: +500
Two symbols: Bet * 2
def loadHelp():
global slot_help, economy_exp
You need an account to play. !register one.
Bet range: 5 - 100
"""
if settings == []: return False #first run
economy_exp = """ **Economy. Get rich and have fun with imaginary currency!**
slot_help = """ Slot machine payouts:
:two: :two: :six: Bet * 5000
:four_leaf_clover: :four_leaf_clover: :four_leaf_clover: +1000
:cherries: :cherries: :cherries: +800
:two: :six: Bet * 4
:cherries: :cherries: Bet * 3
!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
Three symbols: +500
Two symbols: Bet * 2
def initialize(c):
global client, bank
bank = dataIO.fileIO("json/economy.json", "load")
client = c
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!**
{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:"]

581
red.py
View File

@ -28,35 +28,162 @@ import youtubeparser
from sys import modules
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
#settings = {"PREFIX" : "!"} #prevents boot error
!meme help - Memes help
!audio help - Audio related commands
!economy - Economy explanation, if available
!trivia - Trivia commands and lists
"""
def loadHelp():
global help, audio_help, meme_help, admin_help, trivia_help
help = """**Commands list:**
{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
{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:**
{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:**
{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:**
{0}local [playlist_name] - Play chosen local playlist
{0}locallist or {0}local or {0}locals - Local playlists' list
**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 {0}play [playlist_name]!
""".format(settings["PREFIX"])
meme_help = """
Usage example:
One-Does-Not-Simply Template ID: 61579
{0}meme 61579;Test;Test
Memes list:
ID Name
61579 One Does Not Simply
438680 Batman Slapping Robin
61532 The Most Interesting Man In The World
101470 Ancient Aliens
61520 Futurama Fry
347390 X, X Everywhere
5496396 Leonardo Dicaprio Cheers
61539 First World Problems
61546 Brace Yourselves X is Coming
16464531 But Thats None Of My Business
61582 Creepy Condescending Wonka
61585 Bad Luck Brian
563423 That Would Be Great
61544 Success Kid
405658 Grumpy Cat
101288 Third World Skeptical Kid
8072285 Doge
100947 Matrix Morpheus
1509839 Captain Picard Facepalm
61533 X All The Y
1035805 Boardroom Meeting Suggestion
245898 Picard Wtf
21735 The Rock Driving
259680 Am I The Only One Around Here
14230520 Black Girl Wat
40945639 Dr Evil Laser
235589 Evil Toddler
61580 Too Damn High
61516 Philosoraptor
6235864 Finding Neverland
9440985 Face You Make Robert Downey Jr
101287 Third World Success Kid
100955 Confession Bear
444501 The lie detector determined that was a lie. The fact that you X determined that was a lie. Maury Povich.
97984 Disaster Girl
442575 Aint Nobody Got Time For That
109765 Ill Just Wait Here
124212 Say That Again I Dare You
28251713 Oprah You Get A
61556 Grandma Finds The Internet
101440 10 Guy
101711 Skeptical Baby
101716 Yo Dawg Heard You
101511 Dont You Squidward
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:**
{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:**
{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',
@ -70,126 +197,6 @@ youtube_dl_options = {
'no_warnings': True,
'outtmpl': "cache/%(id)s"}
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)
**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.
**Local commands:**
!local [playlist_name] - Play chosen local playlist
!locallist or !local or !locals - Local playlists' list
**Favorites:**
!addfavorite - Add song to your favorites
!delfavorite - Remove song from your favorites
!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]!
"""
meme_help = """
Usage example:
One-Does-Not-Simply Template ID: 61579
!meme 61579;Test;Test
Memes list:
ID Name
61579 One Does Not Simply
438680 Batman Slapping Robin
61532 The Most Interesting Man In The World
101470 Ancient Aliens
61520 Futurama Fry
347390 X, X Everywhere
5496396 Leonardo Dicaprio Cheers
61539 First World Problems
61546 Brace Yourselves X is Coming
16464531 But Thats None Of My Business
61582 Creepy Condescending Wonka
61585 Bad Luck Brian
563423 That Would Be Great
61544 Success Kid
405658 Grumpy Cat
101288 Third World Skeptical Kid
8072285 Doge
100947 Matrix Morpheus
1509839 Captain Picard Facepalm
61533 X All The Y
1035805 Boardroom Meeting Suggestion
245898 Picard Wtf
21735 The Rock Driving
259680 Am I The Only One Around Here
14230520 Black Girl Wat
40945639 Dr Evil Laser
235589 Evil Toddler
61580 Too Damn High
61516 Philosoraptor
6235864 Finding Neverland
9440985 Face You Make Robert Downey Jr
101287 Third World Success Kid
100955 Confession Bear
444501 The lie detector determined that was a lie. The fact that you X determined that was a lie. Maury Povich.
97984 Disaster Girl
442575 Aint Nobody Got Time For That
109765 Ill Just Wait Here
124212 Say That Again I Dare You
28251713 Oprah You Get A
61556 Grandma Finds The Internet
101440 10 Guy
101711 Skeptical Baby
101716 Yo Dawg Heard You
101511 Dont You Squidward
For more memes: `https://imgflip.com/memetemplates`
Choose a meme, click on "Blank Template" then add the ID
"""
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
"""
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
"""
client = discord.Client()
if not discord.opus.is_loaded():
@ -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())