Skip to content
This repository was archived by the owner on Oct 26, 2019. It is now read-only.

Implement dynamic emoji management. #206

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/HttpApi.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import chat from './routes/chat';
import motd from './routes/motd';
import now from './routes/now';
import imports from './routes/import';
import emoji from './routes/emoji';

// middleware
import addFullUrl from './middleware/addFullUrl';
Expand Down Expand Up @@ -135,6 +136,7 @@ export default class UwaveHttpApi extends Router {
.use('/bans', bans(this))
.use('/booth', booth(this))
.use('/chat', chat(this))
.use('/emoji', emoji(this))
.use('/import', imports(this))
.use('/motd', motd(this))
.use('/now', now(this))
Expand Down
38 changes: 38 additions & 0 deletions src/controllers/emoji.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { NotFoundError } from '../errors';
import toItemResponse from '../utils/toItemResponse';

export async function getAll(req) {
const { emoji } = req.uwave;

return toItemResponse(
await emoji.list(),
{ url: req.fullUrl },
);
}

export async function getEmoji(req) {
const { emoji } = req.uwave;

const data = await emoji.getEmoji(req.params.shortcode);
if (!data) {
throw new NotFoundError();
}

return toItemResponse(data, { url: req.fullUrl });
}

export async function addCustomEmoji(req) {
const { emoji } = req.uwave;

await emoji.addCustomEmoji(req.user, req.params.shortcode, req);

return toItemResponse({}, { url: req.fullUrl });
}

export async function deleteCustomEmoji(req) {
const { emoji } = req.uwave;

await emoji.deleteCustomEmoji(req.user, req.params.shortcode);

return toItemResponse({}, { url: req.fullUrl });
}
36 changes: 36 additions & 0 deletions src/routes/emoji.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import router from 'router';
import route from '../route';
import { HTTPError } from '../errors';
import protect from '../middleware/protect';
import * as controller from '../controllers/emoji';

export default function emojiRouter() {
function checkEmojiEnabled(req, res, next) {
if (!req.uwave.emoji) {
next(new HTTPError(400, 'Emoji are not enabled.'));
} else {
next();
}
}

return router()
.use(checkEmojiEnabled)
.get(
'/',
route(controller.getAll),
)
.get(
'/:shortcode',
route(controller.getEmoji),
)
.put(
'/:shortcode',
protect('emoji.add'),
route(controller.addCustomEmoji),
)
.delete(
'/:shortcode',
protect('emoji.remove'),
route(controller.deleteCustomEmoji),
);
}
6 changes: 6 additions & 0 deletions src/sockets.js
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,12 @@ export default class SocketServer {
}
});
},
'emoji:add': (emoji) => {
this.broadcast('emoji:add', emoji);
},
'emoji:remove': (emoji) => {
this.broadcast('emoji:remove', emoji);
},
};

/**
Expand Down