mirror of
https://github.com/stronk-dev/RandomChad.git
synced 2025-07-05 10:35:08 +02:00
Merge branch 'main' of github.com:actuallymentor/rocketeer
This commit is contained in:
commit
11e408ea19
@ -24,7 +24,8 @@ exports.notifyDiscordWebhook = async function( username, content, avatar_url, im
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Make webhook request
|
// Make webhook request
|
||||||
await fetch( discord.webhookurl, options )
|
const data = await fetch( discord.webhookurl, options ).then( res => res.json() )
|
||||||
|
if( data.code ) throw new Error ( `Discord webhook failed with ${ data.code }: ${ data.message }` )
|
||||||
|
|
||||||
} catch( e ) {
|
} catch( e ) {
|
||||||
console.error( 'Discord error ', e )
|
console.error( 'Discord error ', e )
|
||||||
|
@ -94,7 +94,7 @@ async function generateNewOutfitFromId( id, network='mainnet' ) {
|
|||||||
const [ firstname ] = rocketeer.name.split( ' ' )
|
const [ firstname ] = rocketeer.name.split( ' ' )
|
||||||
await notifyDiscordWebhook(
|
await notifyDiscordWebhook(
|
||||||
rocketeer.name,
|
rocketeer.name,
|
||||||
`${ firstname } obtained a new outfit on ${ network }!`,
|
`${ firstname } obtained a new outfit on ${ network }! \n\nView this Rocketeer on Opensea: https://opensea.io/assets/0xb3767b2033cf24334095dc82029dbf0e9528039d/${ id }.\n\nView all outfits on the Rocketeer toolkit: https://tools.rocketeer.fans/#/outfits/${ id }`,
|
||||||
rocketeer.image,
|
rocketeer.image,
|
||||||
`Outfit #${ available_outfits + 1 }`,
|
`Outfit #${ available_outfits + 1 }`,
|
||||||
newOutfitSvg.replace( '.svg','.jpg' )
|
newOutfitSvg.replace( '.svg','.jpg' )
|
||||||
|
@ -6,6 +6,7 @@ export default styled.img`
|
|||||||
width: 150px;
|
width: 150px;
|
||||||
margin: 1rem;
|
margin: 1rem;
|
||||||
cursor: ${ ( { onClick } ) => onClick ? 'pointer' : 'none' };
|
cursor: ${ ( { onClick } ) => onClick ? 'pointer' : 'none' };
|
||||||
|
border: ${ ( { highlight } ) => highlight ? '5px solid orange' : 'none' };
|
||||||
&:hover {
|
&:hover {
|
||||||
box-shadow: ${ ( { onClick } ) => onClick ? '0 0 20px 2px rgb(0 0 0 / 20%)' : 'none' };
|
box-shadow: ${ ( { onClick } ) => onClick ? '0 0 20px 2px rgb(0 0 0 / 20%)' : 'none' };
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,6 @@ import CircleImage from '../atoms/CircleImage'
|
|||||||
import { Text } from '../atoms/Text'
|
import { Text } from '../atoms/Text'
|
||||||
|
|
||||||
const Wrapper = styled.div`
|
const Wrapper = styled.div`
|
||||||
|
|
||||||
`
|
`
|
||||||
|
|
||||||
export default ( { title, ...props } ) => <Wrapper>
|
export default ( { title, ...props } ) => <Wrapper>
|
||||||
|
@ -177,24 +177,6 @@ export default function Verifier() {
|
|||||||
// Find the data for the clicked Rocketeer
|
// Find the data for the clicked Rocketeer
|
||||||
const selected = rocketeers.find( ( { id } ) => id === rocketeerId )
|
const selected = rocketeers.find( ( { id } ) => id === rocketeerId )
|
||||||
|
|
||||||
// If the selected rocketeer is available, compute it's available outfits to an easy to access property
|
|
||||||
if( selected ) {
|
|
||||||
|
|
||||||
const newOutfitAllowedInterval = 1000 * 60 * 60 * 24 * 30
|
|
||||||
const { value: outfits } = selected.attributes.find( ( { trait_type } ) => trait_type === 'available outfits' ) || { value: 0 }
|
|
||||||
const { value: last_outfit_change } = selected.attributes.find( ( { trait_type } ) => trait_type === 'last outfit change' ) || { value: 0 }
|
|
||||||
const timeUntilAllowedToChange = newOutfitAllowedInterval - ( Date.now() - last_outfit_change )
|
|
||||||
|
|
||||||
selected.outfits = outfits
|
|
||||||
selected.last_outfit_change = last_outfit_change
|
|
||||||
selected.new_outfit_available = timeUntilAllowedToChange < 0
|
|
||||||
selected.when_new_outfit = new Date( Date.now() + timeUntilAllowedToChange )
|
|
||||||
|
|
||||||
const [ full, outfitnumber ] = selected.image.match( /(?:-)(\d*)(?:\.jpg)/ ) || []
|
|
||||||
log( `Current outfit of ${ full } is ${ outfitnumber }` )
|
|
||||||
selected.current_outfit = outfitnumber || 0
|
|
||||||
}
|
|
||||||
|
|
||||||
log( "Selecting rocketeer ", selected )
|
log( "Selecting rocketeer ", selected )
|
||||||
|
|
||||||
// Set the selected rocketeer to state
|
// Set the selected rocketeer to state
|
||||||
@ -215,9 +197,9 @@ export default function Verifier() {
|
|||||||
<Text>Click on a Rocketeer to manage it's outfits</Text>
|
<Text>Click on a Rocketeer to manage it's outfits</Text>
|
||||||
<Section direction="row">
|
<Section direction="row">
|
||||||
|
|
||||||
{ rocketeers.map( ( { id, image } ) => {
|
{ rocketeers.map( ( { id, image, new_outfit_available } ) => {
|
||||||
|
|
||||||
return <Avatar id={ `rocketeer-${ id }` } onClick={ f => navigate( `/outfits/${ id }` ) } key={ id } src={ image } alt={ `Rocketeer number ${ id }` } />
|
return <Avatar highlight={ new_outfit_available } id={ `rocketeer-${ id }` } onClick={ f => navigate( `/outfits/${ id }` ) } key={ id } src={ image } alt={ `Rocketeer number ${ id }` } />
|
||||||
|
|
||||||
} ) }
|
} ) }
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import Avatar from '../molecules/Avatar'
|
|||||||
import Loading from '../molecules/Loading'
|
import Loading from '../molecules/Loading'
|
||||||
|
|
||||||
import { useState, useEffect } from 'react'
|
import { useState, useEffect } from 'react'
|
||||||
import { useRocketeerImages } from '../../modules/api'
|
import { useRocketeers } from '../../modules/api'
|
||||||
import { useAddress } from '../../modules/web3'
|
import { useAddress } from '../../modules/web3'
|
||||||
|
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ export default function Verifier() {
|
|||||||
const address = useAddress()
|
const address = useAddress()
|
||||||
const metamaskAddress = useAddress()
|
const metamaskAddress = useAddress()
|
||||||
const [ validatorAddress, setValidatorAddress ] = useState( )
|
const [ validatorAddress, setValidatorAddress ] = useState( )
|
||||||
const rocketeers = useRocketeerImages()
|
const rocketeers = useRocketeers()
|
||||||
|
|
||||||
|
|
||||||
// ///////////////////////////////
|
// ///////////////////////////////
|
||||||
@ -37,9 +37,9 @@ export default function Verifier() {
|
|||||||
<Text>Click a Rocketeer to view it's details.</Text>
|
<Text>Click a Rocketeer to view it's details.</Text>
|
||||||
<Section direction="row">
|
<Section direction="row">
|
||||||
|
|
||||||
{ rocketeers.map( ( { id, src } ) => {
|
{ rocketeers.map( ( { id, image } ) => {
|
||||||
|
|
||||||
return <Avatar onClick={ f => window.location.href =`https://viewer.rocketeer.fans/?rocketeer=${ id }` } key={ id } src={ src } alt={ `Rocketeer number ${ id }` } />
|
return <Avatar onClick={ f => window.location.href =`https://viewer.rocketeer.fans/?rocketeer=${ id }` } key={ id } src={ image } alt={ `Rocketeer number ${ id }` } />
|
||||||
|
|
||||||
} ) }
|
} ) }
|
||||||
|
|
||||||
|
@ -72,9 +72,35 @@ export function useRocketeers( onlyGrabThisId ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( !ids.length || cancelled ) return
|
if( !ids.length || cancelled ) return
|
||||||
|
|
||||||
|
// Grab Rocketeer metadata
|
||||||
const rocketeerMetas = await callApi( `/rocketeers/?ids=${ ids.join( ',' ) }` )
|
const rocketeerMetas = await callApi( `/rocketeers/?ids=${ ids.join( ',' ) }` )
|
||||||
log( 'Received rocketeers: ', rocketeerMetas )
|
log( 'Received rocketeers: ', rocketeerMetas )
|
||||||
if( !cancelled ) setRocketeers( rocketeerMetas )
|
|
||||||
|
// Annotate Rocketeers
|
||||||
|
const annotatedRocketeers = rocketeerMetas.map( rocketeer => {
|
||||||
|
|
||||||
|
// This is a dev environment issue where the token ids do not correspond to date
|
||||||
|
if( !rocketeer.attributes ) return rocketeer
|
||||||
|
|
||||||
|
const newOutfitAllowedInterval = 1000 * 60 * 60 * 24 * 30
|
||||||
|
const { value: outfits } = rocketeer.attributes.find( ( { trait_type } ) => trait_type === 'available outfits' ) || { value: 0 }
|
||||||
|
const { value: last_outfit_change } = rocketeer.attributes.find( ( { trait_type } ) => trait_type === 'last outfit change' ) || { value: 0 }
|
||||||
|
const timeUntilAllowedToChange = newOutfitAllowedInterval - ( Date.now() - last_outfit_change )
|
||||||
|
|
||||||
|
rocketeer.outfits = outfits
|
||||||
|
rocketeer.last_outfit_change = last_outfit_change
|
||||||
|
rocketeer.new_outfit_available = timeUntilAllowedToChange < 0
|
||||||
|
rocketeer.when_new_outfit = new Date( Date.now() + timeUntilAllowedToChange )
|
||||||
|
|
||||||
|
const [ full, outfitnumber ] = rocketeer.image.match( /(?:-)(\d*)(?:\.jpg)/ ) || []
|
||||||
|
rocketeer.current_outfit = outfitnumber || 0
|
||||||
|
|
||||||
|
return rocketeer
|
||||||
|
|
||||||
|
} )
|
||||||
|
|
||||||
|
if( !cancelled ) setRocketeers( annotatedRocketeers )
|
||||||
|
|
||||||
} catch( e ) {
|
} catch( e ) {
|
||||||
log( 'Error getting Rocketeers: ', e )
|
log( 'Error getting Rocketeers: ', e )
|
||||||
|
Loading…
x
Reference in New Issue
Block a user