itchat群ユーザ検索のピットレコード

2228 ワード

itchatが与えるユーザー検索には2つの関数があります
itchat.search_chatrooms   itchat.search_friends

中でもグループ内で検索する場合は特にitchatを使うことをお勧めしません.search_friends、これは深い穴で、その検索結果は不確定で、ある時userNameを返して、ある時noneを返します.どうしてこんなことになったの?これは微信のバグかもしれません.私がテストした時、iosの新版の微信はもうemojiの表情をニックネームとして使うことができないことを発見しましたが、旧版androidはまだできます.私のグループ内でロボットの初期バージョンを整理して、msgを抽出するActualNickNameとitchatを組み合わせています.search_friends関数、そしてこの人を見つけて、後で私のニックネームが正常な文字であれば、私の位置を特定することができて、もし私のニックネームがemojiの表情であれば、人を蹴って失敗することができます.
ソリューション:msgのActualUserNameを抽出し、itchatを使用します.search_chatroomsはすべてのユーザーを遍歴し、ペアがユーザーを見つけた後にdeleteを呼び出すよりもmember_from_chatroom関数.
ここには2つ目の穴がありますitchatを使っていますsearch_friends関数で出会ったsearch_friends(userName=groupid)とitchat.search_friends(name=groupid)の2つのパラメータは、それぞれユーザーUserNameとファジイ検索のnameを意味します.この2つの関数はdictとlistのタイプが異なり、直接呼び出すとエラーが報告されるのでdelete_を呼び出すmember_from_Chatroom関数は、このように書く必要があります.最初の関数の結果をリストに捨てます.
groupid = msg['FromUserName']
    if (groupid==sub_ltc_groupid) or (groupid==sub_okcoin_groupid):
        if msg['ActualUserName'] != user_master:
            chatroom = itchat.search_chatrooms(userName=groupid)
            target = []
            memberList = chatroom['MemberList']
            for one in memberList:
                if one['UserName']==msg['ActualUserName']:
                    target.append(one)
                    break
            itchat.send(" , "+msg['ActualNickName']+" ~ ? codeeer ",groupid)
            we_retult = itchat.delete_member_from_chatroom(groupid, target)
            group_ltc = str(we_retult['BaseResponse']['Ret'])