initial commit
This commit is contained in:
1
.env
Normal file
1
.env
Normal file
@@ -0,0 +1 @@
|
||||
DISCORD_TOKEN=MTQwMjEyMTQ5MjAyMzQ4MDM3MQ.GP-E67.ALfqo9KDV8zNz6aollUWPsLq-cSIuuG0yzIijw
|
||||
153
Main.py
Normal file
153
Main.py
Normal file
@@ -0,0 +1,153 @@
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
import logging
|
||||
from dotenv import load_dotenv
|
||||
from pathlib import Path
|
||||
import os
|
||||
import sqlite_utils
|
||||
|
||||
# Show the path we expect to load
|
||||
# Explicitly find the .env file in the same directory as the script
|
||||
|
||||
env_path = Path(__file__).resolve().parent / ".env"
|
||||
print(f"Looking for .env at: {env_path}")
|
||||
|
||||
|
||||
# Load the env file
|
||||
load_dotenv(dotenv_path=env_path)
|
||||
|
||||
# Print token (or None)
|
||||
token = os.getenv("DISCORD_TOKEN")
|
||||
print(f"Loaded token Succesfully")
|
||||
|
||||
if token is None:
|
||||
raise RuntimeError(".env file not loaded or DISCORD_TOKEN not set.")
|
||||
|
||||
token = os.getenv("DISCORD_TOKEN")
|
||||
|
||||
handler = logging.FileHandler(filename='discord.log', encoding='utf-8', mode='w')
|
||||
intents = discord.Intents.default()
|
||||
intents.message_content = True
|
||||
intents.members = True
|
||||
|
||||
bot = commands.Bot(command_prefix='!', intents=intents)
|
||||
|
||||
@bot.event
|
||||
async def on_ready():
|
||||
print(f"{bot.user.name} is ready")
|
||||
|
||||
#Imports users from Discord to users table in dbot.db
|
||||
for guild in bot.guilds:
|
||||
print(f"Importing members from guild: {guild.name} ({guild.id})")
|
||||
async for member in guild.fetch_members(limit=None):
|
||||
add_user_to_db(member)
|
||||
print(f"All members have been added/updated in the database.")
|
||||
|
||||
@bot.event
|
||||
async def on_member_join(member):
|
||||
await member.send(f"Welcome to the server {member.name}")
|
||||
|
||||
@bot.event
|
||||
async def on_message(message):
|
||||
if message.author == bot.user:
|
||||
return
|
||||
|
||||
if "shit" in message.content.lower():
|
||||
#await message.delete()
|
||||
await message.channel.send(f"{message.author.mention} - bro thats a bad worddddd!")
|
||||
|
||||
await bot.process_commands(message)
|
||||
|
||||
@bot.command()
|
||||
async def hello(ctx):
|
||||
await ctx.send(f"Hello{ctx.author.mention}!")
|
||||
|
||||
##############################Points System Setup##################################################
|
||||
|
||||
#Initialize SQLite database
|
||||
db = sqlite_utils.Database("dbot.db")
|
||||
|
||||
# Creates the table if it does not exist (should only do this part once)
|
||||
if "users" not in db.table_names():
|
||||
db["users"].create(
|
||||
{"id": str, #Discord ID
|
||||
"name": str, # ACTUAL Discord name
|
||||
"discriminator": str, #4-digits after the username
|
||||
"displayName": str, # Name that appears in the server
|
||||
"points": int, #Points lol
|
||||
"title": str, #Field that will bestow a title upon the user depending on amount of points/level
|
||||
},
|
||||
pk="id"
|
||||
)
|
||||
|
||||
#Sets Variable users_table as the newly created (or already existing) database
|
||||
usersTable = db["users"]
|
||||
|
||||
|
||||
#Checks to see if the User has an ID in the table, if not it gets added, ALSO updates the displayName/discrimnator if they change
|
||||
def add_user_to_db(member: discord.Member):
|
||||
userID = str(member.id)
|
||||
try:
|
||||
existing = usersTable.get(userID)
|
||||
except KeyError:
|
||||
existing = None
|
||||
|
||||
if not existing:
|
||||
# Insert new user
|
||||
usersTable.insert(
|
||||
{
|
||||
"id": userID,
|
||||
"name": member.name,
|
||||
"discriminator": member.discriminator,
|
||||
"displayName": member.display_name,
|
||||
"points": 0,
|
||||
"title": ""
|
||||
},
|
||||
pk="id",
|
||||
ignore=True
|
||||
)
|
||||
else:
|
||||
# Update if name or discriminator changed
|
||||
updated = False
|
||||
if existing.get("displayName") != member.display_name:
|
||||
existing["displayName"] = member.display_name
|
||||
updated = True
|
||||
if existing.get("discriminator") != member.discriminator:
|
||||
existing["discriminator"] = member.discriminator
|
||||
updated = True
|
||||
if updated:
|
||||
usersTable.update(userID, existing)
|
||||
|
||||
|
||||
|
||||
#Import all members from ALL servers
|
||||
#@bot.event
|
||||
#async def on_ready():
|
||||
# print(f"{bot.user.name} is ready")
|
||||
|
||||
# for guild in bot.guilds:
|
||||
# print(f"Importing members from guild: {guild.name} ({guild.id})")
|
||||
# async for member in guild.members(limit=None):
|
||||
# add_user_to_db(member)
|
||||
# print(f"All members have been added/updated in the database.")
|
||||
|
||||
|
||||
#Creates function for bot to use
|
||||
def getPoints(userID: int) -> int:
|
||||
userID = str(userID)
|
||||
try:
|
||||
row = usersTable.get(userID)
|
||||
return row["points"]
|
||||
except KeyError:
|
||||
return 0
|
||||
|
||||
#Bot Command to view points
|
||||
@bot.command()
|
||||
async def points(ctx, member: discord.Member = None):
|
||||
member = member or ctx.author
|
||||
total = getPoints(member.id)
|
||||
await ctx.send(f"{member.mention} has {total} points.")
|
||||
|
||||
|
||||
|
||||
bot.run(token, log_handler=handler, log_level=logging.DEBUG)
|
||||
51
discord.log
Normal file
51
discord.log
Normal file
File diff suppressed because one or more lines are too long
14
hello.py
Normal file
14
hello.py
Normal file
@@ -0,0 +1,14 @@
|
||||
import sqlite_utils
|
||||
|
||||
#Create (or open) the database
|
||||
db = sqlite_utils.Database("dbot.db")
|
||||
|
||||
#Create the 'users' table with some example columns
|
||||
#primary_key=True means 'id' will be the unique identifier
|
||||
db["users"].create({
|
||||
"id": int,
|
||||
"username": str,
|
||||
"balance": int
|
||||
}, pk="id", if_not_exists=True)
|
||||
|
||||
print("Database and 'users' table created successfully!")
|
||||
0
memberImport.py
Normal file
0
memberImport.py
Normal file
4
requirements.txt
Normal file
4
requirements.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
discord.py
|
||||
python-dotenv
|
||||
sqlite-utils
|
||||
pandas
|
||||
Reference in New Issue
Block a user