diff --git a/discord.go b/discord.go index f53b1d7..3c187ec 100644 --- a/discord.go +++ b/discord.go @@ -351,17 +351,24 @@ func (d *DiscordDaemon) registerCommands() { Name: "user", Description: "User to Invite", Required: true, - }, // running with just one option for now to mesh with what we've got, also may have the syntax wrong here - /*{ + }, + { Type: dg.ApplicationCommandOptionInteger, - Name: "expire after", + Name: "expiry", Description: "Time in minutes before expiration", Required: false, }, + /* Label should be automatically set to something like "Discord invite for @username" { Type: dg.ApplicationCommandOptionString, Name: "label", - Description: "Label to apply to the user created with this invite", + Description: "Label given to this invite (shown on the Admin page)", + Required: false, + }, */ + { + Type: dg.ApplicationCommandOptionString, + Name: "user_label", + Description: "Label given to users created with this invite", Required: false, }, { @@ -369,7 +376,7 @@ func (d *DiscordDaemon) registerCommands() { Name: "profile", Description: "Profile to apply to the user created with this invite", Required: false, - }, */ + }, }, }, } @@ -546,7 +553,6 @@ func (d *DiscordDaemon) cmdInvite(s *dg.Session, i *dg.InteractionCreate, lang s //label := i.ApplicationCommandData().Options[2].StringValue() //profile := i.ApplicationCommandData().Options[3].StringValue() //mins, err := strconv.Atoi(i.ApplicationCommandData().Options[1].StringValue()) - expmin := 30 //if mins > 0 { // expmin = mins //} @@ -558,10 +564,28 @@ func (d *DiscordDaemon) cmdInvite(s *dg.Session, i *dg.InteractionCreate, lang s if !requesterEmail.Admin { d.app.err.Printf("User is not admin") } - // variation of app.GenerateInvite, some parts commented to potentially add back in later with the other options - //d.app.debug.Println("Generating new invite with options: %s: %i: %s: %s", invuser, expmin, profile, label) + + var expiryMinutes int64 = 30 + userLabel := "" + profileName := "" + + for i, opt := range i.ApplicationCommandData().Options { + if i == 0 { + continue + } + switch opt.Name { + case "expiry": + expiryMinutes = opt.IntValue() + case "user_label": + userLabel = opt.StringValue() + case "profile": + profileName = opt.StringValue() + } + } + currentTime := time.Now() - validTill := currentTime.Add(time.Minute * time.Duration(expmin)) + + validTill := currentTime.Add(time.Minute * time.Duration(expiryMinutes)) // make sure code doesn't begin with number inviteCode := shortuuid.New() _, err = strconv.Atoi(string(inviteCode[0])) @@ -569,20 +593,23 @@ func (d *DiscordDaemon) cmdInvite(s *dg.Session, i *dg.InteractionCreate, lang s inviteCode = shortuuid.New() _, err = strconv.Atoi(string(inviteCode[0])) } - var invite Invite - //if label != "" { - // invite.Label = label - //} - invite.Created = currentTime - invite.RemainingUses = 1 - invite.UserExpiry = false - /*if invite.UserExpiry { - invite.UserMonths = req.UserMonths - invite.UserDays = req.UserDays - invite.UserHours = req.UserHours - invite.UserMinutes = req.UserMinutes - }*/ - invite.ValidTill = validTill + + invite := Invite{ + Code: inviteCode, + Created: currentTime, + RemainingUses: 1, + UserExpiry: false, + ValidTill: validTill, + UserLabel: userLabel, + Profile: "Default", + Label: fmt.Sprintf("Discord Invite for %s", RenderDiscordUsername(recipient)), + } + if profileName != "" { + if _, ok := d.app.storage.GetProfileKey(profileName); ok { + invite.Profile = profileName + } + } + if recipient != nil && d.app.config.Section("invite_emails").Key("enabled").MustBool(false) { d.app.debug.Printf("%s: Sending invite message", inviteCode) invname, err := d.bot.GuildMember(d.guildID, recipient.ID) @@ -624,12 +651,6 @@ func (d *DiscordDaemon) cmdInvite(s *dg.Session, i *dg.InteractionCreate, lang s } } //if profile != "" { - // if _, ok := d.app.storage.GetProfileKey(profile); ok { - // invite.Profile = profile - // } else { - // invite.Profile = "Default" - // } - //} d.app.storage.SetInvitesKey(inviteCode, invite) }