コード例 #1
0
ファイル: weather.py プロジェクト: fixator10/Discord-Self-Bot
    async def weather(self, ctx, place: str = None):
        """Shows weather in provided place"""
        if place is None:
            place = config["hometown"]
        g = geocoder.google(place)
        if len(g.latlng) == 0:
            await self.bot.say("Cannot find a place `" + place + "`")
            return
        forecast = forecastio.load_forecast(self.apikey,
                                            g.latlng[0],
                                            g.latlng[1],
                                            units="si")
        by_hour = forecast.currently()
        place = g.city_long + " | " + xstr(g.country_long)

        content = "Weather in " + place \
                  + ":\n" + by_hour.summary + "\n" + str(by_hour.temperature) + \
                  "˚C" + "\n" + dictionary.get(xstr(by_hour.icon))
        em = discord.Embed(description=content,
                           colour=0xff0000,
                           timestamp=by_hour.time)
        if Checks.embeds_allowed(ctx.message):
            await self.bot.say(embed=em)
        else:
            await self.bot.say(content)
コード例 #2
0
ファイル: weather.py プロジェクト: fixator10/Discord-Self-Bot
    async def forecast(self, ctx, place: str = None):
        """Shows 7 days forecast for provided place"""
        if place is None:
            place = config["hometown"]
        g = geocoder.google(place)
        if len(g.latlng) == 0:
            await self.bot.say("Cannot find a place `" + place + "`")
            return
        forecast = forecastio.load_forecast(self.apikey,
                                            g.latlng[0],
                                            g.latlng[1],
                                            units="si")
        by_hour = forecast.daily()
        place = g.city_long + " | " + xstr(g.country_long)

        content = "Weather in " + place + ":\n"
        for i in range(0, 6):
            content = content + \
                      "__***" + by_hour.data[i].time.strftime("%d/%m") + ":***__       " + \
                      xstr(by_hour.data[i].temperatureMin) + " - " + \
                      xstr(by_hour.data[i].temperatureMax) + "˚C       " \
                      + dictionary.get(xstr(by_hour.data[i].icon)) + "\n"
        em = discord.Embed(description=content,
                           colour=0xff0000,
                           timestamp=datetime.datetime.now())
        if Checks.embeds_allowed(ctx.message):
            await self.bot.say(embed=em)
        else:
            await self.bot.say(content)
コード例 #3
0
 async def channel(self, ctx, *, channel: discord.Channel):
     """Get info about channel"""
     changed_roles = []
     for elem in channel.changed_roles:
         changed_roles.append(elem.name)
     em = discord.Embed(title=channel.name, description=channel.topic, colour=random.randint(0, 16777215))
     em.add_field(name="ID", value=channel.id)
     em.add_field(name="Type", value=str(channel.type).replace("voice", "🔈").replace("text", "📰"))
     em.add_field(name="Has existed since", value=channel.created_at.strftime('%d.%m.%Y %H:%M:%S %Z'))
     em.add_field(name="Position", value=channel.position)
     em.add_field(name="Changed roles permissions",
                  value="\n".join([str(x) for x in changed_roles]) or "`Not set`")
     em.add_field(name="Mention", value=channel.mention + "\n`" + channel.mention + "`")
     if Checks.embeds_allowed(ctx.message):
         await self.bot.say(embed=em)
     else:
         await self.bot.say("```\n" +
                            "Name: " + channel.name +
                            "\nTopic: " + channel.topic +
                            "\nID: " + channel.id +
                            "\nType: " + channel.type.name +
                            "\nHas existed since: " + channel.created_at.strftime('%d.%m.%Y %H:%M:%S %Z') +
                            "\nPosition: " + str(channel.position) +
                            "\nChanged roles permissions: " + "\n".join([str(x) for x in changed_roles]) +
                            "\nMention: " + channel.mention +
                            "```")
コード例 #4
0
 async def role(self, ctx, *, role: discord.Role):
     """Get info about role"""
     em = discord.Embed(title=role.name, colour=role.colour)
     em.add_field(name="ID", value=role.id)
     em.add_field(name="Perms",
                  value="[" + str(role.permissions.value) + "](https://discordapi.com/permissions.html#" + str(
                      role.permissions.value) + ")")
     em.add_field(name="Has existed since", value=role.created_at.strftime('%d.%m.%Y %H:%M:%S %Z'))
     em.add_field(name="Hoist", value=str(role.hoist)
                  .replace("True", "✔")
                  .replace("False", "❌"))
     em.add_field(name="Position", value=role.position)
     em.add_field(name="Color", value=role.colour)
     em.add_field(name="Managed", value=str(role.managed).replace("True", "✔").replace("False", "❌"))
     em.add_field(name="Mentionable", value=str(role.mentionable).replace("True", "✔").replace("False", "❌"))
     em.add_field(name="Mention", value=role.mention + "\n`" + role.mention + "`")
     em.set_thumbnail(url="https://xenforo.com/community/rgba.php?r=" + str(role.colour.r) + "&g=" + str(
         role.colour.g) + "&b=" + str(role.colour.b) + "&a=255")
     if Checks.embeds_allowed(ctx.message):
         await self.bot.say(embed=em)
     else:
         await self.bot.say("```\n" +
                            "ID: " + role.id +
                            "\nPerms: " + str(role.permissions.value) +
                            "\nHas existed since: " + role.created_at.strftime('%d.%m.%Y %H:%M:%S %Z') +
                            "\nHoist: " + str(role.hoist).replace("True", "✔").replace("False", "❌") +
                            "\nPosition: " + str(role.position) +
                            "\nColor: " + str(cc.rgb_to_hex(cc.get_rgb_from_int(role.colour.value))) +
                            "\nManaged: " + str(role.managed).replace("True", "✔").replace("False", "❌") +
                            "\nMentionable: " + str(role.mentionable).replace("True", "✔").replace("False", "❌") +
                            "\nMention: " + str(role.mention) +
                            "```")
コード例 #5
0
 async def channels(self, ctx, server: str = None):
     """Get all channels on server"""
     if server is None:
         server = ctx.message.server
     else:
         server = discord.utils.get(self.bot.servers, id=server)
     if server is None:
         await self.bot.say("Failed to get server with provided ID")
         return
     vchans = []
     tchans = []
     for elem in server.channels:
         if str(elem.type) == "voice":
             vchans.append(elem.name)
         elif str(elem.type) == "text":
             tchans.append(elem.name)
     em = discord.Embed(title="Channels list", colour=random.randint(0, 16777215))
     em.add_field(name="Text channels:", value="\n".join([str(x) for x in tchans]), inline=False)
     em.add_field(name="Voice channels:", value="\n".join([str(x) for x in vchans]), inline=False)
     em.set_footer(text="Total count of channels: " + str(len(server.channels)) +
                        " | Text Channels: " + str(len(tchans)) + " | Voice Channels: " + str(len(vchans)))
     if Checks.embeds_allowed(ctx.message):
         await self.bot.say(embed=em)
     else:
         await self.bot.say("**Text channels:**\n```" + "\n".join([str(x) for x in tchans]) +
                            "```**Voice channels:**\n```" + "\n".join([str(x) for x in vchans]) +
                            "```\nTotal count: " + str(len(server.channels)) +
                            " | Text Channels: " + str(len(tchans)) +
                            " | Voice Channels: " + str(len(vchans)))
コード例 #6
0
ファイル: generic.py プロジェクト: fixator10/Discord-Self-Bot
 async def quote(self, ctx, messageid: str, *, response: str = None):
     """Quote an message by id"""
     message = discord.utils.get(self.bot.messages, id=messageid)
     if message is None:
         await self.bot.say("Failed to get message with id `" + messageid +
                            "`")
     else:
         if message.channel.is_private:
             colour = discord.Colour.default()
             name = message.author.name
         else:
             colour = message.author.colour
             name = message.author.nick or message.author.name
         em = discord.Embed(description=message.content,
                            colour=colour,
                            timestamp=message.timestamp)
         em.set_author(name=name, icon_url=message.author.avatar_url)
         em.set_footer(text=message.author.name + "#" +
                       message.author.discriminator)
         attachment = discord.utils.get(message.attachments)
         if attachment is not None:
             attachment = dict(attachment)
             em.set_image(url=attachment['url'])
         if Checks.embeds_allowed(ctx.message):
             await self.bot.say(response, embed=em)
         else:
             await self.bot.say((response or "") + "\n\n**Quote from " +
                                message.author.name + "#" +
                                message.author.discriminator +
                                ":**\n```\n" + message.content + "```")
コード例 #7
0
ファイル: generic.py プロジェクト: fixator10/Discord-Self-Bot
 async def emoji(self, ctx, *, emoji: discord.Emoji):
     """Get info about emoji
     
     Works only with nonstandard emojis (non-unicode)"""
     allowed_roles = []
     for elem in emoji.roles:
         allowed_roles.append(elem.name)
     em = discord.Embed(title=emoji.name,
                        colour=random.randint(0, 16777215))
     em.add_field(name="ID", value=emoji.id)
     em.add_field(name="Has existed since",
                  value=emoji.created_at.strftime('%d.%m.%Y %H:%M:%S %Z'))
     em.add_field(name="\":\" required",
                  value=str(emoji.require_colons).replace("True",
                                                          "✔").replace(
                                                              "False", "❌"))
     em.add_field(name="Managed",
                  value=str(emoji.managed).replace("True", "✔").replace(
                      "False", "❌"))
     em.add_field(name="Server", value=emoji.server)
     if len(allowed_roles) > 0:
         em.add_field(name="Roles",
                      value="\n".join([str(x) for x in allowed_roles]))
     em.set_image(url=emoji.url)
     if Checks.embeds_allowed(ctx.message):
         await self.bot.say(embed=em)
     else:
         await self.bot.say(
             "```\n" + "ID: " + emoji.id + "\nHas existed since: " +
             emoji.created_at.strftime('%d.%m.%Y %H:%M:%S %Z') +
             "\n\":\" required: " + str(emoji.require_colons).replace(
                 "True", "✔").replace("False", "❌") + "\nManaged: " +
             str(emoji.managed).replace("True", "✔").replace("False", "❌") +
             "\nServer: " + str(emoji.server) + "\nRoles: " +
             "\n".join([str(x) for x in allowed_roles]) + "```" + emoji.url)
コード例 #8
0
ファイル: generic.py プロジェクト: fixator10/Discord-Self-Bot
 async def embed(self, ctx, *, message: str):
     """Says something via embed
     Useful for using emojis on any server without Nitro
     
     Inline code markdown at start and at end of message will be removed"""
     if not Checks.embeds_allowed(ctx.message):
         await self.bot.say(
             "Not allowed to send embeds here. Lack `Embed Links` permission"
         )
         return
     message = re.sub(r'^\s*(`\s*)?|(\s*`)?\s*$', '', message)
     if ctx.message.server:
         em_color = ctx.message.author.colour
     else:
         em_color = discord.Colour.default()
     em = discord.Embed(description=message, colour=em_color)
     await self.bot.say(embed=em)
コード例 #9
0
 async def roles(self, ctx, server: str = None):
     """Get all roles on server"""
     if server is None:
         server = ctx.message.server
     else:
         server = discord.utils.get(self.bot.servers, id=server)
     if server is None:
         await self.bot.say("Failed to get server with provided ID")
         return
     roles = []
     for elem in server.role_hierarchy:
         roles.append(elem.name)
     em = discord.Embed(title="List of roles", description="\n".join([str(x) for x in roles]),
                        colour=random.randint(0, 16777215))
     em.set_footer(text="Total count of roles: " + str(len(server.roles)))
     if Checks.embeds_allowed(ctx.message):
         await self.bot.say(embed=em)
     else:
         await self.bot.say("**List of roles:**\n```" + "\n".join([str(x) for x in roles]) +
                            "```\nTotal count: " + str(len(server.roles)))
コード例 #10
0
ファイル: generic.py プロジェクト: fixator10/Discord-Self-Bot
    async def signed(self, ctx, *, message: str = None):
        """Says something with embedded signature

        Text changeable in config.json"""
        if not Checks.embeds_allowed(ctx.message):
            await self.bot.say(
                "Not allowed to send embeds here. Lack `Embed Links` permission"
            )
            return
        em = discord.Embed(title=config["signature_title"],
                           description=config["signature_desc"],
                           url=config["signature_url"],
                           colour=config["signature_colour"],
                           timestamp=ctx.message.timestamp)
        em.add_field(name=config["signature_field_name"],
                     value=config["signature_field_content"],
                     inline=False)
        em.set_footer(text=ctx.message.author.nick or ctx.message.author.name,
                      icon_url=ctx.message.author.avatar_url)
        await self.bot.say(message, embed=em)
コード例 #11
0
 async def info(self, ctx, member: discord.Member = None):
     """Information on a user"""
     if member is None:
         member = ctx.message.author
     roles = [x.name for x in member.roles if x.name != "@everyone"] # from Red-DiscordBot by TwentySix
     if roles:
         roles = sorted(roles, key=[x.name for x in ctx.message.server.role_hierarchy
                                    if x.name != "@everyone"].index)
         roles = "\n".join(roles)
     else:
         roles = "`None`"
     em = discord.Embed(title=member.nick, colour=member.colour)
     em.add_field(name="Name", value=member.name)
     em.add_field(name="Joined server", value=member.joined_at.strftime('%d.%m.%Y %H:%M:%S %Z'))
     em.add_field(name="ID", value=member.id)
     em.add_field(name="Has existed since", value=member.created_at.strftime('%d.%m.%Y %H:%M:%S %Z'))
     em.add_field(name="Color", value=member.colour)
     em.add_field(name="Bot?", value=str(member.bot).replace("True", "✔").replace("False", "❌"))
     em.add_field(name="Server perms", value="[" + str(
         member.server_permissions.value) + "](https://discordapi.com/permissions.html#" + str(
         member.server_permissions.value) + ")")
     em.add_field(name="Roles", value=roles, inline=False)
     em.set_image(url=member.avatar_url)
     em.set_thumbnail(url="https://xenforo.com/community/rgba.php?r=" + str(member.colour.r) + "&g=" + str(
         member.colour.g) + "&b=" + str(member.colour.b) + "&a=255")
     if Checks.embeds_allowed(ctx.message):
         await self.bot.say(embed=em)
     else:
         await self.bot.say("```\n" +
                            "Name: " + member.name +
                            "\nJoined server: " + member.joined_at.strftime('%d.%m.%Y %H:%M:%S %Z') +
                            "\nID: " + member.id +
                            "\nHas existed since: " + member.created_at.strftime('%d.%m.%Y %H:%M:%S %Z') +
                            "\nColor: " + str(member.color) +
                            "\nBot?: " + str(member.bot).replace("True", "✔").replace("False", "❌") +
                            "\nServer perms: " + str(member.server_permissions.value) +
                            "\nRoles: " + roles +
                            "```\n" +
                            member.avatar_url)
コード例 #12
0
ファイル: generic.py プロジェクト: fixator10/Discord-Self-Bot
 async def color(self, ctx, color: str):
     """Shows some info about provided HEX color"""
     pattern = re.compile("^#([A-Fa-f0-9]{6})$")
     if pattern.match(color):
         colorrgb = cc.hex_to_rgb(color)
         colorint = cc.get_int_from_rgb(colorrgb)
         colorhsv = colorsys.rgb_to_hsv(colorrgb[0], colorrgb[1],
                                        colorrgb[2])
         colorhls = colorsys.rgb_to_hls(colorrgb[0], colorrgb[1],
                                        colorrgb[2])
         coloryiq = colorsys.rgb_to_yiq(colorrgb[0], colorrgb[1],
                                        colorrgb[2])
         colorcmyk = cc.rgb_to_cmyk(colorrgb[0], colorrgb[1], colorrgb[2])
         em = discord.Embed(
             title=str(color),
             description="Provided HEX: " + color + "\nRGB: " +
             str(colorrgb) + "\nCMYK: " + str(colorcmyk) + "\nHSV: " +
             str(colorhsv) + "\nHLS: " + str(colorhls) + "\nYIQ: " +
             str(coloryiq) + "\nint: " + str(colorint),
             url='http://www.colorpicker.com/' + str(color.lstrip('#')),
             colour=colorint,
             timestamp=ctx.message.timestamp)
         em.set_thumbnail(url="https://xenforo.com/community/rgba.php?r=" +
                          str(colorrgb[0]) + "&g=" + str(colorrgb[1]) +
                          "&b=" + str(colorrgb[2]) + "&a=255")
         if Checks.embeds_allowed(ctx.message):
             await self.bot.say(embed=em)
         else:
             await self.bot.say("```\n" + "Provided HEX: " + color +
                                "\nRGB: " + str(colorrgb) + "\nCMYK: " +
                                str(colorcmyk) + "\nHSV: " + str(colorhsv) +
                                "\nHLS: " + str(colorhls) + "\nYIQ: " +
                                str(coloryiq) + "\nint: " + str(colorint) +
                                "```")
     else:
         await self.bot.say(
             "Looks like the `{}`, that you provided is not color HEX\nOr it is too small/too big.\nExample of "
             "acceptable color HEX: `#1A2B3C`".format(color))
コード例 #13
0
 async def serverinfo(self, ctx, server: str = None):
     """Shows server information"""
     if server is None:
         server = ctx.message.server
     else:
         server = self.bot.get_server(server)
     if server is None:
         await self.bot.say("Failed to get server with provided ID")
         return
     afk = server.afk_timeout / 60
     vip_regs = str("VIP_REGIONS" in server.features).replace("True", "✔").replace("False", "❌")
     van_url = str("VANITY_URL" in server.features).replace("True", "✔").replace("False", "❌")
     inv_splash = "INVITE_SPLASH" in server.features
     em = discord.Embed(title="Server info", colour=server.owner.colour)
     em.add_field(name="Name", value=server.name)
     em.add_field(name="Server ID", value=server.id)
     em.add_field(name="Region", value=server.region)
     em.add_field(name="Existed since", value=server.created_at.strftime('%d.%m.%Y %H:%M:%S %Z'))
     em.add_field(name="Owner", value=server.owner)
     em.add_field(name="AFK Timeout and Channel", value=str(afk) + " min in " + str(server.afk_channel))
     em.add_field(name="Verification level",
                  value=str(server.verification_level)
                  .replace("none", "None")
                  .replace("low", "Low")
                  .replace("medium", "Medium")
                  .replace("high", "(╯°□°)╯︵ ┻━┻"))
     em.add_field(name="2FA admins", value=str(server.mfa_level).replace("0", "❌").replace("1", "✔"))
     em.add_field(name="Member Count", value=server.member_count)
     em.add_field(name="Role Count", value=str(len(server.roles)))
     em.add_field(name="Channel Count", value=str(len(server.channels)))
     em.add_field(name="VIP Voice Regions", value=vip_regs)
     em.add_field(name="Vanity URL", value=van_url)
     if not inv_splash:
         em.add_field(name="Invite Splash", value="❌")
     elif server.splash_url == "":
         em.add_field(name="Invite Splash", value="✔")
     else:
         em.add_field(name="Invite Splash", value="✔ [🔗](" + server.splash_url + ")")
     em.set_image(url=server.icon_url)
     if Checks.embeds_allowed(ctx.message):
         await self.bot.say(embed=em)
     else:
         await self.bot.say("```\n" +
                            "Name: " + server.name +
                            "\nServer ID: " + server.id +
                            "\nRegion: " + str(server.region) +
                            "\nExisted since: " + server.created_at.strftime('%d.%m.%Y %H:%M:%S %Z') +
                            "\nOwner: " + str(server.owner) +
                            "\nAFK timeout and Channel: " + str(afk) + " min in " + str(server.afk_channel) +
                            "\nVerification level: " +
                            str(server.verification_level).replace("none", "None").replace("low", "Low")
                            .replace("medium", "Medium").replace("high", "(╯°□°)╯︵ ┻━┻") +
                            "\n2FA admins: " + str(server.mfa_level).replace("0", "❌").replace("1", "✔") +
                            "\nMember Count: " + str(server.member_count) +
                            "\nRole Count: " + str(len(server.roles)) +
                            "\nChannel Count: " + str(len(server.channels)) +
                            "\nVIP Voice Regions: " + vip_regs +
                            "\nVanity URL: " + van_url +
                            "\nInvite Splash: " + str(inv_splash).replace("True", "✔").replace("False", "❌") +
                            "\nInvite Splash URL: " + server.splash_url +
                            "```\n" +
                            server.icon_url)