frankvHoof93 / TikTokLiveSharp

Port of TikTok live library for C#
https://vanhoof.dev
Other
150 stars 31 forks source link

[BUG] Invalid wire-type #38

Closed strnadmichal closed 11 months ago

strnadmichal commented 1 year ago

Describe the bug

When I run slightly modified script of the example script it randomly crashes. I can't wrap my head around the error message it gives, but when I comment out OnComment function the problem seems to disappear.

ERROR

ProtoException: Invalid wire-type; this usually means you have over-written a file without truncating or setting the length; see https://stackoverflow.com/q/2152978/23354
ProtoBuf.ProtoReader.ReadUInt64 () (at C:/Code/pb-net_24/src/protobuf-net/ProtoReader.cs:830)
(wrapper dynamic-method) TikTokLiveSharp.Models.Protobuf.Objects.User.proto_18(object,ProtoBuf.ProtoReader)
ProtoBuf.Serializers.CompiledSerializer.ProtoBuf.Serializers.IProtoSerializer.Read (System.Object value, ProtoBuf.ProtoReader source) (at C:/Code/pb-net_24/src/protobuf-net/Serializers/CompiledSerializer.cs:64)
ProtoBuf.Meta.RuntimeTypeModel.Deserialize (System.Int32 key, System.Object value, ProtoBuf.ProtoReader source) (at C:/Code/pb-net_24/src/protobuf-net/Meta/RuntimeTypeModel.cs:826)
ProtoBuf.ProtoReader.ReadTypedObject (System.Object value, System.Int32 key, ProtoBuf.ProtoReader reader, System.Type type) (at C:/Code/pb-net_24/src/protobuf-net/ProtoReader.cs:582)
ProtoBuf.ProtoReader.ReadObject (System.Object value, System.Int32 key, ProtoBuf.ProtoReader reader) (at C:/Code/pb-net_24/src/protobuf-net/ProtoReader.cs:570)
(wrapper dynamic-method) TikTokLiveSharp.Models.Protobuf.Messages.LinkMicBattleTeam.proto_124(object,ProtoBuf.ProtoReader)
ProtoBuf.Serializers.CompiledSerializer.ProtoBuf.Serializers.IProtoSerializer.Read (System.Object value, ProtoBuf.ProtoReader source) (at C:/Code/pb-net_24/src/protobuf-net/Serializers/CompiledSerializer.cs:64)
ProtoBuf.Meta.RuntimeTypeModel.Deserialize (System.Int32 key, System.Object value, ProtoBuf.ProtoReader source) (at C:/Code/pb-net_24/src/protobuf-net/Meta/RuntimeTypeModel.cs:826)
ProtoBuf.ProtoReader.ReadTypedObject (System.Object value, System.Int32 key, ProtoBuf.ProtoReader reader, System.Type type) (at C:/Code/pb-net_24/src/protobuf-net/ProtoReader.cs:582)
ProtoBuf.ProtoReader.ReadObject (System.Object value, System.Int32 key, ProtoBuf.ProtoReader reader) (at C:/Code/pb-net_24/src/protobuf-net/ProtoReader.cs:570)
(wrapper dynamic-method) TikTokLiveSharp.Models.Protobuf.Messages.WebcastLinkMicBattle.proto_116(object,ProtoBuf.ProtoReader)
ProtoBuf.Serializers.CompiledSerializer.ProtoBuf.Serializers.IProtoSerializer.Read (System.Object value, ProtoBuf.ProtoReader source) (at C:/Code/pb-net_24/src/protobuf-net/Serializers/CompiledSerializer.cs:64)
ProtoBuf.Meta.RuntimeTypeModel.Deserialize (System.Int32 key, System.Object value, ProtoBuf.ProtoReader source) (at C:/Code/pb-net_24/src/protobuf-net/Meta/RuntimeTypeModel.cs:826)
ProtoBuf.Meta.TypeModel.DeserializeCore (ProtoBuf.ProtoReader reader, System.Type type, System.Object value, System.Boolean noAutoCreate) (at C:/Code/pb-net_24/src/protobuf-net/Meta/TypeModel.cs:718)
ProtoBuf.Meta.TypeModel.Deserialize (System.IO.Stream source, System.Object value, System.Type type, ProtoBuf.SerializationContext context) (at C:/Code/pb-net_24/src/protobuf-net/Meta/TypeModel.cs:591)
ProtoBuf.Meta.TypeModel.Deserialize (System.IO.Stream source, System.Object value, System.Type type) (at C:/Code/pb-net_24/src/protobuf-net/Meta/TypeModel.cs:570)
ProtoBuf.Serializer.Deserialize[T] (System.IO.Stream source) (at C:/Code/pb-net_24/src/protobuf-net/Serializer.cs:68)
TikTokLiveSharp.Client.TikTokLiveClient.Deserialize[T] (System.IO.MemoryStream stream) (at ./Library/PackageCache/dev.vanhoof.tiktokliveunity@235e10ef40/TikTokLiveSharp/Client/TikTokLiveClient.cs:945)
Rethrow as WebcastMessageException: Error Deserializing Message. Base64 for Message: [CjMKFFdlYmNhc3RMaW5rTWljQmF0dGxlEJ6WlJyv06eHZRiqlpWCrMGdh2Ug2u7viKwxKAEQn5aX9vSpp4dlGiQwAUABCJ+Wl/b0qaeHZRCKpt2IrDEYrQIgnpasrM7To4dlKAMgBSoPCNaj2wMSCAjWo9sDGJsLKhsIroi69qywq6NiEg8Iroi69qywq6NiEAEYxQVKqQ4Iroi69qywq6NiEpwOCrcECKqImNjpvZWqZBD3AxoOc2hhcm9ua2luZzIxMDgilwQKnQFodHRwczovL3AxOS1zaWduLnRpa3Rva2Nkbi11cy5jb20vdG9zLXVzZWFzdDUtYXZ0LTAwNjgtdHgvNzI1NDYyMzI1MjI4MjAzMjE3NH5jNV8xMDB4MTAwLndlYnA/eC1leHBpcmVzPTE2OTU2Mjg4MDAmeC1zaWduYXR1cmU9UTRqZWg4S0RxNVZGQWNCTjVKYVJYcWh5akRRJTNECp0BaHR0cHM6Ly9wMTYtc2lnbi50aWt0b2tjZG4tdXMuY29tL3Rvcy11c2Vhc3Q1LWF2dC0wMDY4LXR4LzcyNTQ2MjMyNTIyODIwMzIxNzR+YzVfMTAweDEwMC53ZWJwP3gtZXhwaXJlcz0xNjk1NjI4ODAwJngtc2lnbmF0dXJlPVBMdW5XV3RBeHViZzZjd0RmNnJSRFU3WG1ZbyUzRAqfAWh0dHBzOi8vcDE5LXNpZ24udGlrdG9rY2RuLXVzLmNvbS90b3MtdXNlYXN0NS1hdnQtMDA2OC10eC83MjU0NjIzMjUyMjgyMDMyMTc0fmM1XzEwMHgxMDAuanBlZz94LWV4cGlyZXM9MTY5NTYyODgwMCZ4LXNpZ25hdHVyZT04OEM0em1KZSUyRnREQjkwZDRROGxwc3JmdjJVcyUzRBIzMTAweDEwMC90b3MtdXNlYXN0NS1hdnQtMDA2OC10eC83MjU0NjIzMjUyMjgyMDMyMTc0CusECIWIgcamtK3cXhBIGgtOYW5pIOKdpO+4jyLPBAqsAWh0dHBzOi8vcDE2LXNpZ24udGlrdG9rY2RuLXVzLmNvbS90b3MtdXNlYXN0NS1hdnQtMDA2OC10eC8xZWQ3MTkzN2NlYjNiYjA4MDg2MjBmZTU2YzNlMmU0Nn5jNV8xMDB4MTAwLndlYnA/eC1leHBpcmVzPTE2OTU2Mjg4MDAmeC1zaWduYXR1cmU9Nm93YnJSTUZLVXN5N1dKJTJGdFBmRXgwOUcwVkklM0QKrAFodHRwczovL3AxOS1zaWduLnRpa3Rva2Nkbi11cy5jb20vdG9zLXVzZWFzdDUtYXZ0LTAwNjgtdHgvMWVkNzE5MzdjZWIzYmIwODA4NjIwZmU1NmMzZTJlNDZ+YzVfMTAweDEwMC53ZWJwP3gtZXhwaXJlcz0xNjk1NjI4ODAwJngtc2lnbmF0dXJlPXVnalg3JTJCZm1ZMTZTUVRWNG5CVkliV2dubm53JTNECqwBaHR0cHM6Ly9wMTYtc2lnbi50aWt0b2tjZG4tdXMuY29tL3Rvcy11c2Vhc3Q1LWF2dC0wMDY4LXR4LzFlZDcxOTM3Y2ViM2JiMDgwODYyMGZlNTZjM2UyZTQ2fmM1XzEwMHgxMDAuanBlZz94LWV4cGlyZXM9MTY5NTYyODgwMCZ4LXNpZ25hdHVyZT1MRU5rOXlwUGF3Y2N2MCUyRmJUNVY1U1R5cjd1TSUzRBJAMTAweDEwMC90b3MtdXNlYXN0NS1hdnQtMDA2OC10eC8xZWQ3MTkzN2NlYjNiYjA4MDg2MjBmZTU2YzNlMmU0NgruBCLPBBJAMTAweDEwMC90b3MtdXNlYXN0NS1hdnQtMDA2OC10eC9kN2I5YjE4OWVkOGZhYjgwZmY3OGZhYzI0ZWRiMjUwOAquAWh0dHBzOi8vcDE2LXNpZ24udGlrdG9rY2RuLXVzLmNvbS90b3MtdXNlYXN0NS1hdnQtMDA2OC10eC9kN2I5YjE4OWVkOGZhYjgwZmY3OGZhYzI0ZWRiMjUwOH5jNV8xMDB4MTAwLndlYnA/eC1leHBpcmVzPTE2OTU2Mjg4MDAmeC1zaWduYXR1cmU9SW9VN0FsVFZaJTJGNUpHVDJ5JTJGOXpFSHl2R3RIayUzRAqqAWh0dHBzOi8vcDE5LXNpZ24udGlrdG9rY2RuLXVzLmNvbS90b3MtdXNlYXN0NS1hdnQtMDA2OC10eC9kN2I5YjE4OWVkOGZhYjgwZmY3OGZhYzI0ZWRiMjUwOH5jNV8xMDB4MTAwLndlYnA/eC1leHBpcmVzPTE2OTU2Mjg4MDAmeC1zaWduYXR1cmU9ZVhvRUZmcEh5MDZKZDFKTml4aUJ2czFHcDVnJTNECqwBaHR0cHM6Ly9wMTYtc2lnbi50aWt0b2tjZG4tdXMuY29tL3Rvcy11c2Vhc3Q1LWF2dC0wMDY4LXR4L2Q3YjliMTg5ZWQ4ZmFiODBmZjc4ZmFjMjRlZGIyNTA4fmM1XzEwMHgxMDAuanBlZz94LWV4cGlyZXM9MTY5NTYyODgwMCZ4LXNpZ25hdHVyZT1Ra2phN2xRRHdjeHhnYjh0dVpoME4lMkIyU0dCcyUzRAiqiMyo3PPEoWQQBhoOc2ltbWVvbiBoYWNrZXIQxQVK0QsI1qPbAxLJCwqsAxDUCRoEamFrZSKWAwqsAWh0dHBzOi8vcDE2LXNpZ24tdmEudGlrdG9rY2RuLmNvbS90b3MtbWFsaXZhLWF2dC0wMDY4L2Y0MGI0NWFkYjU5NzcxZGMyNDQ2MTJlZGRlMWIwZGI1fmM1XzEwMHgxMDAud2VicD94LWV4cGlyZXM9MTY5NTYyODgwMCZ4LXNpZ25hdHVyZT1UaiUyQiUyQkc3M0h6JTJGMFphUmx0ZlV1Sk81aXBWVmslM0QKpgFodHRwczovL3AxNi1zaWduLXZhLnRpa3Rva2Nkbi5jb20vdG9zLW1hbGl2YS1hdnQtMDA2OC9mNDBiNDVhZGI1OTc3MWRjMjQ0NjEyZWRkZTFiMGRiNX5jNV8xMDB4MTAwLmpwZWc/eC1leHBpcmVzPTE2OTU2Mjg4MDAmeC1zaWduYXR1cmU9STRvUGU2SDdONHhYZmFnUHkwMjRZQTZncHVRJTNEEjwxMDB4MTAwL3Rvcy1tYWxpdmEtYXZ0LTAwNjgvZjQwYjQ1YWRiNTk3NzFkYzI0NDYxMmVkZGUxYjBkYjUIhYiJ4t3ni7xdCvAECIWIzKyr7bDYXRAqGhLwn5KLR2Vu8J+UrvCflYrvuI8izQQKqgFodHRwczovL3AxNi1zaWduLnRpa3Rva2Nkbi11cy5jb20vdG9zLXVzZWFzdDUtYXZ0LTAwNjgtdHgvOTExZmU2MTZmMjRiOTY2MjNmMzZhYzM4M2M0YzQwYjZ+YzVfMTAweDEwMC53ZWJwP3gtZXhwaXJlcz0xNjk1NjI4ODAwJngtc2lnbmF0dXJlPTYxcE9XR0IwcFcyTTM4YWZzU3VGVnRBVzhvRSUzRAqqAWh0dHBzOi8vcDE5LXNpZ24udGlrdG9rY2RuLXVzLmNvbS90b3MtdXNlYXN0NS1hdnQtMDA2OC10eC85MTFmZTYxNmYyNGI5NjYyM2YzNmFjMzgzYzRjNDBiNn5jNV8xMDB4MTAwLndlYnA/eC1leHBpcmVzPTE2OTU2Mjg4MDAmeC1zaWduYXR1cmU9VDNES3BibzIyVDd0WENOazhEWjY2MGVCajVrJTNECq4BaHR0cHM6Ly9wMTYtc2lnbi50aWt0b2tjZG4tdXMuY29tL3Rvcy11c2Vhc3Q1LWF2dC0wMDY4LXR4LzkxMWZlNjE2ZjI0Yjk2NjIzZjM2YWMzODNjNGM0MGI2fmM1XzEwMHgxMDAuanBlZz94LWV4cGlyZXM9MTY5NTYyODgwMCZ4LXNpZ25hdHVyZT1NckIxUmo0WG5qbEhoNyUyRlNOblRLaGdqSyUyQnZFJTNEEkAxMDB4MTAwL3Rvcy11c2Vhc3Q1LWF2dC0wMDY4LXR4LzkxMWZlNjE2ZjI0Yjk2NjIzZjM2YWMzODNjNGM0MGI2CqEDGgNzYWIikgMKpgFodHRwczovL3AxNi1zaWduLXZhLnRpa3Rva2Nkbi5jb20vdG9zLW1hbGl2YS1hdnQtMDA2OC8xNjY4Y2VkZjkwOWQyNzA2YTIwOWZkMzhiODJlY2VhNn5jNV8xMDB4MTAwLndlYnA/eC1leHBpcmVzPTE2OTU2Mjg4MDAmeC1zaWduYXR1cmU9Unh4YmlheE52VGJVY3FuOTYwanRPT2lGVmo4JTNECqgBaHR0cHM6Ly9wMTYtc2lnbi12YS50aWt0b2tjZG4uY29tL3Rvcy1tYWxpdmEtYXZ0LTAwNjgvMTY2OGNlZGY5MDlkMjcwNmEyMDlmZDM4YjgyZWNlYTZ+YzVfMTAweDEwMC5qcGVnP3gtZXhwaXJlcz0xNjk1NjI4ODAwJngtc2lnbmF0dXJlPVptMU4lMkJkU2pqSVJLS0JkY09saVFKWU9MckFFJTNEEjwxMDB4MTAwL3Rvcy1tYWxpdmEtYXZ0LTAwNjgvMTY2OGNlZGY5MDlkMjcwNmEyMDlmZDM4YjgyZWNlYTYIsYuABBADEJsLUvoECK6IuvassKujYhLtBArqBAiuiLr2rLCro2ISCXlvdW5nX3J1bRrHBAqsAWh0dHBzOi8vcDE2LXNpZ24udGlrdG9rY2RuLXVzLmNvbS90b3MtdXNlYXN0NS1hdnQtMDA2OC10eC80MWE4YjM4M2U4OWYxZTkyNmU3Y2M4ZjJhMjllOWU1MX5jNV8xMDB4MTAwLndlYnA/eC1leHBpcmVzPTE2OTU2Mjg4MDAmeC1zaWduYXR1cmU9MEp1JTJCaWtzcHY0eWZyS3k1RGp6NTAzbXo0R0ElM0QKrgFodHRwczovL3AxOS1zaWduLnRpa3Rva2Nkbi11cy5jb20vdG9zLXVzZWFzdDUtYXZ0LTAwNjgtdHgvNDFhOGIzODNlODlmMWU5MjZlN2NjOGYyYTI5ZTllNTF+YzVfMTAweDEwMC53ZWJwP3gtZXhwaXJlcz0xNjk1NjI4ODAwJngtc2lnbmF0dXJlPVNEZ3NjNCUyRmsyRGc3c3BoNCUyRmNnWEk0bWlkVDQlM0QKqgFodHRwczovL3AxNi1zaWduLnRpa3Rva2Nkbi11cy5jb20vdG9zLXVzZWFzdDUtYXZ0LTAwNjgtdHgvNDFhOGIzODNlODlmMWU5MjZlN2NjOGYyYTI5ZTllNTF+YzVfMTAweDEwMC5qcGVnP3gtZXhwaXJlcz0xNjk1NjI4ODAwJngtc2lnbmF0dXJlPXpnd3k2bU9mN2c2NnRaQ0JXWTJTZzB0dm5PNCUzRBI4dG9zLXVzZWFzdDUtYXZ0LTAwNjgtdHgvNDFhOGIzODNlODlmMWU5MjZlN2NjOGYyYTI5ZTllNTEiCXlvdW5nX3J1bVLxBAjWo9sDEukECuYECNaj2wMSDFRvcmkgSHViYmFyZBrFBAquAWh0dHBzOi8vcDE2LXNpZ24udGlrdG9rY2RuLXVzLmNvbS90b3MtdXNlYXN0NS1hdnQtMDA2OC10eC85OGUyNDFmOTAzYWM2MmU5ODg5N2NjMTQ1Y2EzNjQ5Zn5jNV8xMDB4MTAwLndlYnA/eC1leHBpcmVzPTE2OTU2Mjg4MDAmeC1zaWduYXR1cmU9ZEJMJTJGTEtiNUZQRVp6SSUyRlhSMkh6MzIzcnhIZyUzRAqqAWh0dHBzOi8vcDE5LXNpZ24udGlrdG9rY2RuLXVzLmNvbS90b3MtdXNlYXN0NS1hdnQtMDA2OC10eC85OGUyNDFmOTAzYWM2MmU5ODg5N2NjMTQ1Y2EzNjQ5Zn5jNV8xMDB4MTAwLndlYnA/eC1leHBpcmVzPTE2OTU2Mjg4MDAmeC1zaWduYXR1cmU9N2VGbzdtMFIwRW1OdjFqbHVJdTVGZEZwa0JVJTNECqoBaHR0cHM6Ly9wMTYtc2lnbi50aWt0b2tjZG4tdXMuY29tL3Rvcy11c2Vhc3Q1LWF2dC0wMDY4LXR4Lzk4ZTI0MWY5MDNhYzYyZTk4ODk3Y2MxNDVjYTM2NDlmfmM1XzEwMHgxMDAuanBlZz94LWV4cGlyZXM9MTY5NTYyODgwMCZ4LXNpZ25hdHVyZT04UGhoeVFZOWhkcUlhZnF5ZjNmQndjWHhjazQlM0QSOHRvcy11c2Vhc3Q1LWF2dC0wMDY4LXR4Lzk4ZTI0MWY5MDNhYzYyZTk4ODk3Y2MxNDVjYTM2NDlmIgl0b3JpaHViYmJqvwIIroi69qywq6NiErICCK6IuvassKujYhACKAEyoQJzc2xvY2FsOi8vd2ViY2FzdF9seW54dmlld19wb3B1cD91cmw9aHR0cHMlM0ElMkYlMkZsZjE2LWdlY2tvLXNvdXJjZS50aWt0b2tjZG4uY29tJTJGb2JqJTJGYnl0ZS1ndXJkLXNvdXJjZS1zZyUyRnRpa3RvayUyRmZlJTJGbGl2ZSUyRnRpa3Rva19saXZlX3JldmVudWVfbWF0Y2glMkZwYWdlcyUyRmxpdmVfbWF0Y2hfc3RyZWFrJTJGdGVtcGxhdGUuanMmaGVpZ2h0PTgzMnJweCZyYWRpdXM9MTZycHgmY29udGFpbmVyX2JnX2NvbG9yPUZGRkZGRiZzZXJ2ZXJfcm9vbV9pZD03MjgxODYxOTM3Nzc4OTg1NzU5arcCCNaj2wMSrwIQARgBKAEyoQJzc2xvY2FsOi8vd2ViY2FzdF9seW54dmlld19wb3B1cD91cmw9aHR0cHMlM0ElMkYlMkZsZjE2LWdlY2tvLXNvdXJjZS50aWt0b2tjZG4uY29tJTJGb2JqJTJGYnl0ZS1ndXJkLXNvdXJjZS1zZyUyRnRpa3RvayUyRmZlJTJGbGl2ZSUyRnRpa3Rva19saXZlX3JldmVudWVfbWF0Y2glMkZwYWdlcyUyRmxpdmVfbWF0Y2hfc3RyZWFrJTJGdGVtcGxhdGUuanMmaGVpZ2h0PTgzMnJweCZyYWRpdXM9MTZycHgmY29udGFpbmVyX2JnX2NvbG9yPUZGRkZGRiZzZXJ2ZXJfcm9vbV9pZD03MjgxODg3NDM2MDUyMTg3OTQ2CNaj2wM=]
UnityEngine.Debug:LogException(Exception, Object)
TikTokLiveSharp.Client.TikTokLiveClient:Deserialize(MemoryStream) (at ./Library/PackageCache/dev.vanhoof.tiktokliveunity@235e10ef40/TikTokLiveSharp/Client/TikTokLiveClient.cs:963)
TikTokLiveSharp.Client.TikTokLiveClient:HandleMessage(Message) (at ./Library/PackageCache/dev.vanhoof.tiktokliveunity@235e10ef40/TikTokLiveSharp/Client/TikTokLiveClient.cs:524)
TikTokLiveSharp.Client.TikTokLiveClient:HandleWebcastMessages(WebcastResponse) (at ./Library/PackageCache/dev.vanhoof.tiktokliveunity@235e10ef40/TikTokLiveSharp/Client/TikTokLiveClient.cs:301)
TikTokLiveSharp.Client.<WebSocketLoop>d__51:MoveNext() (at ./Library/PackageCache/dev.vanhoof.tiktokliveunity@235e10ef40/TikTokLiveSharp/Client/TikTokBaseClient.cs:661)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder:SetResult()
TikTokLiveSharp.Client.<SendAcknowledgement>d__53:MoveNext() (at ./Library/PackageCache/dev.vanhoof.tiktokliveunity@235e10ef40/TikTokLiveSharp/Client/TikTokBaseClient.cs:722)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder:SetResult()
TikTokLiveSharp.Client.Socket.<WriteMessage>d__7:MoveNext() (at ./Library/PackageCache/dev.vanhoof.tiktokliveunity@235e10ef40/TikTokLiveSharp/Client/Socket/TikTokWebSocket.cs:95)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1:SetResult(Int32)
Mono.Net.Security.<StartOperation>d__57:MoveNext()
System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1:SetResult(AsyncProtocolResult)
Mono.Net.Security.<StartOperation>d__23:MoveNext()
System.Runtime.CompilerServices.AsyncTaskMethodBuilder:SetResult()
Mono.Net.Security.<ProcessOperation>d__24:MoveNext()
System.Runtime.CompilerServices.AsyncTaskMethodBuilder:SetResult()
Mono.Net.Security.<InnerWrite>d__67:MoveNext()
System.Threading._ThreadPoolWaitCallback:PerformWaitCallback()

Additional context

I will be glad for any suggestion. :)

frankvHoof93 commented 12 months ago

Any protobuf-errors are caused by Messages (from the server) not being parsed correctly. Since TikTok does not publish their protobuf-scheme anywhere, we have to manually reverse-engineer it. I'm currently working on v1.0, which should have the most up-to-date protobuf-schema.

frankvHoof93 commented 11 months ago

Resolved in V1.0.0 (better schema for LinkMicBattle-Users)