Browse Source

添加AI机器人配置和部分实现

heavyrian2012 1 month ago
parent
commit
ae7b213ceb

+ 2 - 0
wfchat/WildFireChat/AppDelegate.m

@@ -144,6 +144,8 @@
     
     [WFCUConfigManager globalManager].asrServiceUrl = ASR_SERVICE_URL;
     
+    [WFCUConfigManager globalManager].aiRobotId = AI_ROBOT;
+    
     //可以在WFCUMessageListViewController界面代码中绑定消息和Cell的对应关系(注册Cell),也可以在这里注册。
     //Cell分为2种类型,一种类型是带有头像的,另外一种是没有头像的。写Cell时可以参考下面这2个Cell。
     //[[WFCUConfigManager globalManager] registerCustomCell:[WFCUTextCell class] forContent:[WFCCTextMessageContent class]];

+ 3 - 0
wfchat/WildFireChat/WFCConfig.h

@@ -42,4 +42,7 @@ extern NSString *Send_Log_Command;
 
 //是否开启水印
 extern BOOL ENABLE_WATER_MARKER;
+
+//AI机器人ID
+extern NSString *AI_ROBOT;
 #endif /* Config_h */

+ 2 - 0
wfchat/WildFireChat/WFCConfig.m

@@ -58,3 +58,5 @@ NSString *Send_Log_Command = @"*#marslog#";
 
 //是否开启水印
 BOOL ENABLE_WATER_MARKER = YES;
+
+NSString *AI_ROBOT = @"FireRobot";

+ 29 - 1
wfuikit/WFChatUIKit/Contacts/ViewController/WFCUContactListViewController.m

@@ -55,6 +55,7 @@
 
 static NSMutableDictionary *hanziStringDict = nil;
 static NSString *wfcstar = @"☆";
+static NSString *aiRobot = @"AI";
 @implementation WFCUContactListViewController
 
 - (instancetype)init {
@@ -236,6 +237,11 @@ static NSString *wfcstar = @"☆";
                 userIdList = [ma copy];
             }
         }
+        if([WFCUConfigManager globalManager].aiRobotId.length && ![userIdList containsObject:[WFCUConfigManager globalManager].aiRobotId]) {
+            NSMutableArray *ma = [userIdList mutableCopy];
+            [ma addObject:[WFCUConfigManager globalManager].aiRobotId];
+            userIdList = [ma copy];
+        }
     }
     self.dataArray = [[[WFCCIMService sharedWFCIMService] getUserInfos:userIdList inGroup:self.groupId] mutableCopy];
     self.needSort = YES;
@@ -650,6 +656,9 @@ static NSString *wfcstar = @"☆";
     if ([title isEqualToString:wfcstar]) {
         title = WFCString(@"StarFriends");
     }
+    if([title isEqualToString:aiRobot]) {
+        title = @"人工智能助手";
+    }
     label.text = [NSString stringWithFormat:@"%@", title];
     [view addSubview:label];
     return view;
@@ -853,6 +862,7 @@ static NSString *wfcstar = @"☆";
         return nil;
     NSArray *_keys = @[
                        wfcstar,
+                       aiRobot,
                        @"A",
                        @"B",
                        @"C",
@@ -897,17 +907,27 @@ static NSString *wfcstar = @"☆";
                 break;
             }
         }
-        
     }
+    
     if (favArrays.count) {
         [infoDic setObject:favArrays forKey:wfcstar];
     }
     
+    for (WFCCUserInfo *userInfo in userList) {
+        if ([userInfo.userId isEqualToString:[WFCUConfigManager globalManager].aiRobotId]) {
+            [infoDic setObject:[@[userInfo] mutableCopy] forKey:aiRobot];
+            break;
+        }
+    }
     
     for (NSString *key in _keys) {
         if ([key isEqualToString:wfcstar]) {
             continue;
         }
+        if ([key isEqualToString:aiRobot]) {
+            continue;
+        }
+        
         if ([_tempOtherArr count]) {
             isReturn = YES;
         }
@@ -916,6 +936,10 @@ static NSString *wfcstar = @"☆";
             NSString *firstLetter;
 
             WFCCUserInfo *userInfo = (WFCCUserInfo*)user;
+            if([userInfo.userId isEqualToString:[WFCUConfigManager globalManager].aiRobotId]) {
+                continue;
+            }
+            
             NSString *userName = userInfo.displayName;
             if (userInfo.groupAlias.length) {
                 userName = userInfo.groupAlias;
@@ -963,6 +987,10 @@ static NSString *wfcstar = @"☆";
         [allKeys removeObject:@"#"];
         [allKeys insertObject:@"#" atIndex:allKeys.count];
     }
+    if ([allKeys containsObject:aiRobot]) {
+        [allKeys removeObject:aiRobot];
+        [allKeys insertObject:aiRobot atIndex:0];
+    }
     if ([allKeys containsObject:wfcstar]) {
         [allKeys removeObject:wfcstar];
         [allKeys insertObject:wfcstar atIndex:0];

+ 2 - 0
wfuikit/WFChatUIKit/Utilities/WFCUConfigManager.h

@@ -55,6 +55,8 @@ typedef NS_ENUM(NSInteger, WFCUThemeType) {
 
 @property(nonatomic, strong)NSString *asrServiceUrl;
 
+@property(nonatomic, strong)NSString *aiRobotId;
+
 @property(nonatomic, strong)NSString *conversationFilesDir;
 
 @property(nonatomic, assign)BOOL enableMultiCallAutoJoin;

+ 12 - 4
wfuikit/WFChatUIKit/Vendor/ChatInputBar/WFCUChatInputBar.m

@@ -1261,7 +1261,7 @@
     }
     
     BOOL needUpdateText = NO;
-    if(self.conversation.type == Group_Type) {
+    if(self.conversation.type == Group_Type || (self.conversation.type == Single_Type && [WFCUConfigManager globalManager].aiRobotId.length)) {
         if ([text isEqualToString:@"@"]) {
             
             WFCUContactListViewController *pvc = [[WFCUContactListViewController alloc] init];
@@ -1271,9 +1271,17 @@
             [disabledUser addObject:[WFCCNetworkService sharedInstance].userId];
             pvc.disableUsers = disabledUser;
             NSMutableArray *candidateUser = [[NSMutableArray alloc] init];
-            NSArray<WFCCGroupMember *> *members = [[WFCCIMService sharedWFCIMService] getGroupMembers:self.conversation.target forceUpdate:NO];
-            for (WFCCGroupMember *member in members) {
-                [candidateUser addObject:member.memberId];
+            
+            if(self.conversation.type == Group_Type) {
+                NSArray<WFCCGroupMember *> *members = [[WFCCIMService sharedWFCIMService] getGroupMembers:self.conversation.target forceUpdate:NO];
+                for (WFCCGroupMember *member in members) {
+                    [candidateUser addObject:member.memberId];
+                }
+            }
+            if([WFCUConfigManager globalManager].aiRobotId.length) {
+                if(![candidateUser containsObject:@"FireRobot"]) {
+                    [candidateUser addObject:@"FireRobot"];
+                }
             }
             pvc.candidateUsers = candidateUser;
             pvc.withoutCheckBox = YES;