ccccnbo2 / app.py
coollsd's picture
Update app.py
75abeb6 verified
raw
history blame
6.13 kB
import requests
import discord
from discord.ext import commands
import asyncio
from fastapi import FastAPI
import uvicorn
import os
app = FastAPI()
TOKEN = os.environ.get('TOKEN')
CHANNEL_ID = 1295583330951102494
api = 'https://ps99.biggamesapi.io/api/exists'
petst = [
'Huge Dino Cat', 'Golden Huge Dino Cat', 'Rainbow Huge Dino Cat', 'Shiny Huge Dino Cat', 'Golden Shiny Huge Dino Cat', 'Rainbow Shiny Huge Dino Cat',
]
pet_images = {
'Huge Dino Cat': 'https://media.discordapp.net/attachments/1295832789534507089/1296209703172313178/14976397288.png?ex=671174db&is=6710235b&hm=079d37b0492d2b6451572a4a6a7c8c3721666d08415bbe956c170024aeae3c98&=&format=webp&quality=lossless&width=224&height=224',
'Golden Huge Dino Cat': 'https://media.discordapp.net/attachments/1295832789534507089/1296209702220206080/14976397095.png?ex=671174db&is=6710235b&hm=43909eb7906ce13f1d385675021e7d5d0301cde26303a957a0a8a7066cf7cca3&=&format=webp&quality=lossless&width=224&height=224',
'Rainbow Huge Dino Cat': 'https://media.discordapp.net/attachments/1295832789534507089/1296209702912528485/rb_dino.png?ex=671174db&is=6710235b&hm=ad5c03bc4ce8a7a187c6e996f179e79d2b780f6e95e836bb91ac41b14510d836&=&format=webp&quality=lossless&width=224&height=224',
'Shiny Huge Dino Cat': 'https://media.discordapp.net/attachments/1295832789534507089/1296209702572523583/shiny_dino.png?ex=671174db&is=6710235b&hm=0ba086e9cc24dc7b46fac01495ca07f6b5df0b34b5399ae7b5c3e9142c9cddf1&=&format=webp&quality=lossless&width=224&height=224',
'Golden Shiny Huge Dino Cat': 'https://media.discordapp.net/attachments/1295832789534507089/1296209701956096121/golden_shiny_dino.png?ex=671174db&is=6710235b&hm=233838fe44924ae59b72c320a2086afbadfa38a84890289e574daca84e119bc5&=&format=webp&quality=lossless&width=224&height=224',
'Rainbow Shiny Huge Dino Cat': 'https://media.discordapp.net/attachments/1295832789534507089/1296209701653975090/rb_shiny_din.png?ex=671174db&is=6710235b&hm=c81ecefdb06ddcf21c79493606bf37ad5bd4cba4c23ffa5f215f2c29aaec7293&=&format=webp&quality=lossless&width=224&height=224',
}
intents = discord.Intents.default()
bot = commands.Bot(command_prefix='!', intents=intents)
async def send_embed_message(channel, pet_name, previous_value, current_value, is_change=False):
pet_image_url = pet_images.get(pet_name, None)
embed = discord.Embed(
title=f"{'🚨 New Pet has been redeemed!' if is_change else 'Current Count'}",
description=f"{pet_name} has been redeemed with a serial of: **{global_serial_count}**",
color=discord.Color.blue() if not is_change else discord.Color.orange(),
)
if pet_image_url:
embed.set_thumbnail(url=pet_image_url)
await channel.send(embed=embed)
last_known_values = {
'Huge Dino Cat': 1,
'Golden Huge Dino Cat': 0,
'Rainbow Huge Dino Cat': 0,
'Shiny Huge Dino Cat': 0,
'Golden Shiny Huge Dino Cat': 0,
'Rainbow Shiny Huge Dino Cat': 0
}
global_serial_count = 1
async def petdata():
global global_serial_count
try:
response = requests.get(api)
if response.status_code == 200:
data = response.json()
if data['status'] == 'ok':
pet_values = {pet: 0 for pet in petst}
for pet in data['data']:
pet_id = pet['configData']['id']
is_shiny = pet['configData'].get('sh', False)
pet_type = pet['configData'].get('pt', None)
value = pet['value']
if pet_type == 1 and is_shiny:
pet_name = f"Golden Shiny {pet_id}"
elif pet_type == 2 and is_shiny:
pet_name = f"Rainbow Shiny {pet_id}"
elif pet_type == 1:
pet_name = f"Golden {pet_id}"
elif pet_type == 2:
pet_name = f"Rainbow {pet_id}"
elif pet_type is None:
if is_shiny:
pet_name = f"Shiny {pet_id}"
else:
pet_name = f"{pet_id}"
if pet_name in pet_values:
print(f"Found pet: {pet_name} with exist count {value}")
pet_values[pet_name] = value
if last_known_values[pet_name] != value:
global_serial_count += 1
serial_number = global_serial_count
print(f"New redemption detected for {pet_name}. Incremented serial to {serial_number}")
last_known_values[pet_name] = value
return pet_values
print(f"Error code: {response.status_code}")
except Exception as e:
print(f"Error: {e}")
return None
async def main_loop():
lastknown = {pet: None for pet in petst}
channel = bot.get_channel(CHANNEL_ID)
if channel is None:
print("Invalid channel ID. Please check your channel ID.")
return
while True:
vvalues = await petdata()
if vvalues is not None:
for pet, value in vvalues.items():
if lastknown[pet] is None:
print(pet, value)
elif value != lastknown[pet]:
await send_embed_message(channel, pet, lastknown[pet], value, is_change=True)
lastknown[pet] = value
else:
print("Broken check")
await asyncio.sleep(60)
@bot.event
async def on_ready():
print(f'Logged in as {bot.user.name}')
bot.loop.create_task(main_loop())
@app.get("/")
async def read_root():
return {"Hello": "World"}
async def run_bot():
await bot.start(TOKEN)
@app.on_event("startup")
async def startup_event():
asyncio.create_task(run_bot())
if __name__ == "__main__":
print("===== Application Startup =====")
print(f"FastAPI running on http://0.0.0.0:7860")
print("Discord bot starting...")
uvicorn.run("main:app", host="0.0.0.0", port=7860)