"flag"
"log"
"os"
+ "time"
"github.com/mattermost/mattermost-server/v6/model"
"go.cypherpunks.ru/recfile"
"go.stargrave.org/mmc"
)
-const PerPage = 100
-
func main() {
- entrypoint := flag.String("entrypoint", "mm.rnd.stcnet.ru", "Entrypoint")
+ entrypoint := flag.String("entrypoint", mmc.GetEntrypoint(), "Entrypoint")
pageNum := flag.Int("page", 0, "Page number")
+ whole := flag.Bool("whole", false, "Whole history")
+ direct := flag.Bool("direct", false, "Direct channel")
flag.Parse()
log.SetFlags(log.Lshortfile)
- log.SetOutput(os.Stdout)
chId := flag.Arg(0)
postId := flag.Arg(1)
}
c := model.NewAPIv4Client("https://" + *entrypoint)
c.Login(login, password)
- users, err := mmc.GetUsers(c, nil)
+ me, _, err := c.GetMe("")
if err != nil {
log.Fatalln(err)
}
- list, _, err := c.GetPostsBefore(chId, postId, *pageNum, PerPage, "", false)
+ users, err := mmc.GetUsers(c, nil)
if err != nil {
log.Fatalln(err)
}
+ if *direct {
+ dc, _, err := c.CreateDirectChannel(me.Id, chId)
+ if err != nil {
+ log.Fatalln(err)
+ }
+ chId = dc.Id
+ }
+ var slice []*model.Post
+ if *whole {
+ for n := 0; ; n++ {
+ log.Println("page:", n)
+ time.Sleep(mmc.SleepTime)
+ list, _, err := c.GetPostsBefore(chId, postId, n, mmc.PerPage, "", false)
+ if err != nil {
+ log.Fatalln(err)
+ }
+ s := list.ToSlice()
+ slice = append(slice, s...)
+ if len(s) < mmc.PerPage {
+ break
+ }
+ }
+ } else {
+ list, _, err := c.GetPostsBefore(chId, postId, *pageNum, mmc.PerPage, "", false)
+ if err != nil {
+ log.Fatalln(err)
+ }
+ slice = list.ToSlice()
+ }
w := recfile.NewWriter(os.Stdout)
- for _, post := range list.ToSlice() {
+ for i := len(slice) - 1; i >= 0; i-- {
if err = mmc.PostToRec(
w, users,
- mmc.Post{P: post, E: model.WebsocketEventPosted},
+ mmc.Post{P: slice[i], E: model.WebsocketEventPosted},
); err != nil {
log.Fatalln(err)
}