Задать вопрос
@Kiraralein

Как на Disnake правильно оформить команду передачи средств одного участника другому?

Команда работает через подключение таблицы sqlite3. Проблема в том, что надо упоминать пользователя который хочет перевести и того кому перевести. Хочется сделать без упоминания, но команда перестает работать, точнее перестает изымать средства, но при этом исправно сохраняет добавленное.
код частичный
import sqlite3
import disnake

from disnake import Color, Member, Intents, Embed
from disnake.ext import commands
from sqlite3 import connect
from typing import Any
 
con = connect("users.db", check_same_thread=False)
cur = con.cursor()
bot = commands.InteractionBot(intents=Intents.all())

cur.execute("""CREATE TABLE IF NOT EXISTS users(userid BIGINT, cash BIGINT)"""); con.commit()
def checkUser(id: int) -> list[Any]:
    user = cur.execute("SELECT * FROM users WHERE userid = %s" % id).fetchall()
    if not user:
        cur.execute("INSERT INTO users VALUES (?, ?)", (id, 0))
    return cur.execute("SELECT * FROM users WHERE userid = %s" % id).fetchall()
@bot.slash_command(name="transfer")
async def transfer(ctx, member: Member, target: Member, amount: int):
    data = checkUser(ctx.author.id)
    if data[0][1] < amount:
        await ctx.send(embed=Embed(
            title=f'Ошибка | ❌',
            description=f'У вас недостаточно средств для перевода',
            color=Color.gold()
        ))
    else:
        await ctx.send(embed=Embed(
            title=f'Экономика',
            description=f'{ctx.author.mention} передал пользователю {target.mention} **{amount}**, Ваш баланс составляет **{data[0][1] - amount}**', 
            color=Color.red()
        ))  
        cur.execute("UPDATE users SET cash = ? WHERE userid = ?", (data[0][1] + amount, target.id));
        cur.execute("UPDATE users SET cash = ? WHERE userid = ?", (data[0][1] - amount, mention.id)); con.commit()
  • Вопрос задан
  • 183 просмотра
Подписаться Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
@CoDa_From_HL2
@bot.slash_command(name="transfer")
async def transfer(ctx, target: Member, amount: int):
    data = checkUser(ctx.author.id)
    if data[0][1] < amount:
        await ctx.send(embed=Embed(
            title=f'Ошибка | ❌',
            description=f'У вас недостаточно средств для перевода',
            color=Color.gold()
        ))
    else:
        await ctx.send(embed=Embed(
            title=f'Экономика',
            description=f'{ctx.author.mention} передал пользователю {target.mention} **{amount}**, Ваш баланс составляет **{data[0][1] - amount}**', 
            color=Color.red()
        ))  
        cur.execute("UPDATE users SET cash = ? WHERE userid = ?", (data[0][1] + amount, target.id));
        cur.execute("UPDATE users SET cash = ? WHERE userid = ?", (data[0][1] - amount, ctx.author.id)); con.commit()

Попробуйте так если выходит ошибка или что то не получается пишите в коментарии
Ответ написан
@Kiraralein Автор вопроса
Всем спасибо, я разобралась как делать, если кому-то пригодиться вот часть кода что нужно изменить в конце
@bot.slash_command(name="transfer")
async def transfer(ctx, target: Member, amount: int):
    data = checkUser(ctx.author.id)
    if data[0][1] < amount:
        await ctx.send(embed=Embed(
            title=f'Ошибка | ❌',
            description=f'У вас недостаточно средств для перевода',
            color=Color.gold()
        ))
    else:
        cur.execute(f"UPDATE users SET cash = cash - {amount} WHERE userid = {ctx.author.id}"); con.commit()
        cur.execute(f"UPDATE users SET cash = cash + {amount} WHERE userid = {target.id}"); con.commit() 
        await ctx.send(embed=Embed(
            title=f'Экономика',
            description=f'{ctx.author.mention} передал пользователю {target.mention} **{amount}**, Ваш баланс составляет **{data[0][1] - amount}**', 
            color=Color.gold()
            ))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы