diff --git a/app/http/endpoints/api/emojis.go b/app/http/endpoints/api/emojis.go
new file mode 100644
index 0000000..f6e7e85
--- /dev/null
+++ b/app/http/endpoints/api/emojis.go
@@ -0,0 +1,25 @@
+package api
+
+import (
+ "github.com/TicketsBot/GoPanel/botcontext"
+ "github.com/TicketsBot/GoPanel/utils"
+ "github.com/gin-gonic/gin"
+)
+
+func EmojisHandler(ctx *gin.Context) {
+ guildId := ctx.Keys["guildid"].(uint64)
+
+ botContext, err := botcontext.ContextForGuild(guildId)
+ if err != nil {
+ ctx.JSON(500, utils.ErrorJson(err))
+ return
+ }
+
+ emojis, err := botContext.GetGuildEmojis(guildId)
+ if err != nil {
+ ctx.JSON(500, utils.ErrorJson(err))
+ return
+ }
+
+ ctx.JSON(200, emojis)
+}
diff --git a/app/http/server.go b/app/http/server.go
index 9dffacc..825846d 100644
--- a/app/http/server.go
+++ b/app/http/server.go
@@ -75,6 +75,7 @@ func StartServer() {
guildAuthApiSupport.GET("/premium", api.PremiumHandler)
guildAuthApiSupport.GET("/user/:user", api.UserHandler)
guildAuthApiSupport.GET("/roles", api.RolesHandler)
+ guildAuthApiSupport.GET("/emojis", rl(middleware.RateLimitTypeGuild, 5, time.Second*30), api.EmojisHandler)
guildAuthApiSupport.GET("/members/search",
rl(middleware.RateLimitTypeGuild, 5, time.Second),
rl(middleware.RateLimitTypeGuild, 10, time.Second*30),
diff --git a/botcontext/botcontext.go b/botcontext/botcontext.go
index 8dd5500..068ad37 100644
--- a/botcontext/botcontext.go
+++ b/botcontext/botcontext.go
@@ -9,6 +9,7 @@ import (
"github.com/TicketsBot/database"
"github.com/rxdn/gdl/objects/channel"
"github.com/rxdn/gdl/objects/guild"
+ "github.com/rxdn/gdl/objects/guild/emoji"
"github.com/rxdn/gdl/objects/member"
"github.com/rxdn/gdl/objects/user"
"github.com/rxdn/gdl/rest"
@@ -100,6 +101,19 @@ func (ctx BotContext) GetGuildRoles(guildId uint64) (roles []guild.Role, err err
return
}
+func (ctx BotContext) GetGuildEmojis(guildId uint64) (emojis []emoji.Emoji, err error) {
+ if emojis := cache.Instance.GetGuildEmojis(guildId); len(emojis) > 0 {
+ return emojis, nil
+ }
+
+ emojis, err = rest.ListGuildEmojis(ctx.Token, ctx.RateLimiter, guildId)
+ if err == nil {
+ go cache.Instance.StoreEmojis(emojis, guildId)
+ }
+
+ return
+}
+
func (ctx BotContext) SearchMembers(guildId uint64, query string) (members []member.Member, err error) {
data := rest.SearchGuildMembersData{
Query: query,
diff --git a/frontend/src/components/EmojiItem.svelte b/frontend/src/components/EmojiItem.svelte
new file mode 100644
index 0000000..1a6d6fc
--- /dev/null
+++ b/frontend/src/components/EmojiItem.svelte
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
:{item.name}:
+
\ No newline at end of file
diff --git a/frontend/src/components/form/EmojiInput.svelte b/frontend/src/components/form/EmojiInput.svelte
index 14a1e53..d26c9ff 100644
--- a/frontend/src/components/form/EmojiInput.svelte
+++ b/frontend/src/components/form/EmojiInput.svelte
@@ -1,5 +1,7 @@
-
{label}
+ {#if label !== undefined}
+
{label}
+ {/if}
{#if !disabled}
diff --git a/frontend/src/components/form/RoleSelect.svelte b/frontend/src/components/form/RoleSelect.svelte
index a7b8399..d9f7452 100644
--- a/frontend/src/components/form/RoleSelect.svelte
+++ b/frontend/src/components/form/RoleSelect.svelte
@@ -1,6 +1,6 @@
-{#if label !== undefined}
+`{#if label !== undefined}
{label}
-{/if}
+{/if}`
-
-
-
+
+ None
+ {#each forms as form}
+ {form.title}
+ {/each}
+
-
+
Blue
Grey
Green
Red
-
+
-
- None
- {#each forms as form}
- {form.title}
- {/each}
-
+
+
Button Emoji
+
+
+ Custom Emoji
+ console.log('a')}>
+
+ {#if data.use_custom_emoji}
+
+
+
+
+ {:else}
+
+ {/if}
+
+
@@ -70,7 +90,7 @@
on:select={updateTeams}
isSearchable={false}
optionIdentifier="id"
- getSelectionLabel={nameMapper}
+ getSelectionLabel={emojiNameMapper}
getOptionLabel={nameMapper}
isMulti={true} />
@@ -95,8 +115,10 @@
import {colourToInt, intToColour} from "../../js/util";
import CategoryDropdown from "../CategoryDropdown.svelte";
import EmojiInput from "../form/EmojiInput.svelte";
+ import EmojiItem from "../EmojiItem.svelte";
import Select from 'svelte-select';
import Dropdown from "../form/Dropdown.svelte";
+ import Checkbox from "../form/Checkbox.svelte";
export let guildId;
export let seedDefault = true;
@@ -109,6 +131,7 @@
export let channels = [];
export let roles = [];
+ export let emojis = [];
export let teams = [];
export let forms = [];
@@ -144,6 +167,7 @@
}
const nameMapper = (team) => team.name;
+ const emojiNameMapper = (emoji) => `:${emoji.name}:`;
function mentionNameMapper(role) {
if (role.id === "user") {
diff --git a/frontend/src/views/Panels.svelte b/frontend/src/views/Panels.svelte
index 5b2d0b9..11e554f 100644
--- a/frontend/src/views/Panels.svelte
+++ b/frontend/src/views/Panels.svelte
@@ -16,6 +16,8 @@
Your panel quota: {panels.length} / {isPremium ? '∞' : '3'}
+
+
@@ -55,7 +57,7 @@
{#if !$loadingScreen}
-
+
Submit
@@ -142,6 +144,7 @@
let channels = [];
let roles = [];
+ let emojis = [];
let teams = [];
let forms = [];
let panels = [];
@@ -332,6 +335,16 @@
roles = res.data.roles;
}
+ async function loadEmojis() {
+ const res = await axios.get(`${API_URL}/api/${guildId}/emojis`);
+ if (res.status !== 200) {
+ notifyError(res.data.error);
+ return;
+ }
+
+ emojis = res.data;
+ }
+
async function loadForms() {
const res = await axios.get(`${API_URL}/api/${guildId}/forms`);
if (res.status !== 200) {
@@ -349,6 +362,7 @@
loadTeams(),
loadForms(),
loadRoles(),
+ loadEmojis(),
loadPanels(),
loadMultiPanels()
]);