62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
package client
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/url"
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
reHTML = regexp.MustCompile(`<(.|\n)+?>`)
|
|
reIMG = regexp.MustCompile(`<img .+?>`)
|
|
)
|
|
|
|
// StripHTML removes HTML content from a message.
|
|
func StripHTML(s string) string {
|
|
s = reIMG.ReplaceAllString(s, "inline embedded image")
|
|
return strings.TrimSpace(reHTML.ReplaceAllString(s, ""))
|
|
}
|
|
|
|
// WebSocketURL converts the BareRTC base (https) URL into the WebSocket link.
|
|
func WebSocketURL(baseURL string) (string, error) {
|
|
url, err := url.Parse(baseURL)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
switch url.Scheme {
|
|
case "https":
|
|
return fmt.Sprintf("wss://%s/ws", url.Host), nil
|
|
case "http":
|
|
return fmt.Sprintf("ws://%s/ws", url.Host), nil
|
|
case "ws", "wss":
|
|
return fmt.Sprintf("%s//%s/ws", url.Scheme, url.Host), nil
|
|
default:
|
|
return "", errors.New("unsupported URL scheme")
|
|
}
|
|
}
|
|
|
|
// AtMentioned checks if somebody has "at mentioned" your username (having your
|
|
// name at the beginning or end of their message). Returns whether the at mention
|
|
// was detected, along with the modified message without the at mention name on the
|
|
// end of it.
|
|
func AtMentioned(c *Client, message string) (bool, string) {
|
|
// Patterns to look for.
|
|
var (
|
|
reAtMention = regexp.MustCompile(
|
|
fmt.Sprintf(`(?i)^@?%s|@?%s$`, c.Username(), c.Username()),
|
|
)
|
|
)
|
|
m := reAtMention.FindStringSubmatch(message)
|
|
if m != nil {
|
|
// Found a match! Sub off the at mentioned part and return.
|
|
message = strings.TrimSpace(reAtMention.ReplaceAllString(message, ""))
|
|
if len(message) > 0 {
|
|
return true, message
|
|
}
|
|
}
|
|
return false, message
|
|
}
|