Esempio n. 1
0
    async def on_command_error(self, ctx, error):
        if isinstance(error, commands.CheckFailure):
            return

        if isinstance(error, commands.errors.CommandNotFound):
            return

        if isinstance(error, commands.CommandOnCooldown):
            embed = discord.Embed(
                title="⚠ 쿨타임 중!",
                description="{}초 뒤에 재시도하세요.".format(int(error.retry_after)),
                color=0xD8EF56,
            )
            return await ctx.send(embed=embed)

        if isinstance(error, commands.CommandInvokeError):
            original = error.original
            if isinstance(original, discord.Forbidden):
                embed = Embed.warn(
                    "주의",
                    "봇의 권한이 부족하여 {} 명령어를 수행할 수 없어요.".format(ctx.command.name),
                )
                return await ctx.send(embed=embed)

        if (
            isinstance(error, commands.BadArgument)
            or isinstance(error, commands.BadUnionArgument)
            or isinstance(error, commands.MissingRequiredArgument)
        ):
            name = str(ctx.command)
            try:
                embed = Embed.warn(
                    "주의",
                    "잘못된 형식으로 명령어를 사용했어요. \n올바른 사용 : `봇 {} {}`".format(
                        name, self.argument_data[name]
                    ),
                )
                return await ctx.send(embed=embed)
            except KeyError:
                embed = Embed.warn("주의", "잘못된 형식으로 명령어를 사용했어요.")
                return await ctx.send(embed=embed)
        embed = Embed.error(
            "이런!",
            "{} 명령어 수행 중 핸들링 되지 않은 오류가 발생했어요!\n```{}```\n지속적인 문제 발생 시 `봇 문의` 명령어로 문의해주세요.".format(
                ctx.command.name, error
            ),
        )
        await ctx.send(embed=embed)
        print(
            "Ignoring exception in command {}".format(ctx.command),
            file=sys.stderr,
        )
        traceback.print_exception(
            type(error), error, error.__traceback__, file=sys.stderr
        )
        self.logger.warning(
            "Error {} occured in command {}".format(
                type(error), ctx.command.name
            )
        )
Esempio n. 2
0
    async def fine_dust(self, ctx, *, args=None):
        params = {
            "serviceKey": CONFIG.MISAE,
            "numOfRows": 1,
            "pageSize": 1,
            "pageNo": 1,
            "startPage": 1,
            "itemCode": "PM10",
            "dataGubun": "HOUR",
        }

        misae_c = await HTTP.get(
            url=
            "http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getCtprvnMesureLIst",
            params=params,
        )
        soup = BeautifulSoup(misae_c, "lxml-xml")
        misae_sido = self._handle_pm(soup)

        params["itemCode"] = "PM25"
        chomisae_c = await HTTP.get(
            url=
            "http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getCtprvnMesureLIst",
            params=params,
        )
        soup = BeautifulSoup(chomisae_c, "lxml-xml")
        chomisae_sido = self._handle_pm(soup)

        embed = discord.Embed(
            title="💨 미세먼지",
            desciption="<미세먼지>\n<초미세먼지> 로 알려드려요.",
            color=0x1DC73A,
        )
        embed.set_footer(text=f"에어코리아 | {misae_sido['date']}")

        if args is None:
            for i in misae_sido["sido"].keys():
                embed.add_field(
                    name=i,
                    value=
                    f"{misae_sido['sido'][i]}㎍/m³ |  {self._checkpm10(misae_sido['sido'][i])}\n{chomisae_sido['sido'][i]}㎍/m³ |  {self._checkpm25(chomisae_sido['sido'][i])}",
                    inline=True,
                )
            await ctx.send(embed=embed)
        else:
            if args in misae_sido["sido"].keys():
                embed.add_field(
                    name=args,
                    value=
                    f"{misae_sido['sido'][args]}㎍/m³ |  {self._checkpm10(misae_sido['sido'][args])}\n{chomisae_sido['sido'][args]}㎍/m³ |  {self._checkpm25(chomisae_sido['sido'][args])}",
                    inline=True,
                )
                await ctx.send(embed=embed)
            else:
                embed = Embed.warn(
                    title="주의",
                    description=
                    "선택하신 지역 이름을 찾을 수 없어요.\n`봇 미세먼지` 로 전체 지역을 볼 수 있어요.",
                )
                await ctx.send(embed=embed)
Esempio n. 3
0
 async def join(self, ctx):
     if not ctx.message.author.voice:
         embed = Embed.warn(title="먼저 음성 채널에 들어와주세요!")
         return await ctx.send(embed=embed)
     await self.bot.Wonstein.connect(ctx.message.author.voice.channel)
     embed = Embed.default(
         title=f"성공적으로 {ctx.message.author.voice.channel}에 연결했습니다.")
     await ctx.send(embed=embed)
Esempio n. 4
0
    async def cog_check(self, ctx):
        if ctx.guild is None:
            return None

        if ctx.author.guild_permissions.administrator:
            return True

        else:
            embed = Embed.warn("주의", "이 명령어는 서버에 **관리자 권한**이 있어야 사용할 수 있어요!")
            await ctx.send(embed=embed)
Esempio n. 5
0
 async def delete_message(self, ctx, amount: typing.Union[int]):
     if amount > 0 and amount <= 100:
         deleted_message = await ctx.channel.purge(limit=amount)
         embed = Embed.check(
             title="메시지 삭제",
             description="%s개의 메시지를 지웠어요." % len(deleted_message),
         )
         await ctx.send(embed=embed, delete_after=3)
     else:
         embed = Embed.warn(title="오류 발생",
                            description="지우는 메시지의 개수는 1개~100개여야 해요.")
         await ctx.send(embed=embed, delete_after=3)
Esempio n. 6
0
    async def user_info(self,
                        ctx,
                        *,
                        user: Union[discord.Member, int, str] = None):
        try:
            if user is None:
                user = ctx.author
            elif isinstance(user, int):
                user = ctx.guild.get_member(user)
            elif isinstance(user, str):
                user = ctx.guild.get_member_named(user)
                if user is None:
                    raise commands.BadArgument()
            now = datetime.datetime.now()
            created_at = user.created_at + datetime.timedelta(hours=9)
            dap_created = now - created_at
            created_at = created_at.strftime("%Y-%m-%d %H:%M:%S")

            joined_at = user.joined_at + datetime.timedelta(hours=9)
            dap_joined = now - joined_at
            joined_at = joined_at.strftime("%Y-%m-%d %H:%M:%S")

            avatar_url = user.avatar_url

            embed = discord.Embed(
                title="👥 유저 정보",
                description="선택하신 유저에 대한 정보를 불러왔어요.   ​",
                color=0x1DC73A,
            )
            embed.add_field(name="이름", value=user.name, inline=False)
            embed.add_field(name="유저 ID", value=user.id, inline=False)
            embed.add_field(
                name="계정 생성일",
                value=f"{created_at}\n({dap_created.days}일 전)",
                inline=True,
            )
            embed.add_field(
                name="서버 가입일",
                value=f"{joined_at}\n({dap_joined.days}일 전)",
                inline=True,
            )
            embed.set_thumbnail(url=avatar_url)
            await ctx.send(embed=embed)
        except:
            embed = Embed.warn(
                "주의",
                "`봇 유저정보 (멘션 or ID or 이름)` 으로 사용해주세요.\n유저를 불러오지 못했어요.",
            )
            embed.set_footer(text="이 서버에 있는 유저가 아니면 검색이 불가해요.")
            await ctx.send(embed=embed)
Esempio n. 7
0
    async def set_slowmode(self, ctx, seconds: typing.Union[int]):
        if seconds > 0 and seconds < 21601:
            await ctx.channel.edit(slowmode_delay=seconds)
            embed = discord.Embed(
                title="🐌 슬로우모드",
                description="{}의 슬로우모드를 {}초로 설정했어요.".format(
                    ctx.channel.mention, seconds),
                color=0x1DC73A,
            )
            embed.set_footer(text="슬로우모드 해제는 `봇 슬로우해제`를 사용하세요.")
            await ctx.send(embed=embed)

        else:
            embed = Embed.warn("주의", "슬로우모드는 1~21600초 사이로만 설정할 수 있어요.")
            await ctx.send(embed=embed)
Esempio n. 8
0
 async def play(self, ctx, *, query: str):
     Audio = self.bot.Wonstein.getVC(ctx.guild.id)
     await Audio.setAutoplay(False)
     if not Audio:
         embed = Embed.warn(title="먼저 `!join`을 입력해주세요.")
         return await ctx.send(embed=embed)
     Data = await Audio.loadSource(query)
     if isinstance(Data, list):
         Data = Data[0]
     Source, Index = Data["data"], Data["index"] + 1
     self.logger.info(Source)
     if Index == 1:
         await ctx.send(f'> 🎵  {Source["title"]}이 곧 재생되어요!')
     else:
         await ctx.send(f'> 🎵  {Source["title"]}이 대기열 **{Index}**번에 추가되었어요!'
                        )
Esempio n. 9
0
    async def on_command_error(self, ctx, error):
        if isinstance(error, commands.CheckFailure):
            return
        elif isinstance(error, commands.CommandNotFound):
            return

        elif isinstance(error, commands.CommandOnCooldown):
            embed = Embed.warn(
                title="⚠ 쿨타임 중!",
                description=f"{int(error.retry_after)}초 뒤에 재시도하세요.",
            )
            await ctx.send(embed=embed)

        embed = Embed.error(
            "이런!",
            "{} 명령어 수행 중 핸들링 되지 않은 오류가 발생했어요!\n```{}```\n지속적인 문제 발생 시 `봇 문의` 명령어로 문의해주세요."
            .format(ctx.command.name, error),
        )
        await ctx.send(embed=embed)
Esempio n. 10
0
    async def repeat(self, ctx, *, args):
        if args == "":
            embed = Embed.warn(
                title="주의",
                description="봇 따라해 `할말`로 입력해주세요!\n아무 값도 받지 못했어요.",
            )
            await ctx.channel.send(embed=embed)
            return

        if "@everyone" in args or "@here" in args:
            embed = Embed.error(
                title="경고",
                description=
                "`@everyone`이나 `@here`은 다른 사용자에게 피해를 줄 수 있어요.\n사용을 제한할께요!",
            )
            embed.set_footer(text=ctx.author, icon_url=ctx.author.avatar_url)
            await ctx.channel.send(embed=embed)
        else:
            try:
                await ctx.delete()
            except:
                pass
            await ctx.channel.send(args)
Esempio n. 11
0
    async def profile_emoji(self, ctx, *, args):
        try:
            memberid = args.lstrip()
            memberid = memberid.replace("<@", "")
            memberid = memberid.replace("!", "")
            memberid = memberid.replace(">", "")
            if memberid == "":
                memberid = ctx.author.id
                member = self.bot.get_user(memberid)
                a = member.avatar_url
                if a == "":
                    a = member.default_avatar_url
                embed = discord.Embed(title="🖼️ 프로필 사진",
                                      description="",
                                      color=0x62BF42)

                embed.set_image(url=a)
                await ctx.send(embed=embed)

            else:
                memberid = int(memberid)

                member = self.bot.get_user(memberid)
                a = member.avatar_url
                if a == "":
                    a = member.default_avatar_url
                embed = discord.Embed(title="🖼️ 프로필 사진",
                                      description="",
                                      color=0x62BF42)

                embed.set_image(url=a)
                await ctx.send(embed=embed)

        except:
            embed = Embed.warn("주의",
                               "`봇 프사 <멘션 or ID>` 로 사용해주세요. 유저를 불러오지 못했어요.")
            await ctx.send(embed=embed)
Esempio n. 12
0
 async def is_gaming(self, ctx):
     if ctx.author.id in self.gaming_list:
         embed = Embed.warn("주의", "게임을 진행중이셔서 해당 명령어를 실행할 수 없어요.")
         await ctx.send(embed=embed)
         return True
Esempio n. 13
0
    async def user_info(self, ctx, *, args):
        try:
            a = args.lstrip()
            if a == "":
                a = ctx.author.id
            try:
                a = a.replace("<", "")
                a = a.replace("@", "")
                a = a.replace("!", "")
                a = a.replace(">", "")
                a = int(a)
            except:
                pass
            date = "%s (UTC)" % ctx.guild.get_member(a).created_at
            try:
                game = ctx.guild.get_member(a).activity
                if game.type == discord.ActivityType.listening:
                    game = game.title + " - " + ", ".join(game.artists)
                else:
                    game = game.name
            except:
                game = "플레이 중인 게임이 없습니다."
            if game is None:
                game = "플레이 중인 게임이 없습니다."
            member = ctx.guild.get_member(a)
            status = ctx.guild.get_member(a).status
            joined = str(ctx.guild.get_member(a).joined_at)
            if status == discord.Status.online:
                status = "온라인"
            elif status == discord.Status.idle:
                status = "자리비움"
            elif status == discord.Status.dnd:
                status = "다른 용무 중"
            elif status == discord.Status.offline:
                status = "오프라인"
            else:
                status = "알 수 없음."

            asdf = member.avatar_url
            if asdf == "":
                asdf = member.default_avatar_url

            embed = discord.Embed(
                title="ℹ️ 유저 정보",
                description="선택하신 유저에 대한 정보를 불러왔습니다.\n\n",
                color=0x1DC73A,
            )
            embed.add_field(name="이름",
                            value=ctx.guild.get_member(a).name,
                            inline=False)
            embed.add_field(name="유저 ID",
                            value=ctx.guild.get_member(a).id,
                            inline=True)
            embed.add_field(name="계정 생성일", value=date, inline=True)
            embed.add_field(name="서버 가입일",
                            value=joined + " (UTC)",
                            inline=False)

            embed.add_field(name="플레이 중", value=game, inline=True)
            embed.add_field(name="상태", value=status, inline=False)

            insignia = await self.get_insignia(a)
            embed.set_thumbnail(url=asdf)
            await ctx.send(embed=embed)
            if insignia is not None:
                embed1 = discord.Embed(title=" ")
                embed1.set_thumbnail(url=insignia)
                await ctx.send(embed=embed1)  # <:mut:664836978520621076>
        except:
            embed = Embed.warn("주의",
                               "`봇 유저정보 <멘션 or ID>` 로 사용해주세요. 유저를 불러오지 못했어요.")
            embed.set_footer(text="이 서버에 있는 유저가 아니면 불러올 수 없어요!")
            await ctx.send(embed=embed)
Esempio n. 14
0
 async def cog_check(self, ctx):
     if ctx.author.id in self.owner_list:
         return True
     else:
         embed = Embed.warn("주의", "이 명령어는 봇 오너만 사용이 가능해요.")
         await ctx.send(embed=embed)