document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. Imports Globals.GlobalResources
  2. Imports System.IO
  3. Public Class Class1
  4.     Implements Global.Globals.Plgn
  5.     Private Win As main
  6.     Public Sub Config() Implements Globals.Plgn.Config
  7.         On Error Resume Next
  8.         Win.Show()
  9.     End Sub
  10.     Public ReadOnly Property Name As String Implements Globals.Plgn.Name
  11.         Get
  12.             Return "UserList - TizzyT"
  13.         End Get
  14.     End Property
  15.     Public Function ProcessMessage(InputMessage As Globals.GlobalResources.Message) As Boolean Implements Globals.Plgn.ProcessMessage
  16.         If Win.Running = False Then
  17.             Win.BotNick = InputMessage.BotNick
  18.             Win.Running = True
  19.             Win.GetChatters()
  20.             Win.UserListPollTimer.Enabled = True
  21.         End If
  22.         Return False
  23.     End Function
  24.     Public Sub New()
  25.         AddResource("UserList")
  26.         Win = New main
  27.         Win.UserListIndex = GetResourceIndexOfOrigin("UserList")
  28.         Win.Greeting = "Welcome <JOINED>!"
  29.         Win.UserListPollTimer.Interval = 10000
  30.         LoadConfig()
  31.         AddResourceElement(Win.UserListIndex, "List", "Moderators", New List(Of String))
  32.         AddResourceElement(Win.UserListIndex, "List", "Staff", New List(Of String))
  33.         AddResourceElement(Win.UserListIndex, "List", "Admins", New List(Of String))
  34.         AddResourceElement(Win.UserListIndex, "List", "Viewers", New List(Of String))
  35.     End Sub
  36.     Private Sub LoadConfig()
  37. Load:   If File.Exists(My.Application.Info.DirectoryPath & "\\Plugins\\UserList.ini") Then
  38.             Using setter As New StreamReader(My.Application.Info.DirectoryPath & "\\Plugins\\UserList.ini")
  39.                 While setter.Peek <> -1
  40.                     Dim line As String = setter.ReadLine.Trim
  41.                     If line.StartsWith("Greet:") Then
  42.                         line = line.Remove(0, 6).Trim
  43.                         If line = String.Empty Then Win.Greeting = "Welcome <JOINED>!" Else Win.Greeting = line
  44.                     ElseIf line.StartsWith("Interval:") Then
  45.                         line = line.Remove(0, 9).Trim
  46.                         If IsNumeric(line) Then Win.UserListPollTimer.Interval = CInt(line) Else Win.UserListPollTimer.Interval = 10000
  47.                     End If
  48.                 End While
  49.             End Using
  50.         Else
  51.             Using setter As New StreamWriter(My.Application.Info.DirectoryPath & "\\Plugins\\UserList.ini", False)
  52.                 setter.WriteLine("Greet:Welcome <JOINED>!")
  53.                 setter.WriteLine("Interval:10000")
  54.                 setter.Flush()
  55.             End Using
  56.             GoTo Load
  57.         End If
  58.     End Sub
  59. End Class
  60.  
  61. Imports Globals.GlobalResources
  62. Imports System.IO
  63. Imports System.Windows.Forms
  64. Imports System.Drawing
  65. Public Class main
  66.     Private GreetStarted As Integer = 0
  67.     Public Greeting As String = String.Empty
  68.     Public UserListIndex As Integer = -1
  69.     Public BotNick As String = Nothing
  70.     Public Running As Boolean = False
  71.     Public WithEvents UserListPollTimer As New System.Timers.Timer
  72.     Private Sub main_FormClosing(sender As Object, e As Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
  73.         e.Cancel = True
  74.         Me.Hide()
  75.     End Sub
  76.     Private Sub UserListPollTimer_Elapsed(sender As Object, e As Timers.ElapsedEventArgs) Handles UserListPollTimer.Elapsed
  77.         GetChatters()
  78.     End Sub
  79.     Private Function GetSource(ByVal url As String) As String
  80. retry:  On Error GoTo retry
  81.         Dim source As String = New System.Net.WebClient().DownloadString(url)
  82.         Return source
  83.     End Function
  84.     Public Sub GetChatters()
  85.         Dim sourceString As String = String.Empty
  86.         If Running Then
  87.             If ConnectionStatus() = False Then
  88.                 GreetStarted = 0
  89.                 Running = False
  90.                 Exit Sub
  91.             End If
  92.             sourceString = GetSource("http://tmi.twitch.tv/group/user/" & GetCurrentChan(). _
  93.                      Replace("#", String.Empty).Trim.ToLower & "/chatters").Replace("""", String.Empty)
  94.             Dim OldUsers As New List(Of String)
  95.             Dim NewUsers As New List(Of String)
  96.             sourceString = sourceString.Replace(vbCrLf, String.Empty)
  97.             sourceString = sourceString.Replace(vbCr, String.Empty)
  98.             sourceString = sourceString.Replace(vbLf, String.Empty)
  99.             sourceString = sourceString.Replace(" ", String.Empty)
  100.             Dim SourceParts() As String = sourceString.Split("[")
  101.             If GreetStarted Then
  102.                 SyncLock SharedResources(UserListIndex).Resources
  103.                     For i = 0 To 3
  104.                         For Each User As String In SharedResources(UserListIndex).Resources(i).Value
  105.                             OldUsers.Add(User)
  106.                         Next
  107.                     Next
  108.                 End SyncLock
  109.             End If
  110.             For i = 0 To 3
  111.                 Try
  112.                     Dim newUSR As List(Of String) = SourceParts(i + 1).Split("]")(0).Split(",").ToList
  113.                     For x = newUSR.Count - 1 To 0 Step -1
  114.                         If newUSR(x).Trim = String.Empty Then newUSR.RemoveAt(x)
  115.                     Next
  116.                     SetResourceElement(UserListIndex, i, newUSR)
  117.                 Catch ex As Exception
  118.                     \'Handle if wanted
  119.                 End Try
  120.             Next
  121.             If GreetStarted = 2 Then
  122.                 If ActiveCB.Checked Then
  123.                     SyncLock SharedResources(UserListIndex).Resources
  124.                         For i = 0 To 3
  125.                             For Each User As String In SharedResources(UserListIndex).Resources(i).Value
  126.                                 If Not User.Trim = String.Empty And Not User.Trim.ToLower = BotNick.Trim.ToLower Then NewUsers.Add(User)
  127.                             Next
  128.                         Next
  129.                     End SyncLock
  130.                     For Each User As String In OldUsers
  131.                         Try
  132.                             NewUsers.RemoveAt(NewUsers.IndexOf(User))
  133.                         Catch ex As Exception
  134.                             \'Handle if wanted
  135.                         End Try
  136.                     Next
  137.                     Dim GreetUsers As String = String.Empty
  138.                     If NewUsers.Count > 0 Then
  139.                         For i = 0 To NewUsers.Count - 1
  140.                             If i = 0 Then GreetUsers &= NewUsers(0) Else GreetUsers &= ", " & NewUsers(i)
  141.                         Next
  142.                         AddToSend("PRIVMSG " & GetCurrentChan() & " :" & Greeting.Replace("<JOINED>", GreetUsers))
  143.                     End If
  144.                 End If
  145.             Else
  146.                 GreetStarted += 1
  147.             End If
  148.             RefreshUserList()
  149.         End If
  150.     End Sub
  151.     Public Sub SaveInfo()
  152.         Using setter As New StreamWriter(My.Application.Info.DirectoryPath & "\\Plugins\\UserList.ini", False)
  153.             setter.WriteLine("Greet:" & Greeting)
  154.             setter.WriteLine("Interval:" & UserListPollTimer.Interval)
  155.             setter.Flush()
  156.         End Using
  157.     End Sub
  158.     Public Delegate Sub _RefreshuserList()
  159.     Public Sub RefreshUserList()
  160.         If InvokeRequired Then
  161.             Invoke(New _RefreshuserList(AddressOf RefreshUserList))
  162.         Else
  163.             Dim UsersList As New List(Of String)
  164.             For i = 0 To 3
  165.                 SyncLock SharedResources(UserListIndex).Resources
  166.                     UsersList = SharedResources(UserListIndex).Resources(i).Value
  167.                 End SyncLock
  168.                 Select Case i
  169.                     Case 0
  170.                         If UsersList.Count > 0 Then
  171.                             If ModsList.Items.Count > 0 Then
  172.                                 For User = ModsList.Items.Count - 1 To 0 Step -1
  173.                                     If Not UsersList.Contains(ModsList.Items(User)) Then
  174.                                         ModsList.Items.RemoveAt(User)
  175.                                     End If
  176.                                 Next
  177.                             End If
  178.                             For Each usr As String In UsersList
  179.                                 If Not ModsList.Items.Contains(usr) Then ModsList.Items.Add(usr)
  180.                             Next
  181.                         End If
  182.                     Case 1
  183.                         If UsersList.Count > 0 Then
  184.                             If StaffList.Items.Count > 0 Then
  185.                                 For User = StaffList.Items.Count - 1 To 0 Step -1
  186.                                     If Not UsersList.Contains(StaffList.Items(User)) Then
  187.                                         StaffList.Items.RemoveAt(User)
  188.                                     End If
  189.                                 Next
  190.                             End If
  191.                             For Each usr As String In UsersList
  192.                                 If Not StaffList.Items.Contains(usr) Then StaffList.Items.Add(usr)
  193.                             Next
  194.                         End If
  195.                     Case 2
  196.                         If UsersList.Count > 0 Then
  197.                             If AdminsList.Items.Count > 0 Then
  198.                                 For User = AdminsList.Items.Count - 1 To 0 Step -1
  199.                                     If Not UsersList.Contains(AdminsList.Items(User)) Then
  200.                                         AdminsList.Items.RemoveAt(User)
  201.                                     End If
  202.                                 Next
  203.                             End If
  204.                             For Each usr As String In UsersList
  205.                                 If Not AdminsList.Items.Contains(usr) Then AdminsList.Items.Add(usr)
  206.                             Next
  207.                         End If
  208.                     Case 3
  209.                         If UsersList.Count > 0 Then
  210.                             If ViewersList.Items.Count > 0 Then
  211.                                 For User = ViewersList.Items.Count - 1 To 0 Step -1
  212.                                     If Not UsersList.Contains(ViewersList.Items(User)) Then
  213.                                         ViewersList.Items.RemoveAt(User)
  214.                                     End If
  215.                                 Next
  216.                             End If
  217.                             For Each usr As String In UsersList
  218.                                 If Not ViewersList.Items.Contains(usr) Then ViewersList.Items.Add(usr)
  219.                             Next
  220.                         End If
  221.                 End Select
  222.             Next
  223.         End If
  224.     End Sub
  225.     Private Sub ModsList_DrawItem(sender As ListBox, e As DrawItemEventArgs) Handles ModsList.DrawItem, StaffList.DrawItem, AdminsList.DrawItem, ViewersList.DrawItem
  226.         If sender.Items.Count > 0 Then
  227.             On Error Resume Next
  228.             e.DrawBackground()
  229.             If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
  230.                 e.Graphics.FillRectangle(Brushes.White, e.Bounds)
  231.             End If
  232.             Using b As New SolidBrush(Color.Black)
  233.                 e.Graphics.DrawString(sender.GetItemText(sender.Items(e.Index)), e.Font, b, e.Bounds)
  234.             End Using
  235.             e.DrawFocusRectangle()
  236.         End If
  237.     End Sub
  238.     Private Sub PollTimerBtn_Click(sender As Button, e As EventArgs) Handles PollTimerBtn.Click
  239.         If sender.Text = "Config" Then
  240.             sender.Text = "Set"
  241.             PollTimerTxt.Enabled = True
  242.         Else
  243.             If PollTimerTxt.Text.Trim = "" Then
  244.                 PollTimerTxt.Text = UserListPollTimer.Interval / 1000
  245.                 PollTimerTxt.Enabled = False
  246.                 sender.Text = "Config"
  247.             Else
  248.                 If IsNumeric(PollTimerTxt.Text) Then
  249.                     PollTimerTxt.Enabled = False
  250.                     sender.Text = "Config"
  251.                     UserListPollTimer.Interval = PollTimerTxt.Text.Trim * 1000
  252.                     SaveInfo()
  253.                 Else
  254.                     PollTimerTxt.Text = UserListPollTimer.Interval / 1000
  255.                     PollTimerTxt.Enabled = False
  256.                     sender.Text = "Config"
  257.                 End If
  258.             End If
  259.         End If
  260.     End Sub
  261.     Private Sub GreetCfgBtn_Click(sender As Object, e As EventArgs) Handles GreetCfgBtn.Click
  262.         If sender.Text = "Config" Then
  263.             sender.Text = "Set"
  264.             GreetCfgTxt.Enabled = True
  265.         Else
  266.             If GreetCfgTxt.Text.Trim = "" Then
  267.                 GreetCfgTxt.Text = Greeting
  268.                 GreetCfgTxt.Enabled = False
  269.                 sender.Text = "Config"
  270.             Else
  271.                 GreetCfgTxt.Enabled = False
  272.                 sender.Text = "Config"
  273.                 Greeting = GreetCfgTxt.Text.Trim
  274.                 SaveInfo()
  275.             End If
  276.         End If
  277.     End Sub
  278.     Private Sub main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  279.         GreetCfgTxt.Text = Greeting
  280.         PollTimerTxt.Text = UserListPollTimer.Interval / 1000
  281.     End Sub
  282. End Class
');