1
0
Fork 0

Make toot visibility configurable

This commit is contained in:
Daniele Tricoli 2022-03-02 01:34:11 +01:00
parent 8d2d78c8ec
commit f2c9bbacbc
2 changed files with 42 additions and 7 deletions

View File

@ -4,7 +4,9 @@ import (
"context"
"log"
"os"
"sort"
"strconv"
"strings"
"github.com/cking/go-mastodon"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
@ -16,6 +18,7 @@ const (
TELEGRAM_BOT_TOKEN = "TELEGRAM_BOT_TOKEN"
MASTODON_SERVER_ADDRESS = "MASTODON_SERVER_ADDRESS"
MASTODON_ACCESS_TOKEN = "MASTODON_ACCESS_TOKEN"
MASTODON_TOOT_VISIBILITY = "MASTODON_TOOT_VISIBILITY"
)
// runCmd represents the run command
@ -53,8 +56,7 @@ the specified Mastodon account.`,
status, err := c.PostStatus(context.Background(), &mastodon.Toot{
Status: update.Message.Text,
// TODO: make users able to set visibility
Visibility: "unlisted",
Visibility: parseMastodonVisibility(os.Getenv(MASTODON_TOOT_VISIBILITY)),
})
if err != nil {
@ -79,3 +81,18 @@ func parseBoolOrFalse(s string) bool {
return r
}
// Check the specified Mastodon visibility and return it if valid or return
// unlisted if it's not valid.
// The specified string will be cheched case unsensitive.
func parseMastodonVisibility(s string) string {
s = strings.ToLower(s)
// Keep sorted since we search inside.
visibilities := []string{"direct", "private", "public", "unlisted"}
r := sort.SearchStrings(visibilities, s)
if r < len(visibilities) && visibilities[r] == s {
return s
}
return "unlisted"
}

View File

@ -16,3 +16,21 @@ func TestParseBoolOrFalse(t *testing.T) {
assert.Equal(t, parseBoolOrFalse("FALSE"), false)
assert.Equal(t, parseBoolOrFalse("false"), false)
}
func TestParseMastodonVisibility(t *testing.T) {
assert.Equal(t, parseMastodonVisibility("public"), "public")
assert.Equal(t, parseMastodonVisibility("direct"), "direct")
assert.Equal(t, parseMastodonVisibility("unlisted"), "unlisted")
assert.Equal(t, parseMastodonVisibility("private"), "private")
assert.Equal(t, parseMastodonVisibility("Public"), "public")
assert.Equal(t, parseMastodonVisibility("diRect"), "direct")
assert.Equal(t, parseMastodonVisibility("unlisTED"), "unlisted")
assert.Equal(t, parseMastodonVisibility("PRIVATE"), "private")
assert.Equal(t, parseMastodonVisibility("True"), "unlisted")
assert.Equal(t, parseMastodonVisibility("eriol"), "unlisted")
assert.Equal(t, parseMastodonVisibility(""), "unlisted")
assert.Equal(t, parseMastodonVisibility(" "), "unlisted")
}