func (l *OperationLogger) Record(from string, _opTime time.Time, _r interface{}, status string) {
	opTime := _opTime.Format("2006-01-02 15:04:05")
	switch _r.(type) {
	case *DeletePostRequest:
		r := _r.(*DeletePostRequest)
		logs.Info(MakePrefix(nil, r.tid, r.pid, r.spid, r.uid), from, "删贴", r.reason, status)
		uid, tid, pid, spid := strconv.FormatUint(r.uid, 10), strconv.FormatUint(r.tid, 10),
			strconv.FormatUint(r.pid, 10), strconv.FormatUint(r.spid, 10)
		l.writer.Write([]string{"删贴", status, from, r.reason, opTime, r.postTime,
			r.author, uid, r.title, tid, pid, spid,
			string(replace([]rune(fmt.Sprint(r.content)), '\n', '\t')), r.remark})
	case *DeleteThreadRequest:
		r := _r.(*DeleteThreadRequest)
		logs.Info(MakePrefix(nil, r.tid, r.pid, 0, r.uid), from, "删主题", r.reason, status)
		uid, tid, pid := strconv.FormatUint(r.uid, 10), strconv.FormatUint(r.tid, 10),
			strconv.FormatUint(r.pid, 10)
		l.writer.Write([]string{"删主题", status, from, r.reason, opTime, r.postTime,
			r.author, uid, r.title, tid, pid, "0",
			string(replace([]rune(fmt.Sprint(r.content)), '\n', '\t')), r.remark})
	case *BanIDRequest:
		r := _r.(*BanIDRequest)
		logs.Info(MakePrefix(nil, r.tid, r.pid, r.spid, r.uid), from, "封禁", fmt.Sprintf("%s(%s)", r.loggedReason, r.givedReason), status)
		tid, pid, spid, uid := strconv.FormatUint(r.tid, 10),
			strconv.FormatUint(r.pid, 10), strconv.FormatUint(r.spid, 10), strconv.FormatUint(r.uid, 10)
		l.writer.Write([]string{"封禁", status, from, r.loggedReason, opTime, r.postTime,
			r.userName, uid, r.title, tid, pid, spid,
			string(replace([]rune(fmt.Sprint(r.content)), '\n', '\t')), r.remark + fmt.Sprintf("天数:%d, 给出原因:%s, ", r.day, r.givedReason)})
	}

	l.writer.Flush()
}
func keepUpdatingSettings() *Settings {
	var settings Settings
	var fileName string
	if len(os.Args) == 1 {
		fileName = "删贴机设置.json"
	} else {
		fileName = os.Args[1]
	}

	var lastModTime time.Time
	ticker := time.NewTicker(time.Second)
	var isFirstTime bool = true
	var firstTimeWaitChan = make(chan bool)
	go func() {
		for {

			info, err := os.Stat(fileName)
			if err != nil {
				if isFirstTime {
					panic(err)
				}
				continue
			}

			if modTime := info.ModTime(); modTime.After(lastModTime) {
				lastModTime = modTime
				_settings, err := LoadSettings(fileName)
				if err != nil {
					logs.Fatal("更新设置文件失败,将继续使用旧设置:", err)
				} else {
					logs.Info("更新设置文件成功(然而这并没有什么用(除了第一次之外)).")
					settings = *_settings
				}
			}

			if isFirstTime {
				firstTimeWaitChan <- true
				isFirstTime = false
			}

			<-ticker.C
		}

	}()

	<-firstTimeWaitChan
	close(firstTimeWaitChan)

	return &settings
}
func main() {
	var logDir = time.Now().Format("log/20060102-150405-post-deleter/")

	os.MkdirAll(logDir, 0644)

	logs.Info("删贴机启动", time.Now())

	var settings = keepUpdatingSettings()
	{
		var BDUSS = settings.BDUSS
		if BDUSS != "" {
			settings.BDUSS = "***"
		}
		logs.Info(settings)
		settings.BDUSS = BDUSS
	}

	if settings == nil {
		os.Exit(1)
	}

	if settings.BDUSS == "" {
		logs.Warn("未设置BDUSS.")
	}

	if settings.DebugPort != 0 {
		go func() {
			http.ListenAndServe(fmt.Sprintf("localhost:%d", settings.DebugPort), nil)
		}()
	}

	var accAndr = postbar.NewDefaultAndroidAccount("")
	var accWin8 = postbar.NewDefaultWindows8Account("")
	accWin8.BDUSS = settings.BDUSS
	accAndr.BDUSS = settings.BDUSS

	if settings.ForumID == 0 {
		logs.Info("设置中未提供ForumID,自动获取.")
		settings.ForumID = getFid(settings.ForumName)
		if settings.ForumID == 0 {
			logs.Fatal("未能获得到fid,退出.")
			os.Exit(1)
		}
	}

	//mrb := initMRuby(logs.DefaultLogger)

	if d, err := postdeleter.NewPostDeleter(
		postdeleter.PostDeleterBuildingParameters{
			AccWin8: accWin8,
			AccAndr: accAndr,

			ForumName: settings.ForumName,
			ForumID:   settings.ForumID,

			ConfgiFileName: postdeleter.ConfgiFileName{
				ContentRegexp:     settings.ContentRegexpFilePath,
				UserNameRegexp:    settings.UserNameRegexpFilePath,
				TidWhiteList:      settings.TidWhiteListFilePath,
				UserNameWhiteList: settings.UserNameWhiteListFilePath,
				BawuList:          settings.BawuListFilePath,
			},

			Debugging: settings.DebugPort != 0,
			LogDir:    logDir,
		}); err != nil {
		logs.Fatal("无法启动删贴机,退出.", err)
		os.Exit(1)
	} else {
		d.Run(time.Second)
	}

	<-make(chan struct{})

}