56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"html"
|
|
"strings"
|
|
"text/tabwriter"
|
|
|
|
tele "gopkg.in/telebot.v3"
|
|
|
|
"git.gensokyo.cafe/kkyy/tgbot_misaka_5882f7/hostcmds"
|
|
)
|
|
|
|
func handleDigCmd(c tele.Context) error {
|
|
msg := c.Message()
|
|
if msg == nil {
|
|
return nil
|
|
}
|
|
|
|
req, err := hostcmds.NewDigRequest(msg.Payload)
|
|
if err != nil {
|
|
return c.Reply(
|
|
"Invalid arguments.\nUsage: `/dig <name> [type]`",
|
|
&tele.SendOptions{ParseMode: tele.ModeMarkdown},
|
|
tele.Silent,
|
|
)
|
|
}
|
|
|
|
resp, err := hostcmds.Dig(req)
|
|
if err != nil {
|
|
_ = c.Reply(stickerFromID(stickerPanic), tele.Silent)
|
|
return err
|
|
}
|
|
|
|
replyBuf := &strings.Builder{}
|
|
tw := tabwriter.NewWriter(replyBuf, 0, 0, 2, ' ', 0)
|
|
// Write header
|
|
if len(resp.Records) > 0 {
|
|
_, _ = tw.Write([]byte("Name\tTTL\tType\tData\n"))
|
|
}
|
|
// Write data
|
|
for _, r := range resp.Records {
|
|
_, _ = fmt.Fprintf(tw, "%s\t%d\t%s\t%s\n", r.Name, r.TTL, r.Type, r.Data)
|
|
}
|
|
_ = tw.Flush()
|
|
|
|
replyText := []string{
|
|
fmt.Sprintf("<i>Status: <b>%s</b></i>\n", resp.Status),
|
|
fmt.Sprintf("<i>Query Time: <b>%s</b></i>\n\n", resp.QueryTime),
|
|
"<pre>",
|
|
html.EscapeString(replyBuf.String()),
|
|
"</pre>",
|
|
}
|
|
return c.Reply(strings.Join(replyText, ""), &tele.SendOptions{ParseMode: tele.ModeHTML}, tele.Silent)
|
|
}
|