MisskeyPagesにイベント送信ボタンを追加
This commit is contained in:
parent
5ae6b0058f
commit
64397708fd
5 changed files with 72 additions and 3 deletions
|
@ -2030,6 +2030,10 @@ pages:
|
|||
_dialog:
|
||||
content: "内容"
|
||||
resetRandom: "乱数をリセット"
|
||||
pushEvent: "イベントを送信させる"
|
||||
_pushEvent:
|
||||
event: "イベント名"
|
||||
message: "押したときに表示するメッセージ"
|
||||
|
||||
script:
|
||||
categories:
|
||||
|
|
|
@ -8,8 +8,15 @@
|
|||
<template #label>{{ $t('blocks._button.action') }}</template>
|
||||
<option value="dialog">{{ $t('blocks._button._action.dialog') }}</option>
|
||||
<option value="resetRandom">{{ $t('blocks._button._action.resetRandom') }}</option>
|
||||
<option value="pushEvent">{{ $t('blocks._button._action.pushEvent') }}</option>
|
||||
</ui-select>
|
||||
<ui-input v-if="value.action === 'dialog'" v-model="value.content"><span>{{ $t('blocks._button._action._dialog.content') }}</span></ui-input>
|
||||
<template v-if="value.action === 'dialog'">
|
||||
<ui-input v-model="value.content"><span>{{ $t('blocks._button._action._dialog.content') }}</span></ui-input>
|
||||
</template>
|
||||
<template v-else-if="value.action === 'pushEvent'">
|
||||
<ui-input v-model="value.event"><span>{{ $t('blocks._button._action._pushEvent.event') }}</span></ui-input>
|
||||
<ui-input v-model="value.message"><span>{{ $t('blocks._button._action._pushEvent.message') }}</span></ui-input>
|
||||
</template>
|
||||
</section>
|
||||
</x-container>
|
||||
</template>
|
||||
|
@ -43,6 +50,8 @@ export default Vue.extend({
|
|||
if (this.value.text == null) Vue.set(this.value, 'text', '');
|
||||
if (this.value.action == null) Vue.set(this.value, 'action', 'dialog');
|
||||
if (this.value.content == null) Vue.set(this.value, 'content', null);
|
||||
if (this.value.event == null) Vue.set(this.value, 'event', null);
|
||||
if (this.value.message == null) Vue.set(this.value, 'message', null);
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -27,6 +27,16 @@ export default Vue.extend({
|
|||
} else if (this.value.action === 'resetRandom') {
|
||||
this.script.aiScript.updateRandomSeed(Math.random());
|
||||
this.script.eval();
|
||||
} else if (this.value.action === 'pushEvent') {
|
||||
this.$root.api('page-push', {
|
||||
pageId: this.script.page.id,
|
||||
event: this.value.event
|
||||
});
|
||||
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.script.interpolate(this.value.message)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,8 +35,10 @@ class Script {
|
|||
public aiScript: ASEvaluator;
|
||||
private onError: any;
|
||||
public vars: Record<string, any>;
|
||||
public page: Record<string, any>;
|
||||
|
||||
constructor(aiScript, onError) {
|
||||
constructor(page, aiScript, onError) {
|
||||
this.page = page;
|
||||
this.aiScript = aiScript;
|
||||
this.onError = onError;
|
||||
this.eval();
|
||||
|
@ -113,7 +115,7 @@ export default Vue.extend({
|
|||
icon: faStickyNote
|
||||
});
|
||||
const pageVars = this.getPageVars();
|
||||
this.script = new Script(new ASEvaluator(this.page.variables, pageVars, {
|
||||
this.script = new Script(this.page, new ASEvaluator(this.page.variables, pageVars, {
|
||||
randomSeed: Math.random(),
|
||||
user: page.user,
|
||||
visitor: this.$store.state.i,
|
||||
|
|
44
src/server/api/endpoints/page-push.ts
Normal file
44
src/server/api/endpoints/page-push.ts
Normal file
|
@ -0,0 +1,44 @@
|
|||
import $ from 'cafy';
|
||||
import define from '../define';
|
||||
import { ID } from '../../../misc/cafy-id';
|
||||
import { publishMainStream } from '../../../services/stream';
|
||||
import { Users, Pages } from '../../../models';
|
||||
import { ApiError } from '../error';
|
||||
|
||||
export const meta = {
|
||||
requireCredential: true,
|
||||
secure: true,
|
||||
|
||||
params: {
|
||||
pageId: {
|
||||
validator: $.type(ID)
|
||||
},
|
||||
|
||||
event: {
|
||||
validator: $.str
|
||||
}
|
||||
},
|
||||
|
||||
errors: {
|
||||
noSuchPage: {
|
||||
message: 'No such page.',
|
||||
code: 'NO_SUCH_PAGE',
|
||||
id: '4a13ad31-6729-46b4-b9af-e86b265c2e74'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export default define(meta, async (ps, user) => {
|
||||
const page = await Pages.findOne(ps.pageId);
|
||||
if (page == null) {
|
||||
throw new ApiError(meta.errors.noSuchPage);
|
||||
}
|
||||
|
||||
publishMainStream(user.id, 'pageEvent', {
|
||||
pageId: ps.pageId,
|
||||
event: ps.event,
|
||||
user: await Users.pack(user, page.userId, {
|
||||
detail: true
|
||||
})
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue