mirror of
https://github.com/hrfee/jfa-go.git
synced 2024-12-22 17:10:10 +00:00
discord: add role to user on signup
This requires an extra permission, so you'll have to modify your bot settings, kick it from your server and re-add it for this to work. The role you select must also be lower in hierarchy than the bot's group.
This commit is contained in:
parent
b929e16f2c
commit
32af107699
23
api.go
23
api.go
@ -368,6 +368,15 @@ func (app *appContext) newUser(req newUserDTO, confirmed bool) (f errorFunc, suc
|
|||||||
success = false
|
success = false
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
err := app.discord.ApplyRole(discordUser.ID)
|
||||||
|
if err != nil {
|
||||||
|
f = func(gc *gin.Context) {
|
||||||
|
app.err.Printf("%s: New user failed: Failed to set member role: %v", req.Code, err)
|
||||||
|
respond(401, "error", gc)
|
||||||
|
}
|
||||||
|
success = false
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var matrixUser MatrixUser
|
var matrixUser MatrixUser
|
||||||
@ -2025,6 +2034,20 @@ func (app *appContext) GetConfig(gc *gin.Context) {
|
|||||||
resp.Sections[sectName].Settings[settingName] = s
|
resp.Sections[sectName].Settings[settingName] = s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if discordEnabled {
|
||||||
|
r, err := app.discord.ListRoles()
|
||||||
|
if err == nil {
|
||||||
|
roles := make([][2]string, len(r)+1)
|
||||||
|
roles[0] = [2]string{"", "None"}
|
||||||
|
for i, role := range r {
|
||||||
|
roles[i+1] = role
|
||||||
|
}
|
||||||
|
s := resp.Sections["discord"].Settings["apply_role"]
|
||||||
|
s.Options = roles
|
||||||
|
resp.Sections["discord"].Settings["apply_role"] = s
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
resp.Sections["ui"].Settings["language-form"] = fl
|
resp.Sections["ui"].Settings["language-form"] = fl
|
||||||
resp.Sections["ui"].Settings["language-admin"] = al
|
resp.Sections["ui"].Settings["language-admin"] = al
|
||||||
resp.Sections["email"].Settings["language"] = el
|
resp.Sections["email"].Settings["language"] = el
|
||||||
|
@ -686,6 +686,18 @@
|
|||||||
"value": "",
|
"value": "",
|
||||||
"description": "Channel to invite new users to."
|
"description": "Channel to invite new users to."
|
||||||
},
|
},
|
||||||
|
"apply_role": {
|
||||||
|
"name": "Apply Role on connection",
|
||||||
|
"required": false,
|
||||||
|
"requires_restart": true,
|
||||||
|
"depends_true": "enabled",
|
||||||
|
"type": "select",
|
||||||
|
"options": [
|
||||||
|
["", "None"]
|
||||||
|
],
|
||||||
|
"value": "",
|
||||||
|
"description": "Add the selected role to a user when they sign up."
|
||||||
|
},
|
||||||
"language": {
|
"language": {
|
||||||
"name": "Language",
|
"name": "Language",
|
||||||
"required": false,
|
"required": false,
|
||||||
|
31
discord.go
31
discord.go
@ -18,6 +18,7 @@ type DiscordDaemon struct {
|
|||||||
guildID string
|
guildID string
|
||||||
serverChannelName, serverName string
|
serverChannelName, serverName string
|
||||||
users map[string]DiscordUser // Map of user IDs to users. Added to on first interaction, and loaded from app.storage.discord on start.
|
users map[string]DiscordUser // Map of user IDs to users. Added to on first interaction, and loaded from app.storage.discord on start.
|
||||||
|
roleID string
|
||||||
app *appContext
|
app *appContext
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,6 +39,7 @@ func newDiscordDaemon(app *appContext) (*DiscordDaemon, error) {
|
|||||||
verifiedTokens: map[string]DiscordUser{},
|
verifiedTokens: map[string]DiscordUser{},
|
||||||
users: map[string]DiscordUser{},
|
users: map[string]DiscordUser{},
|
||||||
app: app,
|
app: app,
|
||||||
|
roleID: app.config.Section("discord").Key("apply_role").String(),
|
||||||
}
|
}
|
||||||
for _, user := range app.storage.discord {
|
for _, user := range app.storage.discord {
|
||||||
dd.users[user.ID] = user
|
dd.users[user.ID] = user
|
||||||
@ -111,6 +113,35 @@ func (d *DiscordDaemon) run() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ListRoles returns a list of available (excluding bot and @everyone) roles in a guild as a list of containing an array of the guild ID and its name.
|
||||||
|
func (d *DiscordDaemon) ListRoles() (roles [][2]string, err error) {
|
||||||
|
var r []*dg.Role
|
||||||
|
r, err = d.bot.GuildRoles(d.guildID)
|
||||||
|
if err != nil {
|
||||||
|
d.app.err.Printf("Discord: Failed to get roles: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, role := range r {
|
||||||
|
fmt.Println(d.username)
|
||||||
|
if role.Name != d.username && role.Name != "@everyone" {
|
||||||
|
roles = append(roles, [2]string{role.ID, role.Name})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// roles = make([][2]string, len(r))
|
||||||
|
// for i, role := range r {
|
||||||
|
// roles[i] = [2]string{role.ID, role.Name}
|
||||||
|
// }
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ApplyRole applies the member role to the given user if set.
|
||||||
|
func (d *DiscordDaemon) ApplyRole(userID string) error {
|
||||||
|
if d.roleID == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return d.bot.GuildMemberRoleAdd(d.guildID, userID, d.roleID)
|
||||||
|
}
|
||||||
|
|
||||||
// NewTempInvite creates an invite link, and returns the invite URL, as well as the URL for the server icon.
|
// NewTempInvite creates an invite link, and returns the invite URL, as well as the URL for the server icon.
|
||||||
func (d *DiscordDaemon) NewTempInvite(ageSeconds, maxUses int) (inviteURL, iconURL string) {
|
func (d *DiscordDaemon) NewTempInvite(ageSeconds, maxUses int) (inviteURL, iconURL string) {
|
||||||
var inv *dg.Invite
|
var inv *dg.Invite
|
||||||
|
@ -127,21 +127,21 @@
|
|||||||
{{ if or (.telegramEnabled) (or .discordEnabled .matrixEnabled) }}
|
{{ if or (.telegramEnabled) (or .discordEnabled .matrixEnabled) }}
|
||||||
<div id="contact-via" class="unfocused">
|
<div id="contact-via" class="unfocused">
|
||||||
<label class="row switch pb-4">
|
<label class="row switch pb-4">
|
||||||
<input type="radio" name="contact-via" value="email"><span>Contact through Email</span>
|
<input type="radio" name="contact-via" value="email" class="mr-2"><span>Contact through Email</span>
|
||||||
</label>
|
</label>
|
||||||
{{ if .telegramEnabled }}
|
{{ if .telegramEnabled }}
|
||||||
<label class="row switch pb-4">
|
<label class="row switch pb-4">
|
||||||
<input type="radio" name="contact-via" value="telegram" id="contact-via-telegram"><span>Contact through Telegram</span>
|
<input type="radio" name="contact-via" value="telegram" id="contact-via-telegram" class="mr-2"><span>Contact through Telegram</span>
|
||||||
</label>
|
</label>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ if .discordEnabled }}
|
{{ if .discordEnabled }}
|
||||||
<label class="row switch pb-4">
|
<label class="row switch pb-4">
|
||||||
<input type="radio" name="contact-via" value="discord" id="contact-via-discord"><span>Contact through Discord</span>
|
<input type="radio" name="contact-via" value="discord" id="contact-via-discord" class="mr-2"><span>Contact through Discord</span>
|
||||||
</label>
|
</label>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ if .matrixEnabled }}
|
{{ if .matrixEnabled }}
|
||||||
<label class="row switch pb-4">
|
<label class="row switch pb-4">
|
||||||
<input type="radio" name="contact-via" value="matrix" id="contact-via-matrix"><span>Contact through Matrix</span>
|
<input type="radio" name="contact-via" value="matrix" id="contact-via-matrix" class="mr-2"><span>Contact through Matrix</span>
|
||||||
</label>
|
</label>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user