Update main.py
This commit is contained in:
parent
ea95c92fb9
commit
f5ce2420a0
137
main.py
137
main.py
|
@ -1,10 +1,47 @@
|
||||||
import discord
|
import discord
|
||||||
from discord.ext import commands
|
from discord.ext import commands, tasks
|
||||||
|
from discord import app_commands
|
||||||
import os
|
import os
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
import sqlite3
|
import sqlite3
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
|
from discord import ui, Interaction
|
||||||
|
|
||||||
|
|
||||||
|
async def welcome_message():
|
||||||
|
# Find the #welcome channel
|
||||||
|
welcome_channel_id = int(os.getenv('WELCOME_CHANNEL_ID'))
|
||||||
|
welcome_channel = discord.utils.get(client.get_all_channels(), id=welcome_channel_id)
|
||||||
|
|
||||||
|
# Check if welcome message has already been sent in the channel
|
||||||
|
async for message in welcome_channel.history(limit=100):
|
||||||
|
if message.author == client.user and message.embeds:
|
||||||
|
print(f'Welcome message found. Message ID: {message.id}')
|
||||||
|
return # If the welcome message is found, exit the function
|
||||||
|
|
||||||
|
# Send welcome message in the #welcome channel
|
||||||
|
print(f'No welcome message found, creating one now')
|
||||||
|
view = discord.ui.View()
|
||||||
|
button = discord.ui.Button(label="Complete Onboarding")
|
||||||
|
view.add_item(button)
|
||||||
|
embed = discord.Embed(title="Welcome to the Server!", description="Here's how to get started:")
|
||||||
|
# embed.set_thumbnail(url=ctx.guild.icon)
|
||||||
|
embed.add_field(name="Step 1:",
|
||||||
|
value="Read the server rules in [#rules](https://discord.com/channels/1207801896656568480/1207802982574596137) channel.")
|
||||||
|
embed.add_field(name="Step 2:",
|
||||||
|
value="Check out some cool posts over in [#projects](https://discord.com/channels/1207801896656568480/1207807674075320390).")
|
||||||
|
embed.add_field(name="Step 3:", value="Complete Onboarding procedure to unlock the rest of the server.")
|
||||||
|
embed.set_footer(text="Enjoy your stay!")
|
||||||
|
await welcome_channel.send(embed=embed, view=OnboardButtons())
|
||||||
|
|
||||||
|
async def update_nickname(member, firstname, lastname):
|
||||||
|
nickname = f"{firstname} {lastname}"
|
||||||
|
c.execute("UPDATE members SET nickname = ?, firstname = ?, lastname = ? WHERE user_id = ?", (nickname, firstname, lastname, member.id))
|
||||||
|
conn.commit()
|
||||||
|
print(f'Updated... {member}, {firstname}, {lastname}, {nickname}')
|
||||||
|
await member.edit(nick=nickname)
|
||||||
|
|
||||||
|
|
||||||
# Load environment variables
|
# Load environment variables
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
@ -19,42 +56,82 @@ intents = discord.Intents.all()
|
||||||
conn = sqlite3.connect('member_data.db')
|
conn = sqlite3.connect('member_data.db')
|
||||||
c = conn.cursor()
|
c = conn.cursor()
|
||||||
|
|
||||||
# Create table if not exists
|
# Create table with fields if it doesn't exist already
|
||||||
c.execute('''CREATE TABLE IF NOT EXISTS members
|
c.execute('''CREATE TABLE IF NOT EXISTS members (
|
||||||
(user_id INTEGER PRIMARY KEY, username TEXT, nickname TEXT, join_datetime TEXT, onboarding_status INTEGER, last_change_datetime TEXT)''')
|
user_id INTEGER PRIMARY KEY,
|
||||||
|
username TEXT, nickname TEXT,
|
||||||
|
firstname TEXT, lastname TEXT,
|
||||||
|
join_datetime TEXT,
|
||||||
|
onboarding_status INTEGER,
|
||||||
|
last_change_datetime TEXT
|
||||||
|
)''')
|
||||||
|
|
||||||
conn.commit()
|
conn.commit()
|
||||||
|
|
||||||
# Initialize bot
|
# Initialize bot
|
||||||
bot = commands.Bot(command_prefix='/', intents=intents)
|
client = commands.Bot(command_prefix='.', intents=intents)
|
||||||
|
|
||||||
@bot.event
|
class PersistentViewBot(commands.Bot):
|
||||||
|
def __init__(self):
|
||||||
|
intents = discord.Intents().all()
|
||||||
|
super().__init__(command_prefix=commands.when_mentioned_or("."), intents=intents)
|
||||||
|
async def setup_hook(self) -> None:
|
||||||
|
self.add_view(OnboardButtons())
|
||||||
|
#self.add_view(OnboardButtons()) #Add More views with more add_view commands.
|
||||||
|
|
||||||
|
client = PersistentViewBot()
|
||||||
|
|
||||||
|
class OnboardModal(discord.ui.Modal, title="Onboarding: "):
|
||||||
|
first_name = discord.ui.TextInput(
|
||||||
|
style=discord.TextStyle.short,
|
||||||
|
label="First name",
|
||||||
|
required=True,
|
||||||
|
placeholder="John "
|
||||||
|
)
|
||||||
|
last_name = discord.ui.TextInput(
|
||||||
|
style=discord.TextStyle.short,
|
||||||
|
label="Last Name",
|
||||||
|
required=True,
|
||||||
|
placeholder="Doe"
|
||||||
|
)
|
||||||
|
async def on_submit(self, interaction: discord.InteractionResponse):
|
||||||
|
print(f'First name: {self.first_name.value}')
|
||||||
|
print(f'Last Name: {self.last_name.value}')
|
||||||
|
print(f'User: {self.user.id}')
|
||||||
|
|
||||||
|
await interaction.response.defer()
|
||||||
|
await update_nickname(member=self.user, firstname=self.first_name.value, lastname=self.last_name.value)
|
||||||
|
#channel = interaction.guild.get_channel(WELCOME_CHANNEL_ID)
|
||||||
|
#embed = discord.Embed(title="New Onboarding data", description=self.message.value)
|
||||||
|
#embed.set_author(name=self.user.nick)
|
||||||
|
#await channel.send(embed=embed)
|
||||||
|
#await interaction.response.send_message("Thanks", ephemeral=True)
|
||||||
|
async def on_error(self, interaction: discord.Interaction, error):
|
||||||
|
...
|
||||||
|
|
||||||
|
class OnboardButtons(discord.ui.View):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__(timeout=None)
|
||||||
|
@discord.ui.button(label="Complete Onboarding", style=discord.ButtonStyle.green, custom_id="1")
|
||||||
|
async def onboard(self, interaction: discord.InteractionResponse, button: discord.ui.Button):
|
||||||
|
onboard_modal = OnboardModal()
|
||||||
|
onboard_modal.user = interaction.user
|
||||||
|
await interaction.response.send_modal(onboard_modal)
|
||||||
|
|
||||||
|
@client.event
|
||||||
async def on_ready():
|
async def on_ready():
|
||||||
print(f'Logged in as {bot.user}')
|
print(f'Logged in as {client.user}')
|
||||||
|
await welcome_message()
|
||||||
# Find the #welcome channel
|
try:
|
||||||
welcome_channel_id = int(os.getenv('WELCOME_CHANNEL_ID'))
|
synced = await client.tree.sync()
|
||||||
welcome_channel = discord.utils.get(bot.get_all_channels(), id=welcome_channel_id)
|
print(f'Slash Commands Synced. {str(len(synced))} Total Commands {synced}')
|
||||||
|
except Exception as e:
|
||||||
# Check if welcome message has already been sent in the channel
|
print(e)
|
||||||
async for message in welcome_channel.history(limit=100):
|
|
||||||
if message.author == bot.user and message.embeds:
|
|
||||||
return # If the welcome message is found, exit the function
|
|
||||||
|
|
||||||
# Send welcome message in the #welcome channel
|
|
||||||
view = discord.ui.View()
|
|
||||||
button = discord.ui.Button(label="Complete Onboarding")
|
|
||||||
view.add_item(button)
|
|
||||||
embed = discord.Embed(title="Welcome to the Server!", description="Here's how to get started:")
|
|
||||||
embed.add_field(name="Step 1:", value="Read the server rules in #rules channel.")
|
|
||||||
embed.add_field(name="Step 2:", value="Check out people's projects.")
|
|
||||||
embed.add_field(name="Step 3:", value="Complete Onboarding procedure to unlock the rest of the server.")
|
|
||||||
embed.set_footer(text="Enjoy your stay!")
|
|
||||||
await welcome_channel.send(embed=embed, view=view)
|
|
||||||
|
|
||||||
|
|
||||||
@bot.event
|
@client.event
|
||||||
async def on_member_join(member):
|
async def on_member_join(member):
|
||||||
|
await welcome_message()
|
||||||
# Check if member already exists in the database
|
# Check if member already exists in the database
|
||||||
c.execute("SELECT * FROM members WHERE user_id = ?", (member.id,))
|
c.execute("SELECT * FROM members WHERE user_id = ?", (member.id,))
|
||||||
existing_member = c.fetchone()
|
existing_member = c.fetchone()
|
||||||
|
@ -73,7 +150,7 @@ async def on_member_join(member):
|
||||||
logging.info(f'Member {member.name} joined the server.')
|
logging.info(f'Member {member.name} joined the server.')
|
||||||
|
|
||||||
|
|
||||||
@bot.event
|
@client.event
|
||||||
async def on_member_remove(member):
|
async def on_member_remove(member):
|
||||||
# Log member leave
|
# Log member leave
|
||||||
logging.info(f'Member {member.name} left the server.')
|
logging.info(f'Member {member.name} left the server.')
|
||||||
|
@ -84,4 +161,4 @@ TOKEN = os.getenv('BOT_TOKEN')
|
||||||
WELCOME_CHANNEL_ID = os.getenv('WELCOME_CHANNEL_ID')
|
WELCOME_CHANNEL_ID = os.getenv('WELCOME_CHANNEL_ID')
|
||||||
|
|
||||||
# Start bot
|
# Start bot
|
||||||
bot.run(TOKEN)
|
client.run(TOKEN)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user