Skip to content

Thư viện .NET không chính thức dùng để lập trình userbot bằng API nội bộ của Zalo.

License

Notifications You must be signed in to change notification settings

ElectroHeavenVN/ZepLaoSharp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

ZepLaoSharp [EN - VI]

Thư viện .NET không chính thức dùng để lập trình userbot bằng API nội bộ của Zalo.

Cảnh báo: Sử dụng thư viện này để tự động hóa các tác vụ trên Zalo có thể vi phạm Điều khoản dịch vụ của Zalo và có thể dẫn đến việc tài khoản của bạn bị khóa hoặc bị cấm. Sử dụng thư viện này đồng nghĩa với việc bạn đã hiểu rõ và chấp nhận rủi ro và tôi không chịu trách nhiệm về bất kỳ hậu quả nào xảy ra.

Cài đặt

Comming soon

Tài liệu API

Comming soon

Ví dụ sử dụng cơ bản

Đăng nhập vào tài khoản

using EHVN.ZepLaoSharp;
using EHVN.ZepLaoSharp.Auth;

List<ZaloCookie> cookies = ...  // Lấy cookie từ tài khoản Zalo của bạn
string imei = ...  // IMEI của thiết bị
string userAgent = ...  // User-Agent của trình duyệt hoặc ứng dụng Zalo PC
int apiType = 24;  // Loại API
int apiVersion = 658;  // Phiên bản API
string computerName = "Web";  // Tên máy tính hoặc "Web" nếu dùng thông tin đăng nhập từ trình duyệt

ZaloClientBuilder clientBuilder = ZaloClientBuilder.CreateDefault()
    .WithCredential(new LoginCredential(cookies, imei, userAgent))
    .SetAPIType(apiType)
    .SetAPIVersion(apiVersion)
    .SetComputerName(computerName);
ZaloClient client = clientBuilder.Build();
await client.ConnectAsync();    // Kết nối đến máy chủ Zalo
Console.WriteLine("Logged in as: " + client.CurrentUser!.DisplayName);
client.DisconnectAsync(); // Ngắt kết nối máy chủ Zalo

Lấy một chủ đề có thể gửi tin nhắn đến

using EHVN.ZepLaoSharp.Entities;

long groupId = ...  // ID của nhóm
ZaloGroup group = await client.GetGroupAsync(groupId);
long userId = ...  // ID của người dùng
ZaloUser user = await client.GetUserAsync(userId);

Gửi tin nhắn

using EHVN.ZepLaoSharp.FFMpeg;

ZaloMessage messageToBeQuoted = ...  // Tin nhắn cần trích dẫn
ZaloAttachment attachment = ZaloAttachment.FromFile(@"img3.png");
attachment.IsRawFile = true;  // Gửi dưới dạng tệp gốc
ZaloAttachment attachment2 = ZaloAttachment.FromFile(@"img4.png");
attachment2.SendAsSticker = true;  // Gửi dưới dạng sticker

 ZaloMessageBuilder messageBuilder =
     new ZaloMessageBuilder()
        .GroupMediaMessages()   //Nhóm tin nhắn đa phương tiện
        .AddAttachment(ZaloAttachment.FromFile(@"music.mp3"))       // Thêm tệp âm thanh phát được dưới dạng tin nhắn thoại
        .AddAttachment(ZaloAttachment.FromFile(@"voice.aac"))     // Thêm tin nhắn thoại
        .AddAttachment(ZaloAttachment.FromFile(@"img.jpg")) // Thêm ảnh
        .AddAttachment(ZaloAttachment.FromFile(@"img2.png"))    // Thêm ảnh
        .AddAttachment(attachment)
        .AddAttachment(attachment2)
        .AddAttachment(ZaloAttachment.FromFile(@"sales-report.pdf"))    // Thêm tệp đính kèm
        .AddAttachment(AttachmentUtils.FromVideoFile(@"video.mp4")) // Thêm video
        .WithLinkEmbed(new ZaloLinkEmbed("https://github.com/ElectroHeavenVN/ZepLaoSharp")) // Thêm liên kết
        .WithLocation("Trường Đại học FPT Hà Nội", 21.012536881345767, 105.52569941114935)  // Thêm vị trí
        .WithContactCard(userId, "09XXXXXXXX")  // Thêm danh thiếp
        .WithContent("abc1234") // Nội dung tin nhắn
        .WithQuoteMessage(messageToBeQuoted)    // Tin nhắn trích dẫn
        .WithBankAccount(970458, "bankAccountNumber", "Nguyễn Văn A")   // Thêm tài khoản ngân hàng
        .AddSticker(await client.GetStickerAsync(1357)) // Thêm sticker
        .DisappearAfter(1000 * 60 * 6)  // Tin nhắn sẽ tự động biến mất sau 6 phút
        ;
    await group.TriggerTypingAsync(); // Gửi trạng thái đang gõ
    List<ZaloGroupMessage> groupMessages = await group.SendMessageAsync(messageBuilder);    // Gửi tin nhắn đến nhóm
    await user.TriggerTypingAsync(); // Gửi trạng thái đang gõ
    List<ZaloDirectMessage> directMessages = await user.SendMessageAsync(messageBuilder);   // Gửi tin nhắn trực tiếp đến người dùng

Chuyển tiếp tin nhắn

long groupId2 = ...  // ID của nhóm khác
long groupId3 = ...  // ID của nhóm khác
long groupId4 = ...  // ID của nhóm khác
ZaloGroup group2 = await client.GetGroupAsync(groupId2);
ZaloGroup group3 = await client.GetGroupAsync(groupId3);
ZaloGroup group4 = await client.GetGroupAsync(groupId4);
long userId2 = ...  // ID của người dùng khác
long userId3 = ...  // ID của người dùng khác
long userId4 = ...  // ID của người dùng khác
foreach (ZaloMessage message in directMessages)
{
    List<ZaloGroupMessage> forwardedMessages = await message.ForwardAsync([group2, group3]);  // Chuyển tiếp tin nhắn đến các nhóm
    foreach (ZaloGroupMessage forwardedMessage in forwardedMessages)
    {
        await forwardedMessage.ForwardAsync([group4], 30 * 1000);  // Chuyển tiếp tin nhắn đến nhóm khác, các tin nhắn sẽ tự xóa sau 30 giây
    }
}
foreach (ZaloMessage message in groupMessages)
{
    List<ZaloDirectMessage> forwardedMessages = await message.ForwardAsync([userId2, userId3]);  // Chuyển tiếp tin nhắn đến người dùng
    foreach (ZaloDirectMessage forwardedMessage in forwardedMessages)
    {
        await forwardedMessage.ForwardAsync([userId4], 30 * 1000);  // Chuyển tiếp tin nhắn đến người dùng khác, các tin nhắn sẽ tự xóa sau 30 giây
    }
}

Thu hồi tin nhắn

foreach (ZaloMessage message in directMessages)
{
    await message.RecallAsync();
}
foreach (ZaloMessage message in groupMessages)
{
    await message.RecallAsync();
}

Xóa tin nhắn

foreach (ZaloMessage message in directMessages)
{
    await message.DeleteAsync(true);    //Chỉ xóa cho mình tôi, đối phương sẽ vẫn thấy tin nhắn
}
foreach (ZaloMessage message in groupMessages)
{
    await message.DeleteAsync();    //Xóa cho tất cả mọi người
}

Thêm biểu tượng cảm xúc vào tin nhắn

foreach (ZaloMessage message in directMessages)
{
    await message.AddReactionAsync("/-strong"); //Like
    await message.AddReactionAsync("/-heart", 50); //50 tim
}
foreach (ZaloMessage message in groupMessages)
{
    await message.AddReactionAsync("Custom reaction", Random.Shared.Next(10000, 1000000)); //Thêm biểu tượng cảm xúc tùy chỉnh với ID ngẫu nhiên
    await message.RemoveAllReactionsAsync(); //Xóa tất cả biểu tượng cảm xúc của tôi
}

Lấy tin nhắn gần đây của một nhóm

    long lastMessageId = 0;
    (List<ZaloGroupMessage> GroupMessages, bool HasMore) messages = await group.GetRecentGroupMessagesAsync(lastMessageId, 20); // Lấy 20 tin nhắn gần đây nhất
    if (messages.HasMore)
    {
        (List<ZaloGroupMessage> GroupMessages, bool HasMore) messages2 = await group.GetRecentGroupMessagesAsync(messages.GroupMessages.First().ID, 20); // Lấy 20 tin nhắn tiếp theo
    }

Quản lý nhóm

ZaloMember member = await group.GetMemberAsync(userId); // Lấy thông tin thành viên
Console.WriteLine($"Member: {member.DisplayName}, Role: {member.Role}");
await group.RemoveMembersAsync([member]); // Xóa thành viên khỏi nhóm
await group.BlockMembersAsync([member]); // Chặn thành viên khỏi nhóm, họ sẽ không thể tham gia nhóm nữa trừ khi được bỏ chặn hoặc được quản trị viên mời lại
await group.UnblockMembersAsync([user]); // Bỏ chặn người dùng khỏi nhóm
(List<ZaloMember> BlockedMembers, bool HasMore) blockedMembers = await group.GetBlockedMembersAsync(); // Lấy danh sách thành viên bị chặn
foreach (ZaloGroupJoinRequest request in await group.GetJoinRequestsAsync())
{
    Console.WriteLine($"Join request from: {request.DisplayName}");
    await group.ReviewJoinRequestsAsync([request], true); // Chấp nhận yêu cầu tham gia nhóm
    // await group.ReviewJoinRequestsAsync([request], false); // Từ chối yêu cầu tham gia nhóm
}

Tương tác với nhóm

    ZaloGroup groupFromInviteLink = await client.GetGroupAsync("https://zalo.me/g/XXXXXXXXX"); // Lấy nhóm từ liên kết mời
    await client.JoinGroupAsync("https://zalo.me/g/XXXXXXXXX"); // Tham gia nhóm từ liên kết mời
    groupFromInviteLink = await client.GetGroupAsync(groupFromInviteLink.id); // Lấy nhóm từ ID
    await groupFromInviteLink.LeaveAsync(true); // Rời khỏi nhóm trong yên lặng

Lắng nghe sự kiện

    client.EventListeners.Disconnected += EventListeners_Disconnected;
    client.EventListeners.GroupMessageReceived += EventListeners_GroupMessageReceived;
    client.EventListeners.NewMemberJoined += EventListeners_NewMemberJoined;
    client.EventListeners.MemberLeft += EventListeners_MemberLeft;
    client.EventListeners.MemberRemoved += EventListeners_MemberRemoved;
    client.EventListeners.MemberBlocked += EventListeners_MemberBlocked;

    private static async Task EventListeners_MemberBlocked(ZaloClient sender, MemberBlockedEventArgs args)
    {
        Console.WriteLine($"Member {args.Member.DisplayName}[{args.Member.ID}] was blocked from group {args.Group.Name} by {args.Actioner?.DisplayName ?? "[null]"}");
    }

    private static async Task EventListeners_MemberRemoved(ZaloClient sender, MemberRemovedEventArgs args)
    {
        Console.WriteLine($"Member {args.Member.DisplayName}[{args.Member.ID}] was removed from group {args.Group.Name} by {args.Actioner?.DisplayName ?? "[null]"}");
    }

    private static async Task EventListeners_MemberLeft(ZaloClient sender, MemberLeftEventArgs args)
    {
        Console.WriteLine($"Member {args.Member.DisplayName}[{args.Member.ID}] left group {args.Group.Name}");
    }

    private static async Task EventListeners_NewMemberJoined(ZaloClient sender, MemberJoinedEventArgs args)
    {
        Console.WriteLine($"Member {args.Member.DisplayName}[{args.Member.ID}] joined group {args.Group.Name}");
    }

    private static async Task EventListeners_GroupMessageReceived(object sender, GroupMessageReceivedEventArgs args)
    {
        Console.WriteLine(args.Message.Content?.ToInformationalString());
    }

    private static async Task EventListeners_Disconnected(object sender, GatewayDisconnectedEventArgs args)
    {
        await Task.Delay(5000);
        await client.ConnectAsync();
    }

Đóng góp

Comming soon

Giấy phép

Dự án này được cấp phép theo giấy phép AGPL-3.0. Vui lòng xem tệp LICENSE để biết thêm chi tiết.

About

Thư viện .NET không chính thức dùng để lập trình userbot bằng API nội bộ của Zalo.

Topics

Resources

License

Stars

Watchers

Forks