Imports Globals.GlobalResources
Imports System.IO
Public Class Class1
Implements Global.Globals.Plgn
Private Win As main
Public Sub Config() Implements Globals.Plgn.Config
On Error Resume Next
Win.Show()
End Sub
Public ReadOnly Property Name As String Implements Globals.Plgn.Name
Get
Return "UserList - TizzyT"
End Get
End Property
Public Function ProcessMessage(InputMessage As Globals.GlobalResources.Message) As Boolean Implements Globals.Plgn.ProcessMessage
If Win.Running = False Then
Win.BotNick = InputMessage.BotNick
Win.Running = True
Win.GetChatters()
Win.UserListPollTimer.Enabled = True
End If
Return False
End Function
Public Sub New()
AddResource("UserList")
Win = New main
Win.UserListIndex = GetResourceIndexOfOrigin("UserList")
Win.Greeting = "Welcome <JOINED>!"
Win.UserListPollTimer.Interval = 10000
LoadConfig()
AddResourceElement(Win.UserListIndex, "List", "Moderators", New List(Of String))
AddResourceElement(Win.UserListIndex, "List", "Staff", New List(Of String))
AddResourceElement(Win.UserListIndex, "List", "Admins", New List(Of String))
AddResourceElement(Win.UserListIndex, "List", "Viewers", New List(Of String))
End Sub
Private Sub LoadConfig()
Load: If File.Exists(My.Application.Info.DirectoryPath & "\\Plugins\\UserList.ini") Then
Using setter As New StreamReader(My.Application.Info.DirectoryPath & "\\Plugins\\UserList.ini")
While setter.Peek <> -1
Dim line As String = setter.ReadLine.Trim
If line.StartsWith("Greet:") Then
line = line.Remove(0, 6).Trim
If line = String.Empty Then Win.Greeting = "Welcome <JOINED>!" Else Win.Greeting = line
ElseIf line.StartsWith("Interval:") Then
line = line.Remove(0, 9).Trim
If IsNumeric(line) Then Win.UserListPollTimer.Interval = CInt(line) Else Win.UserListPollTimer.Interval = 10000
End If
End While
End Using
Else
Using setter As New StreamWriter(My.Application.Info.DirectoryPath & "\\Plugins\\UserList.ini", False)
setter.WriteLine("Greet:Welcome <JOINED>!")
setter.WriteLine("Interval:10000")
setter.Flush()
End Using
GoTo Load
End If
End Sub
End Class
Imports Globals.GlobalResources
Imports System.IO
Imports System.Windows.Forms
Imports System.Drawing
Public Class main
Private GreetStarted As Integer = 0
Public Greeting As String = String.Empty
Public UserListIndex As Integer = -1
Public BotNick As String = Nothing
Public Running As Boolean = False
Public WithEvents UserListPollTimer As New System.Timers.Timer
Private Sub main_FormClosing(sender As Object, e As Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
e.Cancel = True
Me.Hide()
End Sub
Private Sub UserListPollTimer_Elapsed(sender As Object, e As Timers.ElapsedEventArgs) Handles UserListPollTimer.Elapsed
GetChatters()
End Sub
Private Function GetSource(ByVal url As String) As String
retry: On Error GoTo retry
Dim source As String = New System.Net.WebClient().DownloadString(url)
Return source
End Function
Public Sub GetChatters()
Dim sourceString As String = String.Empty
If Running Then
If ConnectionStatus() = False Then
GreetStarted = 0
Running = False
Exit Sub
End If
sourceString = GetSource("http://tmi.twitch.tv/group/user/" & GetCurrentChan(). _
Replace("#", String.Empty).Trim.ToLower & "/chatters").Replace("""", String.Empty)
Dim OldUsers As New List(Of String)
Dim NewUsers As New List(Of String)
sourceString = sourceString.Replace(vbCrLf, String.Empty)
sourceString = sourceString.Replace(vbCr, String.Empty)
sourceString = sourceString.Replace(vbLf, String.Empty)
sourceString = sourceString.Replace(" ", String.Empty)
Dim SourceParts() As String = sourceString.Split("[")
If GreetStarted Then
SyncLock SharedResources(UserListIndex).Resources
For i = 0 To 3
For Each User As String In SharedResources(UserListIndex).Resources(i).Value
OldUsers.Add(User)
Next
Next
End SyncLock
End If
For i = 0 To 3
Try
Dim newUSR As List(Of String) = SourceParts(i + 1).Split("]")(0).Split(",").ToList
For x = newUSR.Count - 1 To 0 Step -1
If newUSR(x).Trim = String.Empty Then newUSR.RemoveAt(x)
Next
SetResourceElement(UserListIndex, i, newUSR)
Catch ex As Exception
\'Handle if wanted
End Try
Next
If GreetStarted = 2 Then
If ActiveCB.Checked Then
SyncLock SharedResources(UserListIndex).Resources
For i = 0 To 3
For Each User As String In SharedResources(UserListIndex).Resources(i).Value
If Not User.Trim = String.Empty And Not User.Trim.ToLower = BotNick.Trim.ToLower Then NewUsers.Add(User)
Next
Next
End SyncLock
For Each User As String In OldUsers
Try
NewUsers.RemoveAt(NewUsers.IndexOf(User))
Catch ex As Exception
\'Handle if wanted
End Try
Next
Dim GreetUsers As String = String.Empty
If NewUsers.Count > 0 Then
For i = 0 To NewUsers.Count - 1
If i = 0 Then GreetUsers &= NewUsers(0) Else GreetUsers &= ", " & NewUsers(i)
Next
AddToSend("PRIVMSG " & GetCurrentChan() & " :" & Greeting.Replace("<JOINED>", GreetUsers))
End If
End If
Else
GreetStarted += 1
End If
RefreshUserList()
End If
End Sub
Public Sub SaveInfo()
Using setter As New StreamWriter(My.Application.Info.DirectoryPath & "\\Plugins\\UserList.ini", False)
setter.WriteLine("Greet:" & Greeting)
setter.WriteLine("Interval:" & UserListPollTimer.Interval)
setter.Flush()
End Using
End Sub
Public Delegate Sub _RefreshuserList()
Public Sub RefreshUserList()
If InvokeRequired Then
Invoke(New _RefreshuserList(AddressOf RefreshUserList))
Else
Dim UsersList As New List(Of String)
For i = 0 To 3
SyncLock SharedResources(UserListIndex).Resources
UsersList = SharedResources(UserListIndex).Resources(i).Value
End SyncLock
Select Case i
Case 0
If UsersList.Count > 0 Then
If ModsList.Items.Count > 0 Then
For User = ModsList.Items.Count - 1 To 0 Step -1
If Not UsersList.Contains(ModsList.Items(User)) Then
ModsList.Items.RemoveAt(User)
End If
Next
End If
For Each usr As String In UsersList
If Not ModsList.Items.Contains(usr) Then ModsList.Items.Add(usr)
Next
End If
Case 1
If UsersList.Count > 0 Then
If StaffList.Items.Count > 0 Then
For User = StaffList.Items.Count - 1 To 0 Step -1
If Not UsersList.Contains(StaffList.Items(User)) Then
StaffList.Items.RemoveAt(User)
End If
Next
End If
For Each usr As String In UsersList
If Not StaffList.Items.Contains(usr) Then StaffList.Items.Add(usr)
Next
End If
Case 2
If UsersList.Count > 0 Then
If AdminsList.Items.Count > 0 Then
For User = AdminsList.Items.Count - 1 To 0 Step -1
If Not UsersList.Contains(AdminsList.Items(User)) Then
AdminsList.Items.RemoveAt(User)
End If
Next
End If
For Each usr As String In UsersList
If Not AdminsList.Items.Contains(usr) Then AdminsList.Items.Add(usr)
Next
End If
Case 3
If UsersList.Count > 0 Then
If ViewersList.Items.Count > 0 Then
For User = ViewersList.Items.Count - 1 To 0 Step -1
If Not UsersList.Contains(ViewersList.Items(User)) Then
ViewersList.Items.RemoveAt(User)
End If
Next
End If
For Each usr As String In UsersList
If Not ViewersList.Items.Contains(usr) Then ViewersList.Items.Add(usr)
Next
End If
End Select
Next
End If
End Sub
Private Sub ModsList_DrawItem(sender As ListBox, e As DrawItemEventArgs) Handles ModsList.DrawItem, StaffList.DrawItem, AdminsList.DrawItem, ViewersList.DrawItem
If sender.Items.Count > 0 Then
On Error Resume Next
e.DrawBackground()
If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
e.Graphics.FillRectangle(Brushes.White, e.Bounds)
End If
Using b As New SolidBrush(Color.Black)
e.Graphics.DrawString(sender.GetItemText(sender.Items(e.Index)), e.Font, b, e.Bounds)
End Using
e.DrawFocusRectangle()
End If
End Sub
Private Sub PollTimerBtn_Click(sender As Button, e As EventArgs) Handles PollTimerBtn.Click
If sender.Text = "Config" Then
sender.Text = "Set"
PollTimerTxt.Enabled = True
Else
If PollTimerTxt.Text.Trim = "" Then
PollTimerTxt.Text = UserListPollTimer.Interval / 1000
PollTimerTxt.Enabled = False
sender.Text = "Config"
Else
If IsNumeric(PollTimerTxt.Text) Then
PollTimerTxt.Enabled = False
sender.Text = "Config"
UserListPollTimer.Interval = PollTimerTxt.Text.Trim * 1000
SaveInfo()
Else
PollTimerTxt.Text = UserListPollTimer.Interval / 1000
PollTimerTxt.Enabled = False
sender.Text = "Config"
End If
End If
End If
End Sub
Private Sub GreetCfgBtn_Click(sender As Object, e As EventArgs) Handles GreetCfgBtn.Click
If sender.Text = "Config" Then
sender.Text = "Set"
GreetCfgTxt.Enabled = True
Else
If GreetCfgTxt.Text.Trim = "" Then
GreetCfgTxt.Text = Greeting
GreetCfgTxt.Enabled = False
sender.Text = "Config"
Else
GreetCfgTxt.Enabled = False
sender.Text = "Config"
Greeting = GreetCfgTxt.Text.Trim
SaveInfo()
End If
End If
End Sub
Private Sub main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
GreetCfgTxt.Text = Greeting
PollTimerTxt.Text = UserListPollTimer.Interval / 1000
End Sub
End Class