func activeRefresh(chatMsgID int, bot *tgBotApi.BotAPI, ticker *time.Ticker, flag int) {
	var MessageID = 0
	myID := toInt64(info.UserID)
	refreshPath := func(MessageID int, myID int64, bot *tgBotApi.BotAPI, ticker *time.Ticker) int {
		res := formatTellSomething(aria2Rpc.TellActive())
		text := ""
		if res != "" {
			text = res
		} else {
			text = locText("noActiveTask")
		}
		if MessageID == 0 {
			msg := tgBotApi.NewMessage(myID, text)
			msg.ParseMode = "Markdown"
			res, err := bot.Send(msg)
			dropErr(err)
			if text == locText("noActiveTask") {
				ticker.Stop()
				return -1
			} else {
				return res.MessageID
			}
		} else {
			if text == locText("noActiveTask") {
				bot.Send(tgBotApi.NewDeleteMessage(myID, MessageID))
				ticker.Stop()
				return -1
			} else {
				newMsg := tgBotApi.NewEditMessageText(myID, MessageID, text)
				newMsg.ParseMode = "Markdown"
				bot.Send(newMsg)
				return newMsg.MessageID
			}
		}
	}
	for {
		if activeRefreshControl != flag {
			if MessageID != 0 {
				bot.Send(tgBotApi.NewDeleteMessage(myID, MessageID))
			}
			ticker.Stop()
			_, _ = bot.DeleteMessage(tgBotApi.DeleteMessageConfig{
				ChatID:    myID,
				MessageID: chatMsgID,
			})
			return
		} else {
			if MessageID != 0 {
				select {
				case _ = <-ticker.C:
					MessageID = refreshPath(MessageID, myID, bot, ticker)
					if MessageID == -1 {
						return
					}
				}
			} else {
				MessageID = refreshPath(MessageID, myID, bot, ticker)
				if MessageID == -1 {
					return
				}
			}
		}
	}
}
activeRefresh refresh the download info
package main
import (
	goTree "DownloadBot/src/gotree"
	"fmt"
	"io"
	"io/ioutil"
	"log"
	"math/rand"
	"net/http"
	"os"
	"regexp"
	"strconv"
	"strings"
	"sync"
	"time"
	tgBotApi "github.com/go-telegram-bot-api/telegram-bot-api"
)
var SuddenMessageChan = make(chan string, 3)
var TMSelectMessageChan = make(chan string, 3)
var FileControlChan = make(chan string, 3)
func setCommands(bot *tgBotApi.BotAPI) {
	_ = bot.SetMyCommands([]tgBotApi.BotCommand{
		{
			Command:     "start",
			Description: locText("tgCommandStartDes"),
		}, {
			Command:     "myid",
			Description: locText("tgCommandMyIDDes"),
		},
		{
			Command:     "setMaxLength",
			Description: locText("tgCommandSetMaxLengthDes"),
		},
	})
}
func SuddenMessage(bot *tgBotApi.BotAPI) {
	for {
		a := <-SuddenMessageChan
		gid := a[2:18]
		if strings.Contains(a, "[{") {
			a = strings.Replace(a, gid, tellName(aria2Rpc.TellStatus(gid)), -1)
		}
		myID, err := strconv.ParseInt(info.UserID, 10, 64)
		dropErr(err)
		msg := tgBotApi.NewMessage(myID, a)
		if _, err := bot.Send(msg); err != nil {
			log.Panic(err)
		}
	}
}
func TMSelectMessage(bot *tgBotApi.BotAPI) {
	var MessageID []int
	myID := toInt64(info.UserID)
	selectFileList := make([][2]int, 0)
	directoryTree := make(map[string]interface{}, 0)
	for {
		a := <-TMSelectMessageChan
		b := strings.Split(a, "~")
		gid := b[0]
		downloadFilesCount := 0
		if len(b) != 1 {
			if b[1] == "Start" {  
				setTMDownloadFilesAndStart(gid, selectFileList)
				for _, val := range MessageID {
					bot.Send(tgBotApi.NewDeleteMessage(myID, val))
				}
				MessageID = make([]int, 0)
				selectFileList = make([][2]int, 0)
				directoryTree = make(map[string]interface{}, 0)
				continue
			} else if b[1] == "cancel" {
				for _, val := range MessageID {
					bot.Send(tgBotApi.NewDeleteMessage(myID, val))
				}
				MessageID = make([]int, 0)
				selectFileList = make([][2]int, 0)
				directoryTree = make(map[string]interface{}, 0)
				aria2Rpc.ForceRemove(gid)
				continue
			}
			for i := 0; i < len(selectFileList); i++ {
				if selectFileList[i][0] == 1 && selectFileList[i][1] >= 0 {
					downloadFilesCount++
				}
			}
			switch b[1] {
			case "selectAll":  
				for i := 0; i < len(selectFileList); i++ {
					selectFileList[i][0] = 1
				}
			case "tmMode1":  
				biggestFileIndex := selectBiggestFile(gid)
				for i := 0; i < len(selectFileList); i++ {
					if selectFileList[i][1] != biggestFileIndex {
						selectFileList[i][0] = 0
					} else {
						selectFileList[i][0] = 1
						if i != 0 && selectFileList[i-1][1] == -1 {
							selectFileList[i-1][0] = 1
						}
					}
				}
			case "tmMode2":  
				bigFilesIndex := selectBigFiles(gid)
				index2Original := make(map[int]int, 0)
				for i := 0; i < len(selectFileList); i++ {
					selectFileList[i][0] = 0
					if selectFileList[i][1] > 0 {  
						index2Original[selectFileList[i][1]] = i
					}
				}
				for _, i := range bigFilesIndex {
					selectFileList[index2Original[i]][0] = 1
				}
			default:
				i := toInt(b[1])
				i--                          
				if downloadFilesCount > 1 {  
					if selectFileList[i][1] >= 0 {
						if selectFileList[i][0] == 1 {
							selectFileList[i][0] = 0
						} else {
							selectFileList[i][0] = 1
						}
					} else {  
						if selectFileList[i][0] == 1 {
							selectFileList[i][0] = 0
							for s := 1; s < selectFileList[i][1]*-1; s++ {
								selectFileList[i+s][0] = 0
								downloadFilesCount--
							}
							if downloadFilesCount < 1 {
								selectFileList[i][0] = 1
								for s := 1; s < selectFileList[i][1]*-1; s++ {
									selectFileList[i+s][0] = 1
									downloadFilesCount++
								}
							}
						} else {
							selectFileList[i][0] = 1
							for s := 1; s < selectFileList[i][1]*-1; s++ {
								selectFileList[i+s][0] = 1
							}
						}
					}
				}
			}
			for i, val := range selectFileList {  
				if val[1] < 0 {
					allSelected := true
					allNotSelected := true
					for _, val1 := range selectFileList[i+1 : i+1+val[1]*-1-1] {
						if val1[0] == 0 {
							allSelected = false
						} else if val1[0] == 1 {
							allNotSelected = false
						}
						if !allSelected && !allNotSelected {
							break
						}
					}
					if !allSelected && !allNotSelected {  
						selectFileList[i][0] = -1
					} else if allSelected {
						selectFileList[i][0] = 1
					} else {
						selectFileList[i][0] = 0
					}
				}
			}
		} else {
			fileList := formatTMFiles(gid)
			index := 1
			for i, file := range fileList {
				pathClass(fmt.Sprintf("%s|%s|%d", file[0], file[1], i+1), &directoryTree)
				index++
			}
		}
		text := fmt.Sprintf("%s %s\n", tellName(aria2Rpc.TellStatus(gid)), locText("fileDirectoryIsAsFollows"))
		Keyboards := make([][]tgBotApi.InlineKeyboardButton, 0)
		inlineKeyBoardRow := make([]tgBotApi.InlineKeyboardButton, 0)
		fileListGoTree, _, _ := generateGoTree(directoryTree, 0, &selectFileList)
		fileListTreeLine := strings.Split(fileListGoTree[0].Print(), "\n")
		fileListTreeLineCount := len(fileListTreeLine)
		characterCount := len(text)
		r, err := regexp.Compile(`[✅⬜〰](\d+)`)
		dropErr(err)
		startAndEndIndex := []int{1, 0}
		msgCount := 0
		for i, line := range fileListTreeLine {
			if fileListTreeLineCount != i+1 && characterCount+len(fileListTreeLine[i+1]) > 4096 {
				msg := tgBotApi.NewMessage(myID, text)
				msgCount++
				index := 0
				for j := startAndEndIndex[0]; j <= startAndEndIndex[1]; j++ {
					inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(fmt.Sprint(j), gid+"~"+fmt.Sprint(j)+":6"))
					index++
					if index%7 == 0 {
						Keyboards = append(Keyboards, inlineKeyBoardRow)
						inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
					}
				}
				if len(inlineKeyBoardRow) != 0 {
					Keyboards = append(Keyboards, inlineKeyBoardRow)
				}
				if msgCount > len(MessageID) {
					msg.ReplyMarkup = tgBotApi.NewInlineKeyboardMarkup(Keyboards...)
					res, err := bot.Send(msg)
					MessageID = append(MessageID, res.MessageID)
					dropErr(err)
				} else {
					newMsg := tgBotApi.NewEditMessageTextAndMarkup(myID, MessageID[msgCount-1], text, tgBotApi.NewInlineKeyboardMarkup(Keyboards...))
					bot.Send(newMsg)
				}
				Keyboards = make([][]tgBotApi.InlineKeyboardButton, 0)
				inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
				characterCount = 0
				text = "·"
				startAndEndIndex[0] = startAndEndIndex[1] + 1
			}
			if text == "·" {
				text += line[1:] + "\n"
			} else {
				text += line + "\n"
			}
			characterCount += len(line + "\n")
			res := r.FindStringSubmatch(line)
			if res != nil {
				startAndEndIndex[1] = toInt(res[1])
			}
		}
		text += locText("pleaseSelectTheFileYouWantToDownload")
		if msgCount > 2 {
			text += "\n" + locText("tmFileTooMany")
		}
		index := 0
		for j := startAndEndIndex[0]; j <= startAndEndIndex[1]; j++ {
			inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(fmt.Sprint(j), gid+"~"+fmt.Sprint(j)+":6"))
			index++
			if index%7 == 0 {
				Keyboards = append(Keyboards, inlineKeyBoardRow)
				inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
			}
		}
		if len(inlineKeyBoardRow) != 0 {
			Keyboards = append(Keyboards, inlineKeyBoardRow)
		}
		inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
		inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("selectAll"), gid+"~selectAll"+":7"))
		inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("cancel"), gid+"~cancel"+":7"))
		Keyboards = append(Keyboards, inlineKeyBoardRow)
		inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
		inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("tmMode1"), gid+"~tmMode1"+":7"))
		inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("tmMode2"), gid+"~tmMode2"+":7"))
		Keyboards = append(Keyboards, inlineKeyBoardRow)
		inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
		inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("startDownload"), gid+"~Start"+":7"))
		Keyboards = append(Keyboards, inlineKeyBoardRow)
		if len(MessageID) < msgCount+1 {
			msg := tgBotApi.NewMessage(myID, text)
			msg.ReplyMarkup = tgBotApi.NewInlineKeyboardMarkup(Keyboards...)
			res, err := bot.Send(msg)
			dropErr(err)
			MessageID = append(MessageID, res.MessageID)
		} else {
			newMsg := tgBotApi.NewEditMessageTextAndMarkup(myID, MessageID[msgCount], text, tgBotApi.NewInlineKeyboardMarkup(Keyboards...))
			bot.Send(newMsg)
		}
	}
}
func removeFiles(chatMsgID int, bot *tgBotApi.BotAPI) {
	s := <-FileControlChan
	if s == "file" {
		FileControlChan <- "file"
	}
	var MessageID = 0
	var filesSelect = make(map[int]bool)
	fileList, _ := GetAllFile(info.DownloadFolder)
	myID := toInt64(info.UserID)
	_, _ = bot.DeleteMessage(tgBotApi.DeleteMessageConfig{
		ChatID:    myID,
		MessageID: chatMsgID,
	})
	if len(fileList) == 1 {
		bot.Send(tgBotApi.NewMessage(myID, locText("noFilesFound")))
		return
	}
	deleteFiles := make([]string, 0)
	for {
		a := <-FileControlChan
		if a == "close" {
			bot.Send(tgBotApi.NewDeleteMessage(myID, MessageID))
			return
		}
		b := strings.Split(a, "~")
		fileTree := ""
		if len(b) == 1 {
			filesSelect = make(map[int]bool)
			for i := 1; i <= len(fileList); i++ {
				filesSelect[i] = true
			}
			fileTree, filesSelect, deleteFiles = printFolderTree(info.DownloadFolder, filesSelect, "0")
		} else {
			if b[1] == "cancel" {
				tgBotApi.NewDeleteMessage(myID, MessageID)
				bot.Send(tgBotApi.NewDeleteMessage(myID, MessageID))
				return
			} else if b[1] == "Delete" {
				RemoveFiles(deleteFiles)
				bot.Send(tgBotApi.NewDeleteMessage(myID, MessageID))
				bot.Send(tgBotApi.NewMessage(myID, locText("filesDeletedSuccessfully")))
				return
			}
			fileTree, filesSelect, deleteFiles = printFolderTree(info.DownloadFolder, filesSelect, b[1])
		}
		text := fmt.Sprintf("%s %s\n", info.DownloadFolder, locText("fileDirectoryIsAsFollows")) + fileTree
		Keyboards := make([][]tgBotApi.InlineKeyboardButton, 0)
		inlineKeyBoardRow := make([]tgBotApi.InlineKeyboardButton, 0)
		index := 1
		for _, _ = range fileList {
			inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(fmt.Sprint(index), "file~"+fmt.Sprint(index)+":8"))
			if index%7 == 0 {
				Keyboards = append(Keyboards, inlineKeyBoardRow)
				inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
			}
			index++
		}
		text += locText("pleaseSelectTheFileYouWantToDelete")
		if len(inlineKeyBoardRow) != 0 {
			Keyboards = append(Keyboards, inlineKeyBoardRow)
		}
		inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
		inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("selectAll"), "file~selectAll"+":9"))
		inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("invert"), "file~invert"+":9"))
		Keyboards = append(Keyboards, inlineKeyBoardRow)
		inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
		inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("confirmDelete"), "file~Delete"+":9"))
		inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("cancel"), "file~cancel"+":9"))
		Keyboards = append(Keyboards, inlineKeyBoardRow)
		msg := tgBotApi.NewMessage(myID, text)
		if MessageID == 0 {
			msg.ReplyMarkup = tgBotApi.NewInlineKeyboardMarkup(Keyboards...)
			res, err := bot.Send(msg)
			dropErr(err)
			MessageID = res.MessageID
		} else {
			newMsg := tgBotApi.NewEditMessageTextAndMarkup(myID, MessageID, text, tgBotApi.NewInlineKeyboardMarkup(Keyboards...))
			bot.Send(newMsg)
		}
	}
}
func copyFiles(chatMsgID int, bot *tgBotApi.BotAPI) {
	s := <-FileControlChan
	if s == "file" {
		FileControlChan <- "file"
	}
	var MessageID = 0
	var filesSelect = make(map[int]bool)
	fileList, _ := GetAllFile(info.DownloadFolder)
	myID := toInt64(info.UserID)
	_, _ = bot.DeleteMessage(tgBotApi.DeleteMessageConfig{
		ChatID:    myID,
		MessageID: chatMsgID,
	})
	if len(fileList) == 1 {
		bot.Send(tgBotApi.NewMessage(myID, locText("noFilesFound")))
		return
	}
	copyFiles := make([]string, 0)
	for {
		a := <-FileControlChan
		if a == "close" {
			bot.Send(tgBotApi.NewDeleteMessage(myID, MessageID))
			return
		}
		b := strings.Split(a, "~")
		fileTree := ""
		if len(b) == 1 {
			filesSelect = make(map[int]bool)
			for i := 1; i <= len(fileList); i++ {
				filesSelect[i] = true
			}
			fileTree, filesSelect, copyFiles = printFolderTree(info.DownloadFolder, filesSelect, "0")
		} else {
			if b[1] == "cancel" {
				bot.Send(tgBotApi.NewDeleteMessage(myID, MessageID))
				return
			} else if b[1] == "Copy" {
				CopyFiles(copyFiles)
				bot.Send(tgBotApi.NewDeleteMessage(myID, MessageID))
				bot.Send(tgBotApi.NewMessage(myID, locText("filesCopySuccessfully")))
				return
			}
			fileTree, filesSelect, copyFiles = printFolderTree(info.DownloadFolder, filesSelect, b[1])
		}
		text := fmt.Sprintf("%s %s\n", info.DownloadFolder, locText("fileDirectoryIsAsFollows")) + fileTree
		Keyboards := make([][]tgBotApi.InlineKeyboardButton, 0)
		inlineKeyBoardRow := make([]tgBotApi.InlineKeyboardButton, 0)
		index := 1
		for _, _ = range fileList {
			inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(fmt.Sprint(index), "file~"+fmt.Sprint(index)+":8"))
			if index%7 == 0 {
				Keyboards = append(Keyboards, inlineKeyBoardRow)
				inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
			}
			index++
		}
		text += locText("pleaseSelectTheFileYouWantToCopy")
		if len(inlineKeyBoardRow) != 0 {
			Keyboards = append(Keyboards, inlineKeyBoardRow)
		}
		inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
		inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("selectAll"), "file~selectAll"+":9"))
		inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("invert"), "file~invert"+":9"))
		Keyboards = append(Keyboards, inlineKeyBoardRow)
		inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
		inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("confirmCopy"), "file~Copy"+":9"))
		inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("cancel"), "file~cancel"+":9"))
		Keyboards = append(Keyboards, inlineKeyBoardRow)
		msg := tgBotApi.NewMessage(myID, text)
		if MessageID == 0 {
			msg.ReplyMarkup = tgBotApi.NewInlineKeyboardMarkup(Keyboards...)
			res, err := bot.Send(msg)
			dropErr(err)
			MessageID = res.MessageID
		} else {
			newMsg := tgBotApi.NewEditMessageTextAndMarkup(myID, MessageID, text, tgBotApi.NewInlineKeyboardMarkup(Keyboards...))
			bot.Send(newMsg)
		}
	}
}
func uploadFiles(chatMsgID int, chatMsg string, bot *tgBotApi.BotAPI) {
	_, err := os.Stat("info")
	if err != nil {
		err = os.MkdirAll("info", os.ModePerm)
		dropErr(err)
	}
	s := <-FileControlChan
	if s != "close" {
		FileControlChan <- s
	}
	var MessageID = 0
	myID := toInt64(info.UserID)
	_, _ = bot.DeleteMessage(tgBotApi.DeleteMessageConfig{
		ChatID:    myID,
		MessageID: chatMsgID,
	})
	for {
		a := <-FileControlChan
		if a == "close" {
			bot.Send(tgBotApi.NewDeleteMessage(myID, MessageID))
			return
		}
		b := strings.Split(a, "~")
		text := ""
		Keyboards := make([][]tgBotApi.InlineKeyboardButton, 0)
		if len(b) != 1 {
			if b[1] == "cancel" {  
				tgBotApi.NewDeleteMessage(myID, MessageID)
				bot.Send(tgBotApi.NewDeleteMessage(myID, MessageID))
				return
			} else {
				switch b[0] {
				case "onedrive":
					switch b[1] {
					case "new":  
						text = fmt.Sprintf(
							`%s https: 
							locText("oneDriveGetAccess"),
						)
					case "create":  
						mail := getNewOneDriveInfo(chatMsg)
						text = locText("oneDriveOAuthFileCreateSuccess") + mail
					}
				case "googleDrive":
					switch b[1] {
					case "new":  
						text = fmt.Sprintf(
							`%s %s`,
							locText("googleDriveGetAccess"), getGoogleDriveAuthCodeURL(),
						)
					case "create":  
						mail := getNewGoogleDriveInfo(chatMsg)
						text = locText("googleDriveOAuthFileCreateSuccess") + mail
					}
				case "odInfo":  
					uploadDFToOneDrive("./info/onedrive/" + b[1])
				case "gdInfo":  
					uploadDFToGoogleDrive("./info/googleDrive/" + b[1])
				default:
					switch b[1] {
					case "1":  
						createDriveInfoFolder("./info/onedrive")
						dir, _ := ioutil.ReadDir("./info/onedrive")
						if len(dir) == 0 {
							text = locText("noOneDriveInfo")
							inlineKeyBoardRow := make([]tgBotApi.InlineKeyboardButton, 0)
							inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("yes"), "onedrive~new"+":9"))
							inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("no"), "onedrive~cancel"+":9"))
							Keyboards = append(Keyboards, inlineKeyBoardRow)
						} else {
							text = locText("accountsAreCurrentlyLogin")
							files, _text, index := getAuthInfoJson("./info/onedrive/")
							text += _text
							inlineKeyBoardRow := make([]tgBotApi.InlineKeyboardButton, 0)
							index = 1
							for _, name := range files {
								inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(fmt.Sprint(index), "odInfo~"+name+":9"))
								if index%7 == 0 {
									Keyboards = append(Keyboards, inlineKeyBoardRow)
									inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
								}
								index++
							}
							if len(inlineKeyBoardRow) != 0 {
								Keyboards = append(Keyboards, inlineKeyBoardRow)
							}
							inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
							inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("createNewAcc"), "onedrive~new"+":9"))
							inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("cancel"), "upload~cancel"+":9"))
							Keyboards = append(Keyboards, inlineKeyBoardRow)
							text += locText("selectAccount")
						}
					case "2":  
						createDriveInfoFolder("./info/googleDrive")
						dir, _ := ioutil.ReadDir("./info/googleDrive")
						if len(dir) == 0 {
							text = locText("noGoogleDriveInfo")
							inlineKeyBoardRow := make([]tgBotApi.InlineKeyboardButton, 0)
							inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("yes"), "googleDrive~new"+":9"))
							inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("no"), "googleDrive~cancel"+":9"))
							Keyboards = append(Keyboards, inlineKeyBoardRow)
						} else {
							text = locText("accountsAreCurrentlyLogin")
							files, _text, index := getAuthInfoJson("./info/googleDrive/")
							text += _text
							inlineKeyBoardRow := make([]tgBotApi.InlineKeyboardButton, 0)
							index = 1
							for _, name := range files {
								inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(fmt.Sprint(index), "gdInfo~"+name+":9"))
								if index%7 == 0 {
									Keyboards = append(Keyboards, inlineKeyBoardRow)
									inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
								}
								index++
							}
							if len(inlineKeyBoardRow) != 0 {
								Keyboards = append(Keyboards, inlineKeyBoardRow)
							}
							inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
							inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("createNewAcc"), "googleDrive~new"+":9"))
							inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("cancel"), "upload~cancel"+":9"))
							Keyboards = append(Keyboards, inlineKeyBoardRow)
							text += locText("selectAccount")
						}
					case "Upload":  
						bot.Send(tgBotApi.NewDeleteMessage(myID, MessageID))
						bot.Send(tgBotApi.NewMessage(myID, locText("filesUploadSuccessfully")))
						return
					}
				}
			}
		} else {  
			text = fmt.Sprintf(locText("chooseDrive"))
			inlineKeyBoardRow := make([]tgBotApi.InlineKeyboardButton, 0)
			index := 1
			for i := 0; i < 4; i++ {
				inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(fmt.Sprint(index), "upload~"+fmt.Sprint(index)+":9"))
				if index%7 == 0 {
					Keyboards = append(Keyboards, inlineKeyBoardRow)
					inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
				}
				index++
			}
			if len(inlineKeyBoardRow) != 0 {
				Keyboards = append(Keyboards, inlineKeyBoardRow)
			}
			inlineKeyBoardRow = make([]tgBotApi.InlineKeyboardButton, 0)
			inlineKeyBoardRow = append(inlineKeyBoardRow, tgBotApi.NewInlineKeyboardButtonData(locText("cancel"), "upload~cancel"+":9"))
			Keyboards = append(Keyboards, inlineKeyBoardRow)
		}
		msg := tgBotApi.NewMessage(myID, text)
		msg.ParseMode = "Markdown"
		if MessageID == 0 {
			if len(Keyboards) != 0 {  
				msg.ReplyMarkup = tgBotApi.NewInlineKeyboardMarkup(Keyboards...)
			}
			res, err := bot.Send(msg)
			dropErr(err)
			MessageID = res.MessageID
		} else {  
			if len(Keyboards) != 0 {
				newMsg := tgBotApi.NewEditMessageTextAndMarkup(myID, MessageID, text, tgBotApi.NewInlineKeyboardMarkup(Keyboards...))
				bot.Send(newMsg)
			} else {
				newMsg := tgBotApi.NewEditMessageText(myID, MessageID, text)
				bot.Send(newMsg)
			}
		}
	}
}
var activeRefreshControl = 0