Optimisation + Bug fixes & QoL panel form changes
This commit is contained in:
parent
c0f6775a0e
commit
81f5374680
@ -1,21 +1,19 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/TicketsBot/GoPanel/botcontext"
|
||||
dbclient "github.com/TicketsBot/GoPanel/database"
|
||||
"github.com/TicketsBot/GoPanel/rpc"
|
||||
"github.com/TicketsBot/GoPanel/rpc/cache"
|
||||
"github.com/TicketsBot/GoPanel/utils"
|
||||
"github.com/TicketsBot/common/collections"
|
||||
"github.com/TicketsBot/common/premium"
|
||||
"github.com/TicketsBot/database"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/rxdn/gdl/objects/channel"
|
||||
"github.com/rxdn/gdl/objects/interaction/component"
|
||||
"github.com/rxdn/gdl/rest/request"
|
||||
"golang.org/x/sync/errgroup"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
@ -34,7 +32,7 @@ type panelBody struct {
|
||||
WelcomeMessage *string `json:"welcome_message"`
|
||||
Mentions []string `json:"mentions"`
|
||||
WithDefaultTeam bool `json:"default_team"`
|
||||
Teams []database.SupportTeam `json:"teams"`
|
||||
Teams []int `json:"teams"`
|
||||
ImageUrl *string `json:"image_url,omitempty"`
|
||||
ThumbnailUrl *string `json:"thumbnail_url,omitempty"`
|
||||
ButtonStyle component.ButtonStyle `json:"button_style,string"`
|
||||
@ -124,10 +122,7 @@ func CreatePanel(ctx *gin.Context) {
|
||||
if err != nil {
|
||||
var unwrapped request.RestError
|
||||
if errors.As(err, &unwrapped) && unwrapped.StatusCode == 403 {
|
||||
ctx.AbortWithStatusJSON(500, gin.H{
|
||||
"success": false,
|
||||
"error": "I do not have permission to send messages in the specified channel",
|
||||
})
|
||||
ctx.AbortWithStatusJSON(500, utils.ErrorStr("I do not have permission to send messages in the specified channel"))
|
||||
} else {
|
||||
// TODO: Most appropriate error?
|
||||
ctx.AbortWithStatusJSON(500, gin.H{
|
||||
@ -169,40 +164,40 @@ func CreatePanel(ctx *gin.Context) {
|
||||
|
||||
// insert role mention data
|
||||
// string is role ID or "user" to mention the ticket opener
|
||||
validRoles, err := getRoleHashSet(guildId)
|
||||
if err != nil {
|
||||
ctx.JSON(500, utils.ErrorJson(err))
|
||||
return
|
||||
}
|
||||
|
||||
var roleMentions []uint64
|
||||
for _, mention := range data.Mentions {
|
||||
if mention == "user" {
|
||||
if err = dbclient.Client.PanelUserMention.Set(panelId, true); err != nil {
|
||||
ctx.AbortWithStatusJSON(500, gin.H{
|
||||
"success": false,
|
||||
"error": err.Error(),
|
||||
})
|
||||
ctx.JSON(500, utils.ErrorJson(err))
|
||||
return
|
||||
}
|
||||
} else {
|
||||
roleId, err := strconv.ParseUint(mention, 10, 64)
|
||||
if err != nil {
|
||||
ctx.AbortWithStatusJSON(500, gin.H{
|
||||
"success": false,
|
||||
"error": err.Error(),
|
||||
})
|
||||
ctx.JSON(400, utils.ErrorStr("Invalid role ID"))
|
||||
return
|
||||
}
|
||||
|
||||
// should we check the role is a valid role in the guild?
|
||||
// not too much of an issue if it isnt
|
||||
if validRoles.Contains(roleId) {
|
||||
roleMentions = append(roleMentions, roleId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if err = dbclient.Client.PanelRoleMentions.Add(panelId, roleId); err != nil {
|
||||
ctx.AbortWithStatusJSON(500, gin.H{
|
||||
"success": false,
|
||||
"error": err.Error(),
|
||||
})
|
||||
if err := dbclient.Client.PanelRoleMentions.Replace(panelId, roleMentions); err != nil {
|
||||
ctx.JSON(500, utils.ErrorJson(err))
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if responseCode, err := insertTeams(guildId, panelId, data.Teams); err != nil {
|
||||
ctx.JSON(responseCode, utils.ErrorJson(err))
|
||||
// Already validated, we are safe to insert
|
||||
if err := dbclient.Client.PanelTeams.Replace(panelId, data.Teams); err != nil {
|
||||
ctx.JSON(500, utils.ErrorJson(err))
|
||||
return
|
||||
}
|
||||
|
||||
@ -212,29 +207,6 @@ func CreatePanel(ctx *gin.Context) {
|
||||
})
|
||||
}
|
||||
|
||||
// returns (response_code, error)
|
||||
func insertTeams(guildId uint64, panelId int, teams []database.SupportTeam) (int, error) {
|
||||
// insert teams
|
||||
group, _ := errgroup.WithContext(context.Background())
|
||||
for _, team := range teams {
|
||||
group.Go(func() error {
|
||||
// ensure team exists
|
||||
exists, err := dbclient.Client.SupportTeam.Exists(team.Id, guildId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !exists {
|
||||
return fmt.Errorf("team with id %d not found", team.Id)
|
||||
}
|
||||
|
||||
return dbclient.Client.PanelTeams.Add(panelId, team.Id)
|
||||
})
|
||||
}
|
||||
|
||||
return 500, group.Wait()
|
||||
}
|
||||
|
||||
var urlRegex = regexp.MustCompile(`^https?://([-a-zA-Z0-9@:%._+~#=]{1,256})\.[a-zA-Z0-9()]{1,63}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)$`)
|
||||
|
||||
func (p *panelBody) doValidations(ctx *gin.Context, guildId uint64) bool {
|
||||
@ -307,6 +279,19 @@ func (p *panelBody) doValidations(ctx *gin.Context, guildId uint64) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
{
|
||||
valid, err := p.verifyTeams(guildId)
|
||||
if err != nil {
|
||||
ctx.AbortWithStatusJSON(500, utils.ErrorJson(err))
|
||||
return false
|
||||
}
|
||||
|
||||
if !valid {
|
||||
ctx.AbortWithStatusJSON(400, utils.ErrorStr("Invalid teams provided"))
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
ok, err := p.verifyFormId(guildId)
|
||||
if err != nil {
|
||||
@ -419,3 +404,27 @@ func (p *panelBody) verifyFormId(guildId uint64) (bool, error) {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
|
||||
func (p *panelBody) verifyTeams(guildId uint64) (bool, error) {
|
||||
return dbclient.Client.SupportTeam.AllTeamsExistForGuild(guildId, p.Teams)
|
||||
}
|
||||
|
||||
func getRoleHashSet(guildId uint64) (*collections.Set[uint64], error) {
|
||||
ctx, err := botcontext.ContextForGuild(guildId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
roles, err := ctx.GetGuildRoles(guildId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
set := collections.NewSet[uint64]()
|
||||
|
||||
for _, role := range roles {
|
||||
set.Add(role.Id)
|
||||
}
|
||||
|
||||
return set, nil
|
||||
}
|
||||
|
@ -13,7 +13,8 @@ func ListPanels(ctx *gin.Context) {
|
||||
type panelResponse struct {
|
||||
database.Panel
|
||||
Mentions []string `json:"mentions"`
|
||||
Teams []database.SupportTeam `json:"teams"`
|
||||
//Teams []database.SupportTeam `json:"teams"`
|
||||
Teams []int `json:"teams"`
|
||||
}
|
||||
|
||||
guildId := ctx.Keys["guildid"].(uint64)
|
||||
@ -39,6 +40,16 @@ func ListPanels(ctx *gin.Context) {
|
||||
group.Go(func() error {
|
||||
var mentions []string
|
||||
|
||||
// get if we should mention the ticket opener
|
||||
shouldMention, err := dbclient.Client.PanelUserMention.ShouldMentionUser(p.PanelId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if shouldMention {
|
||||
mentions = append(mentions, "user")
|
||||
}
|
||||
|
||||
// get role mentions
|
||||
roles, err := dbclient.Client.PanelRoleMentions.GetRoles(p.PanelId)
|
||||
if err != nil {
|
||||
@ -50,25 +61,20 @@ func ListPanels(ctx *gin.Context) {
|
||||
mentions = append(mentions, strconv.FormatUint(roleId, 10))
|
||||
}
|
||||
|
||||
// get if we should mention the ticket opener
|
||||
shouldMention, err := dbclient.Client.PanelUserMention.ShouldMentionUser(p.PanelId)
|
||||
teamIds, err := dbclient.Client.PanelTeams.GetTeamIds(p.PanelId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if shouldMention {
|
||||
mentions = append(mentions, "user")
|
||||
}
|
||||
|
||||
teams, err := dbclient.Client.PanelTeams.GetTeams(p.PanelId)
|
||||
if err != nil {
|
||||
return err
|
||||
// Don't serve null
|
||||
if teamIds == nil {
|
||||
teamIds = make([]int, 0)
|
||||
}
|
||||
|
||||
wrapped[i] = panelResponse{
|
||||
Panel: p,
|
||||
Mentions: mentions,
|
||||
Teams: teams,
|
||||
Teams: teamIds,
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -77,12 +77,6 @@ func UpdatePanel(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// TODO: Optimise this
|
||||
panelIds := make([]int, len(panels))
|
||||
for i, panel := range panels {
|
||||
panelIds[i] = panel.PanelId
|
||||
}
|
||||
|
||||
messageData := multiPanelMessageData{
|
||||
Title: multiPanel.Title,
|
||||
Content: multiPanel.Content,
|
||||
@ -167,15 +161,16 @@ func UpdatePanel(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// insert role mention data
|
||||
// delete old data
|
||||
if err = dbclient.Client.PanelRoleMentions.DeleteAll(panel.PanelId); err != nil {
|
||||
ctx.AbortWithStatusJSON(500, utils.ErrorJson(err))
|
||||
// insert mention data
|
||||
validRoles, err := getRoleHashSet(guildId)
|
||||
if err != nil {
|
||||
ctx.JSON(500, utils.ErrorJson(err))
|
||||
return
|
||||
}
|
||||
|
||||
// string is role ID or "user" to mention the ticket opener
|
||||
var shouldMentionUser bool
|
||||
var roleMentions []uint64
|
||||
for _, mention := range data.Mentions {
|
||||
if mention == "user" {
|
||||
shouldMentionUser = true
|
||||
@ -186,35 +181,27 @@ func UpdatePanel(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// should we check the role is a valid role in the guild?
|
||||
// not too much of an issue if it isnt
|
||||
if err = dbclient.Client.PanelRoleMentions.Add(panel.PanelId, roleId); err != nil {
|
||||
ctx.AbortWithStatusJSON(500, utils.ErrorJson(err))
|
||||
return
|
||||
if validRoles.Contains(roleId) {
|
||||
roleMentions = append(roleMentions, roleId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if err = dbclient.Client.PanelUserMention.Set(panel.PanelId, shouldMentionUser); err != nil {
|
||||
if err := dbclient.Client.PanelUserMention.Set(panel.PanelId, shouldMentionUser); err != nil {
|
||||
ctx.AbortWithStatusJSON(500, utils.ErrorJson(err))
|
||||
return
|
||||
}
|
||||
|
||||
// insert support teams
|
||||
// TODO: Stop race conditions - 1 transaction
|
||||
// delete teams
|
||||
if err := dbclient.Client.PanelTeams.DeleteAll(panel.PanelId); err != nil {
|
||||
if err := dbclient.Client.PanelRoleMentions.Replace(panel.PanelId, roleMentions); err != nil {
|
||||
ctx.JSON(500, utils.ErrorJson(err))
|
||||
return
|
||||
}
|
||||
|
||||
// insert new
|
||||
if responseCode, err := insertTeams(guildId, panel.PanelId, data.Teams); err != nil {
|
||||
ctx.JSON(responseCode, utils.ErrorJson(err))
|
||||
// We are safe to insert, team IDs already validated
|
||||
if err := dbclient.Client.PanelTeams.Replace(panel.PanelId, data.Teams); err != nil {
|
||||
ctx.JSON(500, utils.ErrorJson(err))
|
||||
return
|
||||
}
|
||||
|
||||
ctx.JSON(200, gin.H{
|
||||
"success": true,
|
||||
})
|
||||
ctx.JSON(200, utils.SuccessResponse)
|
||||
}
|
||||
|
@ -2,7 +2,8 @@
|
||||
<div class="multiselect-super">
|
||||
<Select placeholder="Select..." items={panels} optionIdentifier="panel_id" getOptionLabel={labelMapper}
|
||||
getSelectionLabel={labelMapper} bind:selectedValue={selectedRaw}
|
||||
on:select={update} on:clear={handleClear} {isMulti} />
|
||||
on:select={update} on:clear={handleClear} {isMulti} {isSearchable}
|
||||
placeholderAlwaysShow={true} />
|
||||
</div>
|
||||
|
||||
<script>
|
||||
@ -13,6 +14,7 @@
|
||||
export let panels;
|
||||
export let selected;
|
||||
export let isMulti = true;
|
||||
export let isSearchable = false;
|
||||
|
||||
let selectedRaw = isMulti ? panels.filter((p) => selected.includes(p.panel_id)) : selected;
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-3-4">
|
||||
<div class="col-3-4" style="padding-right: 10px">
|
||||
<PanelDropdown label="Panels" {panels} bind:selected={data.panels} />
|
||||
</div>
|
||||
|
||||
@ -24,7 +24,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" style="justify-content: center">
|
||||
<div class="row" style="justify-content: center; padding-top: 10px">
|
||||
<div class="col-1">
|
||||
<Button icon="fas fa-sliders-h" fullWidth=true type="button"
|
||||
on:click={toggleAdvancedSettings}>Toggle Advanced Settings
|
||||
@ -33,12 +33,12 @@
|
||||
</div>
|
||||
<div class="row advanced-settings" class:advanced-settings-show={advancedSettings}
|
||||
class:advanced-settings-hide={!advancedSettings} class:show-overflow={overflowShow}>
|
||||
<div class="inner" class:inner-show={advancedSettings}>
|
||||
<div class="inner" class:inner-show={advancedSettings} class:absolute={advancedSettings && !overflowShow} >
|
||||
<div class="row">
|
||||
<Input col1={true} label="Large Image URL" bind:value={data.image_url}/>
|
||||
<Input col1={true} label="Large Image URL" bind:value={data.image_url} placeholder="https://example.com/image.png" />
|
||||
</div>
|
||||
<div class="row">
|
||||
<Input col1={true} label="Small Image URL" bind:value={data.thumbnail_url}/>
|
||||
<Input col1={true} label="Small Image URL" bind:value={data.thumbnail_url} placeholder="https://example.com/image.png" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -144,13 +144,16 @@
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
align-items: flex-start;
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.absolute {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.advanced-settings-show {
|
||||
visibility: visible;
|
||||
min-height: 142px;
|
||||
|
@ -38,7 +38,7 @@
|
||||
</div>
|
||||
<div class="row advanced-settings" class:advanced-settings-show={advancedSettings}
|
||||
class:advanced-settings-hide={!advancedSettings} class:show-overflow={overflowShow}>
|
||||
<div class="inner" class:inner-show={advancedSettings}>
|
||||
<div class="inner" class:inner-show={advancedSettings} class:absolute={advancedSettings && !overflowShow} >
|
||||
<div class="row">
|
||||
<Textarea col1=true bind:value={data.welcome_message} label="Welcome Message"
|
||||
placeholder="If blank, your server's default welcome message will be used"
|
||||
@ -48,21 +48,33 @@
|
||||
<div class="col-2">
|
||||
<label class="form-label">Mention On Open</label>
|
||||
<div class="multiselect-super">
|
||||
<Select items={mentionValues} bind:selectedValue={mentionsRaw} on:select={updateMentions}
|
||||
isMulti={true}/>
|
||||
<Select items={mentionItems}
|
||||
bind:selectedValue={selectedMentions}
|
||||
on:select={updateMentions}
|
||||
optionIdentifier="id"
|
||||
getSelectionLabel={mentionNameMapper}
|
||||
getOptionLabel={mentionNameMapper}
|
||||
placeholderAlwaysShow={true}
|
||||
isMulti={true} />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-2">
|
||||
<label class="form-label">Support Teams</label>
|
||||
<div class="multiselect-super">
|
||||
<Select items={teamsItems} bind:selectedValue={teamsRaw} on:select={updateTeams}
|
||||
isMulti={true}/>
|
||||
<Select items={teamsWithDefault}
|
||||
bind:selectedValue={selectedTeams}
|
||||
on:select={updateTeams}
|
||||
isSearchable={false}
|
||||
optionIdentifier="id"
|
||||
getSelectionLabel={nameMapper}
|
||||
getOptionLabel={nameMapper}
|
||||
isMulti={true} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<Input col2={true} label="Large Image URL" bind:value={data.image_url}/>
|
||||
<Input col2={true} label="Small Image URL" bind:value={data.thumbnail_url}/>
|
||||
<Input col2={true} label="Large Image URL" bind:value={data.image_url} placeholder="https://example.com/image.png" />
|
||||
<Input col2={true} label="Small Image URL" bind:value={data.thumbnail_url} placeholder="https://example.com/image.png" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -99,34 +111,41 @@
|
||||
let advancedSettings = false;
|
||||
let overflowShow = false;
|
||||
|
||||
// Oh my
|
||||
// TODO: Clean up
|
||||
let mentionValues = [{value: 'user', label: 'Ticket Opener'}];
|
||||
let mentionsRaw = [];
|
||||
let teamsWithDefault = [];
|
||||
let mentionItems = [];
|
||||
|
||||
let selectedTeams = seedDefault ? [{id: 'default', name: 'Default'}] : [];
|
||||
let selectedMentions = [];
|
||||
|
||||
function updateMentions() {
|
||||
if (mentionsRaw === undefined) {
|
||||
mentionsRaw = [];
|
||||
if (selectedMentions === undefined) {
|
||||
selectedMentions = [];
|
||||
}
|
||||
|
||||
data.mentions = mentionsRaw.map((option) => option.value);
|
||||
}
|
||||
|
||||
let teamsItems = [{value: 'default', label: 'Default'}];
|
||||
let teamsRaw = [];
|
||||
if (seedDefault) {
|
||||
teamsRaw = [{value: 'default', label: 'Default'}];
|
||||
data.mentions = selectedMentions.map((option) => option.id);
|
||||
}
|
||||
|
||||
function updateTeams() {
|
||||
if (teamsRaw === undefined) {
|
||||
if (selectedTeams === undefined) {
|
||||
selectedTeams = [];
|
||||
|
||||
data.default_team = false;
|
||||
data.teams = [];
|
||||
} else {
|
||||
data.default_team = teamsRaw.find((option) => option.value === 'default') !== undefined;
|
||||
data.teams = teamsRaw
|
||||
.filter((option) => option.value !== 'default')
|
||||
.map((option) => teams.find((team) => team.id == option.value));
|
||||
data.default_team = selectedTeams.find((option) => option.id === 'default') !== undefined;
|
||||
data.teams = selectedTeams
|
||||
.filter((option) => option.id !== 'default')
|
||||
.map((option) => parseInt(option.id));
|
||||
}
|
||||
}
|
||||
|
||||
const nameMapper = (team) => team.name;
|
||||
|
||||
function mentionNameMapper(role) {
|
||||
if (role.id === "user") {
|
||||
return role.name;
|
||||
} else {
|
||||
return `@${role.name}`;
|
||||
}
|
||||
}
|
||||
|
||||
@ -152,31 +171,42 @@
|
||||
}
|
||||
|
||||
function updateMentionValues() {
|
||||
mentionValues = [{value: 'user', label: 'Ticket Opener'}];
|
||||
$: roles.forEach((role) => mentionValues.push({value: role.id, label: role.name}));
|
||||
mentionItems = [{id: 'user', name: 'Ticket Opener'}, ...roles];
|
||||
}
|
||||
|
||||
function updateTeamsItems() {
|
||||
teamsItems = [{value: 'default', label: 'Default'}];
|
||||
$: teams.forEach((team) => teamsItems.push({value: team.id, label: team.name}));
|
||||
teamsWithDefault = [{id: 'default', name: 'Default'}, ...teams];
|
||||
}
|
||||
|
||||
function applyOverrides() {
|
||||
if (data.default_team === true) {
|
||||
$: teamsRaw.push({value: 'default', label: 'Default'});
|
||||
$: selectedTeams.push({id: 'default', name: 'Default'});
|
||||
}
|
||||
|
||||
if (data.teams) {
|
||||
$: data.teams.forEach((team) => teamsRaw.push({value: team.id.toString(), label: team.name}));
|
||||
$: data.teams
|
||||
.map((id) => teams.find((team) => team.id === id))
|
||||
.forEach((team) => selectedTeams.push(team));
|
||||
}
|
||||
|
||||
if (data.mentions) {
|
||||
$: data.mentions.forEach((id) => mentionsRaw.push(mentionValues.find((val) => val.value === id)));
|
||||
$: data.mentions
|
||||
.map((id) => mentionItems.find((role) => role.id === id))
|
||||
.forEach((mention) => selectedMentions.push(mention));
|
||||
|
||||
console.log(data.mentions)
|
||||
console.log(mentionItems)
|
||||
console.log(selectedMentions)
|
||||
}
|
||||
|
||||
tempColour = intToColour(data.colour);
|
||||
}
|
||||
|
||||
async function loadOptions() {
|
||||
console.log(teams);
|
||||
return teams;
|
||||
}
|
||||
|
||||
onMount(() => {
|
||||
updateMentionValues();
|
||||
updateTeamsItems();
|
||||
@ -239,7 +269,6 @@
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
:global(.col-1-3, .col-2-3) {
|
||||
width: 100% !important;
|
||||
}
|
||||
@ -254,7 +283,6 @@
|
||||
:global(.advanced-settings-hide) {
|
||||
height: 0;
|
||||
visibility: hidden;
|
||||
|
||||
margin: 0;
|
||||
flex: unset;
|
||||
min-height: 0 !important;
|
||||
@ -275,16 +303,19 @@
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
align-items: flex-start;
|
||||
position: absolute;
|
||||
/*position: absolute;*/
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.absolute {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
:global(.multiselect-super) {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
--background: #2e3136;
|
||||
--border: #2e3136;
|
||||
--borderRadius: 4px;
|
||||
|
2
go.mod
2
go.mod
@ -6,7 +6,7 @@ require (
|
||||
github.com/BurntSushi/toml v0.3.1
|
||||
github.com/TicketsBot/archiverclient v0.0.0-20220326163414-558fd52746dc
|
||||
github.com/TicketsBot/common v0.0.0-20220609182514-8d43f86e8253
|
||||
github.com/TicketsBot/database v0.0.0-20220613223914-5229a34649cd
|
||||
github.com/TicketsBot/database v0.0.0-20220615120431-32ea29720357
|
||||
github.com/TicketsBot/logarchiver v0.0.0-20220326162808-cdf0310f5e1c
|
||||
github.com/TicketsBot/worker v0.0.0-20220614162334-f81bf3f39aa5
|
||||
github.com/apex/log v1.1.2
|
||||
|
31
go.sum
31
go.sum
@ -3,21 +3,14 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
|
||||
github.com/ReneKroon/ttlcache v1.6.0/go.mod h1:DG6nbhXKUQhrExfwwLuZUdH7UnRDDRA1IW+nBuCssvs=
|
||||
github.com/TicketsBot/archiverclient v0.0.0-20220326163414-558fd52746dc h1:n15W8Eg+ik3/0yqPzZVRP2oZJcIZCIgQ071cZleedKo=
|
||||
github.com/TicketsBot/archiverclient v0.0.0-20220326163414-558fd52746dc/go.mod h1:2KcfHS0JnSsgcxZBs3NyWMXNQzEo67mBSGOyzHPWOCc=
|
||||
github.com/TicketsBot/common v0.0.0-20220311020409-8068ba1c2ea3 h1:wcmBzDWg68gumBKDdMPr+CFiFM03YKB2pBNy6Vcq+To=
|
||||
github.com/TicketsBot/common v0.0.0-20220311020409-8068ba1c2ea3/go.mod h1:SVwX6gKkxRCMbp+qwJIgvQiy/Ut0fUddexEqRB/NTzc=
|
||||
github.com/TicketsBot/common v0.0.0-20220609182514-8d43f86e8253 h1:HbL0OBZHmU0TbB/lAQ9RY0TqxhAKRO8JNh2XUe0NH8c=
|
||||
github.com/TicketsBot/common v0.0.0-20220609182514-8d43f86e8253/go.mod h1:ZAoYcDD7SQLTsZT7dbo/X0J256+pogVRAReunCGng+U=
|
||||
github.com/TicketsBot/database v0.0.0-20210902172951-4e1f8ced84b7/go.mod h1:A4T2uQFIWC/ttCYpfgv7AkPjR09mMRgzG13lgoV/+aI=
|
||||
github.com/TicketsBot/database v0.0.0-20220607161420-8fe66810f22a h1:k95eJqs5TA0rX5k9A/4+Kpr0F2L+KvLnrXshlyFEWwA=
|
||||
github.com/TicketsBot/database v0.0.0-20220607161420-8fe66810f22a/go.mod h1:F57cywrZsnper1cy56Bx0c/HEsxQBLHz3Pl98WXblWw=
|
||||
github.com/TicketsBot/database v0.0.0-20220613223914-5229a34649cd h1:XiJhVy+Krxl484oY0G46gCoeG5fkiQTARkOv0kRgjxM=
|
||||
github.com/TicketsBot/database v0.0.0-20220613223914-5229a34649cd/go.mod h1:F57cywrZsnper1cy56Bx0c/HEsxQBLHz3Pl98WXblWw=
|
||||
github.com/TicketsBot/database v0.0.0-20220615120431-32ea29720357 h1:gTpRYmI/Oq87tHHmeIpT5UYOS5PuLxj2teP5Jb7RvdY=
|
||||
github.com/TicketsBot/database v0.0.0-20220615120431-32ea29720357/go.mod h1:F57cywrZsnper1cy56Bx0c/HEsxQBLHz3Pl98WXblWw=
|
||||
github.com/TicketsBot/logarchiver v0.0.0-20220326162808-cdf0310f5e1c h1:OqGjFH6mbE6gd+NqI2ARJdtH3UUvhiAkD0r0fhGJK2s=
|
||||
github.com/TicketsBot/logarchiver v0.0.0-20220326162808-cdf0310f5e1c/go.mod h1:jgi2OXQKsd5nUnTIRkwvPmeuD/i7OhN68LKMssuQY1c=
|
||||
github.com/TicketsBot/ttlcache v1.6.1-0.20200405150101-acc18e37b261 h1:NHD5GB6cjlkpZFjC76Yli2S63/J2nhr8MuE6KlYJpQM=
|
||||
github.com/TicketsBot/ttlcache v1.6.1-0.20200405150101-acc18e37b261/go.mod h1:2zPxDAN2TAPpxUPjxszjs3QFKreKrQh5al/R3cMXmYk=
|
||||
github.com/TicketsBot/worker v0.0.0-20220607165600-98de220b5d33 h1:ZwUPy3Zu6k+mHDFo18sZN2XG9rgUBWYsdmqdozWficc=
|
||||
github.com/TicketsBot/worker v0.0.0-20220607165600-98de220b5d33/go.mod h1:5Kfk5wFwSM5YU51SF0SF3hNNBW8XWcHFbC5ICiidKDA=
|
||||
github.com/TicketsBot/worker v0.0.0-20220614162334-f81bf3f39aa5 h1:c4bLQar8XH8cGK2nL2yUUP1bFoss0405QLG4MNeDoqY=
|
||||
github.com/TicketsBot/worker v0.0.0-20220614162334-f81bf3f39aa5/go.mod h1:kmap6C09BAbyqLqg8ZX+wDuNhbeZuSJbXwv3SvBtgtw=
|
||||
github.com/apex/log v1.1.2 h1:bnDuVoi+o98wOdVqfEzNDlY0tcmBia7r4YkjS9EqGYk=
|
||||
@ -49,7 +42,6 @@ github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo
|
||||
github.com/elliotchance/orderedmap v1.2.1 h1:GtjbXT+bKnHtYZIDab/ns5AThDXQroKYaMWd+Ak7mvk=
|
||||
github.com/elliotchance/orderedmap v1.2.1/go.mod h1:8hdSl6jmveQw8ScByd3AaNHNk51RhbTazdqtTty+NFw=
|
||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
@ -80,7 +72,6 @@ github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+
|
||||
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
|
||||
github.com/go-playground/validator/v10 v10.6.1 h1:W6TRDXt4WcWp4c4nf/G+6BkGdhiIo0k417gfr+V6u4I=
|
||||
github.com/go-playground/validator/v10 v10.6.1/go.mod h1:xm76BBt941f7yWdGnI2DVPFFg1UK3YY04qifoXU3lOk=
|
||||
github.com/go-redis/redis v6.15.7+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
|
||||
github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg=
|
||||
github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
|
||||
github.com/go-redis/redis/v8 v8.3.4/go.mod h1:jszGxBCez8QA1HWSmQxJO9Y82kNibbUmeYhKWrBejTU=
|
||||
@ -88,7 +79,6 @@ github.com/go-redis/redis/v8 v8.11.3 h1:GCjoYp8c+yQTJfc0n69iwSiHjvuAdruxl7elnZCx
|
||||
github.com/go-redis/redis/v8 v8.11.3/go.mod h1:xNJ9xDG09FsIPwh3bWdk+0oDWHbtF9rPN0F/oD9XeKc=
|
||||
github.com/go-redis/redis_rate/v9 v9.1.1 h1:7SIrbnhQ7zsTNEgIvprFhJf7/+l3wSpZc2iRVwUmaq8=
|
||||
github.com/go-redis/redis_rate/v9 v9.1.1/go.mod h1:jjU9YxOSZ3cz0yj1QJVAJiy5ueKmL9o4AySJHcKyTSE=
|
||||
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
||||
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0=
|
||||
@ -103,7 +93,6 @@ github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRx
|
||||
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
|
||||
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||
@ -142,7 +131,6 @@ github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9
|
||||
github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
|
||||
github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8=
|
||||
github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
|
||||
github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ=
|
||||
github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA=
|
||||
github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE=
|
||||
github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s=
|
||||
@ -171,7 +159,6 @@ github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01C
|
||||
github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc=
|
||||
github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw=
|
||||
github.com/jackc/pgtype v1.2.0/go.mod h1:5m2OfMh1wTK7x+Fk952IDmI4nw3nPrvtQdM0ZT4WpC0=
|
||||
github.com/jackc/pgtype v1.3.0/go.mod h1:b0JqxHvPmljG+HQ5IsvQ0yqeSi4nGcDTVjFoiLDb0Ik=
|
||||
github.com/jackc/pgtype v1.3.1-0.20200510190516-8cd94a14c75a/go.mod h1:vaogEUkALtxZMCH411K+tKzNpwzCKU+AnPzBKZ+I+Po=
|
||||
github.com/jackc/pgtype v1.3.1-0.20200606141011-f6355165a91c/go.mod h1:cvk9Bgu/VzJ9/lxTO5R5sf80p0DiucVtN7ZxvaC4GmQ=
|
||||
github.com/jackc/pgtype v1.4.0 h1:pHQfb4jh9iKqHyxPthq1fr+0HwSNIl3btYPbw2m2lbM=
|
||||
@ -182,7 +169,6 @@ github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08
|
||||
github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM=
|
||||
github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc=
|
||||
github.com/jackc/pgx/v4 v4.5.0/go.mod h1:EpAKPLdnTorwmPUUsqrPxy5fphV18j9q3wrfRXgo+kA=
|
||||
github.com/jackc/pgx/v4 v4.6.0/go.mod h1:vPh43ZzxijXUVJ+t/EmXBtFmbFVO72cuneCT9oAlxAg=
|
||||
github.com/jackc/pgx/v4 v4.6.1-0.20200510190926-94ba730bb1e9/go.mod h1:t3/cdRQl6fOLDxqtlyhe9UWgfIi9R8+8v8GKV5TRA/o=
|
||||
github.com/jackc/pgx/v4 v4.6.1-0.20200606145419-4e5062306904/go.mod h1:ZDaNWkt9sW1JMiNn0kdYBaLelIhw7Pg4qd+Vk6tw7Hg=
|
||||
github.com/jackc/pgx/v4 v4.7.1 h1:aqUSOcStk6fik+lSE+tqfFhvt/EwT8q/oMtJbP9CjXI=
|
||||
@ -193,7 +179,6 @@ github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dv
|
||||
github.com/jackc/puddle v1.1.1 h1:PJAw7H/9hoWC4Kf3J8iNmL1SwA6E8vfsLqBiL+F6CtI=
|
||||
github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
|
||||
github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0=
|
||||
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
@ -204,7 +189,6 @@ github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSg
|
||||
github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/klauspost/compress v1.10.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||
github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||
github.com/klauspost/compress v1.10.10 h1:a/y8CglcM7gLGYmlbP/stPE5sR3hbhFRUjCBfd/0B3I=
|
||||
github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
@ -237,7 +221,6 @@ github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9
|
||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||
github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
|
||||
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
||||
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ=
|
||||
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
|
||||
@ -248,19 +231,16 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
|
||||
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
|
||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
|
||||
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
|
||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg=
|
||||
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
||||
github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
||||
github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc=
|
||||
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
|
||||
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
||||
github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA=
|
||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||
github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc=
|
||||
github.com/onsi/gomega v1.15.0 h1:WjP/FQ/sk43MRmnEcT+MlDw2TFvkrXlprrPST/IudjU=
|
||||
@ -280,9 +260,6 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
|
||||
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
|
||||
github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
|
||||
github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc=
|
||||
github.com/rxdn/gdl v0.0.0-20210527173953-25dde613ff0a/go.mod h1:jvcb1N6AdaGx3/e8MoLedO6qSo/+UdA5GGHOA8cnAeU=
|
||||
github.com/rxdn/gdl v0.0.0-20220606005624-88c41fdba66a h1:q14vLjN6OeEpi9DZjMZaEJDkPOSjP2mwNphIRZ6InI0=
|
||||
github.com/rxdn/gdl v0.0.0-20220606005624-88c41fdba66a/go.mod h1:HtxfLp4OaoPoDJHQ4JOx/QeLH2d40VgT3wNOf7ETsRE=
|
||||
github.com/rxdn/gdl v0.0.0-20220614155333-7e6d7486acdd h1:lOwJSNyfd9Lyl5VKQDnv738x7//iZEkp8m277u27MVM=
|
||||
github.com/rxdn/gdl v0.0.0-20220614155333-7e6d7486acdd/go.mod h1:HtxfLp4OaoPoDJHQ4JOx/QeLH2d40VgT3wNOf7ETsRE=
|
||||
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
|
||||
@ -341,7 +318,6 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U
|
||||
golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200406173513-056763e48d71/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
|
||||
@ -353,7 +329,6 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
@ -419,7 +394,6 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
@ -434,7 +408,6 @@ gopkg.in/alexcesaro/statsd.v2 v2.0.0/go.mod h1:i0ubccKGzBVNBpdGV5MocxyA/XlLUJzA7
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
|
||||
|
Loading…
x
Reference in New Issue
Block a user