diff --git a/.idea/IOS__AI.iml b/.idea/IOS__AI.iml new file mode 100644 index 0000000..ec63674 --- /dev/null +++ b/.idea/IOS__AI.iml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index a37b124..20aef6e 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,5 +3,5 @@ - + \ No newline at end of file diff --git a/Entity/Variables.py b/Entity/Variables.py index 7ca00a3..8f42e26 100644 --- a/Entity/Variables.py +++ b/Entity/Variables.py @@ -14,7 +14,14 @@ anchorList: list[AnchorModel] = [] # 线程锁 anchorListLock = threading.Lock() # 打招呼数据 -prologueList: list[str] = [] +prologueList = { + "Cantonese": ["你好", "你係邊個", "我好鍾意你", "我係你爸爸"], + "English": ["Hello,", "Who are you?", "I like you.", "I'm your dad."], + "Greek": ["Γεια σου,", "Ποιος είσαι;", "Μου αρέσεις.", "Είμαι ο μπαμπάς σου."], + "Japanese": ["こんにちは", "あなたは誰ですか", "あなたが好きです", "私はあなたのパパです"], + "Khmer": ["សួស្តី", "អ្នកជាអ្នកណា", "ខ្ញុំចូលចិត្តអ្នក", "ខ្ញុំគឺជាប៉ារបស់អ្នក"], + "Malay": ["Hai,", "Siapakah kamu?", "Aku suka kamu,", "Aku adalah ayahmu."] +} # 评论数据 commentList = [] diff --git a/Module/FlaskService.py b/Module/FlaskService.py index 7e74809..f79ab93 100644 --- a/Module/FlaskService.py +++ b/Module/FlaskService.py @@ -337,27 +337,16 @@ def passAnchorData(): try: LogManager.method_info("关注打招呼", "关注打招呼") data: Dict[str, Any] = request.get_json() - # 设备列表 idList = data.get("deviceList", []) - # 主播列表 acList = data.get("anchorList", []) Variables.commentList = data.get("comment") - isComment = data.get("isComment") - - LogManager.info(f"[INFO] 获取数据: {idList} {acList}") - AiUtils.save_aclist_flat_append(acList) - # 是否需要回复 needReply = data.get("needReply", False) - - # 是否需要进行翻译 - needTranslate = data.get("needTranslate", True) - # 获取打招呼数据 ev.prologueList = data.get("prologueList", []) @@ -369,7 +358,7 @@ def passAnchorData(): event = threading.Event() # 启动脚本 thread = threading.Thread(target=manager.safe_greetNewFollowers, - args=(udid, needReply, needTranslate, isComment,event)) + args=(udid, needReply, isComment, event,)) # 添加到线程管理 ThreadManager.add(udid, thread, event) return ResultData(data="").toJson() diff --git a/Utils/CountryEnum.py b/Utils/CountryEnum.py new file mode 100644 index 0000000..69f2fe2 --- /dev/null +++ b/Utils/CountryEnum.py @@ -0,0 +1,271 @@ +class CountryLanguageMapper: + + # 初始化一个字典,映射国家到语言代码 + country_to_language = { + "中国大陆": "zh-CN", + "台湾": "zh-TW", + "香港": "zh-TW", + "澳门": "zh-TW", + "美国": "en", + "英国": "en", + "澳大利亚": "en", + "日本": "ja", + "韩国": "ko", + "俄罗斯": "ru", + "法国": "fr", + "德国": "de", + "意大利": "it", + "西班牙": "es", + "墨西哥": "es", + "巴西": "pt", + "葡萄牙": "pt", + "印度": "hi", + "泰国": "th", + "越南": "vi", + "马来西亚": "ms", + "印度尼西亚": "id", + "阿联酋": "ar", + "沙特阿拉伯": "ar", + "埃及": "ar", + "以色列": "he", + "缅甸": "my", + "斯里兰卡": "ta", + "巴基斯坦": "ur", + "孟加拉国": "bn", + "波兰": "pl", + "荷兰": "nl", + "罗马尼亚": "ro", + "土耳其": "tr", + "老挝": "lo", + "乌克兰": "uk", + "芬兰": "fi", + "南非": "af", + "阿尔巴尼亚": "sq", + "安道尔": "ca", + "安提瓜和巴布达": "en", + "阿根廷": "es", + "亚美尼亚": "hy", + "奥地利": "de", + "阿塞拜疆": "az", + "巴哈马": "en", + "巴林": "ar", + "巴巴多斯": "en", + "白俄罗斯": "be", + "比利时": "fr", + "伯利兹": "en", + "贝宁": "fr", + "不丹": "dz", + "玻利维亚": "es", + "波斯尼亚和黑塞哥维那": "bs", + "博茨瓦纳": "en", + "文莱": "ms", + "保加利亚": "bg", + "布基纳法索": "fr", + "布隆迪": "fr", + "柬埔寨": "km", + "喀麦隆": "fr", + "加拿大": "en", + "佛得角": "pt", + "开曼群岛": "en", + "中非共和国": "fr", + "乍得": "fr", + "智利": "es", + "中国": "zh-CN", + "圣诞岛": "en", + "科科斯群岛": "en", + "哥伦比亚": "es", + "科摩罗": "ar", + "刚果": "fr", + "库克群岛": "en", + "哥斯达黎加": "es", + "科特迪瓦": "fr", + "克罗地亚": "hr", + "古巴": "es", + "库拉索": "nl", + "塞浦路斯": "el", + "捷克": "cs", + "丹麦": "da", + "吉布提": "fr", + "多米尼克": "en", + "多米尼加共和国": "es", + "厄瓜多尔": "es", + "萨尔瓦多": "es", + "赤道几内亚": "es", + "厄立特里亚": "ti", + "爱沙尼亚": "et", + "埃斯瓦蒂尼": "en", + "埃塞俄比亚": "am", + "福克兰群岛": "en", + "法罗群岛": "fo", + "斐济": "en", + "法属圭亚那": "fr", + "法属波利尼西亚": "fr", + "法属南部领地": "fr", + "加蓬": "fr", + "冈比亚": "en", + "格鲁吉亚": "ka", + "加纳": "en", + "直布罗陀": "en", + "希腊": "el", + "格陵兰": "kl", + "格林纳达": "en", + "瓜德罗普": "fr", + "关岛": "en", + "危地马拉": "es", + "根西岛": "en", + "几内亚": "fr", + "几内亚比绍": "pt", + "圭亚那": "en", + "海地": "fr", + "赫德岛和麦克唐纳群岛": "en", + "梵蒂冈": "it", + "洪都拉斯": "es", + "中国香港特别行政区": "zh-TW", + "匈牙利": "hu", + "冰岛": "is", + "伊朗": "fa", + "伊拉克": "ar", + "爱尔兰": "en", + "曼岛": "en", + "牙买加": "en", + "泽西岛": "en", + "约旦": "ar", + "哈萨克斯坦": "kk", + "肯尼亚": "en", + "基里巴斯": "en", + "朝鲜": "ko", + "科威特": "ar", + "吉尔吉斯斯坦": "ky", + "拉脱维亚": "lv", + "黎巴嫩": "ar", + "莱索托": "en", + "利比里亚": "en", + "利比亚": "ar", + "列支敦士登": "de", + "立陶宛": "lt", + "卢森堡": "fr", + "中国澳门特别行政区": "zh-TW", + "马达加斯加": "fr", + "马拉维": "en", + "马尔代夫": "dv", + "马里": "fr", + "马耳他": "mt", + "马绍尔群岛": "en", + "马提尼克": "fr", + "毛里塔尼亚": "ar", + "毛里求斯": "en", + "马约特": "fr", + "密克罗尼西亚": "en", + "摩尔多瓦": "ro", + "摩纳哥": "fr", + "蒙古": "mn", + "黑山": "sr", + "蒙特塞拉特": "en", + "摩洛哥": "ar", + "莫桑比克": "pt", + "纳米比亚": "en", + "瑙鲁": "en", + "尼泊尔": "ne", + "新喀里多尼亚": "fr", + "新西兰": "en", + "尼加拉瓜": "es", + "尼日尔": "fr", + "尼日利亚": "en", + "纽埃": "en", + "诺福克岛": "en", + "北马其顿": "mk", + "北马里亚纳群岛": "en", + "挪威": "no", + "阿曼": "ar", + "帕劳": "en", + "巴勒斯坦": "ar", + "巴拿马": "es", + "巴布亚新几内亚": "en", + "巴拉圭": "es", + "秘鲁": "es", + "菲律宾": "tl", + "皮特凯恩群岛": "en", + "波多黎各": "es", + "卡塔尔": "ar", + "留尼汪": "fr", + "卢旺达": "rw", + "圣巴泰勒米": "fr", + "圣赫勒拿": "en", + "圣基茨和尼维斯": "en", + "圣卢西亚": "en", + "法属圣马丁": "fr", + "圣皮埃尔和密克隆": "fr", + "圣文森特和格林纳丁斯": "en", + "萨摩亚": "sm", + "圣马力诺": "it", + "圣多美和普林西比": "pt", + "塞内加尔": "fr", + "塞尔维亚": "sr", + "塞舌尔": "fr", + "塞拉利昂": "en", + "新加坡": "zh-CN", + "荷属圣马丁": "nl", + "斯洛伐克": "sk", + "斯洛文尼亚": "sl", + "所罗门群岛": "en", + "索马里": "so", + "南乔治亚岛和南桑威奇群岛": "en", + "南苏丹": "en", + "苏丹": "ar", + "苏里南": "nl", + "斯瓦尔巴群岛和扬马延岛": "no", + "瑞典": "sv", + "瑞士": "de", + "叙利亚": "ar", + "台湾省": "zh-TW", + "塔吉克斯坦": "tg", + "坦桑尼亚": "sw", + "东帝汶": "tet", + "多哥": "fr", + "托克劳": "en", + "汤加": "to", + "特立尼达和多巴哥": "en", + "突尼斯": "ar", + "土库曼斯坦": "tk", + "特克斯和凯科斯群岛": "en", + "图瓦卢": "en", + "乌干达": "en", + "美国本土外小岛屿": "en", + "乌拉圭": "es", + "乌兹别克斯坦": "uz", + "瓦努阿图": "bi", + "委内瑞拉": "es", + "英属维尔京群岛": "en", + "美属维尔京群岛": "en", + "瓦利斯和富图纳": "fr", + "西撒哈拉": "ar", + "也门": "ar", + "赞比亚": "en", + "津巴布韦": "en", + "阿富汗": "fa", + "阿尔及利亚": "ar", + "美属萨摩亚": "en", + "安哥拉": "pt", + "安圭拉": "en", + "南极洲": "en", + "百慕大": "en", + "荷属加勒比区": "nl", + "布韦岛": "no", + "英属印度洋领地": "en", + + } + + @classmethod + def get_language_code(cls, country): + return cls.country_to_language.get(country) + +# 使用示例 +if __name__ == "__main__": + mapper = CountryLanguageMapper() + countries = ['英国', '美国', '日本', '未知国家'] + for country in countries: + code = mapper.get_language_code(country) + if code: + print(f"{country} 对应的语言代码是 {code}") + else: + print(f"没有找到 {country} 对应的语言代码") \ No newline at end of file diff --git a/resources/e5ab9d3c548302dca3b1383589ac43eedd41f24e/bgv.png b/resources/e5ab9d3c548302dca3b1383589ac43eedd41f24e/bgv.png new file mode 100644 index 0000000..ef6c940 Binary files /dev/null and b/resources/e5ab9d3c548302dca3b1383589ac43eedd41f24e/bgv.png differ diff --git a/resources/e5ab9d3c548302dca3b1383589ac43eedd41f24e/bgv_comment.png b/resources/e5ab9d3c548302dca3b1383589ac43eedd41f24e/bgv_comment.png new file mode 100644 index 0000000..30c015c Binary files /dev/null and b/resources/e5ab9d3c548302dca3b1383589ac43eedd41f24e/bgv_comment.png differ diff --git a/script/ScriptManager.py b/script/ScriptManager.py index 78de124..0331e0e 100644 --- a/script/ScriptManager.py +++ b/script/ScriptManager.py @@ -10,6 +10,7 @@ from datetime import datetime from Entity import Variables from Utils.AiUtils import AiUtils from Utils.ControlUtils import ControlUtils +from Utils.CountryEnum import CountryLanguageMapper from Utils.IOSAIStorage import IOSAIStorage from Utils.JsonUtils import JsonUtils from Utils.LogManager import LogManager @@ -59,6 +60,7 @@ class ScriptManager(): while time.time() < deadline: if event.is_set(): return True + event.wait(timeout=min(step, max(0, deadline - time.time()))) return event.is_set() @@ -432,11 +434,11 @@ class ScriptManager(): 关注打招呼以及回复主播消息 """ - def safe_greetNewFollowers(self, udid, needReply, needTranslate, isComment, event): + def safe_greetNewFollowers(self, udid, needReply, isComment, event): retries = 0 while not event.is_set(): try: - self.greetNewFollowers(udid, needReply, needTranslate, isComment,event) + self.greetNewFollowers(udid, needReply, isComment, event) except Exception as e: retries += 1 @@ -448,7 +450,7 @@ class ScriptManager(): break LogManager.method_error("greetNewFollowers 重试次数耗尽,任务终止", "关注打招呼", udid) - def greetNewFollowers(self, udid, needReply, needTranslate, isComment, event): + def greetNewFollowers(self, udid, needReply, isComment, event): if self.check_stop(event, "init"): # [ADD] return @@ -459,10 +461,11 @@ class ScriptManager(): print(f"是否要自动回复消息:{needReply}") LogManager.method_info(f"是否要自动回复消息:{needReply}", "关注打招呼", udid) - LogManager.method_info(f"是否需要进行翻译:{needTranslate}", "关注打招呼", udid) # 先关闭Tik Tok ControlUtils.closeTikTok(session, udid) + + if self.interruptible_sleep(event, 1): # [ADD] 可中断等待 return @@ -704,10 +707,29 @@ class ScriptManager(): print("打招呼的数据", ev.prologueList) LogManager.method_info(f"传递的打招呼的数据:{ev.prologueList}", "关注打招呼", udid) - # 准备打招呼的文案 - text = random.choice(ev.prologueList) - LogManager.method_info(f"取出打招呼的数据,{text}, 判断是否需要翻译:{needTranslate}", "关注打招呼", + # 取出国家进行对应国家语言代码 + anchorCountry_code = CountryLanguageMapper.get_language_code(anchorCountry) + + + + + # 判断对应的语言代码是否在传入的字典中 + if anchorCountry_code in ev.prologueList: + # 进行原本的进行传入 + privateMessageList = ev.prologueList[anchorCountry_code] + needTranslate = False + + else: + # 需要翻译 + privateMessageList = ev.prologueList['yolo'] + needTranslate = True # 使用yolo必须翻译 + + + # 准备打招呼的文案 + text = random.choice(privateMessageList) + + LogManager.method_info(f"取出打招呼的数据,{text}", "关注打招呼", udid) if needTranslate: