Example #1
0
async def on_message(message):
    if message.author.bot:
        return

    conn = create_connection(DATABASE)

    if message.content.startswith(get_prefix(conn, int(message.server.id))[0]):
        await dispatch(message)
        return
Example #2
0
async def on_server_update(before, after):
    conn = create_connection(DATABASE)
    prefix = get_prefix(conn, int(after.id))
    try:
        serverIcon = 'https://cdn.discordapp.com/icons/{}/{}.png'.format(
            after.id, after.icon)
    except TypeError:
        serverIcon = 0
    add_server(conn,
               int(after.id),
               after.name,
               int(after.owner.id),
               after.owner.name,
               serverIcon,
               prefix=prefix[0])
    return
async def help_me(message, bot):
    conn = create_connection(DATABASE)
    prefix = get_prefix(conn, int(message.server.id))[0]

    helpBed = discord.Embed(colour=0xFF00FF)
    helpBed.set_author(name="Doo Bot", icon_url="http://www3.pictures.zimbio.com/mp/OLESKRmZW6Al.jpg")
    helpBed.set_footer(text=" Website coming soon | Github coming soon ")
    helpBed.set_thumbnail(url="https://www.mydish.com/filestream.ashx?ID=17612")
    helpBed.add_field(name="{}overwatch <BattleTag>".format(prefix), value="```fix\nGets Overwatch stats for entered player```")
    helpBed.add_field(name="{}youtube <Search Term>".format(prefix), value="```fix\nSearches Youtube and posts relevant video```")
    helpBed.add_field(name="{}insult <Name>".format(prefix), value="```fix\nInsults entered person```", inline=False)
    helpBed.add_field(name="{}imgur".format(prefix), value="```fix\nRandom image from Imgur's hot page```")
    helpBed.add_field(name="{}wouldyou".format(prefix), value="```fix\nAsks a would-you-rather question```")
    helpBed.add_field(name="{}either".format(prefix), value="```fix\nAsks an either-or quandary```", inline=False)
    helpBed.add_field(name="{}weird".format(prefix), value="```fix\nPosts some weird shit```", inline=False)
    helpBed.add_field(name="{}meme".format(prefix), value="```fix\nPosts a dank meme```")
    helpBed.add_field(name="{}comeondown".format(prefix), value="```fix\nStarts a Price is right game for up to 4 people```")
    helpBed.add_field(name="{}trends".format(prefix), value="```fix\nStarts a Google Trends game for up to 5 people```")

    await bot.send_message(message.channel, embed=helpBed)
async def youtube_search(message, bot):
    if len(message.content.split()) < 2:
        return

    conn = create_connection(DATABASE)
    linkList = []
    textToSearch = message.content.replace('{}youtube'.format(get_prefix(conn, int(message.server.id))[0]), '')
    await bot.send_message(message.channel, 'Searching YouTube for: ' + textToSearch)
    query = urllib.request.quote(textToSearch)
    url = "https://www.youtube.com/results?search_query=" + query
    response = urllib.request.urlopen(url)
    html_s = response.read()
    soup = BeautifulSoup(html_s, "lxml")
    for vid in soup.findAll(attrs={'class': 'yt-uix-tile-link'}):
        linkList.append('https://www.youtube.com' + vid['href'])
    # noinspection PyBroadException
    try:
        random.randint(0, len(linkList) - 1)
    except Exception:
        await bot.send_message(message.channel, 'There was an error. Try another search term')
        return

    random_num = random.randint(0, 3)
    await bot.send_message(message.channel, linkList[random_num])
async def google_trends(message, bot):
    term = random.choice(trendTerms)
    guessesList = []
    guessesDict = {}
    playerCount = 0
    conn = create_connection(DATABASE)
    prefix = get_prefix(conn, int(message.server.id))[0]

    trendBed = discord.Embed(title="Let's play Google Trends! (Beta)", url="https://www.youtube.com/watch?v=AIsYJ_7chNc",
                             color=0x11FF11, description="*Guess a word that would be combined with the "
                                                         "Trend term (either before or after) you think is the most"
                                                         " frequently searched on Google.*\n\n Today's Trend term is: "
                                                         "__**{}**__".format(term))
    trendBed.set_thumbnail(url="https://www.alternatememories.com/images/intro/science/google-trends_300x300.jpg.pagespeed.ce.7Zj5pQHJ5n.jpg")
    trendBed.set_footer(text="Use {0}before <word> if you think your word comes before the Trend term or {0}after <word>"
                             " if you think your word comes after the Trend term.".format(prefix))
    await bot.send_message(message.channel, embed=trendBed)

    def check(msg):
        if msg.content.startswith("{}before".format(prefix)):
            return msg.content.startswith("{}before".format(prefix))
        elif msg.content.startswith("{}after".format(prefix)):
            return msg.content.startswith("{}after".format(prefix))

    while playerCount < 5:
        u_msg = await bot.wait_for_message(check=check, timeout=30.0, channel=message.channel)
        try:
            word = u_msg.content.split()[1].lower()
            player = u_msg.author.name
        except AttributeError:
            break

        if u_msg.author.name in guessesDict:
            await bot.send_message(message.channel, "{}, You have already guessed".format(player))
            continue

        if len(u_msg.content.split()) == 1:
            await bot.send_message(message.channel, "{}, You need to enter a word".format(player))
            continue

        if len(u_msg.content.split()) > 2:
            await bot.send_message(message.channel, "{}, Only single word answers".format(player))
            continue

        if len(word) > 25:
            await bot.send_message(message.channel, "{}, That word is too long".format(player))
            continue

        guessDataBefore = "{} {}".format(word, term)
        guessDataAfter = "{} {}".format(term, word)

        if u_msg.content.split()[0] == "{}before".format(prefix):
            if guessDataBefore in guessesList:
                await bot.send_message(message.channel, "{}, {} is already taken". format(player, word))
                continue
            guessesList.append(guessDataBefore)
            guessesDict[u_msg.author.name] = guessDataBefore
        elif u_msg.content.split()[0] == "{}after".format(prefix):
            if guessDataAfter in guessesList:
                await bot.send_message(message.channel, "{}, {} is already taken". format(player, word))
                continue
            guessesList.append(guessDataAfter)
            guessesDict[u_msg.author.name] = guessDataAfter

        playerCount += 1

    trend = TrendReq()
    try:
        trend.build_payload(kw_list=guessesList, timeframe='today 1-m')
    except ResponseError:
        await bot.send_message(message.channel, "Nobody played :cry:, game over")
        return

    playerCount = 0
    for key, value in guessesDict.items():
        try:
            guessesDict[key] = [value, trend.interest_over_time().tail(10).iloc[9, playerCount]]
            playerCount += 1
        except IndexError:
            await bot.send_message(message.channel, "All guesses were so bad, there is no data for that on Google\n"
                                                    "Everyone loses")
            return

    trendGraph = trend.interest_over_time().tail(10).plot(kind='line')
    saveGraph = trendGraph.get_figure()
    saveGraph.savefig("../pics/plots/plot{}.png".format(message.channel))

    await bot.send_file(message.channel, "../pics/plots/plot{}.png".format(message.channel))
    for key, value in guessesDict.items():
        await bot.send_message(message.channel, "```ml\n{} guessed \"{}\" and scored {}\n```"
                               .format(str(key).title(), value[0], value[1]))
    await bot.send_message(message.channel, "```css\n[ {} WINS! ]\n```"
                           .format(max(guessesDict, key=lambda k: guessesDict[k][1])))
async def price_is_right(message, bot):
    randItem = random.randint(0, 100)
    guessesDict = {}
    guessesList = []
    i = 0
    guess = 0.0
    breaker = False
    conn = create_connection(DATABASE)
    prefix = get_prefix(conn, int(message.server.id))[0]

    await bot.send_message(message.channel, "COME ON DOWN! :musical_note: *price is right jingle*:musical_note: ")

    webhoseio_api_key = "69c5d207-91a4-46a9-aa46-7d798b1e8b35"
    webhoseio_url = "http://webhose.io/productFilter?token={}&format=json".format(webhoseio_api_key)
    response = requests.get(webhoseio_url)

    if response.status_code == 200:
        data = json.loads(response.content.decode('utf-8'))
    else:
        bot.send_message(message.channel, "<API ERROR> Request not successful ({})".format(response.status_code))
        return

    try:
        price = float(data['products'][randItem]['price'])
    except ValueError:
        await bot.send_message(message.channel, "<Error> converting price of product to float")
        return

    PIRBed = discord.Embed(title="THE PRICE IS RIGHT! (Beta)", url=data['products'][randItem]['url'], color=0xfffa2d)
    PIRBed.set_thumbnail(url="https://upload.wikimedia.org/wikipedia/en/a/a0/Tpir_40_logo.png")
    PIRBed.add_field(name="Product Name", value=data['products'][randItem]['name'], inline=True)
    PIRBed.set_footer(text="Be closest to actual price without going over to win! Use \'{}guess\' <amount>"
                      .format(prefix))

    try:
        PIRBed.set_image(url=data['products'][randItem]['images'][0])
    except IndexError:
        pass
    try:
        PIRBed.add_field(name="Category", value=data['products'][randItem]['categories'][0].capitalize(),
                         inline=True)
    except IndexError:
        pass

    await bot.send_message(message.channel, embed=PIRBed)

    def check(msg1):
        return msg1.content.startswith("{}guess".format(prefix))

    while i < 4:
        msg = await bot.wait_for_message(check=check, timeout=30.0, channel=message.channel)
        try:
            guess = float(msg.content[7:])
            if guess > 50000:
                await bot.send_message(message.channel, "{}, that is definitely too high".format(msg.author.name))
                if i:
                    i = len(guessesList)
                continue
            if guess < 0:
                await bot.send_message(message.channel, "{}, that is definitely too low".format(msg.author.name))
                if i:
                    i = len(guessesList)
                continue
        except ValueError:
            await bot.send_message(message.channel, "{}, that is not a valid input".format(msg.author.name))
            if i:
                i = len(guessesList)
            continue
        except AttributeError:
            break

        for key, value in guessesDict.items():
            if value == msg.author.id:
                await bot.send_message(message.channel, "{}, you have already guessed".format(msg.author.name))
                if i:
                    i = len(guessesList)
                breaker = True
                continue

        if breaker:
            breaker = False
            continue

        if guess not in guessesList:
            guessesList.append(guess)
        else:
            await bot.send_message(message.channel, "{}, amount already guessed".format(msg.author.name))
            if i:
                i = len(guessesList)
            continue

        guessesDict[guess] = msg.author.id
        i += 1

    await bot.send_message(message.channel, "```ml\nActual Retail Price Is: ${}\n```".format(price))

    guessesList.sort(reverse=True)

    if not len(guessesList):
        await bot.send_message(message.channel, "Nobody played :cry:")
        return

    if guessesList[0] > price:
        try:
            if guessesList[1] <= price:
                user = message.server.get_member(guessesDict[guessesList[1]])
                await bot.send_message(message.channel, "{} WINS!".format(user.name))
            elif guessesList[2] <= price:
                user = message.server.get_member(guessesDict[guessesList[2]])
                await bot.send_message(message.channel, "{} WINS!".format(user.name))
            elif guessesList[3] <= price:
                user = message.server.get_member(guessesDict[guessesList[3]])
                await bot.send_message(message.channel, "{} WINS!".format(user.name))
            else:
                await bot.send_message(message.channel, "Sorry, you all went over the retail amount!")
        except IndexError:
            await bot.send_message(message.channel, "Sorry, you all went over the retail amount!")
    elif guessesList[0] <= price:
        user = message.server.get_member(guessesDict[guessesList[0]])
        await bot.send_message(message.channel, "{} WINS!".format(user.name))
    else:
        await bot.send_message(message.channel, "Sorry, you all went over the retail amount!")
Example #7
0
async def dice_roll(message, bot):
    amount = await validate_play(message, bot)
    if amount < 0:
        return

    conn = create_connection(DATABASE)
    set_player_plays(conn, int(message.author.id), "dice")

    prefix = get_prefix(conn, int(message.server.id))[0]
    multiplier = 1.0

    await bot.send_message(
        message.channel,
        '```xl\n{0}: Guess if the roll is \'{1}even\' or \'{1}odd\' '
        '(Current Multiplier \'x{2}\')\n```'.format(message.author.name,
                                                    prefix, multiplier))
    while True:

        def check(msg):
            return msg.content.startswith(prefix)

        guess = await bot.wait_for_message(timeout=20,
                                           author=message.author,
                                           channel=message.channel,
                                           check=check)
        if guess is None:
            await bot.send_message(
                message.channel,
                '```xl\n{} timed out and loses bet of ${}\n```'.format(
                    message.author.name, amount))
            remove_funds(conn, int(message.author.id), amount)
            update_money_lost(conn, int(message.author.id), amount)
            update_jackpot(conn, int(message.server.id), int(amount / 4))
            return
        if guess.content == '{}even'.format(prefix):
            pick = 0
            break
        if guess.content == '{}odd'.format(prefix):
            pick = 1
            break
        else:
            await bot.send_message(
                message.channel,
                '```xl\nTo guess use \'{0}even\' or \'{0}odd\'\n```'.format(
                    prefix))

    while True:
        roll = random.randint(1, 6)
        chosenPic = '../pics/dice/Die{}.jpg'.format(roll)
        evenOdd = roll % 2

        with open(chosenPic, 'rb') as die:
            await bot.send_file(message.channel, die)
        if pick == evenOdd:
            multiplier += 0.2
            await bot.send_message(
                message.channel,
                '```xl\n{0} ROLL: {1}\nGuess again to increase your winnings '
                'multiplier or cash out (Current Multiplier \'x{2}\')\nUse \''
                '{3}even\' or \'{3}odd\' to go again or \'{3}quit\' to cash out\n```'
                .format(message.author.name, roll, float(multiplier), prefix))

            def check(msg):
                return msg.content.startswith(prefix)

            guess = await bot.wait_for_message(timeout=20,
                                               author=message.author,
                                               channel=message.channel,
                                               check=check)
            if guess is None:
                await bot.send_message(
                    message.channel,
                    '```xl\n{} timed out and loses bet of ${}\n```'.format(
                        message.author.name, amount))
                remove_funds(conn, int(message.author.id), amount)
                update_money_lost(conn, int(message.author.id), amount)
                update_jackpot(conn, int(message.server.id), int(amount / 4))
                return
            if guess.content == '{}even'.format(prefix):
                pick = 0
            elif guess.content == '{}odd'.format(prefix):
                pick = 1
            elif guess.content == '{}quit'.format(prefix):
                await bot.send_message(
                    message.channel,
                    '```xl\n{} wins ${}\n```'.format(message.author.name,
                                                     int(amount * multiplier)))
                add_funds(conn, int(message.author.id),
                          int(amount * multiplier))
                update_money_won(conn, int(message.author.id), amount)
                return
            else:
                await bot.send_message(
                    message.channel,
                    '```xl\nTo guess use \'{0}even\' or \'{0}odd\'\n```'.
                    format(prefix))
        else:
            await bot.send_message(
                message.channel, '```xl\n{} loses bet of ${}\n```'.format(
                    message.author.name, amount))
            remove_funds(conn, int(message.author.id), amount)
            update_money_lost(conn, int(message.author.id), amount)
            update_jackpot(conn, int(message.server.id), int(amount / 4))
            return
Example #8
0
async def black_jack(message, bot):
    amount = await validate_play(message, bot)
    if amount < 0:
        return

    conn = create_connection(DATABASE)
    set_player_plays(conn, int(message.author.id), "blackjack")

    prefix = get_prefix(conn, int(message.server.id))[0]
    deck = [1] * 54
    player_turn = 200
    dealer_turn = 200

    score = await blackjack_start(message, bot, deck)
    hand = score[1]
    score = score[0]

    await check_ace(message, bot, hand, score, prefix)

    if score['player_score'] == 21:
        amount *= 2
        add_funds(conn, int(message.author.id), amount)
        update_money_won(conn, int(message.author.id), amount)

    await bot.send_message(
        message.channel,
        '```xl\n\'{0}hit\'  : or :  \'{0}stay\'\n```'.format(prefix))
    while True:

        def check(msg):
            if msg.content.startswith('{}hit'.format(prefix)):
                return msg.content.startswith('{}hit'.format(prefix))
            if msg.content.startswith('{}stay'.format(prefix)):
                return msg.content.startswith('{}stay'.format(prefix))

        hit = await bot.wait_for_message(author=message.author,
                                         check=check,
                                         channel=message.channel)

        if hit is None:
            await bot.send_message(
                message.channel,
                '```xl\n{} timed out and loses bet of ${}\n```'.format(
                    message.author.name, amount))
            remove_funds(conn, int(message.author.id), amount)
            update_money_lost(conn, int(message.author.id), amount)
            update_jackpot(conn, int(message.server.id), int(amount / 4))
            return
        if hit.content == '{}hit'.format(prefix):
            score = await blackjack_hit(message, bot, deck, hand, score,
                                        'player_cards', player_turn)
            player_turn += 100
            hand = score[1]
            score = score[0]

            await check_ace(message, bot, hand, score, prefix)

            if score['player_score'] > 21:
                remove_funds(conn, int(message.author.id), amount)
                update_money_lost(conn, int(message.author.id), amount)
                update_jackpot(conn, int(message.server.id), int(amount / 4))
                await bot.send_message(
                    message.channel,
                    '```xl\n{} busts, and loses ${}\n```'.format(
                        message.author.name, amount))
                return

        if hit.content == '{}stay'.format(prefix):
            break
        else:
            await bot.send_message(
                message.channel,
                '```xl\nPlease choose \'{0}hit\'  : or :  \'{0}stay\'\n```'.
                format(prefix))

    while True:
        if score['dealer_score'] < score['player_score']:
            score = await blackjack_hit(message, bot, deck, hand, score,
                                        'dealer_cards', dealer_turn)
            dealer_turn += 100
            hand = score[1]
            score = score[0]
        elif score['dealer_score'] == score['player_score']:
            await bot.send_message(
                message.channel,
                'Draw, {}: Money back!'.format(message.author.name))
            return
        elif score['dealer_score'] < 22:
            remove_funds(conn, int(message.author.id), amount)
            update_money_lost(conn, int(message.author.id), amount)
            update_jackpot(conn, int(message.server.id), int(amount / 4))
            await bot.send_message(
                message.channel,
                '```xl\n{} you lose ${}!\n```'.format(message.author.name,
                                                      amount))
            return
        elif score['dealer_score'] > 21:
            add_funds(conn, int(message.author.id), amount)
            update_money_won(conn, int(message.author.id), amount)
            await bot.send_message(
                message.channel,
                '```xl\n{} you win ${}!\n```'.format(message.author.name,
                                                     amount))
            return
Example #9
0
async def bot_welcome(server):
    conn = create_connection(DATABASE)
    serverID = int(server.id)
    try:
        serverIcon = 'https://cdn.discordapp.com/icons/' + str(
            serverID) + '/' + server.icon + '.png'
    except TypeError:
        serverIcon = 0

    add_server(conn, serverID, server.name, int(server.owner.id),
               server.owner.name, serverIcon)

    prefix = get_prefix(conn, serverID)[0]

    server = bot.get_server(str(serverID))
    for member in server.members:
        add_user(conn, serverID, int(member.id), member.name)
        add_casino(conn, int(member.id))

    server = bot.get_server(str(serverID))
    for channel in server.channels:
        if str(channel.type) == "text":
            add_channel(conn, serverID, int(channel.id), channel.name)

    conn.commit()
    conn.close()

    welcomeLine1 = "Use {}help to see Doo Bot commands".format(prefix)

    adminBed = discord.Embed(colour=0xFF00FF)
    adminBed.set_author(
        name="Doo Bot",
        icon_url="http://www3.pictures.zimbio.com/mp/OLESKRmZW6Al.jpg")
    adminBed.set_footer(text=" Website coming soon | Github coming soon ")
    adminBed.set_thumbnail(
        url="https://www.mydish.com/filestream.ashx?ID=17612")
    adminBed.add_field(
        name=
        "Thanks for using Doo Bot! Below are some admin commands and configurations.",
        value="Here are some admin commands that only you are able to use")
    adminBed.add_field(
        name="{}prefix".format(prefix),
        value="This changes the prefixes Doo Bot will listen for. "
        "By default the prefix is {}.".format(prefix))
    adminBed.add_field(name="{}addchannels".format(prefix),
                       value="Add channels that Doo Bot will listen too. "
                       "By default, it is all channels.")
    adminBed.add_field(name="{}removechannels".format(prefix),
                       value="Remove channels that Doo Bot will listen too. "
                       "If all channels are removed, Doo Bot will listen"
                       "too all channels.")
    await bot.send_message(server.owner, embed=adminBed)

    welcomeBed = discord.Embed(title="Doo Bot",
                               description="Version 4.0.0",
                               color=0x00FFFF)
    welcomeBed.add_field(name="Thanks for choosing Doo Bot:",
                         value=welcomeLine1)
    welcomeBed.set_footer(text=" Website coming soon | Github coming soon ")
    welcomeBed.set_thumbnail(
        url="http://www3.pictures.zimbio.com/mp/OLESKRmZW6Al.jpg")

    for channel in server.channels:
        if str(channel.type) == 'text':
            await bot.send_message(channel, embed=welcomeBed)
            break