我尝试组合 2 个代码并使角色存储多页,但我需要帮助,我希望商店的 1 页中包含的角色限制为 5,其余的已经在另一个页面上。
这是角色存储代码:
@client.command(aliases = ['магазин']) #неготово добавить несколько страниц или убрать роли
async def __магазин(ctx):
await ctx.channel.purge(limit=1)
page1 = discord.Embed(title = 'Магазин ролей 1 страница')
counter = 0
for row in cursor.execute("SELECT role_id, cost FROM shop WHERE id = {}".format(ctx.guild.id)):
if ctx.guild.get_role(row[0]) != None:
counter += 1
page1.add_field(
value = f"{ctx.guild.get_role(row[0]).mention}" ,
name = f"**Роль** № {counter} **Стоимость** {row[1]} <:crowcoin1:870664409884803082>",
inline = False
)
else:
pass
page2 = discord.Embed(title = 'Магазин ролей 2 страница')
counter = 0
for row in cursor.execute("SELECT role_id, cost FROM shop WHERE id = {}".format(ctx.guild.id)):
if ctx.guild.get_role(row[0]) != None:
counter += 1
page2.add_field(
value = f"{ctx.guild.get_role(row[0]).mention}" ,
name = f"**Роль** № {counter} **Стоимость** {row[1]} <:crowcoin1:870664409884803082>",
inline = False
)
else:
pass
page3 = discord.Embed(title = 'Магазин ролей 3 страница')
counter = 0
for row in cursor.execute("SELECT role_id, cost FROM shop WHERE id = {}".format(ctx.guild.id)):
if ctx.guild.get_role(row[0]) != None:
counter += 1
page3.add_field(
value = f"{ctx.guild.get_role(row[0]).mention}" ,
name = f"**Роль** № {counter} **Стоимость** {row[1]} <:crowcoin1:870664409884803082>",
inline = False
)
else:
pass
pages = [page1, page2, page3]
message = await ctx.send(embed = page1)
await message.add_reaction('⏮')
await message.add_reaction('◀')
await message.add_reaction('▶')
await message.add_reaction('⏭')
def check(reaction, user):
return user == ctx.author
i = 0
reaction = None
while True:
if str(reaction) == '⏮':
i = 0
await message.edit(embed = pages[i])
elif str(reaction) == '◀':
if i > 0:
i -= 1
await message.edit(embed = pages[i])
elif str(reaction) == '▶':
if i < 2:
i += 1
await message.edit(embed = pages[i])
elif str(reaction) == '⏭':
i = 2
await message.edit(embed = pages[i])
try:
reaction, user = await client.wait_for('reaction_add', timeout = 30.0, check = check)
await message.remove_reaction(reaction, user)
except:
break
await message.clear_reactions()
这是没有角色存储的完整代码:
import discord
from discord.ext import commands
import sqlite3
from config import settings
from Cybernator import Paginator as pag
client = commands.Bot(command_prefix = settings['PREFIX'])
client.remove_command('help')
connection = sqlite3.connect('server.db')
cursor = connection.cursor()
@client.event
async def on_ready():
cursor.execute("""CREATE TABLE IF NOT EXISTS users (
name TEXT,
id INT,
cash BIGINT,
rep INT,
lvl INT,
server_id INT
)""")
cursor.execute("""CREATE TABLE IF NOT EXISTS shop (
role_id INT,
id INT,
cost BIGINT
)""")
for guild in client.guilds:
for member in guild.members:
if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1, {guild.id})")
else:
pass
connection.commit()
print('client connected')
@client.event
async def on_member_join(member):
if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1, {member.guild.id})")
connection.commit()
else:
pass
@client.command(aliases = ['balance', 'cash'])
async def __balance(ctx, member: discord.Member = None):
if member is None:
await ctx.send(embed = discord.Embed(
description = f"""Баланс пользователя **{ctx.author}** составляет **{cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id)).fetchone()[0]} :leaves:**"""
))
else:
await ctx.send(embed = discord.Embed(
description = f"""Баланс пользователя **{member}** составляет **{cursor.execute("SELECT cash FROM users WHERE id = {}".format(member.id)).fetchone()[0]} :leaves:**"""
))
@client.command(aliases = ['award'])
async def __award(ctx, member: discord.Member = None, amount: int = None):
if member is None:
await ctx.send(f"**{ctx.author}**, укажите пользователя, которому желаете выдать определенную сумму")
else:
if amount is None:
await ctx.send(f"**{ctx.author}**, укажите сумму, которую желаете начислить на счет пользователя")
elif amount < 1:
await ctx.send(f"**{ctx.author}**, укажите сумму больше 1 :leaves:")
else:
cursor.execute("UPDATE users SET cash = cash + {} WHERE id = {}".format(amount, member.id))
connection.commit()
await ctx.message.add_reaction('✅')
@client.command(aliases = ['take'])
async def __take(ctx, member: discord.Member = None, amount = None):
if member is None:
await ctx.send(f"**{ctx.author}**, укажите пользователя, у которого желаете отнять сумму денег")
else:
if amount is None:
await ctx.send(f"**{ctx.author}**, укажите сумму, которую желаете отнять у счета пользователя")
elif amount == 'all':
cursor.execute("UPDATE users SET cash = {} WHERE id = {}".format(0, member.id))
connection.commit()
await ctx.message.add_reaction('✅')
elif int(amount) < 1:
await ctx.send(f"**{ctx.author}**, укажите сумму больше 1 :leaves:")
else:
cursor.execute("UPDATE users SET cash = cash - {} WHERE id = {}".format(int(amount), member.id))
connection.commit()
await ctx.message.add_reaction('✅')
@client.command(aliases = ['add-shop'])
async def __add_shop(ctx, role: discord.Role = None, cost: int = None):
if role is None:
await ctx.send(f"**{ctx.author}**, укажите роль, которую вы желаете внести в магазин")
else:
if cost is None:
await ctx.send(f"**{ctx.author}**, укажите стоимость для даннойй роли")
elif cost < 0:
await ctx.send(f"**{ctx.author}**, стоимость роли не может быть такой маленькой")
else:
cursor.execute("INSERT INTO shop VALUES ({}, {}, {})".format(role.id, ctx.guild.id, cost))
connection.commit()
await ctx.message.add_reaction('✅')
@client.command(aliases = ['remove-shop'])
async def __remove_shop(ctx, role: discord.Role = None):
if role is None:
await ctx.send(f"**{ctx.author}**, укажите роль, которую вы желаете удалить из магазина")
else:
cursor.execute("DELETE FROM shop WHERE role_id = {}".format(role.id))
connection.commit()
await ctx.message.add_reaction('✅')
@client.command(aliases = ['buy', 'buy-role'])
async def __buy(ctx, role: discord.Role = None):
if role is None:
await ctx.send(f"**{ctx.author}**, укажите роль, которую вы желаете приобрести")
else:
if role in ctx.author.roles:
await ctx.send(f"**{ctx.author}**, у вас уже имеется данная роль")
elif cursor.execute("SELECT cost FROM shop WHERE role_id = {}".format(role.id)).fetchone()[0] > cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id)).fetchone()[0]:
await ctx.send(f"**{ctx.author}**, у вас недостаточно средств для покупки данной роли")
else:
await ctx.author.add_roles(role)
cursor.execute("UPDATE users SET cash = cash - {} WHERE id = {}".format(cursor.execute("SELECT cost FROM shop WHERE role_id = {}".format(role.id)).fetchone()[0], ctx.author.id))
connection.commit()
await ctx.message.add_reaction('✅')
@client.command(aliases = ['rep', '+rep'])
async def __rep(ctx, member: discord.Member = None):
if member is None:
await ctx.send(f"**{ctx.author}**, укажите участника сервера")
else:
if member.id == ctx.author.id:
await ctx.send(f"**{ctx.author}**, вы не можете указать смого себя")
else:
cursor.execute("UPDATE users SET rep = rep + {} WHERE id = {}".format(1, member.id))
connection.commit()
await ctx.message.add_reaction('✅')
@client.command(aliases = ['leaderboard', 'lb'])
async def __leaderboard(ctx):
embed = discord.Embed(title = 'Топ 10 сервера')
counter = 0
for row in cursor.execute("SELECT name, cash FROM users WHERE server_id = {} ORDER BY cash DESC LIMIT 10".format(ctx.guild.id)):
counter += 1
embed.add_field(
name = f'# {counter} | `{row[0]}`',
value = f'Баланс: {row[1]}',
inline = False
)
await ctx.send(embed = embed)
client.run(settings['TOKEN'])




