🐥

Discord.pyでレベリングBOTを作ろう

2021/09/01に公開
1

レベリングbotを作る

最初にBOTのアカウントを作ってください

そのあとトークンをコピーしといてください

Discord.pyをインストールする

pip install discord.py

コード

先程コピーしたトークンをtoken=""の中に入れる

from discord.ext import commands
import discord
import os
import sqlite3

conn=sqlite3.connect("level.db", check_same_thread=False)
c=conn.cursor()

prefix="?"

token="トークン"

bot=commands.Bot(command_prefix=prefix)

c.execute("CREATE TABLE IF NOT EXISTS level(userid, level, exp)")

@bot.event
async def on_ready():
  print("起動")

@bot.listen("on_message")
async def level_count(message):
  if message.author.bot:
    return
  if message.content.startswith(prefix):
    return
  c.execute("SELECT * FROM level WHERE userid=?", (message.author.id,))
  data=c.fetchone()
  if data is None:
    c.execute("INSERT INTO level VALUES(?, ?, ?)",(message.author.id, 1, 0))
    conn.commit()
    return
  c.execute("UPDATE level set exp=? WHERE userid=?",(data[2]+1, message.author.id))
  conn.commit()
  c.execute("SELECT * FROM level WHERE userid=?", (message.author.id,))
  data=c.fetchone()
  if data[2] >= data[1]*5:
    c.execute("UPDATE level set level=?,exp=? WHERE userid=?",(data[1]+1,0,message.author.id))
    conn.commit()
    await message.channel.send("レベルアップしました")
    
@bot.command()
async def level(ctx, target:discord.User=None):
  if target is None:
    user=ctx.author
  else:
    user=target
  c.execute("SELECT * FROM level WHERE userid=?", (user.id,))
  data=c.fetchone()
  if data is None:
    await ctx.send("ユーザーが登録されていません")
  e=discord.Embed(title=f"{user}のランク", description=f"Lv.{data[1]}")
  await ctx.send(embed=e)

@bot.command()
async def rank(ctx):
  r={}
  title="ランク(トップ3まで)"
  c.execute("SELECT * FROM level")
  for i in c.fetchall():
    user=await bot.fetch_user(i[0])
    r[i[1]]=user.name
  rag=[i for i in r]
  rank=sorted(rag, reverse=True)
  b=0
  description="\n".join(f"{r[f]}" for f in rank)
  e=discord.Embed(title=title, description=description)
  await ctx.send(embed=e)

bot.run(token)

最後に

sqlite3って便利だよねーと思い作りました

Discussion

kousakiraikousakirai

激しく見ずらいです。
部分部分でどんな処理をしているのかが全くわからず、その上無駄な処理などもあります。
コードだけ貼っているのでは記事である必要性はないと思われるのですが。