示例#1
0
    async def randxkcd(self, ctx):
        """Displays a random XKCD comic."""

        channel = ctx.message.channel
        author = ctx.message.author
        server = ctx.message.guild

        if not self.canDisplay(server):
            return

        # Must be a comic number
        archiveURL = "http://xkcd.com/archive/"
        archiveHTML = await ComicHelper.getImageHTML(archiveURL)
        newest = int(ComicHelper.getNewestXKCD(archiveHTML))

        # Start a loop to find a comic
        gotComic = False
        tries = 0
        while not gotComic:

            if tries >= 10:
                break

            # Build our url
            date = random.randint(1, newest)
            comicURL = "http://xkcd.com/" + str(date) + "/"

            # now we get the actual comic info
            imageHTML = await ComicHelper.getImageHTML(comicURL)

            if imageHTML:
                gotComic = True

            tries += 1

        if tries >= 10:
            msg = 'Failed to find working link.'
            await channel.send(msg)
            return

        # Got a comic link
        imageURL = ComicHelper.getXKCDImageURL(imageHTML)
        imageDisplayName = ComicHelper.getXKCDImageTitle(imageHTML)
        imageText = ComicHelper.getXKCDImageText(imageHTML)
        title = '{} *({})*'.format(imageDisplayName, date)

        # Download Image
        await Message.Embed(title=title,
                            image=imageURL,
                            url=imageURL,
                            description=imageText,
                            color=ctx.author).send(ctx)
示例#2
0
    async def xkcd(self, ctx, *, date: str = None):
        """Displays the XKCD comic for the passed date (MM-DD-YYYY) or comic number if found."""

        channel = ctx.message.channel
        author = ctx.message.author
        server = ctx.message.guild

        if not self.canDisplay(server):
            return

        if not date:
            # Auto to today's date
            date = dt.datetime.today().strftime("%m-%d-%Y")

        if not self.dateIsValid(date):
            # If it's an int - let's see if it fits
            try:
                date = int(date)
            except:
                msg = 'Usage: `{}xkcd "[date MM-DD-YYYY]"`'.format(ctx.prefix)
                await channel.send(msg)
                return
            # Must be a comic number
            archiveURL = "http://xkcd.com/archive/"
            archiveHTML = await ComicHelper.getImageHTML(archiveURL)
            newest = int(ComicHelper.getNewestXKCD(archiveHTML))
            if int(date) > int(newest) or int(date) < 1:
                msg = "Comic out of range. Must be between 1 and {}".format(
                    newest)
                await channel.send(msg)
                return
            comicURL = "/" + str(date) + "/"
        else:
            # Can't be after this date.
            todayDate = dt.datetime.today().strftime("%m-%d-%Y")
            # Can't be before this date.
            firstDate = "01-01-2006"

            if not self.isDateBetween(date, firstDate, todayDate):
                msg = "Date out of range. Must be between {} and {}".format(
                    firstDate, todayDate)
                await channel.send(msg)
                return
            # Get date in a dict (Month, Day, Year)
            dateDict = self.dateDict(date)
            # Get URL
            archiveURL = "http://xkcd.com/archive/"
            archiveHTML = await ComicHelper.getImageHTML(archiveURL)

            xkcdDate = "{}-{}-{}".format(int(dateDict['Year']),
                                         int(dateDict['Month']),
                                         int(dateDict['Day']))
            comicURL = ComicHelper.getXKCDURL(archiveHTML, xkcdDate)

        if not comicURL:
            msg = 'No comic found for *{}*'.format(date)
            await channel.send(msg)
            return

        comicNumber = comicURL.replace('/', '').strip()
        comicURL = "http://xkcd.com" + comicURL

        # now we get the actual comic info
        imageHTML = await ComicHelper.getImageHTML(comicURL)
        imageURL = ComicHelper.getXKCDImageURL(imageHTML)
        imageText = ComicHelper.getXKCDImageText(imageHTML)
        imageDisplayName = ComicHelper.getXKCDImageTitle(imageHTML)
        title = '{} *({})*'.format(imageDisplayName, comicNumber)
        # Download Image
        await Message.Embed(title=title,
                            image=imageURL,
                            url=imageURL,
                            color=ctx.author,
                            description=imageText).send(ctx)