Merge branch 'develop'
This commit is contained in:
commit
09f4b9e546
|
@ -9,6 +9,12 @@
|
||||||
You should also include the user name that made the change.
|
You should also include the user name that made the change.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
## 13.1.7 (2023/01/22)
|
||||||
|
|
||||||
|
### Improvements
|
||||||
|
- 新たな実績を追加
|
||||||
|
- MFMにscaleタグを追加
|
||||||
|
|
||||||
## 13.1.4 (2023/01/22)
|
## 13.1.4 (2023/01/22)
|
||||||
|
|
||||||
### Improvements
|
### Improvements
|
||||||
|
|
|
@ -95,7 +95,7 @@ follow: "Segui"
|
||||||
followRequest: "Richiesta di follow"
|
followRequest: "Richiesta di follow"
|
||||||
followRequests: "Richieste di follow"
|
followRequests: "Richieste di follow"
|
||||||
unfollow: "Smetti di seguire"
|
unfollow: "Smetti di seguire"
|
||||||
followRequestPending: "La richiesta di follow deve essere approvata"
|
followRequestPending: "Richiesta in approvazione"
|
||||||
enterEmoji: "Inserisci emoji"
|
enterEmoji: "Inserisci emoji"
|
||||||
renote: "Rinota"
|
renote: "Rinota"
|
||||||
unrenote: "Annulla rinota"
|
unrenote: "Annulla rinota"
|
||||||
|
@ -1048,6 +1048,9 @@ _achievements:
|
||||||
_noteFavorited1:
|
_noteFavorited1:
|
||||||
title: "Guarda le stelle"
|
title: "Guarda le stelle"
|
||||||
description: "Aggiungi una Nota ai preferiti per la prima volta"
|
description: "Aggiungi una Nota ai preferiti per la prima volta"
|
||||||
|
_myNoteFavorited1:
|
||||||
|
title: "Fornitura stelline"
|
||||||
|
description: "Qualcuno ha preferito una delle tue Note"
|
||||||
_profileFilled:
|
_profileFilled:
|
||||||
title: "Perfettamente"
|
title: "Perfettamente"
|
||||||
description: "Imposta il tuo profilo"
|
description: "Imposta il tuo profilo"
|
||||||
|
|
|
@ -1105,6 +1105,9 @@ _achievements:
|
||||||
title: "I Love Misskey"
|
title: "I Love Misskey"
|
||||||
description: "\"I ❤ #Misskey\"を投稿した"
|
description: "\"I ❤ #Misskey\"を投稿した"
|
||||||
flavor: "Misskeyを使ってくださりありがとうございます! by 開発チーム"
|
flavor: "Misskeyを使ってくださりありがとうございます! by 開発チーム"
|
||||||
|
_foundTreasure:
|
||||||
|
title: "宝探し"
|
||||||
|
description: "隠されたお宝を発見した"
|
||||||
_client30min:
|
_client30min:
|
||||||
title: "ひとやすみ"
|
title: "ひとやすみ"
|
||||||
description: "クライアントを起動してから30分以上経過した"
|
description: "クライアントを起動してから30分以上経過した"
|
||||||
|
@ -1125,6 +1128,9 @@ _achievements:
|
||||||
_htl20npm:
|
_htl20npm:
|
||||||
title: "流れるTL"
|
title: "流れるTL"
|
||||||
description: "ホームタイムラインの流速が20npmを越す"
|
description: "ホームタイムラインの流速が20npmを越す"
|
||||||
|
_viewInstanceChart:
|
||||||
|
title: "アナリスト"
|
||||||
|
description: "インスタンスのチャートを表示した"
|
||||||
_outputHelloWorldOnScratchpad:
|
_outputHelloWorldOnScratchpad:
|
||||||
title: "Hello, world!"
|
title: "Hello, world!"
|
||||||
description: "スクラッチパッドで hello world を出力した"
|
description: "スクラッチパッドで hello world を出力した"
|
||||||
|
|
|
@ -899,6 +899,15 @@ unlike: "Не вподобати"
|
||||||
numberOfLikes: "Вподобання"
|
numberOfLikes: "Вподобання"
|
||||||
show: "Відображення"
|
show: "Відображення"
|
||||||
color: "Колір"
|
color: "Колір"
|
||||||
|
achievements: "Досягнення"
|
||||||
|
_achievements:
|
||||||
|
_types:
|
||||||
|
_notes1:
|
||||||
|
title: "налаштовую свій msky"
|
||||||
|
description: "Перша нотатка"
|
||||||
|
flavor: "Приємного часу з Misskey!"
|
||||||
|
_notes10:
|
||||||
|
title: "Декілька нотаток"
|
||||||
_role:
|
_role:
|
||||||
priority: "Пріоритет"
|
priority: "Пріоритет"
|
||||||
_priority:
|
_priority:
|
||||||
|
|
|
@ -956,7 +956,7 @@ _achievements:
|
||||||
title: "满是帖子"
|
title: "满是帖子"
|
||||||
description: "发布了500篇帖子"
|
description: "发布了500篇帖子"
|
||||||
_notes1000:
|
_notes1000:
|
||||||
title: "帖子成山"
|
title: "积帖成山"
|
||||||
description: "发布了1,000篇帖子"
|
description: "发布了1,000篇帖子"
|
||||||
_notes5000:
|
_notes5000:
|
||||||
title: "帖如泉涌"
|
title: "帖如泉涌"
|
||||||
|
|
|
@ -1047,25 +1047,59 @@ _achievements:
|
||||||
description: "第一次將貼文收進摘錄"
|
description: "第一次將貼文收進摘錄"
|
||||||
_noteFavorited1:
|
_noteFavorited1:
|
||||||
title: "觀星者"
|
title: "觀星者"
|
||||||
description: "第一次將貼文收進我的最愛"
|
description: "第一次將貼文收藏至我的最愛"
|
||||||
|
_myNoteFavorited1:
|
||||||
|
title: "想要星星"
|
||||||
|
description: "自己的貼文被他人收藏至「我的最愛」了"
|
||||||
_profileFilled:
|
_profileFilled:
|
||||||
title: "有備而來"
|
title: "有備而來"
|
||||||
description: "設定了個人檔案"
|
description: "設定了個人檔案"
|
||||||
_markedAsCat:
|
_markedAsCat:
|
||||||
title: "我是貓"
|
title: "我是貓"
|
||||||
description: "已將帳戶設定為貓"
|
description: "已將帳戶設定為貓"
|
||||||
|
flavor: "還沒有名字。"
|
||||||
|
_following1:
|
||||||
|
title: "首次追隨"
|
||||||
|
description: "首次追隨了"
|
||||||
|
_following10:
|
||||||
|
title: "跟著跟著"
|
||||||
|
description: "跟隨超過10人了"
|
||||||
|
_following50:
|
||||||
|
title: "朋友很多"
|
||||||
|
description: "跟隨超過50人了"
|
||||||
|
_following100:
|
||||||
|
title: "100位朋友"
|
||||||
|
description: "跟隨超過100人了"
|
||||||
|
_following300:
|
||||||
|
title: "朋友過多"
|
||||||
|
description: "跟隨超過300人了"
|
||||||
|
_followers1:
|
||||||
|
title: "第一個追隨者"
|
||||||
|
description: "第一次被追隨"
|
||||||
|
_followers10:
|
||||||
|
title: "Follow me!"
|
||||||
|
description: "跟隨者超過10人了"
|
||||||
|
_followers50:
|
||||||
|
title: "成群結隊"
|
||||||
|
description: "跟隨者超過50人了"
|
||||||
|
_followers100:
|
||||||
|
title: "紅人"
|
||||||
|
description: "跟隨者超過100人了"
|
||||||
|
_followers300:
|
||||||
|
title: "請排成一排"
|
||||||
|
description: "跟隨者超過300人了"
|
||||||
_followers500:
|
_followers500:
|
||||||
title: "基站"
|
title: "基站"
|
||||||
description: "超過500名追隨者"
|
description: "超過500名追隨者了"
|
||||||
_followers1000:
|
_followers1000:
|
||||||
title: "影響者"
|
title: "影響者"
|
||||||
description: "超過1000名追隨者"
|
description: "超過1000名追隨者了"
|
||||||
_collectAchievements30:
|
_collectAchievements30:
|
||||||
title: "成就收藏家"
|
title: "成就收藏家"
|
||||||
description: "獲得30個以上的成就"
|
description: "獲得30個以上的成就"
|
||||||
_viewAchievements3min:
|
_viewAchievements3min:
|
||||||
title: "喜愛成就"
|
title: "喜愛成就"
|
||||||
description: "看成就列表要花了3分鐘以上"
|
description: "看成就列表要花3分鐘以上"
|
||||||
_iLoveMisskey:
|
_iLoveMisskey:
|
||||||
title: "I Love Misskey"
|
title: "I Love Misskey"
|
||||||
description: "發布「I ❤ #Misskey」"
|
description: "發布「I ❤ #Misskey」"
|
||||||
|
@ -1083,6 +1117,7 @@ _achievements:
|
||||||
_postedAt0min0sec:
|
_postedAt0min0sec:
|
||||||
title: "報時"
|
title: "報時"
|
||||||
description: "在0分0秒發佈貼文"
|
description: "在0分0秒發佈貼文"
|
||||||
|
flavor: "啵.啵.啵.嗶ー"
|
||||||
_selfQuote:
|
_selfQuote:
|
||||||
title: "自我引用"
|
title: "自我引用"
|
||||||
description: "引用了自己的貼文"
|
description: "引用了自己的貼文"
|
||||||
|
@ -1094,7 +1129,7 @@ _achievements:
|
||||||
description: "在暫存記憶體輸出了 hello world"
|
description: "在暫存記憶體輸出了 hello world"
|
||||||
_open3windows:
|
_open3windows:
|
||||||
title: "多重視窗"
|
title: "多重視窗"
|
||||||
description: "開啟3個以上的視窗"
|
description: "開啟了3個以上的視窗"
|
||||||
_driveFolderCircularReference:
|
_driveFolderCircularReference:
|
||||||
title: "循環引用"
|
title: "循環引用"
|
||||||
description: "試圖遞迴套入雲端硬碟資料夾"
|
description: "試圖遞迴套入雲端硬碟資料夾"
|
||||||
|
@ -1110,6 +1145,30 @@ _achievements:
|
||||||
_setNameToSyuilo:
|
_setNameToSyuilo:
|
||||||
title: "神的情結"
|
title: "神的情結"
|
||||||
description: "將名稱設定為 syuilo"
|
description: "將名稱設定為 syuilo"
|
||||||
|
_passedSinceAccountCreated1:
|
||||||
|
title: "一周年"
|
||||||
|
description: "自建立帳戶開始過了1年"
|
||||||
|
_passedSinceAccountCreated2:
|
||||||
|
title: "二周年"
|
||||||
|
description: "自建立帳戶開始過了2年"
|
||||||
|
_passedSinceAccountCreated3:
|
||||||
|
title: "三周年"
|
||||||
|
description: "自建立帳戶開始過了3年"
|
||||||
|
_loggedInOnBirthday:
|
||||||
|
title: "生日快樂"
|
||||||
|
description: "在生日當天登入了"
|
||||||
|
_loggedInOnNewYearsDay:
|
||||||
|
title: "新年快樂"
|
||||||
|
description: "在元旦當天登入了"
|
||||||
|
flavor: "今年也請對敝實例多多指教"
|
||||||
|
_cookieClicked:
|
||||||
|
title: "點擊餅乾的遊戲"
|
||||||
|
description: "點擊了餅乾"
|
||||||
|
flavor: "是不是軟體有問題?"
|
||||||
|
_brainDiver:
|
||||||
|
title: "Brain Driver"
|
||||||
|
description: "發佈了Brain Driver的連結"
|
||||||
|
flavor: "Misskey-Misskey La-Tu-Ma"
|
||||||
_role:
|
_role:
|
||||||
new: "建立角色"
|
new: "建立角色"
|
||||||
edit: "編輯角色"
|
edit: "編輯角色"
|
||||||
|
@ -1759,6 +1818,7 @@ _notification:
|
||||||
pollEnded: "問卷調查已產生結果"
|
pollEnded: "問卷調查已產生結果"
|
||||||
unreadAntennaNote: "天線 {name}"
|
unreadAntennaNote: "天線 {name}"
|
||||||
emptyPushNotificationMessage: "推送通知已更新"
|
emptyPushNotificationMessage: "推送通知已更新"
|
||||||
|
achievementEarned: "獲得成就"
|
||||||
_types:
|
_types:
|
||||||
all: "全部 "
|
all: "全部 "
|
||||||
follow: "追隨中"
|
follow: "追隨中"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"version": "13.1.6",
|
"version": "13.1.7",
|
||||||
"codename": "nasubi",
|
"codename": "nasubi",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|
|
@ -62,12 +62,14 @@ const ACHIEVEMENT_TYPES = [
|
||||||
'collectAchievements30',
|
'collectAchievements30',
|
||||||
'viewAchievements3min',
|
'viewAchievements3min',
|
||||||
'iLoveMisskey',
|
'iLoveMisskey',
|
||||||
|
'foundTreasure',
|
||||||
'client30min',
|
'client30min',
|
||||||
'noteDeletedWithin1min',
|
'noteDeletedWithin1min',
|
||||||
'postedAtLateNight',
|
'postedAtLateNight',
|
||||||
'postedAt0min0sec',
|
'postedAt0min0sec',
|
||||||
'selfQuote',
|
'selfQuote',
|
||||||
'htl20npm',
|
'htl20npm',
|
||||||
|
'viewInstanceChart',
|
||||||
'outputHelloWorldOnScratchpad',
|
'outputHelloWorldOnScratchpad',
|
||||||
'open3windows',
|
'open3windows',
|
||||||
'driveFolderCircularReference',
|
'driveFolderCircularReference',
|
||||||
|
|
|
@ -200,6 +200,12 @@ export default defineComponent({
|
||||||
style = `transform: translateX(${x}em) translateY(${y}em);`;
|
style = `transform: translateX(${x}em) translateY(${y}em);`;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 'scale': {
|
||||||
|
const x = Math.min(parseInt(token.props.args.x ?? '1'), 5);
|
||||||
|
const y = Math.min(parseInt(token.props.args.y ?? '1'), 5);
|
||||||
|
style = `transform: scale(${x}, ${y});`;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 'fg': {
|
case 'fg': {
|
||||||
let color = token.props.args.color;
|
let color = token.props.args.color;
|
||||||
if (!/^[0-9a-f]{3,6}$/i.test(color)) color = 'f00';
|
if (!/^[0-9a-f]{3,6}$/i.test(color)) color = 'f00';
|
||||||
|
|
|
@ -4,12 +4,15 @@
|
||||||
<div style="overflow: clip;">
|
<div style="overflow: clip;">
|
||||||
<MkSpacer :content-max="600" :margin-min="20">
|
<MkSpacer :content-max="600" :margin-min="20">
|
||||||
<div class="_gaps_m znqjceqz">
|
<div class="_gaps_m znqjceqz">
|
||||||
<div ref="containerEl" v-panel class="about" :class="{ playing: easterEggEngine != null }">
|
<div v-panel class="about">
|
||||||
|
<div ref="containerEl" class="container" :class="{ playing: easterEggEngine != null }">
|
||||||
<img src="/client-assets/about-icon.png" alt="" class="icon" draggable="false" @load="iconLoaded" @click="gravity"/>
|
<img src="/client-assets/about-icon.png" alt="" class="icon" draggable="false" @load="iconLoaded" @click="gravity"/>
|
||||||
<div class="misskey">Misskey</div>
|
<div class="misskey">Misskey</div>
|
||||||
<div class="version">v{{ version }}</div>
|
<div class="version">v{{ version }}</div>
|
||||||
<span v-for="emoji in easterEggEmojis" :key="emoji.id" class="emoji" :data-physics-x="emoji.left" :data-physics-y="emoji.top" :class="{ _physics_circle_: !emoji.emoji.startsWith(':') }"><MkEmoji class="emoji" :emoji="emoji.emoji" :is-reaction="false" :normal="true" :no-style="true"/></span>
|
<span v-for="emoji in easterEggEmojis" :key="emoji.id" class="emoji" :data-physics-x="emoji.left" :data-physics-y="emoji.top" :class="{ _physics_circle_: !emoji.emoji.startsWith(':') }"><MkEmoji class="emoji" :emoji="emoji.emoji" :is-reaction="false" :normal="true" :no-style="true"/></span>
|
||||||
</div>
|
</div>
|
||||||
|
<button v-if="thereIsTreasure" class="_button treasure" @click="getTreasure"><img src="/fluent-emoji/1f3c6.png" class="treasureImg"></button>
|
||||||
|
</div>
|
||||||
<div style="text-align: center;">
|
<div style="text-align: center;">
|
||||||
{{ i18n.ts._aboutMisskey.about }}<br><a href="https://misskey-hub.net/docs/misskey.html" target="_blank" class="_link">{{ i18n.ts.learnMore }}</a>
|
{{ i18n.ts._aboutMisskey.about }}<br><a href="https://misskey-hub.net/docs/misskey.html" target="_blank" class="_link">{{ i18n.ts.learnMore }}</a>
|
||||||
</div>
|
</div>
|
||||||
|
@ -70,6 +73,8 @@ import { i18n } from '@/i18n';
|
||||||
import { defaultStore } from '@/store';
|
import { defaultStore } from '@/store';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
import { definePageMetadata } from '@/scripts/page-metadata';
|
import { definePageMetadata } from '@/scripts/page-metadata';
|
||||||
|
import { claimAchievement, claimedAchievements } from '@/scripts/achievements';
|
||||||
|
import { $i } from '@/account';
|
||||||
|
|
||||||
const patrons = [
|
const patrons = [
|
||||||
'まっちゃとーにゅ',
|
'まっちゃとーにゅ',
|
||||||
|
@ -152,6 +157,8 @@ const patrons = [
|
||||||
'pixeldesu',
|
'pixeldesu',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
let thereIsTreasure = $ref($i && !claimedAchievements.includes('foundTreasure'));
|
||||||
|
|
||||||
let easterEggReady = false;
|
let easterEggReady = false;
|
||||||
let easterEggEmojis = $ref([]);
|
let easterEggEmojis = $ref([]);
|
||||||
let easterEggEngine = $ref(null);
|
let easterEggEngine = $ref(null);
|
||||||
|
@ -187,6 +194,11 @@ function iLoveMisskey() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getTreasure() {
|
||||||
|
thereIsTreasure = false;
|
||||||
|
claimAchievement('foundTreasure');
|
||||||
|
}
|
||||||
|
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
if (easterEggEngine) {
|
if (easterEggEngine) {
|
||||||
easterEggEngine.stop();
|
easterEggEngine.stop();
|
||||||
|
@ -206,10 +218,27 @@ definePageMetadata({
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.znqjceqz {
|
.znqjceqz {
|
||||||
> .about {
|
> .about {
|
||||||
|
position: relative;
|
||||||
|
border-radius: var(--radius);
|
||||||
|
|
||||||
|
> .treasure {
|
||||||
|
position: absolute;
|
||||||
|
top: 60px;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
margin: 0 auto;
|
||||||
|
width: min-content;
|
||||||
|
|
||||||
|
> .treasureImg {
|
||||||
|
width: 25px;
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
> .container {
|
||||||
position: relative;
|
position: relative;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
border-radius: var(--radius);
|
|
||||||
|
|
||||||
&.playing {
|
&.playing {
|
||||||
&, * {
|
&, * {
|
||||||
|
@ -230,21 +259,28 @@ definePageMetadata({
|
||||||
width: 80px;
|
width: 80px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
> .misskey {
|
> .misskey {
|
||||||
margin: 0.75em auto 0 auto;
|
margin: 0.75em auto 0 auto;
|
||||||
width: max-content;
|
width: max-content;
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
> .version {
|
> .version {
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
width: max-content;
|
width: max-content;
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
> .emoji {
|
> .emoji {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
|
@ -256,5 +292,6 @@ definePageMetadata({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -86,7 +86,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, computed } from 'vue';
|
import { ref, computed, watch } from 'vue';
|
||||||
import XEmojis from './about.emojis.vue';
|
import XEmojis from './about.emojis.vue';
|
||||||
import XFederation from './about.federation.vue';
|
import XFederation from './about.federation.vue';
|
||||||
import { version, instanceName, host } from '@/config';
|
import { version, instanceName, host } from '@/config';
|
||||||
|
@ -100,6 +100,7 @@ import * as os from '@/os';
|
||||||
import number from '@/filters/number';
|
import number from '@/filters/number';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
import { definePageMetadata } from '@/scripts/page-metadata';
|
import { definePageMetadata } from '@/scripts/page-metadata';
|
||||||
|
import { claimAchievement } from '@/scripts/achievements';
|
||||||
|
|
||||||
const props = withDefaults(defineProps<{
|
const props = withDefaults(defineProps<{
|
||||||
initialTab?: string;
|
initialTab?: string;
|
||||||
|
@ -110,6 +111,12 @@ const props = withDefaults(defineProps<{
|
||||||
let stats = $ref(null);
|
let stats = $ref(null);
|
||||||
let tab = $ref(props.initialTab);
|
let tab = $ref(props.initialTab);
|
||||||
|
|
||||||
|
watch($$(tab), () => {
|
||||||
|
if (tab === 'charts') {
|
||||||
|
claimAchievement('viewInstanceChart');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const initStats = () => os.api('stats', {
|
const initStats = () => os.api('stats', {
|
||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
stats = res;
|
stats = res;
|
||||||
|
|
|
@ -58,12 +58,14 @@ export const ACHIEVEMENT_TYPES = [
|
||||||
'collectAchievements30',
|
'collectAchievements30',
|
||||||
'viewAchievements3min',
|
'viewAchievements3min',
|
||||||
'iLoveMisskey',
|
'iLoveMisskey',
|
||||||
|
'foundTreasure',
|
||||||
'client30min',
|
'client30min',
|
||||||
'noteDeletedWithin1min',
|
'noteDeletedWithin1min',
|
||||||
'postedAtLateNight',
|
'postedAtLateNight',
|
||||||
'postedAt0min0sec',
|
'postedAt0min0sec',
|
||||||
'selfQuote',
|
'selfQuote',
|
||||||
'htl20npm',
|
'htl20npm',
|
||||||
|
'viewInstanceChart',
|
||||||
'outputHelloWorldOnScratchpad',
|
'outputHelloWorldOnScratchpad',
|
||||||
'open3windows',
|
'open3windows',
|
||||||
'driveFolderCircularReference',
|
'driveFolderCircularReference',
|
||||||
|
@ -331,6 +333,11 @@ export const ACHIEVEMENT_BADGES = {
|
||||||
bg: 'linear-gradient(0deg, rgb(255 77 77), rgb(247 155 214))',
|
bg: 'linear-gradient(0deg, rgb(255 77 77), rgb(247 155 214))',
|
||||||
frame: 'silver',
|
frame: 'silver',
|
||||||
},
|
},
|
||||||
|
'foundTreasure': {
|
||||||
|
img: '/fluent-emoji/1f3c6.png',
|
||||||
|
bg: 'linear-gradient(0deg, rgb(197 69 192), rgb(2 112 155))',
|
||||||
|
frame: 'gold',
|
||||||
|
},
|
||||||
'client30min': {
|
'client30min': {
|
||||||
img: '/fluent-emoji/1f552.png',
|
img: '/fluent-emoji/1f552.png',
|
||||||
bg: 'linear-gradient(0deg, rgb(220 223 225), rgb(172 192 207))',
|
bg: 'linear-gradient(0deg, rgb(220 223 225), rgb(172 192 207))',
|
||||||
|
@ -361,6 +368,11 @@ export const ACHIEVEMENT_BADGES = {
|
||||||
bg: 'linear-gradient(0deg, rgb(220 223 225), rgb(172 192 207))',
|
bg: 'linear-gradient(0deg, rgb(220 223 225), rgb(172 192 207))',
|
||||||
frame: 'bronze',
|
frame: 'bronze',
|
||||||
},
|
},
|
||||||
|
'viewInstanceChart': {
|
||||||
|
img: '/fluent-emoji/1f4ca.png',
|
||||||
|
bg: 'linear-gradient(0deg, rgb(58 231 198), rgb(37 194 255))',
|
||||||
|
frame: 'bronze',
|
||||||
|
},
|
||||||
'outputHelloWorldOnScratchpad': {
|
'outputHelloWorldOnScratchpad': {
|
||||||
img: '/fluent-emoji/1f530.png',
|
img: '/fluent-emoji/1f530.png',
|
||||||
bg: 'linear-gradient(0deg, rgb(58 231 198), rgb(37 194 255))',
|
bg: 'linear-gradient(0deg, rgb(58 231 198), rgb(37 194 255))',
|
||||||
|
@ -437,11 +449,12 @@ export const ACHIEVEMENT_BADGES = {
|
||||||
frame: 'bronze' | 'silver' | 'gold' | 'platinum';
|
frame: 'bronze' | 'silver' | 'gold' | 'platinum';
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
export const claimedAchievements = ($i && $i.achievements) ? $i.achievements.map(x => x.name) : [];
|
export const claimedAchievements: typeof ACHIEVEMENT_TYPES[number][] = ($i && $i.achievements) ? $i.achievements.map(x => x.name) : [];
|
||||||
|
|
||||||
const claimingQueue = new Set<string>();
|
const claimingQueue = new Set<string>();
|
||||||
|
|
||||||
export async function claimAchievement(type: typeof ACHIEVEMENT_TYPES[number]) {
|
export async function claimAchievement(type: typeof ACHIEVEMENT_TYPES[number]) {
|
||||||
|
if ($i == null) return;
|
||||||
if (claimedAchievements.includes(type)) return;
|
if (claimedAchievements.includes(type)) return;
|
||||||
claimingQueue.add(type);
|
claimingQueue.add(type);
|
||||||
claimedAchievements.push(type);
|
claimedAchievements.push(type);
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
export const MFM_TAGS = ['tada', 'jelly', 'twitch', 'shake', 'spin', 'jump', 'bounce', 'flip', 'x2', 'x3', 'x4', 'position', 'fg', 'bg', 'font', 'blur', 'rainbow', 'sparkle', 'rotate'];
|
export const MFM_TAGS = ['tada', 'jelly', 'twitch', 'shake', 'spin', 'jump', 'bounce', 'flip', 'x2', 'x3', 'x4', 'scale', 'position', 'fg', 'bg', 'font', 'blur', 'rainbow', 'sparkle', 'rotate'];
|
||||||
|
|
Loading…
Reference in New Issue