This commit is contained in:
nelle 2024-06-26 13:41:23 -06:00
parent 262c7a1556
commit 1c16b749c3
3 changed files with 123 additions and 1 deletions

View file

@ -165,7 +165,7 @@ cacheRemoteFiles: "Cache remote files"
cacheRemoteFilesDescription: "When this setting is disabled, remote files are loaded cacheRemoteFilesDescription: "When this setting is disabled, remote files are loaded
directly from the remote server. Disabling this will decrease storage usage, but directly from the remote server. Disabling this will decrease storage usage, but
increase traffic, as thumbnails will not be generated." increase traffic, as thumbnails will not be generated."
flagAsBot: "Mark this account as a bot 🤖" flagAsBot: "Mark this account as a bot"
flagAsBotDescription: "Enable this option if this account is controlled by a program. flagAsBotDescription: "Enable this option if this account is controlled by a program.
If enabled, it will act as a flag for other developers to prevent endless interaction If enabled, it will act as a flag for other developers to prevent endless interaction
chains with other bots and adjust Iceshrimp's internal systems to treat this account chains with other bots and adjust Iceshrimp's internal systems to treat this account
@ -174,6 +174,10 @@ flagAsCat: "Are you a cat? 😺"
flagAsCatDescription: "You'll get cat ears and speak like a cat!" flagAsCatDescription: "You'll get cat ears and speak like a cat!"
flagSpeakAsCat: "Speak as a cat" flagSpeakAsCat: "Speak as a cat"
flagSpeakAsCatDescription: "Your beeps will get nyanified when in cat mode" flagSpeakAsCatDescription: "Your beeps will get nyanified when in cat mode"
flagAsRobo: "Are you a robot? 🤖"
flagAsRoboDescription: "You'll get an antenna and speak like a robot!"
flagSpeakAsRobo: "Speak as a robot"
flagSpeakAsRoboDescription: "Your beeps will get robofied when in robot mode"
flagShowTimelineReplies: "Show replies in timeline" flagShowTimelineReplies: "Show replies in timeline"
flagShowTimelineRepliesDescription: "Shows replies of users to beeps of other users flagShowTimelineRepliesDescription: "Shows replies of users to beeps of other users
in the timeline if turned on." in the timeline if turned on."

View file

@ -35,6 +35,43 @@
</MkA> </MkA>
</template> </template>
<template>
<span
v-if="disableLink"
v-user-preview="disablePreview ? undefined : user.id"
class="robomode _noSelect"
:class="{ cat: user.isRobo, square: $store.state.squareAvatars }"
:style="{ color }"
:title="acct(user)"
@click="onClick"
>
<img class="inner" :src="url" loading="lazy" decoding="async" />
<MkUserOnlineIndicator
v-if="showIndicator && user.instance == null"
class="indicator"
:user="user"
/>
</span>
<MkA
v-else
v-user-preview="disablePreview ? undefined : user.id"
class="robomode _noSelect"
:class="{ cat: user.isRobo, square: $store.state.squareAvatars }"
:style="{ color }"
:to="userPage(user)"
:title="acct(user)"
:target="target"
@click.stop
>
<img class="inner" :src="url" loading="lazy" decoding="async" />
<MkUserOnlineIndicator
v-if="showIndicator && user.instance == null"
class="indicator"
:user="user"
/>
</MkA>
</template>
<script lang="ts" setup> <script lang="ts" setup>
import { onMounted, watch } from "vue"; import { onMounted, watch } from "vue";
import type * as misskey from "iceshrimp-js"; import type * as misskey from "iceshrimp-js";
@ -196,4 +233,77 @@ watch(
} }
} }
} }
.robomode {
position: relative;
display: inline-block;
vertical-align: bottom;
flex-shrink: 0;
border-radius: 100%;
line-height: 30px;
> .inner {
position: absolute;
bottom: 0;
left: 0;
right: 0;
top: 0;
border-radius: 100%;
z-index: 1;
overflow: hidden;
object-fit: cover;
width: 100%;
height: 100%;
}
> .indicator {
position: absolute;
z-index: 1;
bottom: 0;
left: 0;
width: 18%;
height: 18%;
}
&.square {
border-radius: 20%;
> .inner {
border-radius: 20%;
}
}
&.cat {
&:before,
&:after {
background: #ebbcba;
border: solid 4px currentColor;
box-sizing: border-box;
content: "";
display: inline-block;
height: 100%;
width: 100%;
}
&:before {
border-radius: 0 75% 75%;
transform: rotate(37.5deg) skew(30deg);
}
&:after {
border-radius: 75% 0 75% 75%;
transform: rotate(-37.5deg) skew(-30deg);
}
&:hover {
&:before {
animation: earwiggleleft 1s infinite;
}
&:after {
animation: earwiggleright 1s infinite;
}
}
}
}
</style> </style>

View file

@ -149,6 +149,12 @@
i18n.ts.flagSpeakAsCatDescription i18n.ts.flagSpeakAsCatDescription
}}</template></FormSwitch }}</template></FormSwitch
> >
<FormSwitch v-model="profile.isRobo" class="_formBlock"
>{{ i18n.ts.flagAsRobo
}}<template #caption>{{
i18n.ts.flagAsRoboDescription
}}</template></FormSwitch
>
<FormSwitch v-model="profile.isBot" class="_formBlock" <FormSwitch v-model="profile.isBot" class="_formBlock"
>{{ i18n.ts.flagAsBot >{{ i18n.ts.flagAsBot
}}<template #caption>{{ }}<template #caption>{{
@ -186,6 +192,7 @@ const profile = reactive({
birthday: $i?.birthday, birthday: $i?.birthday,
lang: $i?.lang, lang: $i?.lang,
isBot: $i?.isBot, isBot: $i?.isBot,
isRobo: $i?.isRobo,
isCat: $i?.isCat, isCat: $i?.isCat,
speakAsCat: $i?.speakAsCat, speakAsCat: $i?.speakAsCat,
}); });
@ -240,6 +247,7 @@ function save() {
birthday: profile.birthday || null, birthday: profile.birthday || null,
lang: profile.lang || null, lang: profile.lang || null,
isBot: !!profile.isBot, isBot: !!profile.isBot,
isRobo: !!profile.isRobo,
isCat: !!profile.isCat, isCat: !!profile.isCat,
speakAsCat: !!profile.speakAsCat, speakAsCat: !!profile.speakAsCat,
}); });