🐥
Discord.pyでレベリングBOTを作ろう
レベリング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
激しく見ずらいです。
部分部分でどんな処理をしているのかが全くわからず、その上無駄な処理などもあります。
コードだけ貼っているのでは記事である必要性はないと思われるのですが。