From 7be0f15ca4e1fd6e6533251d5b0b0a5877da8e5d Mon Sep 17 00:00:00 2001 From: FlorianDahn Date: Thu, 28 Nov 2019 15:41:44 +0100 Subject: [PATCH] - updated readme for groups - adding readme to project solution --- README.md | 126 +++++++++++++++++++++++++++++ TelegramBotBaseTest/Tests/Start.cs | 9 +++ TelegramBotFramework.sln | 5 ++ 3 files changed, 140 insertions(+) diff --git a/README.md b/README.md index 29a76e4..afb710e 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,12 @@ Thanks ! * [ButtonGrid](#button-grid) +- [Groups](#groups) + * [SplitterForm](#splitter-form) + + * [GroupForm](#group-form) + + --- ## Introduction @@ -764,6 +770,126 @@ await this.NavigateTo(cd); ### Button Grid + +## Groups + +For working with groups, there are multiple different tools which helps to work with and allows bot also to manage "Single-User" chats and group chats. + +### Splitter Form + + +An easy way to switch between a "Single-User" form and one for managing a group is the SplitterForm base class. +It calls special methods which you can override and then move from there to the form you need. + +The OpenGroup method is the "backup" if OpenChannel or OpenSupergroup is not overridden. Same for Open, it is "backup" if none of the previous methods has been overridden. + + +``` + +public class Start : SplitterForm +{ + public override async Task Open(MessageResult e) + { + var st = new Menu(); + await this.NavigateTo(st); + + return true; + } + + + public override async Task OpenGroup(MessageResult e) + { + var st = new Groups.LinkReplaceTest(); + await this.NavigateTo(st); + + return true; + } + + public override Task OpenChannel(MessageResult e) + { + return base.OpenChannel(e); + } + + public override Task OpenSupergroup(MessageResult e) + { + return base.OpenSupergroup(e); + } +} + +``` + + +### Group Form + +For managing groups im introducing a new base class called "GroupForm". This one has special events which should make it easier to work with groups and channels. +In the Example project is a simple example for deleting a url written by a user and incrementing an internal counter. At every url he writes he got blocked for a small amount of time and the messages gots deleted. At 3 "failes" the user gets kicked of the group and blocked. + +``` +public class GroupForm : FormBase +{ + + + public override async Task Load(MessageResult message) + { + switch (message.MessageType) + { + case Telegram.Bot.Types.Enums.MessageType.ChatMembersAdded: + + await OnMemberChanges(new MemberChangeEventArgs(Telegram.Bot.Types.Enums.MessageType.ChatMembersAdded, message, message.RawMessageData.Message.NewChatMembers)); + + break; + case Telegram.Bot.Types.Enums.MessageType.ChatMemberLeft: + + await OnMemberChanges(new MemberChangeEventArgs(Telegram.Bot.Types.Enums.MessageType.ChatMemberLeft, message, message.RawMessageData.Message.LeftChatMember)); + + break; + + case Telegram.Bot.Types.Enums.MessageType.ChatPhotoChanged: + case Telegram.Bot.Types.Enums.MessageType.ChatPhotoDeleted: + case Telegram.Bot.Types.Enums.MessageType.ChatTitleChanged: + case Telegram.Bot.Types.Enums.MessageType.MigratedFromGroup: + case Telegram.Bot.Types.Enums.MessageType.MigratedToSupergroup: + case Telegram.Bot.Types.Enums.MessageType.MessagePinned: + case Telegram.Bot.Types.Enums.MessageType.GroupCreated: + case Telegram.Bot.Types.Enums.MessageType.SupergroupCreated: + + await OnGroupChanged(new GroupChangedEventArgs(message.MessageType, message)); + + break; + + default: + + OnMessage(message); + + break; + } + + + } + + public virtual async Task OnMemberChanges(MemberChangeEventArgs e) + { + + } + + + public virtual async Task OnGroupChanged(GroupChangedEventArgs e) + { + + } + + + public virtual async Task OnMessage(MessageResult e) + { + + } +} +``` + + + + + --- I will add more notes to it soon, so stay tuned. diff --git a/TelegramBotBaseTest/Tests/Start.cs b/TelegramBotBaseTest/Tests/Start.cs index 1d62076..e56642f 100644 --- a/TelegramBotBaseTest/Tests/Start.cs +++ b/TelegramBotBaseTest/Tests/Start.cs @@ -26,6 +26,15 @@ namespace TelegramBotBaseTest.Tests return true; } + public override Task OpenChannel(MessageResult e) + { + return base.OpenChannel(e); + } + + public override Task OpenSupergroup(MessageResult e) + { + return base.OpenSupergroup(e); + } } } diff --git a/TelegramBotFramework.sln b/TelegramBotFramework.sln index fceb90b..03aeeab 100644 --- a/TelegramBotFramework.sln +++ b/TelegramBotFramework.sln @@ -7,6 +7,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TelegramBotBase", "Telegram EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TelegramBotBaseTest", "TelegramBotBaseTest\TelegramBotBaseTest.csproj", "{88EC0E02-583D-4B9D-956C-81D63C8CFCFA}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3856B3FB-63E3-444A-9FF0-34171BE7AC5D}" + ProjectSection(SolutionItems) = preProject + README.md = README.md + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU