Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
m1k1o
GitHub Repository: m1k1o/neko
Path: blob/master/client/src/store/user.ts
1301 views
1
import { getterTree, mutationTree, actionTree } from 'typed-vuex'
2
import { Member } from '~/neko/types'
3
import { EVENT } from '~/neko/events'
4
5
import md from 'simple-markdown'
6
import { accessor } from '~/store'
7
8
export const namespaced = true
9
10
interface Members {
11
[id: string]: Member
12
}
13
14
export const state = () => ({
15
id: '',
16
members: {} as Members,
17
})
18
19
export const getters = getterTree(state, {
20
member: (state) => state.members[state.id] || null,
21
admin: (state) => (state.members[state.id] ? state.members[state.id].admin : false),
22
muted: (state) => (state.members[state.id] ? state.members[state.id].muted : false),
23
})
24
25
export const mutations = mutationTree(state, {
26
setIgnored(state, { id, ignored }: { id: string; ignored: boolean }) {
27
state.members[id] = {
28
...state.members[id],
29
ignored,
30
}
31
},
32
setMuted(state, { id, muted }: { id: string; muted: boolean }) {
33
state.members[id] = {
34
...state.members[id],
35
muted,
36
}
37
},
38
setMembers(state, members: Member[]) {
39
const data: Members = {}
40
for (const member of members) {
41
data[member.id] = {
42
connected: true,
43
...member,
44
displayname: md.sanitizeText(member.displayname),
45
}
46
}
47
state.members = data
48
},
49
setMember(state, id: string) {
50
state.id = id
51
},
52
addMember(state, member: Member) {
53
state.members = {
54
...state.members,
55
[member.id]: {
56
connected: true,
57
...member,
58
displayname: md.sanitizeText(member.displayname),
59
},
60
}
61
},
62
delMember(state, id: string) {
63
state.members[id] = {
64
...state.members[id],
65
connected: false,
66
}
67
},
68
reset(state) {
69
state.members = {}
70
},
71
})
72
73
export const actions = actionTree(
74
{ state, getters, mutations },
75
{
76
ban({ state }, member: string | Member) {
77
if (!accessor.connected || !accessor.user.admin) {
78
return
79
}
80
81
if (typeof member === 'string') {
82
member = state.members[member]
83
}
84
85
if (!member) {
86
return
87
}
88
89
$client.sendMessage(EVENT.ADMIN.BAN, { id: member.id })
90
},
91
92
kick({ state }, member: string | Member) {
93
if (!accessor.connected || !accessor.user.admin) {
94
return
95
}
96
97
if (typeof member === 'string') {
98
member = state.members[member]
99
}
100
101
if (!member) {
102
return
103
}
104
105
$client.sendMessage(EVENT.ADMIN.KICK, { id: member.id })
106
},
107
108
mute({ state }, member: string | Member) {
109
if (!accessor.connected || !accessor.user.admin) {
110
return
111
}
112
113
if (typeof member === 'string') {
114
member = state.members[member]
115
}
116
117
if (!member) {
118
return
119
}
120
121
$client.sendMessage(EVENT.ADMIN.MUTE, { id: member.id })
122
},
123
124
unmute({ state }, member: string | Member) {
125
if (!accessor.connected || !accessor.user.admin) {
126
return
127
}
128
129
if (typeof member === 'string') {
130
member = state.members[member]
131
}
132
133
if (!member) {
134
return
135
}
136
137
$client.sendMessage(EVENT.ADMIN.UNMUTE, { id: member.id })
138
},
139
},
140
)
141
142