diff --git a/TelegramBotBaseTest/Tests/Groups/GroupChange.cs b/TelegramBotBaseTest/Tests/Groups/GroupChange.cs new file mode 100644 index 0000000..3c2cc42 --- /dev/null +++ b/TelegramBotBaseTest/Tests/Groups/GroupChange.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using TelegramBotBase.Base; +using TelegramBotBase.Form; + +namespace TelegramBotBaseTest.Tests.Groups +{ + public class GroupChange : TelegramBotBase.Form.GroupForm + { + public GroupChange() + { + this.Opened += GroupChange_Opened; + } + + + private async Task GroupChange_Opened(object sender, EventArgs e) + { + + ButtonForm bf = new ButtonForm(); + + bf.AddButtonRow(new ButtonBase("Open GroupChange Test", "groupchange")); + bf.AddButtonRow(new ButtonBase("Open WelcomeUser Test", "welcomeuser")); + bf.AddButtonRow(new ButtonBase("Open LinkReplace Test", "linkreplace")); + + await this.Device.Send("GroupChange started, click to switch", bf); + + } + + public override async Task Action(MessageResult message) + { + if (message.Handled) + return; + + + var bn = message.RawData; + + await message.ConfirmAction(); + message.Handled = true; + + switch (bn) + { + case "groupchange": + + var gc = new GroupChange(); + + await this.NavigateTo(gc); + + break; + case "welcomeuser": + + var wu = new WelcomeUser(); + + await this.NavigateTo(wu); + + break; + case "linkreplace": + + var lr = new LinkReplaceTest(); + + await this.NavigateTo(lr); + + break; + } + + } + + public override async Task OnGroupChanged(GroupChangedEventArgs e) + { + await this.Device.Send("Group has been changed by " + e.OriginalMessage.Message.From.FirstName + " " + e.OriginalMessage.Message.From.LastName); + } + + } +} diff --git a/TelegramBotBaseTest/Tests/Groups/LinkReplaceTest.cs b/TelegramBotBaseTest/Tests/Groups/LinkReplaceTest.cs new file mode 100644 index 0000000..c7ef39f --- /dev/null +++ b/TelegramBotBaseTest/Tests/Groups/LinkReplaceTest.cs @@ -0,0 +1,155 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Telegram.Bot.Types; +using TelegramBotBase.Base; +using TelegramBotBase.Form; + +namespace TelegramBotBaseTest.Tests.Groups +{ + public class LinkReplaceTest : TelegramBotBase.Form.GroupForm + { + + Dictionary Counter { get; set; } = new Dictionary(); + + private const int Maximum = 3; + + + public LinkReplaceTest() + { + this.Opened += LinkReplaceTest_Opened; + } + + private async Task LinkReplaceTest_Opened(object sender, EventArgs e) + { + + ButtonForm bf = new ButtonForm(); + + bf.AddButtonRow(new ButtonBase("Open GroupChange Test", "groupchange")); + bf.AddButtonRow(new ButtonBase("Open WelcomeUser Test", "welcomeuser")); + bf.AddButtonRow(new ButtonBase("Open LinkReplace Test", "linkreplace")); + + await this.Device.Send("LinkReplaceTest started, click to switch", bf); + + } + + public override async Task Action(MessageResult message) + { + if (message.Handled) + return; + + var bn = message.RawData; + + await message.ConfirmAction(); + message.Handled = true; + + switch (bn) + { + case "groupchange": + + var gc = new GroupChange(); + + await this.NavigateTo(gc); + + break; + case "welcomeuser": + + var wu = new WelcomeUser(); + + await this.NavigateTo(wu); + + break; + case "linkreplace": + + var lr = new LinkReplaceTest(); + + await this.NavigateTo(lr); + + break; + } + + } + + public override async Task OnMessage(MessageResult e) + { + var from = e.Message.From.Id; + + if (e.Message.From.IsBot) + return; + + var u = await Device.GetChatUser(from); + + //Don't kick Admins or Creators + if (u.Status == Telegram.Bot.Types.Enums.ChatMemberStatus.Administrator | u.Status == Telegram.Bot.Types.Enums.ChatMemberStatus.Creator) + { + await this.Device.Send("You won't get kicked,...not this time."); + return; + } + + //Are urls inside his message ? + if (!HasLinks(e.MessageText)) + return; + + + await e.Device.DeleteMessage(e.MessageId); + + var cp = new ChatPermissions(); + cp.CanAddWebPagePreviews = false; + cp.CanChangeInfo = false; + cp.CanInviteUsers = false; + cp.CanPinMessages = false; + cp.CanSendMediaMessages = false; + cp.CanSendMessages = false; + cp.CanSendOtherMessages = false; + cp.CanSendPolls = false; + + //Collect user "mistakes" with sending url, after 3 he gets kicked out. + if (Counter.ContainsKey(from)) + { + Counter[from]++; + } + else + { + Counter[from] = 1; + } + + + if (Counter[from] >= 3) + { + await e.Device.KickUser(from); + + await e.Device.Send(e.Message.From.FirstName + " " + e.Message.From.LastName + " has been removed from the group"); + } + else + { + await e.Device.RestrictUser(from, cp, DateTime.UtcNow.AddSeconds(30)); + + await e.Device.Send(e.Message.From.FirstName + " " + e.Message.From.LastName + " has been blocked for 30 seconds"); + } + + + + } + + /// + /// https://stackoverflow.com/a/20651284 + /// + /// + /// + private bool HasLinks(String str) + { + var tmp = str; + + var pattern = @"^(http|https|ftp|)\://|[a-zA-Z0-9\-\.]+\.[a-zA-Z](:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*[^\.\,\)\(\s]$"; + Regex r = new Regex(pattern); + + var matches = r.Matches(tmp); + + return (matches.Count > 0); + } + + + } +} diff --git a/TelegramBotBaseTest/Tests/Groups/WelcomeUser.cs b/TelegramBotBaseTest/Tests/Groups/WelcomeUser.cs new file mode 100644 index 0000000..ffaa887 --- /dev/null +++ b/TelegramBotBaseTest/Tests/Groups/WelcomeUser.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Linq; +using System.Threading.Tasks; +using TelegramBotBase.Base; +using TelegramBotBase.Form; + +namespace TelegramBotBaseTest.Tests.Groups +{ + public class WelcomeUser : TelegramBotBase.Form.GroupForm + { + + public WelcomeUser() + { + this.Opened += WelcomeUser_Opened; + } + + + private async Task WelcomeUser_Opened(object sender, EventArgs e) + { + + ButtonForm bf = new ButtonForm(); + + bf.AddButtonRow(new ButtonBase("Open GroupChange Test", "groupchange")); + bf.AddButtonRow(new ButtonBase("Open WelcomeUser Test", "welcomeuser")); + bf.AddButtonRow(new ButtonBase("Open LinkReplace Test", "linkreplace")); + + await this.Device.Send("WelcomeUser started, click to switch", bf); + + } + + public override async Task Action(MessageResult message) + { + if (message.Handled) + return; + + var bn = message.RawData; + + await message.ConfirmAction(); + message.Handled = true; + + switch (bn) + { + case "groupchange": + + var gc = new GroupChange(); + + await this.NavigateTo(gc); + + break; + case "welcomeuser": + + var wu = new WelcomeUser(); + + await this.NavigateTo(wu); + + break; + case "linkreplace": + + var lr = new LinkReplaceTest(); + + await this.NavigateTo(lr); + + break; + } + + } + + public override async Task OnMemberChanges(MemberChangeEventArgs e) + { + + if (e.Type == Telegram.Bot.Types.Enums.MessageType.ChatMembersAdded) + { + + await this.Device.Send("Welcome you new members!\r\n\r\n" + e.Members.Select(a => a.FirstName + " " + a.LastName).Aggregate((a, b) => a + "\r\n" + b)); + + } + else if (e.Type == Telegram.Bot.Types.Enums.MessageType.ChatMemberLeft) + { + await this.Device.Send(e.Members.Select(a => a.FirstName + " " + a.LastName).Aggregate((a, b) => a + " and " + b) + " has left the group"); + + } + + } + + + + + } +}