90 lines
No EOL
3.7 KiB
Python
90 lines
No EOL
3.7 KiB
Python
import nextcord
|
|
from nextcord.ext import commands
|
|
from nextcord import TextInputStyle
|
|
from random import randint
|
|
import aiosqlite as sqlite3
|
|
import aiohttp
|
|
from urllib.parse import urlparse
|
|
import os
|
|
|
|
class RoleView(nextcord.ui.View):
|
|
def __init__(self,bot):
|
|
super().__init__(timeout=None)
|
|
self.bot = bot
|
|
|
|
#res = await self.bot.cur.execute(f"SELECT roleid FROM rolebutton WHERE serverid = {self.bot.roleguild.id}")
|
|
button = nextcord.ui.Button(label="Test", style=nextcord.ButtonStyle.gray, custom_id="rolebutton:821095192831852554")
|
|
button.callback = self.buttoncallback
|
|
self.add_item(button)
|
|
button = nextcord.ui.Button(label="Test 2", style=nextcord.ButtonStyle.gray, custom_id="rolebutton:1058708072064884736")
|
|
button.callback = self.buttoncallback
|
|
self.add_item(button)
|
|
|
|
async def buttoncallback(self, interaction: nextcord.Interaction) -> None:
|
|
role = interaction.guild.get_role(int(interaction.data["custom_id"].split(":")[1]))
|
|
if role in interaction.user.roles:
|
|
await interaction.user.remove_roles(role, reason=f"{interaction.user.display_name} used role button")
|
|
await interaction.response.send_message(f"Removed <@&{role.id}> from you!", ephemeral=True, allowed_mentions=nextcord.AllowedMentions.none())
|
|
else:
|
|
await interaction.user.add_roles(role, reason=f"{interaction.user.display_name} used role button")
|
|
await interaction.response.send_message(f"Added <@&{role.id}> to you!", ephemeral=True, allowed_mentions=nextcord.AllowedMentions.none())
|
|
return
|
|
|
|
|
|
|
|
class rolebutton(commands.Cog):
|
|
|
|
def __init__(self, bot: commands.Bot):
|
|
self.bot = bot
|
|
#errors if first loaded but is needed after
|
|
try:
|
|
self.bot.add_view(RoleView(self.bot))
|
|
except:
|
|
pass
|
|
|
|
@commands.Cog.listener('on_ready')
|
|
async def roleready(self):
|
|
self.bot.add_view(RoleView(self.bot))
|
|
|
|
@nextcord.slash_command(
|
|
name="rolebuttons",
|
|
description="modify role buttons",
|
|
)
|
|
async def rolebuttons(self, interaction: nextcord.Interaction):
|
|
return
|
|
self.bot.roleguild = interaction.guild
|
|
await interaction.response.send_message(view=RoleView(self.bot))
|
|
|
|
@rolebuttons.subcommand(
|
|
name="refresh",
|
|
description="refresh a role selection message",
|
|
)
|
|
async def rolerefresh(self, interaction: nextcord.Interaction, msgid: float):
|
|
msg = await nextcord.abc.Messageable.fetch_message(msgid)
|
|
if msg.author.id != self.bot.application_id:
|
|
await interaction.response.send_message("I can't edit that message", ephemeral=True)
|
|
return
|
|
res = await self.bot.cur.execute(f"SELECT roleid FROM rolebutton WHERE serverid = {interaction.guild.id}")
|
|
res = await res.fetchall()
|
|
for r in res:
|
|
button = nextcord.ui.Button(label="r", style=nextcord.ButtonStyle.gray, custom_id=f"rolebutton:{r}")
|
|
button.callback = RoleView.buttoncallback
|
|
RoleView.add_item(button)
|
|
await msg.edit(view=RoleView(self.bot))
|
|
await interaction.response.send_message("Edited!", ephemeral=True)
|
|
|
|
@rolebuttons.subcommand(
|
|
name="add",
|
|
description="add a role to the selection message",
|
|
)
|
|
async def roleadd(self, interaction: nextcord.Interaction, role: nextcord.Role):
|
|
await self.bot.cur.execute(f"""
|
|
INSERT INTO rolebutton VALUES
|
|
({interaction.guild_id}, {role.id})
|
|
""")
|
|
await self.bot.db.commit()
|
|
await interaction.response.send_message("Done", ephemeral=True)
|
|
|
|
|
|
def setup(bot: commands.Bot):
|
|
bot.add_cog(rolebutton(bot)) |