파이톤으로 너의 첫 번째 디스코트 로봇을 만들어라!

안녕하세요.


이것은 내가 DEV 포럼에서 쓴 두 번째 박문이다.
초보자로서 불협화음 로봇을 쉽게 만드는 방법을 발견하지 못했기 때문에 이 글을 올리기로 했습니다.이것은 여러 차례의 시도와 오류다.

선결 조건

  • 기본 파이톤 지식
  • API의 작동 원리 이해
  • Discord 및 Discord 개발자 계정이 있어야 합니다.
  • 우리 머리를 찔러 넣자!


    먼저 Discord API를 준비합니다.

    불협화음과 그것의 API


    여기서 bot 사용자와 Discord API를 구성합니다.
    시작하려면 Discord 개발자 포털을 방문하십시오.

    그랬을 거예요.
    다음은 왼쪽 메뉴의 프로그램 부분으로 이동합니다.

    우리는 이곳에서 새로운 응용 프로그램을 제작할 것이다.
    응용 프로그램 계기판은 이렇게 해야 한다.
    강조 표시된 새 응용 프로그램 버튼을 클릭합니다.
    이렇게 하면 다음과 같은 대화상자가 열립니다.
    당신의 로봇 이름을 입력하세요.
    이제 응용 프로그램 대시보드가 다음 페이지로 리디렉션됩니다.
    이것은 응용 프로그램 제어 페이지입니다.
    완성되면 왼쪽 메뉴 아래의 로봇 옵션으로 가서 하이라이트에 표시된 로봇 옵션 추가를 눌러주세요.
    로봇을 추가하라는 대화 상자가 나타납니다.

    로봇 페이지로 안내,
    여기, 당신은 당신의 로봇에 멋진 pfp를 추가할 수 있습니다!
    여기서 당신은 '기호화폐' 라는 것을 알게 될 것이다. 누구와도 공유하지 마라. 그것은 남용될 수 있다.이 토큰은 API 키와 유사합니다.
    우리는 이것이 필요할 것이다. 왜냐하면 우리는 곧 인코딩을 시작하기 때문이다.

    실제 코드


    우리의 디렉토리는 다음과 같아야 합니다.
    이제 엔v 파일이 무엇인지 설명해 드릴게요. 보통 환경 변수를 저장하는 데 사용됩니다.여기서 Discord API'Token'을 저장하는 데 사용할 것입니다.
    다음은 env 파일을 작성하는 방법입니다. 먼저 수첩에 다음과 같은 내용을 기입하십시오.
    현재 확장자를 변경해서 이 파일을 env 파일로 저장하면 시작할 수 있습니다.

    로봇 범위


    여기서 우리는 우리가 원하는 로봇이 무엇을 하는지 처리할 것이다. 이것은 이런 상황에서 적당하다.이 강좌에서 간단한 금지 명령, Kick 명령,Fetch user avatar 명령은 충분할 것입니다.
    Discord API에는 두 가지 사용자 클래스가 있습니다.
  • 기계인간
  • 클라이언트 클래스
  • bot 클래스가client 클래스보다 더 통용되는 것을 주의하십시오. 우리는 이 강좌에서bot 클래스를 사용할 것입니다.
    우리가bot을 작성하고 있기 때문에, 이것은 여러 실례에서 실행되어야 한다. 예를 들어bot이 여러 서버에 있으면, 여러 명령을 동시에 처리할 수 있어야 한다.이를 위해, 우리는 비동기 프로그래밍을 사용하고, 우리는 여기서 기초 지식을 약독할 것이다.

    수입하다


    여기를 시작하기 전에 pip의discord 모듈을 설치했다면 가져오셔야 합니다.
    asyncio 모듈을 동시에 설치합니다.
    import os
    from discord.ext import commands
    import discord
    from dotenv import load_dotenv
    from discord import Member
    from discord.ext import commands
    from discord.ext.commands import has_permissions, MissingPermissions
    import random
    import asyncio
    
    이 정도면 저희가 할 수 있을 것 같아요.

    이거.환경 호출기


    load_dotenv('DISCORD_TOKEN.env')#loads client secret from the .env file in the same directory
    TOKEN = os.getenv('DISCORD_TOKEN')
    bot = commands.Bot(command_prefix='^') #change it to whatever you want
    bot.remove_command("help")
    
    이 코드 세션은 기본적으로 우리가 이전에 응용 프로그램에 저장한 영패를 불러왔다.env 파일은 API에 연결할 수 있도록 코드에 삽입됩니다.

    함수 추가


    @bot.command()
    @commands.has_permissions(ban_members=True)#bans members if admin role is true
    async def ban(ctx, user: discord.Member, *, reason="No reason provided"):
            await user.ban(reason=reason)
            ban = discord.Embed(title=f":boom: Banned {user.name}!", description=f"Reason: {reason}\nBy: {ctx.author.mention}",color=0xB026FF)
            await ctx.message.delete()
            await ctx.channel.send(embed=ban)
            await user.send(embed=ban)
    
    이곳의 첫 줄@bot.command()은bot류를 호출합니다.
    두 번째 줄은 이 명령을 사용하는 사람이 필요한 권한을 가지고 있는지 검사한다.
    세 번째 줄은 우리가 함수와 그 매개 변수를 정의하는 곳이다.
    그것은 구성원과 이유를 논거로 하고 금지의 이유는 선택할 수 있다.
    네 번째 줄 이후, 그것은 단지 하나의 삽입을 구축했을 뿐이다. 이곳의 삽입은 많은 특성을 가지고 있지만, 본 강좌의 범위 안에 있지 않다.
    이 명령을 실행할 때, 언급한 사람이 밴드 퍼스널이나 관리자 퍼스널이 있다면, 그들은 금지됩니다.
    다음은 kick 명령입니다.
    @bot.command()
    @commands.has_permissions(kick_members=True)
    async def kick(ctx, user: discord.Member, *, reason="No reason provided"):
            await user.kick(reason=reason)
            ban = discord.Embed(title=f":boot: Kicked {user.name}!", description=f"Reason: {reason}\nBy: {ctx.author.mention}",color=0xB026FF)
            await ctx.message.delete()
            await ctx.channel.send(embed=ban)
            await user.send(embed=ban)
    
    설명은ban명령과 같지만 이번 로봇은 언급된 사용자를 찼을 뿐이다.
    마지막으로 아바타 명령:
    @bot.command()## get mentioned users avatar
    async def av(ctx, *,  avamember : discord.Member=None):
        userAvatarUrl = avamember.avatar_url
        await ctx.send(userAvatarUrl)
    
    첫 줄에서bot클래스를 다시 호출합니다
    두 번째는 함수를 정의하는 곳입니다.username을 매개 변수로 합니다.
    그리고 로봇은 언급한 사용자 이미지 URL을 표시합니다.
    또한 다음과 같은 아주 간단한 도움말 명령이 추가됩니다.
    @bot.command()##help command
    async def help(ctx):
        em = discord.Embed(title="Tutorial Bot command list:", description="", color=0x2f3136)
        em.add_field(name="`^ban {user}`", value="Bans the user.")
        em.add_field(name="`^kick {user}`", value="Kicks user.")
        em.add_field(name="`^av {user}`", value="Gets the mentioned users pfp.")
    
        em.set_footer(text="GitHub Discord bot made by cyber")
        await ctx.send(embed=em)
    
    마지막 코드는 로봇이 언제 온라인인지 아는 데 도움이 된다.
    @bot.event
    async def on_ready():
        activity = discord.Game(name="A game", type=3) #you can change from playing to watching, etc 
        await bot.change_presence(status=discord.Status.online, activity=activity)
        print("Bot is ready!")
    
    로봇의 상태를 설정하는 데도 도움을 준다.

    끝장 대본


    마지막으로 코드에 추가하고 토큰을 실행하며 API를 코드에 연결하는 데 도움을 줍니다.
    bot.run(TOKEN)
    
    이제 이 서버를 초대합시다!
    개발자 포털로 다시 이동해 OAuth2 대시보드로 들어갑니다.
    아래로 스크롤하면 scopes 부분을 찾을 수 있고bot scope를 누르십시오.

    아래로 스크롤하면 로봇의 권한 검사기를 발견할 수 있습니다.
    내 로봇이 필요로 하는 파마들이니까 검사해 볼게.

    지금 제공된 링크를 복사합니다. 이것은 당신의 로봇 초대 링크입니다!

    브라우저에 붙여넣으면 초대장 페이지로 리디렉션됩니다.

    권한이 부여되면 이 페이지로 안내합니다.

    이제 서버에서 테스트를 해보겠습니다!
    먼저 스크립트를 실행합니다. 셸에 나타날 것입니다.

    서버에서bot은 온라인으로 표시해야 합니다.

    이제 모든 기능을 테스트해 보겠습니다.
  • 금지령
  • 사용자 프로필 사진
  • 도움말 명령
  • 테스트 용례 1: 도움말 명령 표시

    결과:통과
    테스트 용례 2: Kick 사용자
    Earth Chan이라는 또 다른 사용자입니다. 차보겠습니다.

    사용자가 지금 차였어요.
    결과:통과
    테스트 용례 3: 사용자 금지
    우리는 같은 사용자를 초청하여 금지하려고 시도할 것이다.

    이 사용자는 이미 금지되었다.

    결과:통과
    테스트 용례 4: 사용자 이미지 가져오기

    결과:통과
    우리 로봇은 이미 모든 테스트 용례를 통과했다!너는 그것을 위해 대량의 다른 기능을 첨가해서 그것을 더욱 통용하게 할 수 있다.가능성은 무궁하다.

    로봇 호스팅


    스크립트가 실행되지 않으면bot이 오프라인 상태가 됩니다. 이 문제를 해결하기 위해 리플 등 위탁 관리 솔루션을 사용합니다.it나 클라우드 서비스 분야에서 저는 개인적으로 나무베리 껍질로 제 로봇을 맡깁니다.
    본 강좌는 호스트 위탁 관리를 소개하지 않고 유튜브에 대량의 강좌가 있다.

    다음은요?


    reddit API를 사용하여 전체 경제를 구축하고 로봇, 음악 로봇, 이미지 조작, reddit의 모델 등을 구축할 수 있다. 다음은 나did의 한 예이다.
    Discord API는 JavaScript, Java, Typescript 및 Ruby에도 있습니다.

    최종 코드


    코드는 다음과 같아야 합니다.
    import os
    from discord.ext import commands
    import discord
    from dotenv import load_dotenv
    from discord import Member
    from discord.ext import commands
    from discord.ext.commands import has_permissions, MissingPermissions
    import random
    import asyncio
    
    load_dotenv('DISCORD_TOKEN.env')#loads client secret from the .env file in the same directory
    TOKEN = os.getenv('DISCORD_TOKEN')
    bot = commands.Bot(command_prefix='^') #change it to whatever you want
    bot.remove_command("help")
    
    @bot.event
    async def on_ready():
        activity = discord.Game(name="A game", type=3) #you can change from playing to watching, etc 
        await bot.change_presence(status=discord.Status.online, activity=activity)
        print("Bot is ready!")
    
    @bot.command()
    @commands.has_permissions(ban_members=True)#bans members if admin role is true
    async def ban(ctx, user: discord.Member, *, reason="No reason provided"):
            await user.ban(reason=reason)
            ban = discord.Embed(title=f":boom: Banned {user.name}!", description=f"Reason: {reason}\nBy: {ctx.author.mention}",color=0xB026FF)
            await ctx.message.delete()
            await ctx.channel.send(embed=ban)
            await user.send(embed=ban)
    
    @bot.command()
    @commands.has_permissions(kick_members=True)
    async def kick(ctx, user: discord.Member, *, reason="No reason provided"):
            await user.kick(reason=reason)
            ban = discord.Embed(title=f":boot: Kicked {user.name}!", description=f"Reason: {reason}\nBy: {ctx.author.mention}",color=0xB026FF)
            await ctx.message.delete()
            await ctx.channel.send(embed=ban)
            await user.send(embed=ban)
    
    @bot.command()## get mentioned users avatar
    async def av(ctx, *,  avamember : discord.Member=None):
        userAvatarUrl = avamember.avatar_url
        await ctx.send(userAvatarUrl)
    
    @bot.command()##help command
    async def help(ctx):
        em = discord.Embed(title="Tutorial Bot command list:", description="", color=0x2f3136)
        em.add_field(name="`^ban {user}`", value="Bans the user.")
        em.add_field(name="`^kick {user}`", value="Kicks user.")
        em.add_field(name="`^av {user}`", value="Gets the mentioned users pfp.")
    
        em.set_footer(text="GitHub Discord bot made by cyber")
        await ctx.send(embed=em)
    
    bot.run(TOKEN)
    
    즐거운 코딩!궁금한 점이 있으시면 댓글로 남겨주시거나 디스코드(cyber#7596)로 연락 주세요. 제 트위터@thereal cyber를 팔로우하셔도 됩니다.

    좋은 웹페이지 즐겨찾기