Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle other WhatsApp for Android system messages (#2400) #2401

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Prev Previous commit
Next Next commit
'#2400: Handle system message type 120 (request to add user to group).
wladimirleite committed Jan 7, 2025
commit a9fe73d9638d24520624afd1f4be3e7a7899cc32
Original file line number Diff line number Diff line change
@@ -235,6 +235,7 @@ WhatsAppReport.UnknownVideoCall=Unknown type of video call
WhatsAppReport.GroupCreated=Group created by
WhatsAppReport.UserAddedToCommunity=added user to community
WhatsAppReport.UserAddedToGroup=added user to group
WhatsAppReport.UserRequestToAddToGroup=requested to add
WhatsAppReport.UserCommunityAdmin=set user as community admin
WhatsAppReport.CommunityAdmin=is now community admin
WhatsAppReport.UserLeftGroup=User left group
Original file line number Diff line number Diff line change
@@ -235,6 +235,7 @@ WhatsAppReport.UnknownVideoCall=Videoanruf unbekannten Typs
WhatsAppReport.GroupCreated=Gruppe erstellt von
WhatsAppReport.UserAddedToCommunity=added user to community[TBT]
WhatsAppReport.UserAddedToGroup=added user to group[TBT]
WhatsAppReport.UserRequestToAddToGroup=requested to add[TBT]
WhatsAppReport.UserCommunityAdmin=is now community admin[TBT]
WhatsAppReport.CommunityAdmin=is now community admin[TBT]
WhatsAppReport.UserLeftGroup=Benutzer hat Gruppe verlassen
Original file line number Diff line number Diff line change
@@ -235,6 +235,7 @@ WhatsAppReport.UnknownVideoCall=Videollamada de tipo desconocida
WhatsAppReport.GroupCreated=Grupo creado por
WhatsAppReport.UserAddedToCommunity=added user to community[TBT]
WhatsAppReport.UserAddedToGroup=added user to group[TBT]
WhatsAppReport.UserRequestToAddToGroup=requested to add[TBT]
WhatsAppReport.UserCommunityAdmin=is now community admin[TBT]
WhatsAppReport.CommunityAdmin=is now community admin[TBT]
WhatsAppReport.UserLeftGroup=El usuario dejó el grupo
Original file line number Diff line number Diff line change
@@ -235,6 +235,7 @@ WhatsAppReport.UnknownVideoCall=Type d'appel vidéo inconnu
WhatsAppReport.GroupCreated=Groupe créé par
WhatsAppReport.UserAddedToCommunity=Utilisateur ajouté à la communauté
WhatsAppReport.UserAddedToGroup=Utilisateur ajouté au groupe
WhatsAppReport.UserRequestToAddToGroup=requested to add[TBT]
WhatsAppReport.UserCommunityAdmin=Définir l'utilisateur en tant qu'administrateur
WhatsAppReport.CommunityAdmin=est à présent administrateur
WhatsAppReport.UserLeftGroup=Utilisateur ayant quitté le groupe :\
Original file line number Diff line number Diff line change
@@ -235,6 +235,7 @@ WhatsAppReport.UnknownVideoCall=Tipo di videochiamata sconosciuto
WhatsAppReport.GroupCreated=Gruppo creato da
WhatsAppReport.UserAddedToCommunity=added user to community[TBT]
WhatsAppReport.UserAddedToGroup=added user to group[TBT]
WhatsAppReport.UserRequestToAddToGroup=requested to add[TBT]
WhatsAppReport.UserCommunityAdmin=is now community admin[TBT]
WhatsAppReport.CommunityAdmin=is now community admin[TBT]
WhatsAppReport.UserLeftGroup=Utente ha lasciato il gruppo
Original file line number Diff line number Diff line change
@@ -235,6 +235,7 @@ WhatsAppReport.UnknownVideoCall=Chamada de vídeo de tipo desconhecido
WhatsAppReport.GroupCreated=Grupo criado por
WhatsAppReport.UserAddedToCommunity=adicionou usuário à comunidade
WhatsAppReport.UserAddedToGroup=adicionou usuário ao grupo
WhatsAppReport.UserRequestToAddToGroup=dejesa adicionar
WhatsAppReport.UserCommunityAdmin=tornou usuário admin da comunidade
WhatsAppReport.CommunityAdmin=agora é admin da comunidade
WhatsAppReport.UserLeftGroup=Usuário saiu do grupo
Original file line number Diff line number Diff line change
@@ -82,6 +82,7 @@
import static iped.parsers.whatsapp.Message.MessageType.USER_JOINED_WHATSAPP;
import static iped.parsers.whatsapp.Message.MessageType.USER_LEFT_GROUP;
import static iped.parsers.whatsapp.Message.MessageType.USER_REMOVED_FROM_GROUP;
import static iped.parsers.whatsapp.Message.MessageType.USER_REQUEST_TO_ADD_TO_GROUP;
import static iped.parsers.whatsapp.Message.MessageType.VIDEO_CALL;
import static iped.parsers.whatsapp.Message.MessageType.VIDEO_MESSAGE;
import static iped.parsers.whatsapp.Message.MessageType.VIEW_ONCE_AUDIO_MESSAGE;
@@ -495,7 +496,9 @@ private void extractMessages(Connection conn, Map<Long, Chat> idToChat) throws S
}

if (hasSystemChat
&& (m.getMessageType() == USER_ADDED_TO_COMMUNITY || m.getMessageType() == USER_ADDED_TO_GROUP
&& (m.getMessageType() == USER_ADDED_TO_COMMUNITY
|| m.getMessageType() == USER_ADDED_TO_GROUP
|| m.getMessageType() == USER_REQUEST_TO_ADD_TO_GROUP
|| m.getMessageType() == USER_COMMUNITY_ADMIN
|| m.getMessageType() == USER_REMOVED_FROM_GROUP
|| m.getMessageType() == USER_JOINED_GROUP_FROM_COMMUNITY
@@ -884,6 +887,9 @@ protected Message.MessageType decodeMessageType(int messageType, int status, Int
case 118:
result = PINNED_MESSAGE;
break;
case 120:
result = USER_REQUEST_TO_ADD_TO_GROUP;
break;
case 121:
case 123:
case 124:
Original file line number Diff line number Diff line change
@@ -462,6 +462,7 @@ public boolean isSystemMessage() {
case USER_JOINED_WHATSAPP:
case USER_LEFT_GROUP:
case USER_REMOVED_FROM_GROUP:
case USER_REQUEST_TO_ADD_TO_GROUP:
case YOU_ADMIN:
case YOU_NOT_ADMIN:
case OVER_256_MEMBERS_ONLY_ADMINS_CAN_EDIT:
@@ -682,7 +683,7 @@ public void setAddress(String address) {
}

public static enum MessageType {
TEXT_MESSAGE, IMAGE_MESSAGE, AUDIO_MESSAGE, VIDEO_MESSAGE, UNKNOWN_MEDIA_MESSAGE, CONTACT_MESSAGE, LOCATION_MESSAGE, SHARE_LOCATION_MESSAGE, VOICE_CALL, VIDEO_CALL, DOC_MESSAGE, GIF_MESSAGE, BLOCKED_CONTACT, UNBLOCKED_CONTACT, BUSINESS_CHAT, BUSINESS_TO_STANDARD, MESSAGES_ENCRYPTED, MESSAGES_NOW_ENCRYPTED, ENCRYPTION_KEY_CHANGED, MISSED_VOICE_CALL, MISSED_VIDEO_CALL, DELETED_MESSAGE, DELETED_BY_ADMIN, DELETED_BY_SENDER, GROUP_CREATED, USER_ADDED_TO_COMMUNITY, USER_ADDED_TO_GROUP, USER_JOINED_GROUP_FROM_COMMUNITY, USER_JOINED_GROUP_FROM_LINK, USER_JOINED_GROUP_FROM_INVITATION, USER_LEFT_GROUP, USER_REMOVED_FROM_GROUP, USER_COMMUNITY_ADMIN, URL_MESSAGE, GROUP_ICON_CHANGED, GROUP_ICON_DELETED, GROUP_DESCRIPTION_CHANGED, GROUP_DESCRIPTION_DELETED, SUBJECT_CHANGED, YOU_ADMIN, YOU_NOT_ADMIN, USER_ADMIN, WAITING_MESSAGE, STICKER_MESSAGE, REFUSED_VIDEO_CALL, REFUSED_VOICE_CALL, UNAVAILABLE_VIDEO_CALL, UNAVAILABLE_VOICE_CALL, UNKNOWN_VOICE_CALL, UNKNOWN_VIDEO_CALL, VIEW_ONCE_AUDIO_MESSAGE, VIEW_ONCE_IMAGE_MESSAGE, VIEW_ONCE_VIDEO_MESSAGE, CALL_MESSAGE, BUSINESS_META_SECURE_SERVICE, GROUP_INVITE, TEMPLATE_MESSAGE, TEMPLATE_QUOTE, POLL_MESSAGE, EPHEMERAL_DURATION_CHANGED, EPHEMERAL_SETTINGS_NOT_APPLIED, EPHEMERAL_CHANGED, EPHEMERAL_DEFAULT, EPHEMERAL_SAVE, GROUP_CHANGED_ONLY_ADMINS_CAN_ADD, GROUP_CHANGED_ONLY_ADMINS_CAN_SEND, GROUP_CHANGED_ALL_MEMBERS_CAN_SEND, GROUP_CHANGED_ONLY_ADMINS_CAN_EDIT, GROUP_CHANGED_ALL_MEMBERS_CAN_EDIT, GROUP_ONLY_ADMINS_CAN_SEND, CHANGED_DEVICE, CHANGED_NUMBER_TO, CHANGED_NUMBER_CHATTING_WITH_NEW, CHANGED_NUMBER_CHATTING_WITH_OLD, STANDARD_CHAT, SENDER_ADDED_TO_CONTACTS, SENDER_IN_CONTACTS, BUSINESS_OFFICIAL, GROUP_ADDED_TO_COMMUNITY, GROUP_REMOVED_FROM_COMMUNITY, COMMUNITY_MANAGEMENT_ACTION, COMMUNITY_WELCOME, UI_ELEMENTS, UI_ELEMENTS_QUOTE, CHAT_ADDED_PRIVACY, CHANNEL_ADDED_PRIVACY, CHANNEL_CREATED, ORDER_MESSAGE, PRODUCT_MESSAGE, BUSINESS_CHANGED_NAME, USER_JOINED_WHATSAPP, PINNED_MESSAGE, GROUP_NAME_CHANGED, AI_THIRD_PARTY, NEW_PARTICIPANTS_NEED_ADMIN_APPROVAL, RESET_GROUP_LINK, COMMUNITY_RENAMED, ANY_COMMUNITY_MEMBER_CAN_JOIN_GROUP, UNKNOWN_MESSAGE, OVER_256_MEMBERS_ONLY_ADMINS_CAN_EDIT, SECURITY_NOTIFICATIONS_NO_LONGER_AVAILABLE, CONTACTED_FIND_BUSINESSES, COMMUNITY_CHANGED_ONLY_ADMINS_CAN_ADD, COMMUNITY_CHANGED_ALL_MEMBERS_CAN_ADD, COMMUNITY_DESCRIPTION_CHANGED, COMMUNITY_NOT_AVAILABLE, GROUP_NOT_PART_OF_COMMUNITY, GROUP_CHANGED_ADMIN_APPROVAL_OFF, GROUP_CHANGED_ALL_MEMBERS_CAN_ADD
TEXT_MESSAGE, IMAGE_MESSAGE, AUDIO_MESSAGE, VIDEO_MESSAGE, UNKNOWN_MEDIA_MESSAGE, CONTACT_MESSAGE, LOCATION_MESSAGE, SHARE_LOCATION_MESSAGE, VOICE_CALL, VIDEO_CALL, DOC_MESSAGE, GIF_MESSAGE, BLOCKED_CONTACT, UNBLOCKED_CONTACT, BUSINESS_CHAT, BUSINESS_TO_STANDARD, MESSAGES_ENCRYPTED, MESSAGES_NOW_ENCRYPTED, ENCRYPTION_KEY_CHANGED, MISSED_VOICE_CALL, MISSED_VIDEO_CALL, DELETED_MESSAGE, DELETED_BY_ADMIN, DELETED_BY_SENDER, GROUP_CREATED, USER_ADDED_TO_COMMUNITY, USER_ADDED_TO_GROUP, USER_JOINED_GROUP_FROM_COMMUNITY, USER_JOINED_GROUP_FROM_LINK, USER_JOINED_GROUP_FROM_INVITATION, USER_LEFT_GROUP, USER_REMOVED_FROM_GROUP, USER_COMMUNITY_ADMIN, URL_MESSAGE, GROUP_ICON_CHANGED, GROUP_ICON_DELETED, GROUP_DESCRIPTION_CHANGED, GROUP_DESCRIPTION_DELETED, SUBJECT_CHANGED, YOU_ADMIN, YOU_NOT_ADMIN, USER_ADMIN, WAITING_MESSAGE, STICKER_MESSAGE, REFUSED_VIDEO_CALL, REFUSED_VOICE_CALL, UNAVAILABLE_VIDEO_CALL, UNAVAILABLE_VOICE_CALL, UNKNOWN_VOICE_CALL, UNKNOWN_VIDEO_CALL, VIEW_ONCE_AUDIO_MESSAGE, VIEW_ONCE_IMAGE_MESSAGE, VIEW_ONCE_VIDEO_MESSAGE, CALL_MESSAGE, BUSINESS_META_SECURE_SERVICE, GROUP_INVITE, TEMPLATE_MESSAGE, TEMPLATE_QUOTE, POLL_MESSAGE, EPHEMERAL_DURATION_CHANGED, EPHEMERAL_SETTINGS_NOT_APPLIED, EPHEMERAL_CHANGED, EPHEMERAL_DEFAULT, EPHEMERAL_SAVE, GROUP_CHANGED_ONLY_ADMINS_CAN_ADD, GROUP_CHANGED_ONLY_ADMINS_CAN_SEND, GROUP_CHANGED_ALL_MEMBERS_CAN_SEND, GROUP_CHANGED_ONLY_ADMINS_CAN_EDIT, GROUP_CHANGED_ALL_MEMBERS_CAN_EDIT, GROUP_ONLY_ADMINS_CAN_SEND, CHANGED_DEVICE, CHANGED_NUMBER_TO, CHANGED_NUMBER_CHATTING_WITH_NEW, CHANGED_NUMBER_CHATTING_WITH_OLD, STANDARD_CHAT, SENDER_ADDED_TO_CONTACTS, SENDER_IN_CONTACTS, BUSINESS_OFFICIAL, GROUP_ADDED_TO_COMMUNITY, GROUP_REMOVED_FROM_COMMUNITY, COMMUNITY_MANAGEMENT_ACTION, COMMUNITY_WELCOME, UI_ELEMENTS, UI_ELEMENTS_QUOTE, CHAT_ADDED_PRIVACY, CHANNEL_ADDED_PRIVACY, CHANNEL_CREATED, ORDER_MESSAGE, PRODUCT_MESSAGE, BUSINESS_CHANGED_NAME, USER_JOINED_WHATSAPP, PINNED_MESSAGE, GROUP_NAME_CHANGED, AI_THIRD_PARTY, NEW_PARTICIPANTS_NEED_ADMIN_APPROVAL, RESET_GROUP_LINK, COMMUNITY_RENAMED, ANY_COMMUNITY_MEMBER_CAN_JOIN_GROUP, UNKNOWN_MESSAGE, OVER_256_MEMBERS_ONLY_ADMINS_CAN_EDIT, SECURITY_NOTIFICATIONS_NO_LONGER_AVAILABLE, CONTACTED_FIND_BUSINESSES, COMMUNITY_CHANGED_ONLY_ADMINS_CAN_ADD, COMMUNITY_CHANGED_ALL_MEMBERS_CAN_ADD, COMMUNITY_DESCRIPTION_CHANGED, COMMUNITY_NOT_AVAILABLE, GROUP_NOT_PART_OF_COMMUNITY, GROUP_CHANGED_ADMIN_APPROVAL_OFF, GROUP_CHANGED_ALL_MEMBERS_CAN_ADD, USER_REQUEST_TO_ADD_TO_GROUP
}

public static enum MessageStatus {
Original file line number Diff line number Diff line change
@@ -565,6 +565,7 @@ private synchronized void printMessage(PrintWriter out, Message message, boolean
case USER_JOINED_GROUP_FROM_COMMUNITY:
case USER_JOINED_GROUP_FROM_INVITATION:
case USER_JOINED_GROUP_FROM_LINK:
case USER_REQUEST_TO_ADD_TO_GROUP:
case USER_REMOVED_FROM_GROUP:
List<String> users = message.getUsersAction();
out.println("<div class=\"systemmessage\">");
@@ -604,11 +605,19 @@ private synchronized void printMessage(PrintWriter out, Message message, boolean
out.print(Messages.getString("WhatsAppReport.UserAddedToGroup"));
} else if (message.getMessageType() == MessageType.USER_COMMUNITY_ADMIN) {
out.print(Messages.getString("WhatsAppReport.UserCommunityAdmin"));
} else if (message.getMessageType() == MessageType.USER_REQUEST_TO_ADD_TO_GROUP) {
out.print(Messages.getString("WhatsAppReport.UserRequestToAddToGroup"));
}
boolean first = true;
for (int i = 0; i < users.size(); i++) {
out.print(i == 0 ? ": " : ", ");
String user = users.get(i);
out.print(getBestContactName(user == null || user.isBlank(), user, contactsDirectory, account));
String contactName = getBestContactName(user == null || user.isBlank(), user, contactsDirectory,
account);
if (!name.equals(contactName)) {
out.print(first ? ": " : ", ");
out.print(contactName);
first = false;
}
}
}
out.print(".<br>");