예제 #1
0
파일: regist.py 프로젝트: xfyer/lucibot
	def Update( self, inFulluser=None ):
		#############################
		# ユーザ名がない場合、名前を入力する
		if inFulluser==None :
			wStr = gVal.STR_SystemInfo['Client_Name'] + " に再登録するユーザ名を入力します。" + '\n'
			wStr = wStr + "再登録するユーザ名をドメインを含めて入力してください。 例= " + gVal.DEF_EXAMPLE_ACCOUNT
			CLS_OSIF.sPrn( wStr )
			inFulluser = CLS_OSIF.sInp( "User?=> " )
		
		#############################
		# ユーザ名の妥当性チェック
		wSTR_user = CLS_UserData.sUserCheck( inFulluser )
		if wSTR_user['Result']!=True :
			CLS_OSIF.sPrn( wSTR_user['Reason'] )
			return False
		elif wSTR_user['Registed']==False :
			CLS_OSIF.sPrn( "そのユーザは登録されていません。: " + inFulluser )
			return False
		
		#############################
		# メールアドレス、パスワードの入力
		wStr = '\n' + inFulluser + " を登録します。"
		wStr = wStr + "mastodonに登録したメールアドレスとパスワードを入力してください。"
		CLS_OSIF.sPrn( wStr )
		
		###入力受け付け
		wMail = CLS_OSIF.sInp( "Mailaddr: " )
		wPass = CLS_OSIF.sGpp( "Password: "******"mastodon ID: " + inFulluser + '\n'
		wStr = wStr + "Mailaddress: " + wMail
		CLS_OSIF.sPrn( wStr )
		wRes = CLS_OSIF.sInp( "以上の内容で登録します(y/N): " )
		if wRes!="y" :
			CLS_OSIF.sPrn( "登録を中止しました" + '\n' )
			return False
		
		#############################
		# 入力チェック
		wRes = self.__registUser( inFulluser, wMail, wPass )
		if wRes['Result']!=True :
			CLS_OSIF.sPrn( wRes['Reason'] )
			return False
		
		CLS_OSIF.sPrn( '\n' + "通信テスト中..." )
		#############################
		# mastodonアクセス前 ping疎通チェック
		if CLS_OSIF.sPing( wSTR_user['Domain'] )!=True :
			CLS_OSIF.sPrn( "mastodonサーバ " + wSTR_user['Domain'] + " が応答しません。登録を中止します。" )
			return False
		
		CLS_OSIF.sPrn( "通信OK" + '\n' + "データ登録中......" )
		#############################
		# レジストファイルの作りなおし
		wGetPath = CLS_UserData.sGetUserPath( inFulluser )
		if wGetPath['Result']!=True :
			CLS_OSIF.sPrn( "CLS_Regist: Update: User path ng: " + wGetPath['Reason'] )
			return False
		
		if CLS_File.sClrFile( wGetPath['Responce'] + gVal.DEF_STR_FILE['Reg_RegFile'] )!=True :
			CLS_OSIF.sPrn( "CLS_Regist: Update: Reg File is not found: " + wGetPath['Responce'] + gVal.DEF_STR_FILE['Reg_RegFile'] )
			return False
		
		if CLS_File.sClrFile( wGetPath['Responce'] + gVal.DEF_STR_FILE['Reg_UserFile'] )!=True :
			CLS_OSIF.sPrn( "CLS_Regist: Update: User File is not found: " + wGetPath['Responce'] + gVal.DEF_STR_FILE['Reg_UserFile'] )
			return False
		
		#############################
		# mastodonアカウントへの関連付け(本レジスト)
		wRes = CLS_Regist.sRegistMastodon( inFulluser, wMail, wPass )
		if wRes['Result']!=True :
			wStr = "mastodonへの関連付けに失敗しました" + '\n'
			wStr = wStr + "メールアドレス、パスワード、mastodonが運用中か確認してください。" + '\n'
			wStr = wStr + wRes['Reason']
			CLS_OSIF.sPrn( wStr )
			# データ削除
			CLS_File.sRmtree( wGetPath['Responce'] )
			return False
		
		CLS_OSIF.sPrn( "登録OK" + '\n' + "mastodon登録テスト中......" )
		#############################
		# 通信テスト
		wRes = self.CreateMastodon( inFulluser )
		if wRes['Result']!=True :
			wStr = "mastodonへの関連付けに失敗しました" + '\n'
			wStr = wStr + "メールアドレス、パスワード、mastodonが運用中か確認してください。" + '\n'
			wStr = wStr + wRes['Reason']
			CLS_OSIF.sPrn( wStr )
			# データ削除
			CLS_File.sRmtree( wGetPath['Responce'] )
			return False
		
		CLS_OSIF.sPrn( "mastodon登録OK" + '\n' )
		
		#############################
		# 完了
		CLS_OSIF.sPrn( inFulluser + " の再登録が完了しました" + '\n' )
		return True
예제 #2
0
파일: logarcive.py 프로젝트: xfyer/lucibot
	def Run(self):
		#############################
		# 処理開始の確認
		wStr = "ログのアーカイブを開始します。" + '\n'
		wStr = wStr + "よろしいですか?(y/N)=> "
		wRes = CLS_OSIF.sInp( wStr )
		if wRes!="y" :
			CLS_OSIF.sPrn( "処理を中止しました。" )
			return
		
		#############################
		# ユーザフォルダのアーカイブリスト 作成
		wARR_UserList = CLS_UserData.sGetUserList()
		wARR_ArciveList = []
		wARR_DeleteList = {}
		wIndex = 0
		for wLine in wARR_UserList :
			#############################
			# パス生成
			wPath = gVal.DEF_USERDATA_PATH + wLine + "/log/"
			wARR_ArciveList.append( wPath )
			
			#############################
			# ファイル一覧生成
			wFileList = CLS_File.sFs( wPath )
			wDelList = []
			for wFilePath in wFileList :
##				wFilePath = wPath + wFilePath
				wARR_ArciveList.append( wFilePath )
				wDelList.append( wFilePath )
			
			wARR_DeleteList.update({ wIndex : wDelList })
			wIndex += 1
		
		#############################
		# masterConfigフォルダ 追加
		wPath = gVal.DEF_USERDATA_PATH + gVal.DEF_MASTERCONFIG_NAME + "/log/"
		wARR_ArciveList.append( wPath )
		
		wFileList = CLS_File.sFs( wPath )
		wDelList = []
		for wFilePath in wFileList :
##			wFilePath = wPath + wFilePath
			wARR_ArciveList.append( wFilePath )
			wDelList.append( wFilePath )
		
##		wARR_DeleteList.update({ wIndex : wDelList })
##		wIndex += 1
		
		#############################
		# 各カレントの削除一覧から最後尾を抜く
		wKeyList = wARR_DeleteList.keys()
		for wKey in wKeyList :
			if len(wARR_DeleteList[wKey])>=2 :
				del wARR_DeleteList[wKey][-1]
		
		#############################
		# アーカイブ名の作成
		
		#############################
		# 時間を取得
		wTD = CLS_OSIF.sGetTime()
		if wTD['Result']!=True :
			###時間取得失敗  時計壊れた?
			CLS_OSIF.sPrn( "時間取得失敗。処理を中止しました。" )
			return
		wDate = wTD['TimeDate'].split(" ")
		
		#############################
		# ファイルパスを作成する
##		wLogFile = gVal.DEF_STR_FILE['MasterLog_path'] + "logs" + wDate[0] + wDate[1] + ".zip"
		wNDate = wDate[0].replace( "-", "" )
		wNTime = wDate[1].replace( ":", "" )
		wFileName = "logs_" + wNDate + "_" + wNTime + ".zip"
		wLogFile = gVal.DEF_STR_FILE['MasterConfig_path'] + wFileName
		
		CLS_OSIF.sPrn( '\n' + "アーカイブ実行中..." )
		#############################
		# アーカイブ実行
###		print( "xx1: " + wLogFile )
###		print( "xx2: " + str(wARR_ArciveList) )
		if CLS_File.sFolderArcive( wLogFile, wARR_ArciveList )!=True :
			CLS_OSIF.sPrn( "アーカイブ失敗。処理を中止しました。" )
			return
		
		CLS_OSIF.sPrn( '\n' + "古いログを削除中..." )
		#############################
		# 古いログを削除
		wKeyList = wARR_DeleteList.keys()
		for wKey in wKeyList :
			for wPath in wARR_DeleteList[wKey] :
###				print( wPath )
				if CLS_File.sRemove( wPath )!=True :
					CLS_OSIF.sPrn( "削除失敗。処理を中止しました。" )
					break
		
		CLS_OSIF.sPrn( "処理が完了しました。" )
		return
예제 #3
0
파일: regist.py 프로젝트: xfyer/lucibot
	def Regist( self, inFulluser=None ):
		#############################
		# ユーザ名がない場合、名前を入力する
		if inFulluser==None :
			wStr = gVal.STR_SystemInfo['Client_Name'] + " に新しいユーザ名を入力します。" + '\n'
			wStr = wStr + "登録するユーザ名をドメインを含めて入力してください。 例= " + gVal.DEF_EXAMPLE_ACCOUNT
			CLS_OSIF.sPrn( wStr )
			inFulluser = CLS_OSIF.sInp( "User?=> " )
		
		#############################
		# ユーザ名の妥当性チェック
		wSTR_user = CLS_UserData.sUserCheck( inFulluser )
		if wSTR_user['Result']!=True :
			CLS_OSIF.sPrn( wSTR_user['Reason'] )
			return False
		elif wSTR_user['Registed']==True :
			CLS_OSIF.sPrn( "既に登録されているユーザです。: " + inFulluser )
			return False
		
		#############################
		# メールアドレス、パスワードの入力
		wStr = '\n' + inFulluser + " を登録します。"
		wStr = wStr + "mastodonに登録したメールアドレスとパスワードを入力してください。"
		CLS_OSIF.sPrn( wStr )
		
		###入力受け付け
		wMail = CLS_OSIF.sInp( "Mailaddr: " )
		wPass = CLS_OSIF.sGpp( "Password: "******"mastodon ID: " + inFulluser + '\n'
		wStr = wStr + "Mailaddress: " + wMail
		CLS_OSIF.sPrn( wStr )
		wRes = CLS_OSIF.sInp( "以上の内容で登録します(y/N): " )
		if wRes!="y" :
			CLS_OSIF.sPrn( "登録を中止しました" + '\n' )
			return False
		
		#############################
		# 入力チェック
		wRes = self.__registUser( inFulluser, wMail, wPass )
		if wRes['Result']!=True :
			CLS_OSIF.sPrn( wRes['Reason'] )
			return False
		
		CLS_OSIF.sPrn( '\n' + "通信テスト中..." )
		#############################
		# mastodonアクセス前 ping疎通チェック
		if CLS_OSIF.sPing( wSTR_user['Domain'] )!=True :
			CLS_OSIF.sPrn( "mastodonサーバ " + wSTR_user['Domain'] + " が応答しません。登録を中止します。" )
			return False
		
		CLS_OSIF.sPrn( "通信OK" + '\n' + "データ登録中......" )
		#############################
		# テンプレートデータのコピー(データ作成)
		wGetPath = CLS_UserData.sGetUserPath( inFulluser )
##		if wGetPath['Result']!=True :
##			CLS_OSIF.sPrn( "CLS_Regist: Regist: User path ng: " + wGetPath['Reason'] )
##			return False
		
		if CLS_File.sCopytree(
			gVal.DEF_STR_FILE['defUserdata_path'],
			wGetPath['Responce'] )!=True :
			###ありえない
			CLS_OSIF.sPrn( "CLS_Regist: Regist: defaultデータコピー失敗" )
			return False
		
		if CLS_File.sFolderExist( gVal.DEF_USERDATA_PATH, inFulluser )!=True :
			CLS_OSIF.sPrn( "CLS_Regist: Regist: ユーザデータの登録に失敗しました" )
			return False
		
		#############################
		# mastodonアカウントへの関連付け(本レジスト)
		wRes = self.sRegistMastodon( inFulluser, wMail, wPass )
		if wRes['Result']!=True :
			wStr = "mastodonへの関連付けに失敗しました" + '\n'
			wStr = wStr + "メールアドレス、パスワード、mastodonが運用中か確認してください。" + '\n'
			wStr = wStr + wRes['Reason']
			CLS_OSIF.sPrn( wStr )
			# データ削除
			CLS_File.sRmtree( wGetPath['Responce'] )
			return False
		
		CLS_OSIF.sPrn( "登録OK" + '\n' + "mastodon登録テスト中......" )
		#############################
		# 通信テスト
		wRes = self.CreateMastodon( inFulluser )
		if wRes['Result']!=True :
			wStr = "mastodonへの関連付けに失敗しました" + '\n'
			wStr = wStr + "メールアドレス、パスワード、mastodonが運用中か確認してください。" + '\n'
			wStr = wStr + wRes['Reason']
			CLS_OSIF.sPrn( wStr )
			# データ削除
			CLS_File.sRmtree( wGetPath['Responce'] )
			return False
		
		CLS_OSIF.sPrn( "mastodon登録OK" + '\n' )
		
		#############################
		# cron作成
		if inFulluser == gVal.STR_MasterConfig['MasterUser'] :
			wKind = gVal.DEF_CRON_MASTER
		else:
			wKind = gVal.DEF_CRON_SUB
		
		wCLS_botjib = CLS_Botjob()
		wPutRes = wCLS_botjib.Put( wKind, inFulluser )
		if wPutRes['Result']!=True :
##			CLS_OSIF.sPrn( "CLS_Regist: Regist: cron create failed: " + wPutRes['Reason'] )
##			return False
##		
##		CLS_OSIF.sPrn( '\n' + "cronを起動しました" )
			CLS_OSIF.sPrn( "cronの起動に失敗しました: " + wPutRes['Reason'] )
		else :
			CLS_OSIF.sPrn( '\n' + "cronを起動しました" )
		
		#############################
		# トラヒックの登録
		wRes = self.__regTrafficUser( inFulluser )
		if wRes['Result']!=True :
			CLS_OSIF.sPrn( "CLS_Regist: Regist: " + wRes['Reason'] )
			return False
		if wRes['Update']==True :
			CLS_OSIF.sPrn( "DBにトラヒック情報が追加されました" )
		
		#############################
		# 完了
		CLS_OSIF.sPrn( inFulluser + " の登録が完了しました" + '\n' )
		return True
예제 #4
0
 def __initFile(self, inSrcFile, inDstFile):
     if CLS_File.sCopy(inSrcFile, inDstFile) != True:
         ##失敗
         CLS_OSIF.sPrn("CLS_Setup: Init: Copy error: " + inDstFile + '\n')
     return
예제 #5
0
    def MasterSetup(self):
        #############################
        # フォルダの存在チェック
        if CLS_File.sExist(gVal.DEF_STR_FILE['MasterConfig_path']) == True:
            CLS_OSIF.sPrn("フォルダが既に存在します。セットアップを中止します。")
            return False  #既にある

        wStr = '\n' + "Master環境情報のセットアップを開始します。"
        wStr = wStr + "データのテンプレートをコピーします....."
        CLS_OSIF.sPrn(wStr)

        #############################
        # テンプレートデータのコピー(データ作成)
        if CLS_File.sCopytree(gVal.DEF_STR_FILE['defMasterdata_path'],
                              gVal.DEF_STR_FILE['MasterConfig_path']) != True:
            ###テンプレートが消えてる (IOエラーはOSが出す)
            CLS_OSIF.sPrn(
                "CLS_Config: MasterSetup: Master Data Template is not found")
            return False

        #############################
        # フォルダの存在チェック
        if CLS_File.sExist(gVal.DEF_STR_FILE['MasterConfig_path']) != True:
            CLS_OSIF.sPrn("CLS_Config: MasterSetup: Data Copy check failed")
            return False  #失敗

        #############################
        # コピー完了
        CLS_OSIF.sPrn("Master環境情報のコピーが完了しました。" + '\n')

        #############################
        # 使うクラスの作成
        wCLS_Config = CLS_Config()
        wCLS_Regist = CLS_Regist()
        wCLS_Botjob = CLS_Botjob()
        wCLS_Bot_Ctrl = CLS_Bot_Ctrl()

        #############################
        # Master環境情報の変更
        wStr = "Master環境情報の変更をおこないますか?" + '\n'
        wStr = wStr + "(あとで変更することもできます)"
        CLS_OSIF.sPrn(wStr)
        wSelect = CLS_OSIF.sInp("変更する?(y/N)=> ")
        if wSelect == "y":
            wRes = wCLS_Config.CnfMasterConfig()
            if wRes != True:
                ##失敗
                CLS_File.sRmtree(gVal.DEF_STR_FILE['MasterConfig_path'])
                return False

        #############################
        # 初期起動直後なので、メンテをOFFにする
        # cronを全て剥がす
##		gVal.STR_MasterConfig['mMainte'] = "off"
##		wCLS_Botjob.Stop()
        wCLS_Bot_Ctrl.CronAllStop()

        #############################
        # ユーザ登録=0の時、ユーザ登録させる
        wList = CLS_UserData.sGetUserList()
        if len(wList) == 0:
            wFLG_regist = False
            while True:
                wStr = '\n' + "Master User(mastodonでbotとして使うユーザ)の登録をおこないます。" + '\n'
                wStr = wStr + "ユーザ名をドメインを含めて入力してください。: 例= " + gVal.DEF_EXAMPLE_ACCOUNT
                CLS_OSIF.sPrn(wStr)
                wMasterUser = CLS_OSIF.sInp("MasterUser?=> ")
                wRes = wCLS_Regist.Regist(wMasterUser)
                if wRes == True:
                    ###登録できたので次へ
                    wFLG_regist = True
                    break
                else:
                    ###登録できないと、登録できるまで継続したい
                    CLS_OSIF.sPrn("ユーザの登録がないとbotが動作できません。")
                    wRes = CLS_OSIF.sInp("登録を中止しますか?(y)=> ")
                    if wRes == 'y':
                        return False  #セットアップいちお完了だけどユーザ未登録

            if wFLG_regist != True:
                ##中止なので消す
                CLS_File.sRmtree(gVal.DEF_STR_FILE['MasterConfig_path'])
                return False

        #############################
        # ユーザ登録がされている時
        # もしくは1件だけ登録した時
        # masterユーザを登録する
        wRes = wCLS_Config.CnfMasterUser()
        if wRes != True:
            ##失敗
            CLS_File.sRmtree(gVal.DEF_STR_FILE['MasterConfig_path'])
            return False

        #############################
        # AdminUserの変更
        wCLS_Config.CnfAdminUser()

        ##		#############################
        ##		# MasterとBackgroundのbotを起動する
        ##		wRes = wCLS_Botjob.Put( gVal.DEF_CRON_MASTER, gVal.STR_MasterConfig['MasterUser'] )
        ##		if wRes['Result']!=True :
        ##			wStr = "Master botの起動に失敗しました。: " + wRes['Reason']
        ##			CLS_OSIF.sPrn( wStr )
        ##			return False
        ##
        ##		wRes = wCLS_Botjob.Put( gVal.DEF_CRON_BACK, gVal.DEF_CRON_ACCOUNT_BACKGROUND )
        ##		if wRes['Result']!=True :
        ##			wStr = "Background botの起動に失敗しました。: " + wRes['Reason']
        ##			CLS_OSIF.sPrn( wStr )
        ##			return False

        #############################
        # Databaseの作成

        #############################
        # DB接続情報ファイルのチェック
        if CLS_File.sExist(gVal.DEF_STR_FILE['DBinfo_File']) != True:
            ##			###DB接続情報ファイルの作成(空ファイル)
            ##			if CLS_File.sCopy(
            ##				gVal.STR_File['defDBinfo_File'], gVal.STR_File['DBinfo_File'] )!=True :
            ##				##失敗
            ##				CLS_File.sRmtree( gVal.STR_File['MasterConfig_path'] )
            ##				CLS_File.sRmtree( gVal.DEF_USERDATA_PATH + gVal.STR_MasterConfig['MasterUser'] )
            ##
            ##				wStr = "CLS_Setup: DataBase file copy failed: src=" + gVal.STR_File['defDBinfo_File']
            ##				wStr = wStr + " dst=" + gVal.STR_File['DBinfo_File']
            ##				CLS_OSIF.sPrn( wStr  )
            ##				return False
            ##
            wOBJ_DB = CLS_PostgreSQL_Use()
            ##			if wOBJ_DB.CreateDBdata( gVal.STR_File['DBinfo_File'] )!=True :
            if wOBJ_DB.CreateDBdata(
                    gVal.DEF_STR_FILE['DBinfo_File'],
                    gVal.DEF_STR_FILE['defDBinfo_File']) != True:
                ##失敗
                CLS_File.sRmtree(gVal.DEF_STR_FILE['MasterConfig_path'])
                CLS_File.sRmtree(gVal.DEF_USERDATA_PATH +
                                 gVal.STR_MasterConfig['MasterUser'])

                wStr = "CLS_Setup: DataBase file create failed: src=" + gVal.DEF_STR_FILE[
                    'defDBinfo_File']
                wStr = wStr + " dst=" + gVal.DEF_STR_FILE['DBinfo_File']
                CLS_OSIF.sPrn(wStr)
                return False
##
##			wOBJ_DB = CLS_PostgreSQL_Use( gVal.DEF_STR_FILE['DBinfo_File'] )

        else:
            ###DB接続情報変更
            wStr = "DataBaseの接続情報の更新をおこないます。DataBaseの接続情報の更新をおこないますか?"
            print(wStr)
            wSelect = input("更新する?(y/N)=> ").strip()
            if wSelect == "y":
                wOBJ_DB = CLS_PostgreSQL_Use()
                ##				if wOBJ_DB.CreateDBdata( gVal.DEF_STR_FILE['DBinfo_File'] )!=True :
                if wOBJ_DB.CreateDBdata(
                        gVal.DEF_STR_FILE['DBinfo_File'],
                        gVal.DEF_STR_FILE['defDBinfo_File']) != True:
                    ##失敗
                    CLS_File.sRmtree(gVal.DEF_STR_FILE['MasterConfig_path'])
                    CLS_File.sRmtree(gVal.DEF_USERDATA_PATH +
                                     gVal.STR_MasterConfig['MasterUser'])

                    wStr = "CLS_Setup: DataBase file create failed: src=" + gVal.DEF_STR_FILE[
                        'defDBinfo_File']
                    wStr = wStr + " dst=" + gVal.DEF_STR_FILE['DBinfo_File']
                    CLS_OSIF.sPrn(wStr)
                    return False
##
##				wOBJ_DB = CLS_PostgreSQL_Use( gVal.DEF_STR_FILE['DBinfo_File'] )

##		#############################
##		# DBの状態チェック
##		wRes = wOBJ_DB.GetIniStatus()
##		if wRes['Result']!=True :
##			###失敗
##			CLS_File.sRmtree( gVal.DEF_STR_FILE['MasterConfig_path'] )
##			CLS_File.sRmtree( gVal.DEF_USERDATA_PATH + gVal.STR_MasterConfig['MasterUser'] )
##
##			wStr = "CLS_Setup: DB Connect test is failed: " + wRes['Reason']
##			CLS_OSIF.sPrn( wStr  )
##			return False
##
##		wStr = "テーブルの作成中......" + '\n'
##		print( wStr )
##		#############################
##		# テーブルの作成
##		self.__create_TBL_USER_DATA( wOBJ_DB )
##		self.__create_TBL_TRAFFIC_DATA( wOBJ_DB )
##		self.__create_TBL_WORD_CORRECT( wOBJ_DB )
##		self.__create_TBL_CLAZ_LIST( wOBJ_DB )
##
##		#############################
##		# DBのクローズ
##		wOBJ_DB.Close()
##		wStr = "作成完了!!  DataBaseから切断しました。" + '\n'
##		print( wStr )
##
#############################
# DBの初期化
        wRes = self.__initDB()
        if wRes != True:
            ###失敗
            CLS_File.sRmtree(gVal.DEF_STR_FILE['MasterConfig_path'])
            CLS_File.sRmtree(gVal.DEF_USERDATA_PATH +
                             gVal.STR_MasterConfig['MasterUser'])

            wStr = "CLS_Setup: DB Connect test is failed: " + wRes['Reason']
            CLS_OSIF.sPrn(wStr)
            return False

        #############################
        # Twitter接続情報の作成
        wOBJ_Twitter = CLS_Twitter_Use()
        wOBJ_Twitter.CreateTwitter(gVal.DEF_STR_FILE['Twitter_File'],
                                   gVal.DEF_STR_FILE['defTwitter_File'])
        wCLS_Config.CnfTwitter()  #有効無効設定

        #############################
        # MasterとBackgroundのbotを起動する
        wRes = wCLS_Botjob.Put(gVal.DEF_CRON_MASTER,
                               gVal.STR_MasterConfig['MasterUser'])
        if wRes['Result'] != True:
            ##失敗
            CLS_File.sRmtree(gVal.DEF_STR_FILE['MasterConfig_path'])
            CLS_File.sRmtree(gVal.DEF_USERDATA_PATH +
                             gVal.STR_MasterConfig['MasterUser'])

            wStr = "Master botの起動に失敗しました。: " + wRes['Reason']
            CLS_OSIF.sPrn(wStr)
            return False

        return True
예제 #6
0
    def sRun(cls):
        #############################
        # システム情報を取得する
        cls().__getSystemInfo()
        cls().__getLucibotVer()

        #############################
        # 初期化
        gVal.FLG_Console_Mode = True  #コンソールモード

        #############################
        # データフォルダのチェック
        if CLS_File.sExist(gVal.DEF_USERDATA_PATH) != True:
            ###手順ミスorデータ消した
            wStr = '\n' + gVal.STR_SystemInfo[
                'Client_Name'] + " データフォルダがないため起動できません。" + '\n'
            wStr = wStr + "フォルダは " + gVal.STR_SystemInfo[
                'Client_Name'] + " のcloneを置いた上位フォルダ(=cloneと同一階層)に作成します。" + '\n'
            wStr = wStr + "詳しくはreadme_setup.txtをご参照ください。" + '\n'
            CLS_OSIF.sPrn(wStr)
            return

        #############################
        # Master環境情報の読み込み
        if CLS_Config.sGetMasterConfig() != True:
            # MasterConfigがないのでセットアップするか?
            wStr = '\n' + "データフォルダにMaster環境情報がないため起動できません。" + '\n'
            wStr = wStr + "データが初期セットアップされていない可能性があります。"
            CLS_OSIF.sPrn(wStr)
            wRes = CLS_OSIF.sInp("セットアップしますか?(y/N)=> ")
            if wRes != "y":
                CLS_OSIF.sPrn("起動を中止しました。")
                return

            #############################
            # 環境のセットアップ
            wCLS_Setup = CLS_Setup()
            if wCLS_Setup.MasterSetup() != True:
                CLS_OSIF.sPrn("セットアップを中止します。")
                return

            wCLS_Setup = ""
            CLS_OSIF.sInp('\n' + "セットアップが完了しました。リターンキーを押してください。[RT]")

        #####################################################
        # MasterUserが未登録
        if gVal.STR_MasterConfig['MasterUser'] == "":
            CLS_OSIF.sPrn(
                "MasterUserが登録されていないため、bot動作ができません。MasterUserを登録します。")
            wCLS_Config = CLS_Config()
            wRes = wCLS_Config.CnfMasterUser()
            if wRes != True:
                #############################
                # 0件の場合は、ユーザ登録させる
                wList = CLS_UserData.sGetUserList()
                if len(wList) == 0:
                    wCLS_work = CLS_Regist()
                    wCLS_work.Regist()

                CLS_OSIF.sInp("リターンキーを押して再度コンソールアプリを起動してください。[RT]")
                return

            wCLS_Config = ""

        #############################
        # ** 初期化モード **
        wArg = CLS_OSIF.sGetArg()
        if len(wArg) == 2:
            if wArg[1] == "init":
                wCLS_Setup = CLS_Setup()
                wCLS_Setup.AllInit()
                CLS_OSIF.sInp("リターンキーを押して再度コンソールアプリを起動してください。[RT]")
            return

        #############################
        # コンソールを表示
        while True:
            wCommand = cls().sViewMainConsole()

            if wCommand.find("\\q") >= 0 or wCommand == "exit":
                ###終了
                CLS_OSIF.sPrn("コンソールを停止します。" + '\n')
                break

            wRes = cls().sRunCommand(wCommand)
            if wRes == True:
                CLS_OSIF.sInp("リターンキーを押すと戻ります。[RT]")

        return
예제 #7
0
    def __cnfMasterConfig_Change(self):
        wKeylist = self.STR_View_masterConf.keys()
        for iKey in wKeylist:
            #############################
            # 表示しないメニューは排除
            ##			if iKey=='Twitter' and gVal.STR_MasterConfig['twAS']=="" :
            ##				###twitterのキー設定がされていなければメニューを出さない
            ##				gVal.STR_MasterConfig[iKey] = "off"
            ##				continue
            ##
            if self.STR_View_masterConf[iKey] == False:
                ###これらは別メニューで変更させる
                continue

            #############################
            # ON/OFFの文字作成
            wStr = iKey + "= " + str(gVal.STR_MasterConfig[iKey]) + " : "
            if gVal.STR_MasterConfig[iKey] == "on":
                wStr = wStr + "c: on→off"
                wChg = "off"
            else:
                wStr = wStr + "c: off→on"
                wChg = "on"

            wStr = wStr + " / other: 変更しない"

            #############################
            # 変更メニューの表示
            CLS_OSIF.sPrn(wStr)
            wSelect = CLS_OSIF.sInp("選択? => ")

            if wSelect == "c":
                ###変更する
                gVal.STR_MasterConfig[iKey] = wChg

        #############################
        # タグの変更
        wStr = "mTootTag= " + str(gVal.STR_MasterConfig["mTootTag"]) + " : "
        wStr = wStr + "c: 変更する / othwe: 変更しない"
        CLS_OSIF.sPrn(wStr)
        wSelect = CLS_OSIF.sInp("選択? => ")
        if wSelect == "c":
            ###変更する
            wTag = CLS_OSIF.sInp("タグ? => ")
            if CLS_OSIF.sChkREMString(wTag) == True:
                gVal.STR_MasterConfig["mTootTag"] = wTag

##		wStr = "iFavoTag= " + str( gVal.STR_MasterConfig["iFavoTag"]) + " : "
        wStr = "iActionTag= " + str(
            gVal.STR_MasterConfig["iActionTag"]) + " : "
        wStr = wStr + "c: 変更する / othwe: 変更しない"
        CLS_OSIF.sPrn(wStr)
        wSelect = CLS_OSIF.sInp("選択? => ")
        if wSelect == "c":
            ###変更する
            wTag = CLS_OSIF.sInp("タグ? => ")
            if CLS_OSIF.sChkREMString(wTag) == True:
                ##				gVal.STR_MasterConfig["iFavoTag"] = wTag
                gVal.STR_MasterConfig["iActionTag"] = wTag

        wStr = "prTag= " + str(gVal.STR_MasterConfig["prTag"]) + " : "
        wStr = wStr + "c: 変更する / othwe: 変更しない"
        CLS_OSIF.sPrn(wStr)
        wSelect = CLS_OSIF.sInp("選択? => ")
        if wSelect == "c":
            ###変更する
            wTag = CLS_OSIF.sInp("タグ? => ")
            if CLS_OSIF.sChkREMString(wTag) == True:
                gVal.STR_MasterConfig["prTag"] = wTag

        return
예제 #8
0
파일: toot.py 프로젝트: xfyer/lucibot
    def __getTwitterTL(self, inTwitter):
        CLS_OSIF.sPrn("タイムラインの取得中..." + '\n')
        #############################
        # 取得
        ##		wRes = inTwitter.GetTL( inTLmode="user", inList=None, inReply=True, inRetweet=False )
        ##		wRes = inTwitter.GetTL( inTLmode="home", inList=None, inReply=True, inRetweet=True )
        ##		wRes = inTwitter.GetTL( inTLmode="list", inList=1006036956923363328, inReply=True, inRetweet=False )
        ##		wRes = inTwitter.GetTL( inTLmode="list", inList=1164128983975206912, inReply=True, inRetweet=False )
        wRes = inTwitter.GetTL()
        if wRes['Result'] != True:
            CLS_OSIF.sPrn("Twitter API Error: " + wRes['Reason'])
            wRes = CLS_OSIF.sInp("継続します。[RT]")
            return False

        #############################
        # 画面に表示
        for wROW in wRes['Responce']:
            CLS_OSIF.sPrn("Country: " + str(wROW['lang']))
            if "possibly_sensitive" not in wROW:
                CLS_OSIF.sPrn("Sensitive: ON")
            CLS_OSIF.sPrn("Locked: " + str(wROW['user']['protected']))
            CLS_OSIF.sPrn("Sender: " + wROW['user']['name'] + "(@" +
                          wROW['user']['screen_name'] + ")")

            CLS_OSIF.sPrn(wROW['text'])
            CLS_OSIF.sPrn(
                "------------------------------------------------------------")

        #############################
        # 正常
        wRes = CLS_OSIF.sInp("タイムラインの取得を正常におこないました。[RT]")
        return True
예제 #9
0
파일: toot.py 프로젝트: xfyer/lucibot
    def ManualToot(self):
        #############################
        # MasterUserユーザチェック
        wFulluser = gVal.STR_MasterConfig['MasterUser']
        wSTR_user = CLS_UserData.sUserCheck(wFulluser)
        if wSTR_user['Result'] != True:
            ###config書き換えたかなんかしたろ?
            CLS_OSIF.sPrn("CLS_Toot: ManualToot: Failer user name: " +
                          wFulluser)
            return False

        CLS_OSIF.sPrn("mastodonと通信中...")
        #############################
        # mastodonクラス生成
        wCLS_work = CLS_Regist()
        wRes = wCLS_work.CreateMastodon(wFulluser)
        if wRes['Result'] != True:
            CLS_OSIF.sPrn("mastodonと接続できないため中止します。 domain=" +
                          wSTR_user['Domain'])
            return False

        #############################
        # コンソール
        while True:
            #############################
            # コマンド画面表示
            wCommand = self.__manualToot_Disp(wFulluser)

            #############################
            # 継続
            if wCommand == "":
                continue

            #############################
            # 終了
##			elif wCommand=="\q" :
            elif wCommand.find("\\q") >= 0:
                break

            #############################
            # 範囲切り替え
##			elif wCommand=="\c" :
            elif wCommand.find("\\c") >= 0:
                self.SetRange('ManualToot')

            #############################
            # (ないコマンド)
            elif wCommand.find("\\") == 0:
                wStr = "そのコマンドはありません。[RT]"
                CLS_OSIF.sInp(wStr)
                continue

            #############################
            # トゥート
            else:
                wRes = wCLS_work.GetMastodon(wFulluser)
                if wRes['Result'] != True:
                    wStr = "mastodon取得NG: user="******"    " + wRes['Reason']
                    CLS_OSIF.sPrn(wStr)
                    return False

                self.__manualToot(wFulluser, wSTR_user['Domain'], wCommand,
                                  wRes['Responce'])

        return
예제 #10
0
파일: toot.py 프로젝트: xfyer/lucibot
    def MulticastToot(self):
        #############################
        # 同報配信ユーザ一覧の取得
        ##		wCLS_Config = CLS_Config()
        ##		wRes = wCLS_Config.GetMulticastUserList()
        ##		if wRes['Result']!=True :
        ##			CLS_OSIF.sPrn( "同報配信一覧の取得に失敗しました。" )
        ##			return False
        ##		elif len(wRes['Responce'])==0 :
        ##			CLS_OSIF.sPrn( "同報配信先がありません。" )
        ##			return False
        ##
        ##		wMulticastList = wRes['Responce']

        wMulticastList = CLS_UserData.sGetUserList()
        ##		elif len( wMulticastList )==0 :
        if len(wMulticastList) == 0:
            CLS_OSIF.sPrn("同報配信先がありません。")
            return False

        #############################
        # MasterUserユーザチェック
        wFulluser = gVal.STR_MasterConfig['MasterUser']
        wSTR_user = CLS_UserData.sUserCheck(wFulluser)
        if wSTR_user['Result'] != True:
            ###config書き換えたかなんかしたろ?
            CLS_OSIF.sPrn("CLS_Toot: MulticastToot: Failer user name: " +
                          wFulluser)
            return False

        CLS_OSIF.sPrn("mastodonと通信中...")
        #############################
        # mastodonクラス生成
        wCLS_work = CLS_Regist()
        wRes = wCLS_work.CreateMastodon(wFulluser)
        if wRes['Result'] != True:
            CLS_OSIF.sPrn("mastodonと接続できないため中止します。 domain=" +
                          wSTR_user['Domain'])
            return False

        CLS_OSIF.sPrn("同報配信先一覧の作成中...")
        #############################
        # 配信先一覧(MasterUser)
        wSendList = {}
        wSendList.update({wFulluser: ""})
        wSendList[wFulluser] = {}
        wSendList[wFulluser].update({"fulluser": wFulluser})
        wSendList[wFulluser].update({"domain": wSTR_user['Domain']})

        #############################
        # 同報配信先ユーザのクラス作成
        for wUser in wMulticastList:
            #############################
            # ユーザチェック
            wSTR_user = CLS_UserData.sUserCheck(wUser)
            if wSTR_user['Result'] != True:
                continue

            #############################
            # mastodonクラス生成
            wRes = wCLS_work.CreateMastodon(wUser)
            if wRes['Result'] != True:
                continue

            #############################
            # 配信先一覧
            wSendList.update({wUser: ""})
            wSendList[wUser] = {}
            wSendList[wUser].update({"fulluser": wUser})
            wSendList[wUser].update({"domain": wSTR_user['Domain']})

        #############################
        # 配信先数のチェック
        if len(wSendList) <= 1:
            CLS_OSIF.sPrn("接続可能な同報配信先がありません。")
            return False

        #############################
        # コンソール
        while True:
            #############################
            # コマンド画面表示
            wCommand = self.__multicastToot_Disp(wFulluser, len(wSendList))

            #############################
            # 継続
            if wCommand == "":
                continue

            #############################
            # 終了
            elif wCommand.find("\\q") >= 0:
                break

            #############################
            # 範囲切り替え
            elif wCommand.find("\\c") >= 0:
                self.SetRange('Multicast')

            #############################
            # 一覧
            elif wCommand.find("\\l") >= 0:
                self.__multicastList(wSendList)

            #############################
            # (ないコマンド)
            elif wCommand.find("\\") == 0:
                wStr = "そのコマンドはありません。[RT]"
                CLS_OSIF.sInp(wStr)
                continue

            #############################
            # トゥート
            else:
                self.__multicastToot(wFulluser, wSendList, wCommand, wCLS_work)

        return
예제 #11
0
파일: toot.py 프로젝트: xfyer/lucibot
    def __multicastToot(self, inFulluser, inSendlist, inToot, inSTR_Mastodon):
        #############################
        # 分かるよう加工
        wTtl = "[Multicast] "
        wTag = '\n' + gVal.STR_MasterConfig['mTootTag'] + " @" + inFulluser
        wToot = wTtl + inToot + wTag

        wMaxToot = 500 - (len(wTtl) + len(wTag))
        if len(wToot) > 500:
            wRes = CLS_OSIF.sInp(str(wMaxToot) + " 文字以上は送信できません。[RT]")
            return False

        CLS_OSIF.sPrn("mastodonに配信中...")
        wKeylist = inSendlist.keys()
        wListLen = len(wKeylist)
        wSend = 0
        for iKey in wKeylist:
            #############################
            # mastodonオブジェクト取得
            wMastodon = inSTR_Mastodon.GetMastodon(iKey)
            if wMastodon['Result'] != True:
                wStr = "mastodon取得NG: user="******"    " + wMastodon['Reason']
                CLS_OSIF.sPrn(wStr)
                continue

            #############################
            # IP疎通チェック
            if CLS_OSIF.sPing(inSendlist[iKey]['domain']) != True:
                CLS_OSIF.sPrn("通信NG: " + inSendlist[iKey]['domain'])
                continue

            #############################
            #トゥート
            wRes = wMastodon['Responce'].Toot(
                status=wToot, visibility=self.STR_TootRange['Multicast'])
            if wRes['Result'] != True:
                CLS_OSIF.sPrn("mastodon API Error: " + wRes['Reason'] +
                              ": account= " + iKey)
                continue

            CLS_OSIF.sPrn("送信OK: " + inSendlist[iKey]['domain'])

            #############################
            #カウント
            wSend += 1
            if wListLen > wSend:
                ###送り切ってなければディレイする
                CLS_OSIF.sSleep(gVal.DEF_STR_TLNUM['getMcDelay'])

        wRes = CLS_OSIF.sPrn("配信完了。[RT]")
        return True
예제 #12
0
    def CnfAdminUser(self):
        #############################
        # ファイルの存在チェック
        if CLS_File.sExist(gVal.DEF_STR_FILE['MasterConfig']) != True:
            ###ありえない
            CLS_OSIF.sPrn(
                "CLS_Config: cCnfAdminUser: masterConfig file is not found : "
                + gVal.DEF_STR_FILE['MasterConfig'])
            return False  #ない

        #############################
        # 変更メニュー表示
        if gVal.STR_MasterConfig['AdminUser'] == "":
            wStr = "現在AdminUserは設定されていません。設定することで登録ユーザから通知を受け取ることができるようになります。"
            wSt2 = "AdminUserの設定をおこないますか?(y/N)=> "
        else:
            wStr = "現在AdminUserは次のアカウントが設定されています。: " + gVal.STR_MasterConfig[
                'AdminUser']
            wSt2 = "AdminUserの設定をおこないますか?(y:変更 /D:解除 /other: キャンセル)=> "

        CLS_OSIF.sPrn(wStr)
        wSelect = CLS_OSIF.sInp(wSt2)
        if wSelect == "D":
            ###削除
            gVal.STR_MasterConfig['AdminUser'] = ""
            self.sSetMasterConfig()
            CLS_OSIF.sPrn("AdminUserの設定を解除しました。" + '\n')
            CLS_OSIF.sPrn("設定内容をMaster環境情報にセーブしました: " +
                          gVal.DEF_STR_FILE['MasterConfig'] + '\n')
            return True
        elif wSelect != "y":
            ###設定しない
            CLS_OSIF.sPrn("キャンセルされました")
            return True

        #############################
        # 名前入力
        wStr = "AdminUser(通知先アカウント)をドメインを含めて入力してください。 例= " + gVal.DEF_EXAMPLE_ACCOUNT + '\n'
        wStr = wStr + "  ※ユーザ登録してないユーザも指定できます"
        CLS_OSIF.sPrn(wStr)
        wAdminUser = CLS_OSIF.sInp("AdminUser? => ")
        if wAdminUser=="" or \
           gVal.STR_MasterConfig['AdminUser'] ==wAdminUser :
            ###設定しない
            CLS_OSIF.sPrn("キャンセルされました")
            return True

        #############################
        # ユーザ名の妥当性チェック
        wSTR_user = CLS_UserData.sUserCheck(wAdminUser)
        if wSTR_user['Result'] != True:
            return False

        #############################
        # 通信テスト
        CLS_OSIF.sPrn("通信テスト中...")
        if CLS_OSIF.sPing(wSTR_user['Domain']) != True:
            CLS_OSIF.sPrn("mastodonとの通信テストに失敗したため、設定をキャンセルします。")
            return False

        CLS_OSIF.sPrn("通信OK")

        #############################
        # 変更
        gVal.STR_MasterConfig['AdminUser'] = wAdminUser
        self.sSetMasterConfig()
        CLS_OSIF.sPrn("設定内容をMaster環境情報にセーブしました: " +
                      gVal.DEF_STR_FILE['MasterConfig'] + '\n')
        return True
예제 #13
0
    def __cnfMasterUser(self, inFulluser):
        wCLS_botjib = CLS_Botjob()
        #############################
        # cronの再登録
        if gVal.STR_MasterConfig['MasterUser'] != "":
            wDelRes = wCLS_botjib.Del(gVal.DEF_CRON_MASTER,
                                      gVal.STR_MasterConfig['MasterUser'])
            if wDelRes['Result'] != True:
                ##				return False
                CLS_OSIF.sPrn("cronの削除をスキップしました: user="******" : " +
                              wDelRes['Reason'])

            wDelRes = wCLS_botjib.Del(gVal.DEF_CRON_SUB, inFulluser)
            if wDelRes['Result'] != True:
                ##				return False
                CLS_OSIF.sPrn("cronの削除をスキップしました: user="******" : " +
                              wDelRes['Reason'])

            #############################
            # 実行中のcronが処理が終わるまで待機
            wStr = '\n' + "cronの切替中(2分かかります)......" + '\n'
            CLS_OSIF.sPrn(wStr)
            CLS_OSIF.sSleep(120)

            wDelRes = wCLS_botjib.Put(gVal.DEF_CRON_MASTER, inFulluser)
            if wDelRes['Result'] != True:
                CLS_OSIF.sPrn("cronの登録が失敗しました: user="******" : " +
                              wDelRes['Reason'])
                return False

            wDelRes = wCLS_botjib.Put(gVal.DEF_CRON_SUB,
                                      gVal.STR_MasterConfig['MasterUser'])
            if wDelRes['Result'] != True:
                CLS_OSIF.sPrn("cronの登録が失敗しました: user="******" : " +
                              wDelRes['Reason'])
                return False

        #############################
        # 変更&反映
        wOldMaster = gVal.STR_MasterConfig['MasterUser']
        gVal.STR_MasterConfig['MasterUser'] = inFulluser
        wRes = self.sSetMasterConfig()
        if wRes != True:
            return False

        #############################
        # トラヒック計測ユーザの場合、切替る
        if CLS_UserData.sChangeTrafficUser(inFulluser) != True:
            CLS_OSIF.sPrn("トラヒック計測ユーザの切替が失敗しました: user="******" master=" + gVal.STR_MasterConfig['MasterUser'])
##			return False

        wStr = inFulluser + " をMasterUserに設定しました。" + '\n'
        wStr = wStr + "このユーザをmastodon上でbotとして動作させます。" + '\n'
        wStr = wStr + "Master環境情報をセーブしました: " + gVal.DEF_STR_FILE[
            'MasterConfig'] + '\n'
        CLS_OSIF.sPrn(wStr)
        CLS_OSIF.sInp("確認したらリターンキーを押してください。[RT]")
        return True
예제 #14
0
    def CnfMasterUser(self):
        #############################
        # ユーザ一覧の取得
        wList = CLS_UserData.sGetUserList()

        #############################
        # 0件の場合は、ユーザ登録させる
        if len(wList) == 0:
            wStr = "ユーザが1件も登録されていないため、MasterUserの登録ができません。" + '\n'
            wStr = wStr + "まずはユーザ登録をおこなってください。" + '\n'
            CLS_OSIF.sPrn(wStr)
            return False

        #############################
        # 1件しかない場合かつMasterUser登録済みの場合は変更できない
        elif len(wList) == 1 and gVal.STR_MasterConfig['MasterUser'] != "":
            wStr = "ユーザが1件しか登録されていないため、MasterUserの変更はできません。" + '\n'
            wStr = wStr + "現在のMasterUser: "******"ユーザが1件しか登録されていないため " + wList[
                0] + " をMasterUserに設定します。" + '\n'
            CLS_OSIF.sPrn(wStr)
            wRes = self.__cnfMasterUser(wList[0])
            return wRes

        #############################
        # 2件以上の場合は選択する
        else:
            #############################
            # ユーザ一覧の表示
            wCLS_work = CLS_UserData()
            wCLS_work.ViewUserList()

            #############################
            # 登録画面
            wStr = "現在MasterUserに設定されているユーザは次のユーザです。: " + gVal.STR_MasterConfig[
                'MasterUser'] + '\n'
            wStr = wStr + "MasterUser(mastodon上でbotとして使うユーザ)をドメインを含めて入力してください。 例= " + gVal.DEF_EXAMPLE_ACCOUNT
            CLS_OSIF.sPrn(wStr)
            wMasterUser = CLS_OSIF.sInp("MasterUser? => ")

            wFLG = False
            for iKey in wList:
                if wMasterUser == iKey:
                    wFLG = True

            if wFLG != True:
                CLS_OSIF.sPrn("登録されていないユーザです。変更をキャンセルします。")
                return False

            wRes = self.__cnfMasterUser(wMasterUser)
            if wRes != True:
                return False

        return True
예제 #15
0
파일: regist.py 프로젝트: xfyer/lucibot
	def Delete( self, inFulluser=None ):
		#############################
		# 1件しかない場合か、MasterUserは削除できない
		#   ※1件しかない場合はそれがMasterUserなので
		wList = CLS_UserData.sGetUserList()
		if len(wList)==1 :
			CLS_OSIF.sPrn( "残り1件しかないので、そのユーザは削除できません。" )
			return False
		
		if gVal.STR_MasterConfig['MasterUser']==inFulluser :
			CLS_OSIF.sPrn( "MasterUserは削除できません。" )
			return False
		
		#############################
		# ユーザ名がない場合、名前を入力する
		if inFulluser==None :
			wStr = gVal.STR_SystemInfo['Client_Name'] + " から削除するユーザ名を入力します。" + '\n'
			wStr = wStr + "削除するユーザ名をドメインを含めて入力してください。 例= " + gVal.DEF_EXAMPLE_ACCOUNT
			CLS_OSIF.sPrn( wStr )
			inFulluser = CLS_OSIF.sInp( "User?=> " )
		
		#############################
		# ユーザ名の妥当性チェック
		wSTR_user = CLS_UserData.sUserCheck( inFulluser )
		if wSTR_user['Result']!=True :
			CLS_OSIF.sPrn( wSTR_user['Reason'] )
			return False
		elif wSTR_user['Registed']==False :
			CLS_OSIF.sPrn( "そのユーザは登録されていません。: " + inFulluser )
			return False
		
		#############################
		# 削除の確認
		CLS_OSIF.sPrn( "ユーザデータの削除をおこないます。データの復旧はできません。" )
		wRes = CLS_OSIF.sInp("本当に削除してよろしいでしょうか(y/N)=> " )
		if wRes!="y" :
			CLS_OSIF.sPrn( "削除を中止しました" + '\n' )
			return False
		
		CLS_OSIF.sPrn( '\n' + "データ削除中......(2分かかります)" )
		#############################
		# cron削除
		wCLS_botjib = CLS_Botjob()
		wDelRes = wCLS_botjib.Del( gVal.DEF_CRON_SUB, inFulluser )
		if wDelRes['Result']==True :
			#############################
			# 実行中のcronが処理が終わるまで待機
			CLS_OSIF.sSleep( 120 )
		else :
##			CLS_OSIF.sPrn( "cronの削除に失敗しました: " + wDelRes['Reason'] )
			CLS_OSIF.sPrn( "cronの削除をスキップします: " + wDelRes['Reason'] )
		
		#############################
		# データ削除
		wGetPath = CLS_UserData.sGetUserPath( inFulluser )
		if wGetPath['Result']!=True :
			CLS_OSIF.sPrn( "CLS_Regist: Delete: User path ng: " + wGetPath['Reason'] )
			return False
		
		if CLS_File.sRmtree( wGetPath['Responce'] )!=True :
			CLS_OSIF.sPrn( "CLS_Regist: Delete: Data is not found: " + wGetPath['Responce'] )
			return False
		
		#############################
		# トラヒックの削除
		wRes = self.__delTrafficUser( inFulluser )
		if wRes['Result']!=True :
			CLS_OSIF.sPrn( "CLS_Regist: Delete: " + wRes['Reason'] )
			return False
		if wRes['Update']==True :
			CLS_OSIF.sPrn( "DBからトラヒック情報が削除されました" )
##		else :
##			CLS_OSIF.sPrn( "トラヒックを計測するユーザが切り替わります" )
		
		#############################
		# 完了
		wStr = inFulluser + " のデータは全て削除されました" + '\n'
		wStr = wStr + "mastodon側の認証済みアプリ情報は手で消してください。" + '\n'
		CLS_OSIF.sPrn( wStr )
		return True
예제 #16
0
파일: crontest.py 프로젝트: xfyer/lucibot
    def Run(self):
        #############################
        # 応答形式の取得
        #   "Result" : False, "Reason" : None, "Responce" : None
        wRes = CLS_OSIF.sGet_Resp()

        #############################
        # 引数取得
        wArg = CLS_OSIF.sGetArg()
        if len(wArg) == 3:  #テストモードか
            if wArg[2] == gVal.DEF_TEST_MODE:
                gVal.FLG_Test_Mode = True

        elif len(wArg) != 2:  #引数が足りない
            wStr = "CLS_CronTest: Argument deficiency: argument=" + str(wArg)
            CLS_OSIF.sPrn(wStr)  #メールに頼る
            return wRes

        wKind = wArg[0]
        wAccount = wArg[1]

        ##		#############################
        ##		# Backgroundのチェックは別でやる
        ##		if wKind==gVal.DEF_CRON_BACK and wAccount==gVal.DEF_CRON_ACCOUNT_BACKGROUND :
        ##			wRes = self.__backgroundTest( outRes=wRes )
        ##			return wRes

        #############################
        # 1.jobチェック
        #     実行ファイルチェック
        #     ユーザ登録チェック(Master、Subの場合)
        wCLS_Botjob = CLS_Botjob()
        wRes = wCLS_Botjob.isJob(wKind, wAccount)
        if wRes['Result'] != True:
            wStr = "CLS_CronTest: Job check NG: " + wRes['Reason']
            CLS_OSIF.sPrn(wStr)  #メールに頼る
            return wRes

        if wRes['Responce']['isJob'] == False and gVal.FLG_Test_Mode == False:
            ##			wStr = "CLS_CronTest: Job is not found: kind=" + wKind + ": account=" + wAccount
            wStr = "CLS_CronTest: Job is not found: kind=" + wKind + ": account=" + wAccount + " current: " + CLS_OSIF.sGetCwd(
            )
            CLS_OSIF.sPrn(wStr)  #メールに頼る

            wRes['Result'] = False  #テストはNG
            return wRes

        wFlg_ok = True
        #############################
        # 2.データフォルダのチェック
        if CLS_File.sExist(gVal.DEF_USERDATA_PATH) != True:
            wFlg_ok = False

        #############################
        # 3.Master環境情報の読み込み
        if CLS_Config.sGetMasterConfig() != True:
            wFlg_ok = False

        #############################
        # Master環境情報に異常はないか
        if wFlg_ok == False:
            ##			wRes = wCLS_Botjob.Stop()	#全cronを削除する
            ##			if wRes['Result']!=True :
            ##				wStr = "CLS_CronTest: Cron stop failed: " + wRes['Reason']
            ##				CLS_OSIF.sPrn( wStr  )	#メールに頼る
            ##
            ##			wStr = "Master環境情報に異常があったため、" + gVal.STR_SystemInfo['Client_Name']
            ##			wStr = wStr + "で登録した全cronを停止しました。"
            wStr = "Master環境情報に異常があったため、処理を中止します。"
            CLS_OSIF.sPrn(wStr)  #メールに頼る

            wRes['Result'] = False  #テストはNG
            return wRes

        #############################
        # 4.Userフォルダチェック
        wRes = CLS_UserData.sGetUserPath(wAccount)
        if wRes['Result'] != True:
            wRes = wCLS_Botjob.Del(wKind, wAccount)  #cronを削除する
            if wRes['Result'] != True:
                wStr = "CLS_CronTest: Cron delete failed: " + wRes['Reason']
                CLS_OSIF.sPrn(wStr)  #メールに頼る

            wStr = "Userフォルダが存在しないため、" + wAccount
            wStr = wStr + "のcronを停止しました。"
            CLS_OSIF.sPrn(wStr)  #メールに頼る

            wRes['Result'] = False  #テストはNG
            return wRes

        wUserPath = wRes['Responce']

        ##		#############################
        ##		# 5.User環境情報の読み込み
        ##		wRes = CLS_Config.sGetUserConfig( wAccount )
        ##		if wRes['Result']!=True :
        ##			wRes = wCLS_Botjob.Del( wKind, wAccount )	#cronを削除する
        ##			if wRes['Result']!=True :
        ##				wStr = "CLS_CronTest: Cron delete failed: " + wRes['Reason']
        ##				CLS_OSIF.sPrn( wStr  )	#メールに頼る
        ##
        ##			wStr = "User環境情報に異常があったため、" + wAccount
        ##			wStr = wStr + "のcronを停止しました。"
        ##			CLS_OSIF.sPrn( wStr  )		#メールに頼る
        ##
        ##			wRes['Result'] = False	#テストはNG
        ##			return wRes

        #############################
        # 5.実行権限チェック
        wFlg_Authority = True
        #############################
        # コマンドの組み立て
        if wKind == gVal.DEF_CRON_MASTER:  # Masuer User以外か
            if wAccount != gVal.STR_MasterConfig['MasterUser']:
                wFlg_Authority = False

##		elif wKind==gVal.DEF_CRON_BACK :	# Background以外か
##			if wAccount!=gVal.DEF_CRON_ACCOUNT_BACKGROUND :
##				wFlg_Authority = False

        elif wKind == gVal.DEF_CRON_SUB:  # Sub以外か
            ##			if wAccount==gVal.STR_MasterConfig['MasterUser'] or \
            ##			   wAccount==gVal.DEF_CRON_ACCOUNT_BACKGROUND :
            if wAccount == gVal.STR_MasterConfig['MasterUser']:
                wFlg_Authority = False

        else:
            ###ここではありえない
            wFlg_Authority = False

        if wFlg_Authority == False:
            wRes = wCLS_Botjob.Del(wKind, wAccount)  #cronを削除する
            if wRes['Result'] != True:
                wStr = "CLS_CronTest: Cron delete failed: " + wRes['Reason']
                CLS_OSIF.sPrn(wStr)  #メールに頼る

            wStr = "実行権限に問題があったため、" + wAccount
            wStr = wStr + "のcronを停止しました。"
            CLS_OSIF.sPrn(wStr)  #メールに頼る

            wRes['Result'] = False  #テストはNG
            return wRes

        # ここまででtestは合格してる
        #############################

        #############################
        # 6.testログ
        self.__testLog(wKind, wAccount)

        wRes['Responce'] = {}
        wRes['Responce'].update({
            "Kind": wKind,
            "Account": wAccount,
            "User_path": wUserPath
        })
        wRes['Result'] = True
        return wRes
예제 #17
0
파일: regist.py 프로젝트: xfyer/lucibot
	def __prn( self, inMsg ):
		if gVal.FLG_Console_Mode==False :
			return
		
		CLS_OSIF.sPrn( inMsg )
		return
예제 #18
0
파일: bot_ctrl.py 프로젝트: xfyer/lucibot
    def __consoleViewList(self):
        #############################
        # List取得
        wRes = self.OBJ_Job.GetList()
        if wRes['Result'] != True:
            return False
        ## wRes['Responce']['List']:

        #############################
        # ヘッダ
        wStr = "--------------------" + '\n'
        wStr = wStr + " bot一覧 (crontab)" + '\n'
        wStr = wStr + "--------------------" + '\n'

        #############################
        # 内容
        #   crontabにユーザが登録されていれば *ON
        #   crontabにユーザが未登録なら        OFF
        self.FLG_On = False
        wKeylist = self.UserList.keys()
        for wUser in wKeylist:
            wFlg_Online = False
            for wJob in wRes['Responce']['List']:
                if wJob.find(wUser) >= 0:
                    wFlg_Online = True

            if wFlg_Online == True:
                self.UserList[wUser] = True
                wStat = "*ON "
                self.FLG_On = True
            else:
                self.UserList[wUser] = False
                wStat = " OFF"

            wStr = wStr + "    " + wStat + "    " + wUser + '\n'

        #############################
        # コマンド見本
##		if self.FLG_AllStop==False :
##			wStr = wStr + "コマンド= [\\q] 終了 / [\\r] 起動 / [\\s] 停止 / [\\as] 全停止" + '\n'
##		else:
##			wStr = wStr + "コマンド= [\\q] 終了 / [\\r] 再開" + '\n'
        if self.FLG_On == True:
            if self.FLG_AllStop == False:
                wStr = wStr + "コマンド= [\\q] 終了 / [\\r] 起動 / [\\s] 停止 / [\\as] 全停止" + '\n'
            else:
                wStr = wStr + "コマンド= [\\q] 終了 / [\\r] 再開" + '\n'

        else:
            ###どこも起動してない場合
            wStr = wStr + "コマンド= [\\q] 終了 / [\\r] 再開 / [\\ar] 全起動" + '\n'

        #############################
        # 出力
        CLS_OSIF.sDispClr()
        CLS_OSIF.sPrn(wStr)

        #############################
        # コマンド
        wCommand = CLS_OSIF.sInp("コマンド?=> ")
        return wCommand
예제 #19
0
	def AllInit(self):
		#############################
		# フォルダの存在チェック
		if CLS_File.sExist( gVal.DEF_STR_FILE['MasterConfig_path'] )!=True :
			CLS_OSIF.sPrn( "CLS_Config: Init: Master Data is not Exist" )
			return False	#失敗
		
		#############################
		# Master環境情報の変更
		wStr = "データベースと全ての作業ファイルをクリアします。" + '\n'
		wStr = wStr + "よろしいですか?(y/N)=> "
		wSelect = CLS_OSIF.sInp( wStr )
		if wSelect!="y" :
			##キャンセル
			CLS_OSIF.sInp( "リターンキーを押して再度コンソールアプリを起動してください。[RT]" )
			return True
		
		CLS_OSIF.sPrn( "cronを停止中。2分ほどお待ちください..." + '\n' )
		#############################
		# ユーザ一覧取得
		wUserList = CLS_UserData.sGetUserList()
		
		#############################
		# cronの停止
##		wCLS_Botjob = CLS_Botjob()
		wCLS_Bot_Ctrl = CLS_Bot_Ctrl()
		wFlg_CronStop = wCLS_Bot_Ctrl.CronAllStop()
		if wFlg_CronStop==True :
			### 停止したbotあり
			CLS_OSIF.sSleep(120)	#とりあえずcronが停止する2分は待つ
		
##		wFLG_Wait = False
##		wWaitRestart = {}
##		wIndex       = 0
##		for wUser in wUserList :
##			#############################
##			# 種別を判定
##			if gVal.STR_MasterConfig['MasterUser']==wUser :
##				wKind = gVal.DEF_CRON_MASTER
##			else :
##				wKind = gVal.DEF_CRON_SUB
##			
##			#############################
##			# ジョブの削除
##			wRes = wCLS_Botjob.Del( wKind, wUser )
##			if wRes['Result']!=True :
##				###おそらく動いてないcronのためスキップ
##				continue
##			
##			#############################
##			# 停止cronをメモ
##			wWaitRestart.update({ wIndex : wIndex })
##			wWaitRestart[wIndex] = {}
##			wWaitRestart[wIndex].update({ "Kind" : wKind })
##			wWaitRestart[wIndex].update({ "User" : wUser })
##			wFLG_Wait  = True
##			wIndex    += 1
##		
##		#############################
##		# 1つでも停止cronがあれば2分待つ
##		if wFLG_Wait==True :
##			CLS_OSIF.sSleep(120)
		
		CLS_OSIF.sPrn( "各ユーザの作業ファイルを初期化しています..." + '\n' )
		#############################
		# ファイルの初期化(各ユーザ)
		for wUser in wUserList :
			CLS_OSIF.sPrn( "ユーザ " + wUser + " 初期化中..." )
			
			#############################
			# ユーザフォルダチェック
			wRes = CLS_UserData.sGetUserPath( wUser )
			if wRes['Result']!=True :
				CLS_OSIF.sPrn( "CLS_Setup: Init: User folder is not Exist: user="******"masterConfig 初期化中..." + '\n' )
		#############################
		# ドメイン情報
		wDefFile_path = gVal.DEF_STR_FILE['defMasterdata_path'] + gVal.DEF_STR_FILE['MstdnDomains_File']
		wDstFile_path = gVal.DEF_STR_FILE['MasterConfig_path'] + gVal.DEF_STR_FILE['MstdnDomains_File']
		self.__initFile( wDefFile_path, wDstFile_path )
		
		#############################
		# 過去ツイート
		wDefFile_path = gVal.DEF_STR_FILE['defMasterdata_path'] + gVal.DEF_STR_FILE['TweetFile']
		wDstFile_path = gVal.DEF_STR_FILE['MasterConfig_path'] + gVal.DEF_STR_FILE['TweetFile']
		self.__initFile( wDefFile_path, wDstFile_path )
		
		#############################
		# 周期トゥート
		wDefFile_path = gVal.DEF_STR_FILE['defMasterdata_path'] + gVal.DEF_STR_FILE['CLDataFile']
		wDstFile_path = gVal.DEF_STR_FILE['MasterConfig_path'] + gVal.DEF_STR_FILE['CLDataFile']
		self.__initFile( wDefFile_path, wDstFile_path )
		
	#############################
		CLS_OSIF.sPrn( "データベースを初期化しています..." + '\n' )
		#############################
		# DBの初期化
		wFLG_Init = True
		### 初期化
		if self.__initDB()!=True :
			wFLG_Init = False
		### 修復
		if self.__recovery_TBL_TRAFFIC_DATA()!=True :
			wFLG_Init = False
		
		if wFLG_Init==True :
			CLS_OSIF.sPrn( "データベースの初期化をおこないました" + '\n' )
		else :
			##ありえない
			CLS_OSIF.sPrn( "*** データベースの初期化に失敗しました" + '\n' )
		
		#############################
		# cronの再起動
##		if wFLG_Wait==True :
##			CLS_OSIF.sPrn( "停止していたcronを再開します..." + '\n' )
##			
##			wKeylist = wWaitRestart.keys()
##			for wKey in wKeylist :
##				#############################
##				# ジョブの登録
##				wRes = wCLS_Botjob.Put( wWaitRestart[wKey]["Kind"], wWaitRestart[wKey]["User"] )
##				if wRes['Result']!=True :
##					###失敗
##					CLS_OSIF.sPrn( "cronの起動に失敗しました: user="******"User"] + '\n' )
##		
		if wFlg_CronStop==True :
			### 停止したbotあり
			CLS_OSIF.sPrn( "停止していたcronを再開します..." + '\n' )
			wCLS_Bot_Ctrl.CronReStart()
		
		#############################
		# 終わり
		CLS_OSIF.sPrn( "初期化が正常終了しました。" )
##		CLS_OSIF.sInp( "リターンキーを押して再度コンソールアプリを起動してください。[RT]" )
		return True
예제 #20
0
 def __cnfMasterConfig_SelectDisp(self):
     wStr = "操作メニューキーを押してください" + '\n'
     wStr = wStr + "c: 変更 / s:セーブ+終了 / other:なにもせず終了"
     CLS_OSIF.sPrn(wStr)
     wSelect = CLS_OSIF.sInp("選択?=> ")
     return wSelect