Advertisement
DevNeon

NeoGame SourceCode

Oct 28th, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.65 KB | None | 0 0
  1. # bot.py
  2.  
  3. from urllib.request import urlopen
  4. from bs4 import BeautifulSoup
  5. import discord
  6. import sqlite3
  7. from discord.ext import commands
  8.  
  9. client = discord.Client()
  10. prefix = "!"
  11.  
  12.  
  13. @client.event
  14. async def on_message(message):
  15.     # 자기 채팅에 명령어가 실행되지 않도록 예외 지정
  16.     if message.author == client.user:
  17.         return
  18.  
  19.     channel = message.channel
  20.     emoji = discord.Emoji
  21.  
  22.     if message.content.startswith(prefix):
  23.  
  24.         # 명령어 처리 헨들러 (인덱스 0번 - 메인 커맨드)
  25.         argument = message.content[len(prefix):].split(" ")
  26.  
  27.         # 언급
  28.         if argument[0] == "언급":
  29.             msg = '안녕하세요! {0.author.mention}'.format(message)
  30.             await channel.send(msg)
  31.  
  32.         # 헨들러
  33.         elif argument[0] == "헨들러":
  34.             await channel.send(f'헨들러 테스트 : \n{argument}')
  35.  
  36.         ################################################################################################################
  37.  
  38.         elif argument[0] == "게임":
  39.  
  40.             # user.db 데이터배이스 열람
  41.             try:
  42.                 conn = sqlite3.connect('user.db')
  43.                 conn2 = sqlite3.connect('weapon.db')
  44.                 cur = conn.cursor()
  45.                 wep = conn2.cursor()
  46.  
  47.                 # SQLite3 테이블 생성
  48.                 try:
  49.                     cur.execute(
  50.                         'CREATE TABLE user_data (ID VARCHAR(18) NOT NULL UNIQUE, Money INTEGER NOT NULL, Level INTEGER NOT NULL, PRIMARY KEY(ID));')
  51.                 except sqlite3.OperationalError as e:
  52.                     print(f'Victim:{message.author.id} - 테이블이 이미 존제함')
  53.  
  54.                 # 신규 유저 DB 생성
  55.                 try:
  56.                     cur.execute('INSERT INTO user_data (ID, Money, Level) VALUES(?, ?, ?);',
  57.                                 (message.author.id, 10000, 0))
  58.                 except sqlite3.IntegrityError as e:
  59.                     print(f'Victim:{message.author.id} - 튜플 중복')
  60.  
  61.                 conn.commit()
  62.  
  63.                 if len(argument) == 1:
  64.                     embed = discord.Embed(title="《  강화게임 도움말  》", color=0xfcb90a)
  65.                     embed.set_thumbnail(
  66.                         url='http://drive.google.com/uc?export=view&id=1vfeYEF7Zbji-cC_gfHJsCjhb39AFDH0b')
  67.                     embed.add_field(name='!게임 강화', value='무기 강화를 합니다.\n', inline=True)
  68.                     embed.add_field(name='!게임 프로필', value='개인정보를 확인합니다.', inline=True)
  69.                     embed.add_field(name='!게임 확률', value='다음 무기로 강화될 확률을\n확인합니다.', inline=True)
  70.                     embed.add_field(name='!게임 순위', value='모든 플레이어의 무기 순위를\n확인합니다.', inline=True)
  71.                     await channel.send(embed=embed)
  72.  
  73.                 elif argument[1] == "프로필":
  74.                     cur.execute(f"SELECT * FROM user_data WHERE ID = {message.author.id};")
  75.                     prof = cur.fetchall()
  76.                     wep.execute(f"SELECT * FROM weapon_data WHERE Level = {prof[0][2]};")
  77.                     img = wep.fetchall()
  78.                     embed = discord.Embed(title=f"《  강화게임 프로필 : {message.author}  》", color=0xfcb90a)
  79.                     embed.set_thumbnail(url=f'{img[0][3]}')
  80.                     embed.add_field(name='현재 소지 금액', value=f"{format(prof[0][1], ',')}원", inline=True)
  81.                     embed.add_field(name='현재 무기 레벨', value=f"Lv.{prof[0][2]} ({img[0][1]})", inline=True)
  82.                     await channel.send(embed=embed)
  83.  
  84.             finally:
  85.                 conn.close()
  86.                 conn2.close()
  87.  
  88.         ################################################################################################################
  89.  
  90.         elif argument[0] == "애니":
  91.             if len(argument) == 1 :
  92.                 await channel.send(f"`{prefix}애니 순위`")
  93.  
  94.             elif argument[1] == "순위" :
  95.                 html = urlopen("https://laftel.net/rank/animation")
  96.                 bsObject = BeautifulSoup(html, "lxml")
  97.                 Matrix = [[""] * 2 for i in range(20)]
  98.  
  99.                 try :
  100.                     count = 0
  101.                     row = 0
  102.                     fill = 1
  103.                     for result in bsObject.find_all(['a', 'div'], class_=['title', 'point']):
  104.                         if count < 1:
  105.                             count += 1
  106.                             continue
  107.  
  108.                         if (fill % 2) == 1:
  109.                             Matrix[row][0] = result.get_text()
  110.                         else:
  111.                             Matrix[row][1] = result.get_text()
  112.                             row += 1
  113.  
  114.                         fill += 1
  115.  
  116.                     embed = discord.Embed(title="《  애니 순위  》", color=0xfcb90a)
  117.                     for row in range(0, len(Matrix)):
  118.                         embed.add_field(name=f'**%2d.** {Matrix[row][0]}' % (row + 1), value=f"  {Matrix[row][1]}", inline=False)
  119.                     await channel.send(embed=embed)
  120.                 except IndexError :
  121.                     await channel.send("라이브러리를 불러오는데 문제가 발생했습니다!")
  122.  
  123.             ############################################################################################################
  124.             elif argument[1] == "검색":
  125.                 if len(argument) > 2 :
  126.                     search = ""
  127.                     count = 1
  128.                     for text in argument[2:] :
  129.                         search = search + f"{text}"
  130.                         if len(argument[2:]) > count:
  131.                             search = search + "%20"
  132.                         count += 1
  133.                     html = urlopen(f"https://laftel.net/search?keyword={search}")
  134.                     bsObject = BeautifulSoup(html, "lxml")
  135.  
  136.                     await channel.send(search)
  137.                 else :
  138.                     msg = '검색할 제목을 입력해주세요 . . . <:think:638342427857518602>'.format(message)
  139.                     for result in bsObject.find_all('a', class_='item-title'):
  140.                         result.get_text()
  141.                     await channel.send(msg)
  142.                     # 미완성
  143.  
  144.  
  145.         # 명령어 찾지 못함
  146.         else:
  147.             msg = '명령어를 찾을 수 없네요 . . . <:think:638342427857518602>'.format(message)
  148.             await channel.send(msg)
  149.  
  150. @client.event
  151. async def on_ready():
  152.     print(f'성공적으로 {client.user} 계정이 로그인되었습니다.')
  153.  
  154. client.run("TOKEN")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement