Код:
import discord #модуль discord api
from discord.ext import commands #необходимый класс для обработки команд
from discord.utils import get
import datetime
import sqlite3 #модуль sqlite
from tabulate import tabulate #удобный модуль для рисования таблиц
import json #используется только для обработки инвентаря, но ему можно найти и другое применение
conn = sqlite3.connect("Discord.db")
cursor = conn.cursor()
#--------------------------------------------------------------
#Префикс для бота
client = commands.Bot( command_prefix = '.' )
#Удаляем команду
client.remove_command( 'help' )
client = discord.Client()
#--------------------------------------------------------------
CREATE TABLE "shop" (
"id" INT,
"type" TEXT,
"name" TEXT,
"cost" INT)
CREATE TABLE "users" (
"id" INT,
"nickname" TEXT,
"mention" TEXT,
"money" INT,
"rep_rank" TEXT,
"inventory" TEXT,
"lvl" INT,
"xp" INT)
@bot.event
async def on_ready():
print("Bot готов к работе")#сообщение о готовности
for guild in bot.guilds:#цикл выводит один сервер
print(guild.id)#вывод id сервера
serv=guild
for member in guild.members:#цикл, обрабатывающий список участников
cursor.execute(f"SELECT id FROM users where id={member.id}")#проверка, существует ли участник в БД
if cursor.fetchone()==None:#Если не существует
cursor.execute(f"INSERT INTO users VALUES ({member.id}, '{member.name}', '<@{member.id}>', 50000, 'S','[]',0,0)")#вводит все данные об участнике в БД
else:#если существует
pass
conn.commit()#применение изменений в БД
@bot.event
async def on_member_join(member):
cursor.execute(f"SELECT id FROM users where id={member.id}")#все также, существует ли участник в БД
if cursor.fetchone()==None:#Если не существует
cursor.execute(f"INSERT INTO users VALUES ({member.id}, '{member.name}', '<@{member.id}>', 50000, 'S','[]',0,0)")#вводит все данные об участнике в БД
else:#Если существует
pass
conn.commit()#применение изменений в БД
@bot.event
async def on_message(message):
if len(message.content) > 10:#за каждое сообщение длиной > 10 символов...
for row in cursor.execute(f"SELECT xp,lvl,money FROM users where id={message.author.id}"):
expi=row[0]+random.randint(1, 5)#к опыту добавляется случайное число
cursor.execute(f'UPDATE users SET xp={expi} where id={message.author.id}')
lvch=expi/(row[1]*1000)
print(int(lvch))
lv=int(lvch)
if row[1] < lv:#если текущий уровень меньше уровня, который был рассчитан формулой выше,...
await message.channel.send(f'Новый уровень!')#то появляется уведомление...
bal=1000*lv
cursor.execute(f'UPDATE users SET lvl={lv},money={bal} where id={message.author.id}')#и участник получает деньги
await bot.process_commands(message)#Далее это будет необходимо для ctx команд
conn.commit()#применение изменений в БД
@bot.command()
async def account(ctx): #команда account
table=[["nickname","money","lvl","xp"]]
for row in cursor.execute(f"SELECT nickname, money, lvl, xp FROM users where id={ctx.author.id}"):
table.append([row[0],row[1],row[2],row[3]])
await ctx.send(f">\n{tabulate(table)}")
@bot.command()
async def inventory(ctx):#команда inventory
counter=0
for row in cursor.execute(f"SELECT inventory FROM users where id={ctx.author.id}"):
data=json.loads(row[0])
table=[["id","type","name"]]
for row in data:
prt=row
for row in cursor.execute(f"SELECT id,type,name FROM shop where id={prt}"):
counter+=1
table.append([row[0],row[1],row[2]])
if counter==len(data):
await ctx.send(f'>\n{tabulate(table)}')
@bot.command()
async def shop(ctx):#команда shop
counter=0
table=[["id","type","name","cost"]]
for row in cursor.execute(f"SELECT id,type,name,cost FROM shop"):
counter+=1
table.append([row[0],row[1],row[2],row[3]])
if counter==4:
await ctx.send(f'>\n{tabulate(table)}')
async def buy(ctx, a: int):
uid=ctx.author.id
await ctx.send('Обработка... Если ответа не последует, указан неверный id предмета [buy {id}]')
for row in cursor.execute(f"SELECT money FROM users where id={uid}"):
money = row[0]
for row in cursor.execute(f"SELECT id,name,cost FROM shop where id={a}"):
cost=row[2]
if money >= cost:#если у вас достаточно денег,то...
money -=cost
await ctx.send(f'Вы приобрели "{row[1]}" за {row[2]}')
for row in cursor.execute(f"SELECT inventory FROM users where id={uid}"):
data=json.loads(row[0])
data.append(a)
daed=json.dumps(data)
cursor.execute('UPDATE users SET money=?,inventory = ? where id=?',(money,daed,uid))#добавляет предмет вам в инвентарь
pass
if money < cost:#иначе сообщает о недостатке
await ctx.send(f'Недостаточно средств! Иди работай!')
pass
conn.commit()#применение изменений в БД
Ошибка:
Invalid Syntax (<unknown>, line 23)