commit - 29a1c0f1221ba2600ad3f55ecd547357b86906cf
commit + 88370dfe7b3c35f7d841ab7fb32434be38812b25
blob - b83b09fcf42c5d16a15177396bd631c1e2ece8f5
blob + bb46e0405388b275de9287aecdea2a0fd347c5a3
--- main.go
+++ main.go
"path"
"path/filepath"
"regexp"
+ "strings"
irc "github.com/fluffle/goirc/client"
)
var (
- baseurl = flag.String("baseurl", "gemini://m2i.omarpolo.com", "base url")
+ baseurl = flag.String("baseurl", "gemini://m2i.omarpolo.com", "base url")
matrixOutDir = flag.String("matrix-out", "", "matrix out directory")
- msgRe = regexp.MustCompile(`https://.*/[^\s]+\.(txt|png|jpg|jpeg|gif)`)
+ msgRe = regexp.MustCompile(`https://.*/[^\s]+\.(txt|png|jpg|jpeg|gif)`)
channel = "#gemini-it"
+
+ tooLongRe = regexp.MustCompile(`full message at (https://libera.ems.host/.*)[)]`)
)
func matrix2gemini(conn *irc.Conn, line *irc.Line) {
defer resp.Body.Close()
ext := path.Ext(link)
- tmpfile, err := ioutil.TempFile(*matrixOutDir, "message-*" + ext)
+ tmpfile, err := ioutil.TempFile(*matrixOutDir, "message-*"+ext)
if err != nil {
conn.Privmsg(channel, fmt.Sprintf("failed to tmpfile: %s", err))
return
}
}
+func messageTooLong(conn *irc.Conn, line *irc.Line) {
+ matches := tooLongRe.FindStringSubmatch(line.Text())
+ if len(matches) != 2 {
+ return
+ }
+
+ url := matches[1]
+
+ resp, err := http.Get(url)
+ if err != nil {
+ conn.Privmsg(
+ channel,
+ fmt.Sprintf("failed to download %q: %s", url, err),
+ )
+ return
+ }
+ defer resp.Body.Close()
+
+ sb := &strings.Builder{}
+ if _, err := io.Copy(sb, resp.Body); err != nil {
+ conn.Privmsg(
+ channel,
+ fmt.Sprintf("failed to read body of %q: %s", url, err),
+ )
+ return
+ }
+
+ conn.Privmsg(channel, fmt.Sprintf("%s ha detto:", line.Nick))
+ for _, line := range strings.Split(sb.String(), "\n") {
+ conn.Privmsg(
+ channel,
+ line,
+ )
+ }
+}
+
func dostuff(conn *irc.Conn, line *irc.Line) {
matrix2gemini(conn, line)
+ messageTooLong(conn, line)
// ...
}