Untitled

mail@pastecode.io avatar
unknown
plain_text
21 days ago
9.5 kB
0
Indexable
Never
import nextcord
import datetime
from datetime import datetime
import time
import re
import times
import json
import os
import traceback

TOKEN = "MTE2OTkzNjk2NTMyMDMzMTM0NQ.GLLK92.96jOucMvZHPixGUtNUD5SEAc6WMWiUmgOZ6ZW0"

activity = nextcord.Activity(type=nextcord.ActivityType.watching, name="Awaiting A Name")
intents=nextcord.Intents().all()
bot = nextcord.Client(intents=intents, activity=activity)

colors = {
    "main" : 0xFEC23E,
    "log" : 0xFEC23E,
    "error" : 0xFF0000
}

testingGuildIDs = [
    1112755563978293268,
    1040903592707625020
]

fruitStockChannel = 1112755563978293271

fruitToEmoji = {'Rocket': '<:Rocket:1171910339928014868>', 
                'Spin': '<:Spin:1171910373742485564>', 
                'Chop': '<:Chop:1171910424019607573>', 
                'Spring': '<:Spring:1171910569733914654>', 
                'Bomb': '<:Bomb:1171910612461297736>', 
                'Smoke': '<:Smoke:1171910630769426474>', 
                'Spike': '<:Spike:1171910763414306826>', 
                'Flame': '<:Flame:1171910791168020480>', 
                'Falcon': '<:Falcon:1171910816719700140>', 
                'Ice': '<:Ice:1171910845899493467>', 
                'Sand': '<:Sand:1171910876069118074>', 
                'Dark': '<:Dark:1171910916690948158>', 
                'Diamond': '<:Diamond:1171911022907494501>', 
                'Light': '<:Light:1171911052213092382>', 
                'Rubber': '<:Rubber:1171911069892087960>', 
                'Barrier': '<:Barrier:1171911101697507341>', 
                'Ghost': '<:Ghost:1171911129350541433>', 
                'Magma': '<:Magma:1171911213672824934>', 
                'Quake': '<:Quake:1171911239438438521>', 
                'Buddha': '<:Buddha:1171911260334460989>', 
                'Love': '<:Love:1171911293888897074>', 
                'String': '<:String:1171911319860035736>', 
                'Spider': '<:String:1171911319860035736>', 
                'Sound': '<:Sound:1171911446335082578>', 
                'Phoenix': '<:Phoenix:1171911516480622622>', 
                'Portal': '<:Portal:1171911941028061254>', 
                'Rumble': '<:Rumble:1171912038226870383>', 
                'Pain': '<:Pain:1171912058619572244>', 
                'Blizzard': '<:Blizzard:1171912148981645312>', 
                'Gravity': '<:Gravity:1171912175619678280>', 
                'Mammoth': '<:Mammoth:1171912198436700263>', 
                'Dough': '<:Dough:1171912339231092737>', 
                'Shadow': '<:Shadow:1171912363956523059>', 
                'Venom': '<:Venom:1171912405341712407>', 
                'Control': '<:Control:1171912492201545818>', 
                'Spirit': '<:Spirit:1171912527601475675>',
                'Dragon': '<:Dragon:1171912567858417724>', 
                'Leopard': '<:Leopard:1171912593691136030>'}

GuildID = 1112755563978293268

class stockPingButtons(nextcord.ui.View):
    def __init__(self):
        super().__init__(timeout=None)
        self.add_item(nextcord.ui.Button(
                style=nextcord.ButtonStyle.link, url="https://discord.com/api/oauth2/authorize?client_id=1112751645735010334&permissions=8&scope=bot", label="Invite Me", disabled=False))
        self.add_item(nextcord.ui.Button(
                style=nextcord.ButtonStyle.link, url="https://discord.gg/bloxzy", label="Main Server", disabled=False))

currentStockLeft = ""
def getFileInfo(fileName):
    data = {}
    current_directory = os.path.dirname(os.path.abspath(__file__))

    # Path to the JSON file
    json_file_path = os.path.join(current_directory, fileName)

    with open(json_file_path, 'r') as json_file:
        try:
            data = json.load(json_file)
        except:
            print("File is empty")
    return data

async def stockAlertServer(stockType):
    currentStock = getFileInfo(stockType)
    importantServers = getFileInfo("important.json")
    for server in importantServers:
        server = importantServers[server]
        print(server)
        print(type(server))
        channel = await bot.fetch_channel(server['channel'])
        embed = nextcord.Embed(title=currentStock['title'], description=currentStock['description'])
        view = stockPingButtons()
        if "role" in server:          
            await channel.send(content=f"<@&{server['role']}>", embed=embed, view=view)
        else:
            await channel.send(embed=embed, view=view)
        

def writeToJson(fileName, role, interaction):
    data = {}
    current_directory = os.path.dirname(os.path.abspath(__file__))

    # Path to the JSON file
    json_file_path = os.path.join(current_directory, fileName)

    with open(json_file_path, 'r') as json_file:
        try:
            data = json.load(json_file)
        except:
            print("File is empty")
    
    if role:
        newData = {
            interaction.guild_id: {
                "channel" : interaction.channel_id,
                "role" : role.id,
                "added" : interaction.user.id
            }
        }
    else:
        newData = {
            interaction.guild_id: {
                "channel" : interaction.channel_id,
                "added" : interaction.user.id
            }
        }
    
    if str(interaction.guild_id) in data:
        data.pop(str(interaction.guild_id))
    data.update(newData)
    with open(json_file_path, 'w') as json_file:
        formattedData = json.dumps(data, indent=4)
        json_file.write(formattedData)
    print("Added")

@bot.event
async def on_message(message):
    print(message.content)
    try:
        if not message.author.id == bot.user.id:
            if message.channel.id == fruitStockChannel:
                currentStockLeft = f"<t:{times.timeToUnix(times.hour_rounder())}:R>"
                channel = await bot.fetch_channel(1112755563978293271)
                content = str(message.content)
                beliDescription = content.replace("$", "<:beli:1120686451156320307>")
                finalDescription = ""
                stringLists = beliDescription.splitlines() # Get each fruit line
                stockType = "Stock Update"
                for item in stringLists:
                    if "mirage" in item.lower():
                        stockType = "Mirage Stock"
                    elif "normal" in item.lower():
                        stockType = "Normal Stock"
                    else:
                        fruitsFindAll = re.findall(r'@([^\s]+)(?<!\bbeli\b)|<:([^\s:]+)(?<!\bbeli\b):', item) # Get each individual fruit
                        fruits = list(set([x for group in fruitsFindAll for x in group if x]))
                        print(f"FRUITS: {fruits}")
                        for fruit in fruits:
                            print(f"FRUIT: {fruit}")
                            beliString = re.findall(r'<:beli:\d+>(\d+,\d+)', item)
                            newString = fruitToEmoji[fruit] + f" {fruit}" + " - " + "<:beli:1120686451156320307>"
                            print("new String" + newString)
                            for item in beliString:
                                newString += item
                            finalDescription += newString + "\n"
                finalDescription += "\n" + "Expires: " + str(currentStockLeft)
                embed = nextcord.Embed(title=stockType, description=finalDescription)
                await channel.send(embed=embed)
                
                current_directory = os.path.dirname(os.path.abspath(__file__))
                
                if stockType == "Mirage Stock":
                    # Path to the JSON file
                    json_file_path = os.path.join(current_directory, "miragestock.json")
                    data = {
                        "title" : stockType,
                        "description" : finalDescription,
                    }
                    
                    with open(json_file_path, 'w') as json_file:
                        formattedData = json.dumps(data, indent=4)
                        json_file.write(formattedData)
                    await stockAlertServer("miragestock.json")
                elif stockType == "Normal Stock":
                    json_file_path = os.path.join(current_directory, "normalstock.json")
                    data = {
                        "title" : stockType,
                        "description" : finalDescription,
                    }
                    
                    with open(json_file_path, 'w') as json_file:
                        formattedData = json.dumps(data, indent=4)
                        json_file.write(formattedData)
                    await stockAlertServer("normalstock.json")
    except Exception as e:
        print(traceback.print_exc())
        print(f"Message Error {e}")

    

@bot.event
async def on_ready():
    print(f"{bot.user} is now online!")

@bot.slash_command(guild_ids=testingGuildIDs, description="Stick the stock to the current channel")
async def stockalert(interaction: nextcord.Interaction, role: nextcord.Role = None):
    writeToJson("important.json", role, interaction)
    embed = nextcord.Embed(title="Server Added", description="Your server has been added to the stock alert list.")
    await interaction.response.send_message(embed=embed)
    

bot.run(TOKEN)