Skip to content

Commit

Permalink
Добавление отсутствующих методов в groups (#1443)
Browse files Browse the repository at this point in the history
* Implement groups.getTagList

Signed-off-by: Bird Egop <sampletext32@bk.ru>

* Implement groups.setSettings

Signed-off-by: Bird Egop <sampletext32@bk.ru>

* Implement groups.setUserNote

Signed-off-by: Bird Egop <sampletext32@bk.ru>

* Restrict groups.setUserNote Note field to be not more than 96 chars

Signed-off-by: Bird Egop <sampletext32@bk.ru>

* Fix missing GroupTag [Serializable]

Signed-off-by: Bird Egop <sampletext32@bk.ru>

* Implement groups.tagAdd

* Заменяет SafetyEnum на StringEnum для NameRequest

* Заменяет SafetyEnum на StringEnum для CampaignType

* Заменяет SafetyEnum на StringEnum для CallbackServerStatus

* Заменяет SafetyEnum на StringEnum для Button

* Заменяет SafetyEnum на StringEnum для AudioCatalogSourceType

* Заменяет SafetyEnum на StringEnum для AudioAlbumType

* Заменяет SafetyEnum на StringEnum для AppWidgetType

* Убирает лишнее приведение к строке

* Заменяет SafetyEnum на StringEnum для AppType

* Заменяет SafetyEnum на StringEnum для AppSort

* Заменяет SafetyEnum на StringEnum для AppRequestType

* Заменяет SafetyEnum на StringEnum для AppPlatforms

* Заменяет SafetyEnum на StringEnum для AdsLinkType

* Заменяет SafetyEnum на StringEnum для AdRequestStatus

* Заменяет SafetyEnum на StringEnum для CarouselElementActionType

* Заменяет SafetyEnum на StringEnum для MonthlyLimit

* Заменяет SafetyEnum на StringEnum для OrderState

* Убрал не испольузуемые конвертеры

* Удаляет имплисит преобразование StoryType

* Исправляет GetHistoryAttachments #1418

* Добавляет OwnerState в User #1255

* Добавляет ContentRestricted в Audio #1245

* Добавляет события GroupUpdate - AppPayload, MarketOrderNew, MarketOrderEdit #1069

* Добавил отсутствующие поля в результат работы метода account.getProfileInfo #1008

* Добавил в AccountSaveProfileInfoParams поле CancelRequestId #1009

* Добавил carousel в объект ClientInfo #1050

* Добавил обработку параметра Extended в GetList, GetListEx #1046

* date и views_count теперь возвращаются только администратору группы, которой принадлежит товар #1066

* Обновляет пакеты #1422

* duplicate

* Аннотацию для ссылочных типов, допускающих значение NULL, следует использовать только в контексте аннотаций #nullable

* Исправление XML комментариев

* Аннотацию для ссылочных типов, допускающих значение NULL, следует использовать только в контексте аннотаций #nullable

* Аннотацию для ссылочных типов, допускающих значение NULL, следует использовать только в контексте аннотаций #nullable

* Rename parameter 'str' to 'name' to match the base class declaration

* Use a constructor overloads that allows a more meaningful exception message to be provided

* S3887: Use an immutable collection or reduce the accessibility of the non-private readonly field 'Subjects'

* Исправление XML комментариев

* Убрал лишние свойства (используются в другом объекте в качестве параметров) - дубликат

* Generic type parameters should be co/contravariant when possible

* Поправить возможность использования перегрузок методов + параметр title необязательный #988

* 5.105 В объект приложения добавлены 2 новых поля #994

* Пометил устаревшее поле #1003

* Добавляет метод messages.setMemberRole #1031

* 5.115 В stories.getViewers изменился ответ #1063

* 5.118 изменен процесс загрузки историй #1064

* Обновил настройки приватности #1158

* Добавление отсутствующих методов в groups

---------

Signed-off-by: Bird Egop <sampletext32@bk.ru>
Co-authored-by: Bird Egop <sampletext32@bk.ru>
Co-authored-by: bird_egop <e_sinitsa@head-point.ru>
Co-authored-by: inyutin-maxim <inyutin_maxim@mail.ru>
  • Loading branch information
4 people committed Mar 20, 2023
1 parent 765ab94 commit 38d4375
Show file tree
Hide file tree
Showing 11 changed files with 626 additions and 0 deletions.
94 changes: 94 additions & 0 deletions VkNet/Abstractions/Category/Async/IGroupsCategoryAsync.cs
Expand Up @@ -1117,4 +1117,98 @@ public interface IGroupsCategoryAsync
/// Страница документации ВКонтакте http://vk.com/dev/groups.getLongPollSettings
/// </remarks>
Task<GetLongPollSettingsResult> GetLongPollSettingsAsync(ulong groupId);

/// <summary>
/// Возвращает список тегов сообщества
/// </summary>
/// <param name="groupId">
/// Идентификатор сообщества. положительное число,
/// обязательный параметр
/// </param>
/// <returns> Массив объектов тэгов </returns>
Task<VkCollection<GroupTag>> GetTagListAsync(ulong groupId);

/// <summary>
/// Устанавливает настройки сообщества
/// </summary>
/// <param name="params">
/// Параметры изменения настроек сообщества
/// </param>
/// <returns> 1 в случае успеха </returns>
Task<bool> SetSettingsAsync(GroupsSetSettingsParams @params);

/// <summary>
/// Позволяет создать или отредактировать заметку о пользователе в рамках переписки
/// пользователя с сообществом
/// </summary>
/// <param name="params">
/// Параметры редактирования заметки о пользователе
/// </param>
/// <returns> 1 в случае успеха </returns>
Task<bool> SetUserNoteAsync(GroupsSetUserNoteParams @params);

/// <summary>
/// Позволяет добавить новый тег в сообщество.
/// </summary>
/// <param name="params">
/// Параметры редактирования заметки о пользователе
/// </param>
/// <returns> 1 в случае успеха </returns>
Task<bool> TagAddAsync(GroupsTagAddParams @params);

/// <summary>
/// Позволяет «привязывать» и «отвязывать» теги сообщества к беседам.
/// </summary>
/// /// <param name="groupId">
/// Идентификатор группы
/// </param>
/// /// <param name="tagId">
/// Идентификатор тега.
/// </param>
/// /// <param name="userId">
/// Идентификатор User
/// </param>
/// /// <param name="act">
/// Действие с тегом:
/// "bind" — привязать.
/// "unbind" — отвязать.
/// </param>
/// <returns> 1 в случае успеха </returns>
Task<bool> TagBindAsync(ulong groupId, ulong tagId, ulong userId, GroupTagAct act);

/// <summary>
/// Позволяет удалить тег сообщества.
/// </summary>
/// /// <param name="groupId">
/// Идентификатор группы
/// </param>
/// /// <param name="tagId">
/// Идентификатор тега.
/// </param>
/// <returns> 1 в случае успеха </returns>
Task<bool> TagDeleteAsync(ulong groupId, ulong tagId);

/// <summary>
/// Позволяет переименовать существующий тег.
/// </summary>
/// /// <param name="groupId">
/// Идентификатор группы
/// </param>
/// /// <param name="tagId">
/// Идентификатор тега.
/// </param>
/// /// <param name="tagName">
/// Имя тега.
/// </param>
/// <returns> 1 в случае успеха </returns>
Task<bool> TagUpdateAsync(ulong groupId, ulong tagId, string tagName);

/// <summary>
/// Позволяет добавить новый тег в сообщество.
/// </summary>
/// <param name="params">
/// Параметры редактирования заметки о пользователе
/// </param>
/// <returns> 1 в случае успеха </returns>
Task<bool> ToggleMarketAsync(GroupToggleMarketParams @params);
}
24 changes: 24 additions & 0 deletions VkNet/Abstractions/Category/IGroupsCategory.cs
Expand Up @@ -171,4 +171,28 @@ public interface IGroupsCategory : IGroupsCategoryAsync

/// <inheritdoc cref="IGroupsCategoryAsync.GetLongPollSettingsAsync" />
GetLongPollSettingsResult GetLongPollSettings(ulong groupId);

/// <inheritdoc cref="IGroupsCategoryAsync.GetTagListAsync" />
VkCollection<GroupTag> GetTagList(ulong groupId);

/// <inheritdoc cref="IGroupsCategoryAsync.SetSettingsAsync" />
bool SetSettings(GroupsSetSettingsParams @params);

/// <inheritdoc cref="IGroupsCategoryAsync.SetUserNoteAsync" />
bool SetUserNote(GroupsSetUserNoteParams @params);

/// <inheritdoc cref="IGroupsCategoryAsync.TagAddAsync" />
bool TagAdd(GroupsTagAddParams @params);

/// <inheritdoc cref="IGroupsCategoryAsync.TagBindAsync" />
bool TagBind(ulong groupId, ulong tagId, ulong userId, GroupTagAct act);

/// <inheritdoc cref="IGroupsCategoryAsync.TagDeleteAsync" />
bool TagDelete(ulong groupId, ulong tagId);

/// <inheritdoc cref="IGroupsCategoryAsync.TagUpdateAsync" />
bool TagUpdate(ulong groupId, ulong tagId, string tagName);

/// <inheritdoc cref="IGroupsCategoryAsync.ToggleMarketAsync" />
bool ToggleMarket(GroupToggleMarketParams @params);
}
40 changes: 40 additions & 0 deletions VkNet/Categories/Async/GroupsCategoryAsync.cs
Expand Up @@ -204,4 +204,44 @@ public partial class GroupsCategory
/// <inheritdoc />
public Task<GetLongPollSettingsResult> GetLongPollSettingsAsync(ulong groupId) =>
TypeHelper.TryInvokeMethodAsync(() => GetLongPollSettings(groupId));

/// <inheritdoc />
public Task<VkCollection<GroupTag>> GetTagListAsync(ulong groupId)
{
return TypeHelper.TryInvokeMethodAsync(() => GetTagList(groupId));
}

/// <inheritdoc />
public Task<bool> SetSettingsAsync(GroupsSetSettingsParams @params)
{
return TypeHelper.TryInvokeMethodAsync(() => SetSettings(@params));
}

/// <inheritdoc />
public Task<bool> SetUserNoteAsync(GroupsSetUserNoteParams @params)
{
return TypeHelper.TryInvokeMethodAsync(() => SetUserNote(@params));
}

/// <inheritdoc />
public Task<bool> TagAddAsync(GroupsTagAddParams @params)
{
return TypeHelper.TryInvokeMethodAsync(() => TagAdd(@params));
}

/// <inheritdoc />
public Task<bool> TagBindAsync(ulong groupId, ulong tagId, ulong userId, GroupTagAct act) =>
TypeHelper.TryInvokeMethodAsync(() => TagBind(groupId, tagId, userId, act));

/// <inheritdoc />
public Task<bool> TagDeleteAsync(ulong groupId, ulong tagId) =>
TypeHelper.TryInvokeMethodAsync(() => TagDelete(groupId, tagId));

/// <inheritdoc />
public Task<bool> TagUpdateAsync(ulong groupId, ulong tagId, string tagName) =>
TypeHelper.TryInvokeMethodAsync(() => TagUpdate(groupId, tagId, tagName));

/// <inheritdoc />
public Task<bool> ToggleMarketAsync(GroupToggleMarketParams @params) =>
TypeHelper.TryInvokeMethodAsync(() => ToggleMarket(@params));
}
148 changes: 148 additions & 0 deletions VkNet/Categories/GroupsCategory.cs
Expand Up @@ -1385,4 +1385,152 @@ public BotsLongPollHistoryResponse GetBotsLongPollHistory(BotsLongPollHistoryPar
"group_id", groupId
}
});

/// <inheritdoc />
public VkCollection<GroupTag> GetTagList(ulong groupId)
{
return _vk.Call("groups.getTagList",
new VkParameters
{
{ "group_id", groupId }
})
.ToVkCollectionOf<GroupTag>(x => x);
}

/// <inheritdoc />
public bool SetSettings(GroupsSetSettingsParams @params)
{
return _vk.Call<bool>("groups.setSettings",
new()
{
{ "group_id", @params.GroupId },
{ "messages", @params.Messages },
{ "bots_capabilities", @params.BotsCapabilities },
{ "bots_start_button", @params.BotsStartButton },
{ "bots_add_to_chat", @params.BotsAddToChats }
});
}

/// <inheritdoc />
public bool SetUserNote(GroupsSetUserNoteParams @params)
{
if (@params.Note is
{
Length: > 96
})
{
throw new VkApiException("Поле Note не может быть длиннее 96 символов");

}

return _vk.Call<bool>("groups.setUserNote",
new VkParameters
{
{ "group_id", @params.GroupId },
{ "user_id", @params.UserId },
{ "note", @params.Note }
});
}

private static readonly string[] ValidTagColors =
{
"4bb34b",
"5c9ce6",
"e64646",
"792ec0",
"63b9ba",
"ffa000",
"ffc107",
"76787a",
"9e8d6b",
"45678f",
"539b9c",
"454647",
"7a6c4f",
"6bc76b",
"5181b8",
"ff5c5c",
"a162de",
"7ececf",
"aaaeb3",
"bbaa84"
};

/// <inheritdoc />
public bool TagAdd(GroupsTagAddParams @params)
{
if (@params.TagName is { Length: > 20 })
{
throw new VkApiException("Поле TagName не может быть длиннее 20 символов");
}

string lowerTagColor = @params.TagColor?.ToLower() ?? throw new VkApiException("Параметр TagColor обязательный.");

if (!ValidTagColors.Contains(lowerTagColor))
{
throw new VkApiException($"Параметр TagColor должен быть одним из следующих: {string.Join(",", ValidTagColors)}. Передан: {lowerTagColor}");
}

return _vk.Call<bool>("groups.tagAdd",
new VkParameters
{
{ "group_id", @params.GroupId },
{ "tag_name", @params.TagName },
{ "tag_color", lowerTagColor }
});
}

/// <inheritdoc />
public bool TagBind(ulong groupId, ulong tagId, ulong userId, GroupTagAct act)
{
return _vk.Call<bool>("groups.tagBind",
new()
{
{ "group_id", groupId },
{ "tag_id", tagId },
{ "user_id", userId },
{ "act", act }
});
}

/// <inheritdoc />
public bool TagDelete(ulong groupId, ulong tagId)
{
return _vk.Call<bool>("groups.tagDelete",
new()
{
{ "group_id", groupId },
{ "tag_id", tagId }
});
}

/// <inheritdoc />
public bool TagUpdate(ulong groupId, ulong tagId, string tagName)
{
return _vk.Call<bool>("groups.tagUpdate",
new()
{
{ "group_id", groupId },
{ "tag_id", tagId },
{ "tag_name", tagName }
});
}

/// <inheritdoc />
public bool ToggleMarket(GroupToggleMarketParams @params)
{
return _vk.Call<bool>("groups.toggleMarket",
new()
{
{ "group_id", @params.GroupId },
{ "state", @params.State },
{ "ref", @params.Ref },
{ "utm_source", @params.UtmSource },
{ "utm_medium", @params.UtmMedium },
{ "utm_campaign", @params.UtmCampaign },
{ "utm_content", @params.UtmContent },
{ "utm_term", @params.UtmTerm },
{ "promocode", @params.Promocode }
});
}
}
23 changes: 23 additions & 0 deletions VkNet/Enums/StringEnums/GroupTagAct.cs
@@ -0,0 +1,23 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;

namespace VkNet.Enums.SafetyEnums;

/// <summary>
/// Действие с тегом
/// </summary>
[StringEnum]
[JsonConverter(typeof(StringEnumConverter), typeof(SnakeCaseNamingStrategy))]
public enum GroupTagAct
{
/// <summary>
/// Привязать
/// </summary>
Bind,

/// <summary>
/// Отвязать
/// </summary>
Unbind
}
28 changes: 28 additions & 0 deletions VkNet/Enums/StringEnums/ToggleMarketState.cs
@@ -0,0 +1,28 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;

namespace VkNet.Enums.SafetyEnums;

/// <summary>
/// Значение переключателя.
/// </summary>
[StringEnum]
[JsonConverter(typeof(StringEnumConverter), typeof(SnakeCaseNamingStrategy))]
public enum ToggleMarketState
{
/// <summary>
/// Товары отключены
/// </summary>
None,

/// <summary>
/// Базовые товары
/// </summary>
Basic ,

/// <summary>
/// Расширенные товары
/// </summary>
Advanced
}

0 comments on commit 38d4375

Please sign in to comment.