1707 lines
84 KiB
VB.net
1707 lines
84 KiB
VB.net
|
Imports SKYPE4COMLib
|
|||
|
Imports Newtonsoft
|
|||
|
Imports System.Text
|
|||
|
Imports System.Text.RegularExpressions
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Public Class Form1
|
|||
|
Dim versionstring As String = "v5.5.4 coriander"
|
|||
|
Dim welcomestring As String = "Skype Bot One " + versionstring + vbNewLine + "(c)2012-2016 moose_crap" + vbNewLine + "Prefix commands with !, e.g. '!help'"
|
|||
|
Dim WithEvents sk As New Skype
|
|||
|
Dim player As New System.Media.SoundPlayer
|
|||
|
|
|||
|
#If CONFIG = "Release" Then
|
|||
|
Dim whydir As String = "C:\apache\htdocs\images\why\"
|
|||
|
Dim linkfile As String = "C:\apache\htdocs\files\links.txt"
|
|||
|
Dim sounddir As String = "C:\saysounds\"
|
|||
|
Dim logdir As String = "C:\skypelogs\"
|
|||
|
Dim swfdir As String = "C:\apache\crazyfarmsexy\src\"
|
|||
|
Dim vlcpath As String = "C:\Program Files\VideoLAN\vlc-2.2.4\vlc.exe"
|
|||
|
#Else
|
|||
|
Dim whydir As String = "U:\apache\htdocs\images\why\"
|
|||
|
Dim linkfile As String = "links.txt"
|
|||
|
Dim sounddir As String = "U:\saysounds\"
|
|||
|
Dim logdir As String = "skypelogs"
|
|||
|
Dim swfdir As String = "U:\apache\crazyfarmsexy\src\"
|
|||
|
Dim vlcpath As String = "C:\Program Files (x86)\VideoLAN\vlc-2.2.4\vlc.exe"
|
|||
|
#End If
|
|||
|
|
|||
|
Private Declare Function SetFocus Lib "user32.dll" (ByVal hwnd As IntPtr) As IntPtr
|
|||
|
Dim twitchclientid As String = "fdbieswwkxtoyuttjqyuwgbgzx35kmd"
|
|||
|
Dim watchedstreams() As String = {"moosecrap", "craze42", "SpamminN", "tks_ftw", "Fredstonemason", "Pastafarian45"}
|
|||
|
Dim lastcall As ICall
|
|||
|
Dim chatlist As New List(Of String)
|
|||
|
Dim soundfrequency As Integer = 5
|
|||
|
Dim replydelay As Integer = 30
|
|||
|
Dim lastreply As Date
|
|||
|
Dim ammo, mechs, mechskills, modules, upgrades, weapons As New List(Of MechPart)
|
|||
|
Dim voicebox As New Speech.Synthesis.SpeechSynthesizer
|
|||
|
Dim goldarblob As String
|
|||
|
'Dim WithEvents ears As New System.Speech.Recognition.SpeechRecognizer
|
|||
|
Dim banlist As New List(Of String)
|
|||
|
Dim mlabready As Boolean = False
|
|||
|
Dim lasterror As Exception
|
|||
|
Dim lasterrormsg As String
|
|||
|
Dim limitlist As New List(Of lastmsg)
|
|||
|
Dim commonwords() As String = {"the", "of", "to", "and", "a", "in", "is", "it", "you", "that", "he", "was", "for", "on", "are", "with", "as", "i", "his", "they", "be", "at", "one", "have", "this", "from", "or", "had", "by", "hot", "but", "some", "what", "there", "we", "can", "out", "other", "were", "all", "your", "when", "up", "use", "word", "how", "said", "an", "each", "she", "which", "do", "their", "time", "if", "will", "way", "about", "many", "then", "them", "would", "write", "like", "so", "these", "her", "long", "make", "thing", "see", "him", "two", "has", "look", "more", "day", "could", "go", "come", "did", "my", "sound", "no", "most", "number", "who", "over", "know", "water", "than", "call", "first", "people", "may", "down", "side", "been", "now", "find", "any", "new", "work", "part", "take", "get", "place", "made", "live", "where", "after", "back", "little", "only", "round", "man", "year", "came", "show", "every", "good", "me", "give", "our", "under", "got"}
|
|||
|
Dim fortunes() As String = {"Bad Luck", "Average Luck", "Good Luck", "Excellent Luck", "Reply hazy, try again", "Godly Luck",
|
|||
|
"Very Bad Luck", "Outlook good", "Better not tell you now", "You will meet a dark handsome stranger",
|
|||
|
"キタ━━━━━━(゚∀゚)━━━━━━ !!!!",
|
|||
|
"( ´_ゝ`)フーン", "Good news will come to you by mail"}
|
|||
|
Dim vlcprocess As Process
|
|||
|
Dim sw As New Diagnostics.Stopwatch
|
|||
|
Dim streams As New List(Of streamtimer)
|
|||
|
|
|||
|
Private Class lastmsg
|
|||
|
Property handle As String
|
|||
|
Property time As DateTime
|
|||
|
End Class
|
|||
|
Private Class MechPart
|
|||
|
Property id As Integer
|
|||
|
Property name As String
|
|||
|
End Class
|
|||
|
|
|||
|
Private Class IntString
|
|||
|
Property int As Long
|
|||
|
Property str As String
|
|||
|
End Class
|
|||
|
Private Class Sale
|
|||
|
Property Name As String
|
|||
|
Property Price As String
|
|||
|
Property Discount As String
|
|||
|
End Class
|
|||
|
Private Class streamtimer
|
|||
|
Property name As String
|
|||
|
Property live As Boolean = False
|
|||
|
Property lastlive As DateTime
|
|||
|
Public Sub New(n As String)
|
|||
|
Me.name = n
|
|||
|
End Sub
|
|||
|
End Class
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
|
|||
|
|
|||
|
'PlayYouTube("RaCodgL9cvk", "1:04")
|
|||
|
|
|||
|
'quad.LoadFile("data.txt")
|
|||
|
'CalcMath("(1000)/((2016-2007)*(52*40))")
|
|||
|
|
|||
|
'LoadMechlab()
|
|||
|
Randomize()
|
|||
|
For Each x In watchedstreams
|
|||
|
streams.Add(New streamtimer(x))
|
|||
|
Next
|
|||
|
Label1.Text = "Skype: " + sk.Client.IsRunning.ToString
|
|||
|
voicebox.SelectVoiceByHints(Speech.Synthesis.VoiceGender.Female, Speech.Synthesis.VoiceAge.Teen)
|
|||
|
voicebox.SetOutputToDefaultAudioDevice()
|
|||
|
'ears.LoadGrammar(New System.Speech.Recognition.DictationGrammar)
|
|||
|
End Sub
|
|||
|
|
|||
|
Private Sub msg(ByVal pMessage As ChatMessage, ByVal Status As TChatMessageStatus) Handles sk.MessageStatus
|
|||
|
Try
|
|||
|
|
|||
|
If pMessage.Chat.Name = "#moose_crap/$craze42;9b4dd08f6cb55896" Then
|
|||
|
goldarblob = pMessage.Chat.Blob
|
|||
|
If CheckBoxTwitch.Checked Then
|
|||
|
twitchtimer.Enabled = True
|
|||
|
End If
|
|||
|
End If
|
|||
|
|
|||
|
'no double posts
|
|||
|
If Status = TChatMessageStatus.cmsRead Or Status = TChatMessageStatus.cmsSending Or Status = TChatMessageStatus.cmsUnknown Then
|
|||
|
Exit Sub
|
|||
|
End If
|
|||
|
|
|||
|
pMessage.Seen = True
|
|||
|
|
|||
|
'call check, temp=true means in call
|
|||
|
Dim temp As Boolean = False
|
|||
|
If sk.ActiveCalls.Count > 0 Then
|
|||
|
If sk.ActiveCalls.Item(1).PartnerHandle = pMessage.Sender.Handle Then
|
|||
|
temp = True
|
|||
|
End If
|
|||
|
If Not temp Then
|
|||
|
For Each x In sk.ActiveCalls.Item(1).Participants
|
|||
|
If CType(x, IParticipant).Handle = pMessage.Sender.Handle Then
|
|||
|
temp = True
|
|||
|
End If
|
|||
|
Next
|
|||
|
End If
|
|||
|
End If
|
|||
|
If pMessage.Sender.Handle = "moose_crap" Or pMessage.Sender.Handle = sk.CurrentUserHandle Then
|
|||
|
temp = True
|
|||
|
End If
|
|||
|
|
|||
|
'new chat handler
|
|||
|
If Not chatlist.Contains(pMessage.ChatName) Then
|
|||
|
log("", "Joined chat " + pMessage.Chat.FriendlyName)
|
|||
|
pMessage.Chat.SendMessage(welcomestring)
|
|||
|
chatlist.Add(pMessage.ChatName)
|
|||
|
End If
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
'logger
|
|||
|
Dim cleanedchatname As String = pMessage.ChatName.Replace("/", ".")
|
|||
|
FileIO.FileSystem.WriteAllText(logdir + cleanedchatname + ".txt", pMessage.Timestamp.ToString("[dd MMM yyyy HH:mm:ss] ") + pMessage.FromHandle + " > " + pMessage.Body + vbNewLine, True)
|
|||
|
|
|||
|
|
|||
|
'admin only commands
|
|||
|
If pMessage.Sender.Handle = "moose_crap" Or pMessage.Sender.Handle = sk.CurrentUserHandle Then
|
|||
|
Select Case pMessage.Body
|
|||
|
Case "!why on"
|
|||
|
CheckBoxWhy.Checked = True
|
|||
|
Case "!why off"
|
|||
|
CheckBoxWhy.Checked = False
|
|||
|
Case "!links on"
|
|||
|
CheckBoxLink.Checked = True
|
|||
|
Case "!links off"
|
|||
|
CheckBoxLink.Checked = False
|
|||
|
Case "!sounds on"
|
|||
|
CheckBoxSounds.Checked = True
|
|||
|
Case "!sounds off"
|
|||
|
CheckBoxSounds.Checked = False
|
|||
|
Case "!youtube on"
|
|||
|
CheckBoxYoutube.Checked = True
|
|||
|
Case "!youtube off"
|
|||
|
CheckBoxYoutube.Checked = False
|
|||
|
Case "!hueh on"
|
|||
|
CheckBoxHueh.Checked = True
|
|||
|
Case "!hueh off"
|
|||
|
CheckBoxHueh.Checked = False
|
|||
|
Case "!limit on"
|
|||
|
CheckBoxLimit.Checked = True
|
|||
|
Case "!limit off"
|
|||
|
CheckBoxLimit.Checked = False
|
|||
|
Case "!tts on"
|
|||
|
CheckBoxTTS.Checked = True
|
|||
|
Case "!tts off"
|
|||
|
CheckBoxTTS.Checked = False
|
|||
|
Case "!stt on"
|
|||
|
CheckBoxReply.Checked = True
|
|||
|
Case "!stt off"
|
|||
|
CheckBoxReply.Checked = False
|
|||
|
Case "!error on"
|
|||
|
CheckBoxError.Checked = True
|
|||
|
Case "!error off"
|
|||
|
CheckBoxError.Checked = False
|
|||
|
Case "!weather on"
|
|||
|
CheckBoxWeather.Checked = True
|
|||
|
Case "!weather off"
|
|||
|
CheckBoxWeather.Checked = False
|
|||
|
Case "!news on"
|
|||
|
CheckBoxNews.Checked = True
|
|||
|
Case "!news off"
|
|||
|
CheckBoxNews.Checked = False
|
|||
|
Case "!reply on"
|
|||
|
CheckBoxReply.Checked = True
|
|||
|
Case "!reply off"
|
|||
|
CheckBoxReply.Checked = False
|
|||
|
Case "!voice on"
|
|||
|
CheckBoxVoice.Checked = True
|
|||
|
Case "!voice off"
|
|||
|
CheckBoxVoice.Checked = False
|
|||
|
Case "!sales on"
|
|||
|
CheckBoxMath.Checked = True
|
|||
|
Case "!sales off"
|
|||
|
CheckBoxMath.Checked = False
|
|||
|
Case "!twtich on"
|
|||
|
CheckBoxTwitch.Checked = True
|
|||
|
Case "!twitch off"
|
|||
|
CheckBoxTwitch.Checked = False
|
|||
|
Case "!swf on"
|
|||
|
CheckBoxSwf.Checked = True
|
|||
|
Case "!swf off"
|
|||
|
CheckBoxSwf.Checked = False
|
|||
|
Case "!hangup"
|
|||
|
Try
|
|||
|
For Each x In sk.ActiveCalls
|
|||
|
CType(x, ICall).Finish()
|
|||
|
Next
|
|||
|
Catch
|
|||
|
End Try
|
|||
|
Case "!pickup"
|
|||
|
lastcall.Join(lastcall.Id)
|
|||
|
Case "~"
|
|||
|
player.Stop()
|
|||
|
voicebox.SpeakAsyncCancelAll()
|
|||
|
If Not vlcprocess Is Nothing AndAlso Not vlcprocess.HasExited Then
|
|||
|
log("kill pid", vlcprocess.Id.ToString)
|
|||
|
vlcprocess.Kill()
|
|||
|
vlcprocess.WaitForExit(1000)
|
|||
|
End If
|
|||
|
Case "~tts"
|
|||
|
voicebox.SpeakAsyncCancelAll()
|
|||
|
Case "~sounds"
|
|||
|
player.Stop()
|
|||
|
Case "!error"
|
|||
|
Try
|
|||
|
If lasterror Is Nothing Then
|
|||
|
pMessage.Chat.SendMessage("No error to report")
|
|||
|
Else
|
|||
|
pMessage.Chat.SendMessage(lasterrormsg + vbNewLine + vbNewLine + lasterror.ToString + vbNewLine + lasterror.Data.ToString)
|
|||
|
End If
|
|||
|
Catch ex As Exception
|
|||
|
pMessage.Chat.SendMessage(ex.ToString)
|
|||
|
End Try
|
|||
|
Case "!list"
|
|||
|
Dim retstr As String = ""
|
|||
|
Dim i As Integer = 1
|
|||
|
For Each x As IChat In sk.RecentChats
|
|||
|
retstr += i.ToString + " ) " + (If(x.Topic = "", x.FriendlyName, x.Topic)) + vbNewLine
|
|||
|
i += 1
|
|||
|
Next
|
|||
|
pMessage.Chat.SendMessage(retstr)
|
|||
|
End Select
|
|||
|
If pMessage.Body.StartsWith("!override") Then
|
|||
|
If FileIO.FileSystem.FileExists(sounddir + pMessage.Body.Split(" ")(1) + ".wav") Then
|
|||
|
CheckBoxSounds.Checked = False
|
|||
|
player.SoundLocation = sounddir + pMessage.Body.Split(" ")(1) + ".wav"
|
|||
|
player.Load()
|
|||
|
player.Play()
|
|||
|
End If
|
|||
|
End If
|
|||
|
If pMessage.Body.StartsWith("!ban") And pMessage.Body.Contains(" ") Then
|
|||
|
banlist.Add(pMessage.Body.Substring(pMessage.Body.IndexOf(" ") + 1))
|
|||
|
|
|||
|
End If
|
|||
|
If pMessage.Body.StartsWith("!unban") And pMessage.Body.Contains(" ") Then
|
|||
|
banlist.Remove(pMessage.Body.Substring(pMessage.Body.IndexOf(" ") + 1))
|
|||
|
End If
|
|||
|
If pMessage.Body.StartsWith("!limit") And pMessage.Body.Contains(" ") Then
|
|||
|
Try
|
|||
|
soundfrequency = CInt(pMessage.Body.Substring(pMessage.Body.IndexOf(" ")))
|
|||
|
Catch ex As Exception
|
|||
|
|
|||
|
End Try
|
|||
|
End If
|
|||
|
If pMessage.Body.StartsWith("!delay") And pMessage.Body.Contains(" ") Then
|
|||
|
Try
|
|||
|
replydelay = CInt(pMessage.Body.Substring(pMessage.Body.IndexOf(" ")))
|
|||
|
Catch ex As Exception
|
|||
|
|
|||
|
End Try
|
|||
|
End If
|
|||
|
If pMessage.Body.StartsWith("!say") Then
|
|||
|
sk.RecentChats(CInt(pMessage.Body.Remove(0, 5).Split(" ")(0))).SendMessage(pMessage.Body.Remove(0, 5).Remove(0, pMessage.Body.Remove(0, 5).IndexOf(" ")))
|
|||
|
End If
|
|||
|
|
|||
|
'If pMessage.Body.StartsWith("!messages") Then
|
|||
|
' Dim tempchat As IChat = sk.RecentChats(pMessage.Body.Remove(0, 10).Split(" ")(0))
|
|||
|
' Dim retstr As String
|
|||
|
' retstr += tempchat.Topic + vbNewLine + vbNewLine
|
|||
|
|
|||
|
'End If
|
|||
|
|
|||
|
End If
|
|||
|
|
|||
|
|
|||
|
''niggermode bot
|
|||
|
'If CheckBoxNigger.Checked And pMessage.Sender.Handle <> "skype.radio.lulz" And pMessage.IsEditable Then
|
|||
|
' Randomize()
|
|||
|
' Dim niggeredstring As String = ""
|
|||
|
' Dim splitstr() As String = pMessage.Body.Split(" ")
|
|||
|
' For Each x In splitstr
|
|||
|
' If Rnd() < 0.2 Then
|
|||
|
' x = "nigger"
|
|||
|
' End If
|
|||
|
' niggeredstring += x + " "
|
|||
|
' Next
|
|||
|
' pMessage.Body = niggeredstring
|
|||
|
'End If
|
|||
|
|
|||
|
|
|||
|
'linkbot, hardcoded now
|
|||
|
If CheckBoxLink.Checked And pMessage.Chat.Name = "#moose_crap/$craze42;9b4dd08f6cb55896" Then
|
|||
|
If (pMessage.Body.Contains("://") Or pMessage.Body.Contains("www.")) And Not pMessage.Sender.Handle = sk.CurrentUser.Handle Then
|
|||
|
FileIO.FileSystem.WriteAllText(linkfile, pMessage.Timestamp.ToString("dd MMM yyyy HH:mm:ss ") + pMessage.Sender.FullName + " > " + pMessage.Body + vbCrLf, True)
|
|||
|
End If
|
|||
|
End If
|
|||
|
|
|||
|
|
|||
|
'==Everything below this line ban-restricted==
|
|||
|
If banlist.Contains(pMessage.Sender.Handle) Then
|
|||
|
Exit Sub
|
|||
|
End If
|
|||
|
|
|||
|
If pMessage.Sender.Handle <> sk.CurrentUserHandle And CheckBoxVoice.Checked Then
|
|||
|
quad.AddString(pMessage.Body)
|
|||
|
If Regex.IsMatch(pMessage.Body, "\b(skype)?bot\b", RegexOptions.IgnoreCase) Then
|
|||
|
If Rnd() > 0.8 Then
|
|||
|
pMessage.Chat.SendMessage(quad.MakeSentence(pMessage.Body))
|
|||
|
Else
|
|||
|
pMessage.Chat.SendMessage(quad.MakeSentence)
|
|||
|
End If
|
|||
|
|
|||
|
|
|||
|
End If
|
|||
|
End If
|
|||
|
'proness
|
|||
|
If pMessage.ChatName = "#moose_crap/$craze42;9b4dd08f6cb55896" And pMessage.Sender.Handle <> sk.CurrentUserHandle Then
|
|||
|
ReplyToMessage(pMessage)
|
|||
|
|
|||
|
'Dim body As String = pMessage.Body
|
|||
|
'body.Replace("weegee", "!weegee")
|
|||
|
'body.Replace("Weegee", "!Weegee")
|
|||
|
'body.Replace("WEEGEE", "!WEEGEE")
|
|||
|
'body.Replace("robert", "!robert")
|
|||
|
'body.Replace("Robert", "!Robert")
|
|||
|
'body.Replace("ROBERT", "!ROBERT")
|
|||
|
'body.Replace("rob ", "!rob ")
|
|||
|
'body.Replace("Rob ", "!Rob ")
|
|||
|
'body.Replace("ROB ", "!ROB ")
|
|||
|
'If body <> pMessage.Body Then
|
|||
|
' pMessage.Body = body
|
|||
|
'End If
|
|||
|
End If
|
|||
|
|
|||
|
'everyones meta commands
|
|||
|
If CanPlay(pMessage.Sender.Handle) Then
|
|||
|
Select Case pMessage.Body
|
|||
|
|
|||
|
Case "!fuckeveryoneelse"
|
|||
|
If pMessage.ChatName = "#moose_crap/$craze42;9b4dd08f6cb55896" Then
|
|||
|
player.SoundLocation = "C:\saysounds\goldar.wav"
|
|||
|
player.Load()
|
|||
|
player.Play()
|
|||
|
Threading.Thread.Sleep(2000)
|
|||
|
'For Each X In sk.Chats
|
|||
|
' If CType(X, IChat).Name <> "#moose_crap/$craze42;9b4dd08f6cb55896" Then
|
|||
|
' CType(X, IChat).SendMessage("I MUST GO MY PEOPLE NEED ME")
|
|||
|
' CType(X, IChat).Leave()
|
|||
|
' End If
|
|||
|
'Next
|
|||
|
For Each s In sk.ActiveCalls
|
|||
|
CType(s, ICall).Finish()
|
|||
|
Next
|
|||
|
'sk.Chats(0).SendMessage("MY BODY IS READY")
|
|||
|
End If
|
|||
|
Case "!status"
|
|||
|
pMessage.Chat.SendMessage("Why bot: " + CheckBoxWhy.Checked.ToString + vbNewLine +
|
|||
|
"Link grabber: " + CheckBoxLink.Checked.ToString + vbNewLine +
|
|||
|
"Saysounds: " + CheckBoxSounds.Checked.ToString + vbNewLine +
|
|||
|
"YouTube: " + CheckBoxYoutube.Checked.ToString + vbNewLine +
|
|||
|
"HuehBot: " + CheckBoxHueh.Checked.ToString + vbNewLine +
|
|||
|
"Sound limiter: " + CheckBoxLimit.Checked.ToString + vbNewLine +
|
|||
|
"MechBot: " + CheckBoxMech.Checked.ToString + vbNewLine +
|
|||
|
"TTS: " + CheckBoxTTS.Checked.ToString + vbNewLine +
|
|||
|
"Replybot: " + CheckBoxReply.Checked.ToString + vbNewLine +
|
|||
|
"Error Reporting: " + CheckBoxError.Checked.ToString + vbNewLine +
|
|||
|
"Weather: " + CheckBoxWeather.Checked.ToString + vbNewLine +
|
|||
|
"Skynet: " + CheckBoxVoice.Checked.ToString + vbNewLine +
|
|||
|
"News: " + CheckBoxNews.Checked.ToString + vbNewLine +
|
|||
|
"Steam sales: " + CheckBoxMath.Checked.ToString + vbNewLine +
|
|||
|
"Twitch notifications: " + CheckBoxTwitch.Checked.ToString + vbNewLine +
|
|||
|
"Swfbot: " + CheckBoxSwf.Checked.ToString + vbNewLine +
|
|||
|
"Calls: " + sk.ActiveCalls.Count.ToString)
|
|||
|
|
|||
|
Case "!help"
|
|||
|
pMessage.Chat.SendMessage("Current public commands are:" & vbNewLine &
|
|||
|
"!status View current status" & vbNewLine &
|
|||
|
"!help Display this message" & vbNewLine &
|
|||
|
"~[sounds|tts|youtube] Stop sounds" & vbNewLine &
|
|||
|
"!play [url/id/video search] Play YouTube video" & vbNewLine &
|
|||
|
"!speak [text] Text to speech" & vbNewLine &
|
|||
|
"!banlist View ban list" & vbNewLine &
|
|||
|
"!weather Weather forecast (NOAA)" & vbNewLine &
|
|||
|
"!eweather Extended forecast" & vbNewLine &
|
|||
|
"!news News (drudgereport.com)" & vbNewLine &
|
|||
|
"!reloadmechlab Reload mechlab data (use if it's not working)" & vbNewLine &
|
|||
|
"!newsounds List new sounds" & vbNewLine &
|
|||
|
"!bingo SNB countdown" & vbNewLine &
|
|||
|
"!sales Steam sales" & vbNewLine &
|
|||
|
"!start/!stop/!time Run timer" & vbNewLine &
|
|||
|
"!fortune Get your fortune" & vbNewLine &
|
|||
|
"!motd" & vbNewLine &
|
|||
|
"!version")
|
|||
|
Case "!banlist"
|
|||
|
Dim s As String = "Banned users:" + vbNewLine
|
|||
|
For Each x In banlist
|
|||
|
s += x
|
|||
|
s += vbNewLine
|
|||
|
Next
|
|||
|
pMessage.Chat.SendMessage(s)
|
|||
|
Case "!weather"
|
|||
|
If CheckBoxWeather.Checked Then
|
|||
|
Dim wc As New Net.WebClient
|
|||
|
wc.Headers.Add("User-Agent: Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0")
|
|||
|
Dim xmlstr As String = wc.DownloadString("http://forecast.weather.gov/MapClick.php?lat=47.80948&lon=-122.26049423217773&unit=0&lg=english&FcstType=dwml")
|
|||
|
Dim xdoc As New Xml.XmlDocument
|
|||
|
xdoc.LoadXml(xmlstr)
|
|||
|
Dim dlist As New List(Of String)
|
|||
|
Dim wlist As New List(Of String)
|
|||
|
Dim retstr As String = ""
|
|||
|
Dim typestr As String = xdoc.SelectSingleNode("dwml/data/parameters/wordedForecast").Attributes("time-layout").Value
|
|||
|
For Each x In xdoc.SelectNodes("dwml/data/time-layout[layout-key='" + typestr + "']/start-valid-time")
|
|||
|
dlist.Add(CType(x, Xml.XmlNode).Attributes("period-name").Value)
|
|||
|
Next
|
|||
|
For Each x As Xml.XmlNode In xdoc.SelectNodes("dwml/data/parameters/wordedForecast/text")
|
|||
|
wlist.Add(x.InnerText)
|
|||
|
Next
|
|||
|
For i = 0 To 6
|
|||
|
If Not dlist(i).Contains("Night") Then
|
|||
|
retstr += dlist(i) + ": " + wlist(i) + vbNewLine + vbNewLine
|
|||
|
End If
|
|||
|
Next
|
|||
|
pMessage.Chat.SendMessage(retstr)
|
|||
|
End If
|
|||
|
Case "!eweather"
|
|||
|
If CheckBoxWeather.Checked Then
|
|||
|
Dim wc As New Net.WebClient
|
|||
|
wc.Headers.Add("User-Agent: Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0")
|
|||
|
Dim xmlstr As String = wc.DownloadString("http://forecast.weather.gov/MapClick.php?lat=47.80948&lon=-122.26049423217773&unit=0&lg=english&FcstType=dwml")
|
|||
|
Dim xdoc As New Xml.XmlDocument
|
|||
|
xdoc.LoadXml(xmlstr)
|
|||
|
Dim dlist As New List(Of String)
|
|||
|
Dim wlist As New List(Of String)
|
|||
|
Dim retstr As String = ""
|
|||
|
Dim typestr As String = xdoc.SelectSingleNode("dwml/data/parameters/wordedForecast").Attributes("time-layout").Value
|
|||
|
For Each x In xdoc.SelectNodes("dwml/data/time-layout[layout-key='" + typestr + "']/start-valid-time")
|
|||
|
dlist.Add(CType(x, Xml.XmlNode).Attributes("period-name").Value)
|
|||
|
Next
|
|||
|
For Each x As Xml.XmlNode In xdoc.SelectNodes("dwml/data/parameters/wordedForecast/text")
|
|||
|
wlist.Add(x.InnerText)
|
|||
|
Next
|
|||
|
For i = 0 To dlist.Count - 1
|
|||
|
retstr += dlist(i) + ": " + wlist(i) + vbNewLine + vbNewLine
|
|||
|
Next
|
|||
|
pMessage.Chat.SendMessage(retstr)
|
|||
|
End If
|
|||
|
Case "!news"
|
|||
|
If CheckBoxNews.Checked Then
|
|||
|
Dim drudge As String
|
|||
|
Dim wc As New Net.WebClient
|
|||
|
drudge = wc.DownloadString("http://www.drudgereport.com/")
|
|||
|
Dim splitstr() As String = drudge.Split(vbCrLf)
|
|||
|
drudge = splitstr.First(Function(x) x.Contains("<! MAIN HEADLINE>"))
|
|||
|
Dim link As String = drudge.Substring(drudge.IndexOf("HREF=") + 6, drudge.LastIndexOf("""") - (drudge.IndexOf("HREF=") + 6))
|
|||
|
Dim title As String = drudge.Substring(drudge.LastIndexOf(""">") + 2, drudge.LastIndexOf("</A>") - (drudge.LastIndexOf(""">")) - 2)
|
|||
|
pMessage.Chat.SendMessage(title + vbNewLine + link)
|
|||
|
End If
|
|||
|
Case "!reloadmechlab"
|
|||
|
If CheckBoxMech.Checked Then
|
|||
|
LoadMechlab()
|
|||
|
pMessage.Chat.SendMessage("Mechlab reloaded: " + ammo.Count.ToString + " " + mechs.Count.ToString + " " + mechskills.Count.ToString + " " + modules.Count.ToString + " " + upgrades.Count.ToString + " " + weapons.Count.ToString)
|
|||
|
End If
|
|||
|
Case "!newsounds"
|
|||
|
Dim files As New List(Of IntString)
|
|||
|
Dim fi As IO.FileInfo
|
|||
|
For Each x In FileIO.FileSystem.GetFiles(sounddir)
|
|||
|
fi = FileIO.FileSystem.GetFileInfo(x)
|
|||
|
Dim intstr As New IntString
|
|||
|
intstr.int = fi.LastWriteTimeUtc.Ticks
|
|||
|
intstr.str = fi.Name.Split({".wav"}, StringSplitOptions.None)(0)
|
|||
|
files.Add(intstr)
|
|||
|
Next
|
|||
|
files.Sort(Function(a As IntString, b As IntString) a.int.CompareTo(b.int))
|
|||
|
Dim retstr As String = "New sounds:" + vbNewLine
|
|||
|
For i = files.Count - 1 To files.Count - 11 Step -1
|
|||
|
retstr += files(i).str + vbNewLine
|
|||
|
Next
|
|||
|
pMessage.Chat.SendMessage(retstr)
|
|||
|
|
|||
|
|
|||
|
Case "!version"
|
|||
|
pMessage.Chat.SendMessage(versionstring + vbNewLine + "Build date: " + FileIO.FileSystem.GetFileInfo("SKYPE BOT ONE.exe").LastWriteTime.ToString("MM\/dd\/yyyy"))
|
|||
|
|
|||
|
Case "!motd"
|
|||
|
pMessage.Chat.SendMessage("( ͡° ͜ʖ ͡°)")
|
|||
|
|
|||
|
Case "!bingo"
|
|||
|
Dim nextsaturday As Date = Now
|
|||
|
While nextsaturday.DayOfWeek <> DayOfWeek.Saturday
|
|||
|
nextsaturday = nextsaturday.AddDays(1)
|
|||
|
End While
|
|||
|
Dim bingostarttime As New Date(nextsaturday.Year, nextsaturday.Month, nextsaturday.Day, 18, 30, 0, 0)
|
|||
|
If ((Now - bingostarttime).TotalHours < 4) And ((Now - bingostarttime).TotalHours >= 0) Then
|
|||
|
'bingo in progress
|
|||
|
pMessage.Chat.SendMessage("ITS HAPPENING (yn)")
|
|||
|
|
|||
|
Else
|
|||
|
pMessage.Chat.SendMessage((bingostarttime - Now).ToString("d' days 'h' hours 'm' minutes 's' seconds until bingo!'"))
|
|||
|
|
|||
|
End If
|
|||
|
|
|||
|
Case "!sales"
|
|||
|
'If CheckBoxMath.Checked Then
|
|||
|
' Dim steampage As String
|
|||
|
' Dim wc As New Net.WebClient
|
|||
|
' wc.Encoding = Encoding.UTF8
|
|||
|
' steampage = wc.DownloadString("http://store.steampowered.com/mobilestorefront")
|
|||
|
' 'dailydeals, comchoice, flashsales,voting
|
|||
|
' Dim unixtimes As New List(Of Date)
|
|||
|
' For Each x As Match In Regex.Matches(steampage, "VCountdown\(\s(\d+)")
|
|||
|
' unixtimes.Add(New Date(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) + New TimeSpan(0, 0, CInt(x.Groups(1).Value)))
|
|||
|
' Next
|
|||
|
|
|||
|
' Dim names As New List(Of String)
|
|||
|
' Dim percents As New List(Of String)
|
|||
|
' Dim prices As New List(Of String)
|
|||
|
' For Each x As Match In Regex.Matches(steampage, "alt=""(.+)""")
|
|||
|
' names.Add(x.Groups(1).Value)
|
|||
|
' Next
|
|||
|
' For Each x As Match In Regex.Matches(steampage, "<div class=""discountPercent"">(.+?)</div>")
|
|||
|
' percents.Add(x.Groups(1).Value)
|
|||
|
' Next
|
|||
|
' For Each x As Match In Regex.Matches(steampage, "<div class=""discountFinalPrice"">(.+?)</div>")
|
|||
|
' prices.Add(x.Groups(1).Value.Replace("$", "$"))
|
|||
|
' Next
|
|||
|
' For Each x As Match In Regex.Matches(steampage, "<p class=""tableViewCellMainText"">\r\n\s+(.+?)\s+?</p>")
|
|||
|
' names.Add(x.Groups(1).Value)
|
|||
|
' Next
|
|||
|
' Dim dailydeals(8) As Sale
|
|||
|
' For i = 0 To 8
|
|||
|
' Dim s As New Sale
|
|||
|
' s.Name = names(i)
|
|||
|
' s.Discount = percents(i)
|
|||
|
' s.Price = prices(i)
|
|||
|
' dailydeals(i) = s
|
|||
|
' Next
|
|||
|
' Array.Sort(dailydeals, Function(a As Sale, b As Sale) a.Name.CompareTo(b.Name))
|
|||
|
|
|||
|
' Dim communitychoice As String = Regex.Match(steampage, "<span class=""winnerText"">(.+?)</span>").Groups(1).Value
|
|||
|
|
|||
|
' Dim flashsales(3) As Sale
|
|||
|
' For i = 0 To 3
|
|||
|
' Dim s As New Sale
|
|||
|
' s.Name = names(i + 9)
|
|||
|
' s.Discount = percents(i + 9)
|
|||
|
' s.Price = prices(i + 9)
|
|||
|
' flashsales(i) = s
|
|||
|
' Next
|
|||
|
' Array.Sort(flashsales, Function(a As Sale, b As Sale) a.Name.CompareTo(b.Name))
|
|||
|
|
|||
|
' Dim yesterdaydeals(8) As Sale
|
|||
|
' For i = 0 To 8
|
|||
|
' Dim s As New Sale
|
|||
|
' s.Name = names(i + 13)
|
|||
|
' s.Discount = percents(i + 13)
|
|||
|
' s.Price = prices(i + 13)
|
|||
|
' yesterdaydeals(i) = s
|
|||
|
' Next
|
|||
|
' Array.Sort(yesterdaydeals, Function(a As Sale, b As Sale) a.Name.CompareTo(b.Name))
|
|||
|
|
|||
|
' Dim retstring As New StringBuilder
|
|||
|
' retstring.AppendLine("Daily Deals (" & (Date.UtcNow - unixtimes(0)).ToString("h\:mm\:ss") & ") :")
|
|||
|
' For Each x In dailydeals
|
|||
|
' retstring.AppendLine(" " & x.Name & " - " & x.Price & " [" & x.Discount & "]")
|
|||
|
' Next
|
|||
|
' retstring.AppendLine()
|
|||
|
' retstring.AppendLine("Community Choice (" & (Date.UtcNow - unixtimes(1)).ToString("h\:mm\:ss") & "), voting ends in " & (Date.UtcNow - unixtimes(3)).ToString("h\:mm\:ss") & " :")
|
|||
|
' retstring.AppendLine(" " & communitychoice)
|
|||
|
' retstring.AppendLine()
|
|||
|
' retstring.AppendLine("Flash sales (" & (Date.UtcNow - unixtimes(2)).ToString("h\:mm\:ss") & ") :")
|
|||
|
' For Each x In flashsales
|
|||
|
' retstring.AppendLine(" " & x.Name & " - " & x.Price & " [" & x.Discount & "]")
|
|||
|
' Next
|
|||
|
' retstring.AppendLine()
|
|||
|
' retstring.AppendLine("Yesterday's Deals (" & (Date.UtcNow - unixtimes(0)).ToString("h\:mm\:ss") & ") :")
|
|||
|
' For Each x In yesterdaydeals
|
|||
|
' retstring.AppendLine(" " & x.Name & " - " & x.Price & " [" & x.Discount & "]")
|
|||
|
' Next
|
|||
|
|
|||
|
' pMessage.Chat.SendMessage(retstring.ToString)
|
|||
|
'End If
|
|||
|
Case "!start"
|
|||
|
sw.Reset()
|
|||
|
sw.Start()
|
|||
|
pMessage.Chat.SendMessage("Started timer")
|
|||
|
Case "!stop"
|
|||
|
sw.Stop()
|
|||
|
pMessage.Chat.SendMessage("Elapsed time: " & sw.Elapsed.ToString("d\:hh\:mm\:ss\.fff"))
|
|||
|
Case "!time"
|
|||
|
pMessage.Chat.SendMessage("Elapsed time: " & sw.Elapsed.ToString("d\:hh\:mm\:ss\.fff"))
|
|||
|
Case "!fortune"
|
|||
|
pMessage.Chat.SendMessage("Your fortune: " & fortunes(Math.Floor(fortunes.Count * Rnd())))
|
|||
|
End Select
|
|||
|
End If
|
|||
|
|
|||
|
|
|||
|
'hueh bot
|
|||
|
If (Me.CheckBoxHueh.Checked AndAlso (((pMessage.Body.ToLower.StartsWith("hue ") Or pMessage.Body.ToLower.StartsWith("hueh ")) Or (pMessage.Body.ToLower = "hue")) Or (pMessage.Body.ToLower = "hueh"))) Then
|
|||
|
Dim strArray As String() = pMessage.Body.Split(" ".ToCharArray)
|
|||
|
Dim num As Integer = 0
|
|||
|
Dim str4 As String
|
|||
|
For Each str4 In strArray
|
|||
|
If ((str4.ToLower = "hue") Or (str4.ToLower = "hueh")) Then
|
|||
|
num += 1
|
|||
|
Else
|
|||
|
num = 0
|
|||
|
Exit For
|
|||
|
End If
|
|||
|
Next
|
|||
|
If (num <> 0) Then
|
|||
|
pMessage.Chat.SendMessage(String.Concat(New String() {num.ToString, " BR", If((num > 1), "s", ""), " from ", pMessage.Sender.FullName, "!"}))
|
|||
|
End If
|
|||
|
|
|||
|
End If
|
|||
|
|
|||
|
'whybot
|
|||
|
If (CheckBoxWhy.Checked) And (pMessage.Body.EndsWith(".jpg") Or pMessage.Body.EndsWith(".gif") Or pMessage.Body.EndsWith(".png")) And Not pMessage.Body.Contains("..") Then
|
|||
|
Dim str As String = pMessage.Body.Substring(0, pMessage.Body.LastIndexOf("."))
|
|||
|
If FileIO.FileSystem.FileExists(whydir + str + ".jpg") Then
|
|||
|
pMessage.Chat.SendMessage("http://long-cat.net/images/why/" + str.Replace(" ", "%20") + ".jpg")
|
|||
|
ElseIf FileIO.FileSystem.FileExists(whydir + str + ".png") Then
|
|||
|
pMessage.Chat.SendMessage("http://long-cat.net/images/why/" + str.Replace(" ", "%20") + ".png")
|
|||
|
ElseIf FileIO.FileSystem.FileExists(whydir + str + ".gif") Then
|
|||
|
pMessage.Chat.SendMessage("http://long-cat.net/images/why/" + str.Replace(" ", "%20") + ".gif")
|
|||
|
End If
|
|||
|
End If
|
|||
|
|
|||
|
|
|||
|
'swfbot
|
|||
|
If CheckBoxSwf.Checked And Regex.IsMatch(pMessage.Body, "^[^\\/]+\.swf$") Then
|
|||
|
If FileIO.FileSystem.FileExists(swfdir & pMessage.Body) Then
|
|||
|
pMessage.Chat.SendMessage("http://crazyfarmsexy.com/?swf=" & pMessage.Body.Replace(" ", "%20"))
|
|||
|
End If
|
|||
|
End If
|
|||
|
|
|||
|
|
|||
|
|
|||
|
'mechbot
|
|||
|
'http://mwo.smurfy-net.de/mechlab#i=35&l=bd5cf5dab9f1b4783f1462c65539f4fe50a05404
|
|||
|
If CheckBoxMech.Checked Then
|
|||
|
If pMessage.Body.StartsWith("http://mwo.smurfy-net.de/mechlab") Then
|
|||
|
Dim mechid As String = pMessage.Body.Substring(pMessage.Body.IndexOf("#") + 3, pMessage.Body.IndexOf("&") - pMessage.Body.IndexOf("#") - 3)
|
|||
|
Dim id As String = System.Web.HttpUtility.ParseQueryString(pMessage.Body)("l")
|
|||
|
pMessage.Chat.SendMessage(ParseLoadout(mechid, id))
|
|||
|
End If
|
|||
|
End If
|
|||
|
|
|||
|
|
|||
|
If temp = False Then
|
|||
|
Exit Sub
|
|||
|
End If
|
|||
|
'=========EVERYTHING BELOW THIS LINE IS INCALL ONLY============
|
|||
|
|
|||
|
Select Case pMessage.Body
|
|||
|
Case "~"
|
|||
|
If CheckBoxSounds.Checked = True Then
|
|||
|
player.Stop()
|
|||
|
End If
|
|||
|
If CheckBoxYoutube.Checked Then
|
|||
|
If Not vlcprocess Is Nothing AndAlso Not vlcprocess.HasExited Then
|
|||
|
vlcprocess.Kill()
|
|||
|
End If
|
|||
|
End If
|
|||
|
If CheckBoxTTS.Checked Then
|
|||
|
voicebox.SpeakAsyncCancelAll()
|
|||
|
End If
|
|||
|
Case "~tts"
|
|||
|
If CheckBoxTTS.Checked Then
|
|||
|
voicebox.SpeakAsyncCancelAll()
|
|||
|
End If
|
|||
|
Case "~sounds"
|
|||
|
If CheckBoxSounds.Checked Then
|
|||
|
player.Stop()
|
|||
|
End If
|
|||
|
Case "~youtube"
|
|||
|
If CheckBoxYoutube.Checked Then
|
|||
|
If Not vlcprocess Is Nothing AndAlso Not vlcprocess.HasExited Then
|
|||
|
vlcprocess.CloseMainWindow()
|
|||
|
vlcprocess.WaitForExit(1000)
|
|||
|
End If
|
|||
|
End If
|
|||
|
|
|||
|
End Select
|
|||
|
|
|||
|
'TTS bot
|
|||
|
If CheckBoxTTS.Checked And pMessage.Body.StartsWith("!speak") Then
|
|||
|
voicebox.SpeakAsync(pMessage.Body.Substring(pMessage.Body.IndexOf(" ") + 1))
|
|||
|
log("", "TTS: " + pMessage.Body.Substring(pMessage.Body.IndexOf(" ") + 1))
|
|||
|
End If
|
|||
|
|
|||
|
If CheckBoxYoutube.Checked Then
|
|||
|
Dim ytmatch As Match = Regex.Match(pMessage.Body, "(?<=!play (https?://)?(www\.)?(youtu(be.com/watch([&?]\w+=\w*)*[&?]v=|\.be/))?)[a-z0-9\-_]{11}", RegexOptions.IgnoreCase)
|
|||
|
'Dim ytmatch As Match = Regex.Match(pMessage.Body, "(?<=!play .*(youtu.be/|[&?v=]))[a-z0-9\-_]{11}", RegexOptions.IgnoreCase)
|
|||
|
If ytmatch.Success AndAlso CanPlay(pMessage.Sender.Handle) Then
|
|||
|
Dim timematch As Match = Regex.Match(pMessage.Body, "(?<=t=)(\d{1,2}h)?(\d{1,2}m)?\d{1,4}s?(?=$)")
|
|||
|
|
|||
|
If timematch.Success Then
|
|||
|
PlayYouTube(ytmatch.Value, Regex.Replace(timematch.Value, "[HMhm]", ":").Replace("s", ""))
|
|||
|
Else
|
|||
|
PlayYouTube(ytmatch.Value, )
|
|||
|
End If
|
|||
|
|
|||
|
ElseIf Regex.Match(pMessage.Body, "(?<=^!play ).+$").Success AndAlso CanPlay(pMessage.Sender.Handle) Then
|
|||
|
ytmatch = Regex.Match(pMessage.Body, "(?<=^!play ).+$")
|
|||
|
Dim wc As New Net.WebClient
|
|||
|
wc.Encoding = System.Text.Encoding.UTF8
|
|||
|
Dim searchstr As String = wc.DownloadString("https://www.youtube.com/results?search_query=" & ytmatch.Value)
|
|||
|
ytmatch = Regex.Match(searchstr, "(?<=href=""/watch\?v=)[a-z0-9\-_]{11}", RegexOptions.IgnoreCase)
|
|||
|
Dim vid As String = ytmatch.Value
|
|||
|
|
|||
|
PlayYouTube(vid, )
|
|||
|
|
|||
|
ytmatch = Regex.Match(searchstr, "(?<=<a[^>]*href=""/watch\?v=" & vid & "[^>]*title=\"").*?(?=\"")", RegexOptions.IgnoreCase)
|
|||
|
Dim retstring As String = "Playing """ & ytmatch.Value & """" & vbNewLine
|
|||
|
ytmatch = Regex.Match(searchstr, "(?<= - Duration: )[0-9:]*?(?=.<)", RegexOptions.IgnoreCase)
|
|||
|
retstring &= "Duration: " & ytmatch.Value & vbNewLine
|
|||
|
ytmatch = Regex.Match(searchstr, "(?<=<li>)[0-9,]*(?= views</li>)", RegexOptions.IgnoreCase)
|
|||
|
retstring &= "Views: " & ytmatch.Value & vbNewLine & "http://youtu.be/" & vid
|
|||
|
pMessage.Chat.SendMessage(retstring)
|
|||
|
|
|||
|
End If
|
|||
|
End If
|
|||
|
|
|||
|
If CheckBoxSounds.Checked And (sk.ActiveCalls.Count) Then
|
|||
|
If FileIO.FileSystem.FileExists(sounddir + pMessage.Body + ".wav") AndAlso CanPlay(pMessage.Sender.Handle) Then
|
|||
|
If pMessage.Body.Contains("..\") Then
|
|||
|
pMessage.Chat.SendMessage("NO FUCK YOU")
|
|||
|
Exit Sub
|
|||
|
End If
|
|||
|
If Now.Month = 4 And Now.Day = 1 Then 'april fools
|
|||
|
Dim soundlist As List(Of String)
|
|||
|
soundlist = FileIO.FileSystem.GetFiles(sounddir).ToList
|
|||
|
player.SoundLocation = soundlist(Math.Floor(Rnd() * soundlist.Count))
|
|||
|
player.Load()
|
|||
|
player.Play()
|
|||
|
Else
|
|||
|
player.SoundLocation = sounddir + pMessage.Body + ".wav"
|
|||
|
player.Load()
|
|||
|
player.Play()
|
|||
|
log(pMessage.Sender.Handle, pMessage.Body)
|
|||
|
End If
|
|||
|
|
|||
|
End If
|
|||
|
End If
|
|||
|
|
|||
|
'Math bot
|
|||
|
If CheckBoxMath.Checked AndAlso pMessage.Body.EndsWith("=") Then
|
|||
|
pMessage.Chat.SendMessage(CalcMath(pMessage.Body.TrimEnd("=")))
|
|||
|
End If
|
|||
|
|
|||
|
|
|||
|
Catch ex As Exception
|
|||
|
FileIO.FileSystem.WriteAllText("error.log", lasterrormsg + vbNewLine + vbNewLine + lasterror.ToString + vbNewLine + lasterror.Data.ToString + "================", True)
|
|||
|
lasterror = ex
|
|||
|
lasterrormsg = Now.ToString + " """ + pMessage.Sender.Handle + """ > " + pMessage.Body
|
|||
|
If CheckBoxError.Checked Then
|
|||
|
pMessage.Chat.SendMessage("Error!")
|
|||
|
End If
|
|||
|
End Try
|
|||
|
End Sub
|
|||
|
|
|||
|
Private Function CalcMath(ByVal eqn As String) As Double
|
|||
|
'return if we're passed a straight number
|
|||
|
If Double.TryParse(eqn, Nothing) Then
|
|||
|
Return CDbl(eqn)
|
|||
|
End If
|
|||
|
|
|||
|
eqn = Regex.Replace(eqn, "\be\b", Math.E.ToString)
|
|||
|
eqn = Regex.Replace(eqn, "\bpi\b", Math.PI.ToString)
|
|||
|
For Each funmatch As Match In Regex.Matches(eqn, "([a-z]+)\((.+)\)")
|
|||
|
Select Case funmatch.Groups(1).Value
|
|||
|
Case "sin"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Sin(CalcMath(funmatch.Groups(2).Value) * Math.PI / 180))
|
|||
|
Case "cos"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Cos(CalcMath(funmatch.Groups(2).Value) * Math.PI / 180))
|
|||
|
Case "tan"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Tan(CalcMath(funmatch.Groups(2).Value) * Math.PI / 180))
|
|||
|
Case "asin"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Asin(CalcMath(funmatch.Groups(2).Value)) * 180 / Math.PI)
|
|||
|
Case "acos"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Acos(CalcMath(funmatch.Groups(2).Value)) * 180 / Math.PI)
|
|||
|
Case "atan"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Atan(CalcMath(funmatch.Groups(2).Value)) * 180 / Math.PI)
|
|||
|
Case "abs"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Abs(CalcMath(funmatch.Groups(2).Value)))
|
|||
|
Case "exp"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Exp(CalcMath(funmatch.Groups(2).Value)))
|
|||
|
Case "ln"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Log(CalcMath(funmatch.Groups(2).Value)))
|
|||
|
Case "log"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Log10(CalcMath(funmatch.Groups(2).Value)))
|
|||
|
Case "sinh"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Sinh(CalcMath(funmatch.Groups(2).Value)))
|
|||
|
Case "cosh"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Cosh(CalcMath(funmatch.Groups(2).Value)))
|
|||
|
Case "tanh"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Tanh(CalcMath(funmatch.Groups(2).Value)))
|
|||
|
Case "sqrt"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Sqrt(CalcMath(funmatch.Groups(2).Value)))
|
|||
|
Case "sign"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Sign(CalcMath(funmatch.Groups(2).Value)))
|
|||
|
Case "round"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Round(CalcMath(funmatch.Groups(2).Value)))
|
|||
|
Case "ceiling"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Ceiling(CalcMath(funmatch.Groups(2).Value)))
|
|||
|
Case "floor"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Floor(CalcMath(funmatch.Groups(2).Value)))
|
|||
|
Case "truncate"
|
|||
|
eqn = eqn.Replace(funmatch.Value, Math.Truncate(CalcMath(funmatch.Groups(2).Value)))
|
|||
|
Case Else
|
|||
|
eqn = Double.NaN.ToString
|
|||
|
End Select
|
|||
|
Next
|
|||
|
|
|||
|
For Each parmatch As Match In Regex.Matches(eqn, "\((.+?)\)")
|
|||
|
eqn = eqn.Replace(parmatch.Value, CalcMath(parmatch.Groups(1).Value))
|
|||
|
Next
|
|||
|
Dim floatmatch As String = "-?\d+\.?\d*([eE][+-]?\d+)?"
|
|||
|
|
|||
|
Dim exmatch As Match
|
|||
|
While Regex.IsMatch(eqn, "(?<l>" & floatmatch & ")\s*\^\s*(?<r>" & floatmatch & ")")
|
|||
|
exmatch = Regex.Match(eqn, "(?<l>" & floatmatch & ")\s*\^\s*(?<r>" & floatmatch & ")")
|
|||
|
eqn = eqn.Replace(exmatch.Value, CStr(CDbl(exmatch.Groups("l").Value) ^ CDbl(exmatch.Groups("r").Value)))
|
|||
|
End While
|
|||
|
|
|||
|
Dim multmatch As Match
|
|||
|
While Regex.IsMatch(eqn, "(?<l>" & floatmatch & ")\s*\*\s*(?<r>" & floatmatch & ")")
|
|||
|
multmatch = Regex.Match(eqn, "(?<l>" & floatmatch & ")\s*\*\s*(?<r>" & floatmatch & ")")
|
|||
|
eqn = eqn.Replace(multmatch.Value, CStr(CDbl(multmatch.Groups("l").Value) * CDbl(multmatch.Groups("r").Value)))
|
|||
|
End While
|
|||
|
|
|||
|
Dim divmatch As Match
|
|||
|
While Regex.IsMatch(eqn, "(?<l>" & floatmatch & ")\s*\\\s*(?<r>" & floatmatch & ")")
|
|||
|
divmatch = Regex.Match(eqn, "(?<l>" & floatmatch & ")\s*\\\s*(?<r>" & floatmatch & ")")
|
|||
|
eqn = eqn.Replace(divmatch.Value, CStr(CDbl(divmatch.Groups("l").Value) \ CDbl(divmatch.Groups("r").Value)))
|
|||
|
End While
|
|||
|
|
|||
|
Dim modmatch As Match
|
|||
|
While Regex.IsMatch(eqn, "(?<l>" & floatmatch & ")\s*\%\s*(?<r>" & floatmatch & ")")
|
|||
|
modmatch = Regex.Match(eqn, "(?<l>" & floatmatch & ")\s*\%\s*(?<r>" & floatmatch & ")")
|
|||
|
eqn = eqn.Replace(modmatch.Value, CStr(CDbl(modmatch.Groups("l").Value) Mod CDbl(modmatch.Groups("r").Value)))
|
|||
|
End While
|
|||
|
|
|||
|
Dim quotmatch As Match
|
|||
|
While Regex.IsMatch(eqn, "(?<l>" & floatmatch & ")\s*\/\s*(?<r>" & floatmatch & ")")
|
|||
|
quotmatch = Regex.Match(eqn, "(?<l>" & floatmatch & ")\s*\/\s*(?<r>" & floatmatch & ")")
|
|||
|
eqn = eqn.Replace(quotmatch.Value, CStr(CDbl(quotmatch.Groups("l").Value) / CDbl(quotmatch.Groups("r").Value)))
|
|||
|
End While
|
|||
|
|
|||
|
Dim addmatch As Match
|
|||
|
While Regex.IsMatch(eqn, "(?<l>" & floatmatch & ")\s*\+\s*(?<r>" & floatmatch & ")")
|
|||
|
addmatch = Regex.Match(eqn, "(?<l>" & floatmatch & ")\s*\+\s*(?<r>" & floatmatch & ")")
|
|||
|
eqn = eqn.Replace(addmatch.Value, CStr(CDbl(addmatch.Groups("l").Value) + CDbl(addmatch.Groups("r").Value)))
|
|||
|
End While
|
|||
|
|
|||
|
Dim submatch As Match
|
|||
|
While Regex.IsMatch(eqn, "(?<l>" & floatmatch & ")\s*\-\s*(?<r>" & floatmatch & ")")
|
|||
|
submatch = Regex.Match(eqn, "(?<l>" & floatmatch & ")\s*\-\s*(?<r>" & floatmatch & ")")
|
|||
|
eqn = eqn.Replace(submatch.Value, CStr(CDbl(submatch.Groups("l").Value) - CDbl(submatch.Groups("r").Value)))
|
|||
|
End While
|
|||
|
|
|||
|
Return CDbl(eqn)
|
|||
|
|
|||
|
End Function
|
|||
|
|
|||
|
Private Sub callhandler(ByVal pCall As SKYPE4COMLib.Call, ByVal Status As TCallStatus) Handles sk.CallStatus
|
|||
|
log("", pCall.Id & ": " & [Enum].GetName(GetType(TCallStatus), Status))
|
|||
|
For Each x In sk.ActiveCalls
|
|||
|
If (CType(x, ICall).Status = TCallStatus.clsInProgress) And (CType(x, ICall).Id <> pCall.Id) Then
|
|||
|
pCall.Finish()
|
|||
|
log("local", "rejected call")
|
|||
|
Exit Sub
|
|||
|
End If
|
|||
|
Next
|
|||
|
If Status = TCallStatus.clsRinging Then
|
|||
|
'log("", "Picked up " + pCall.Id.ToString)
|
|||
|
pCall.Answer()
|
|||
|
lastcall = pCall
|
|||
|
ElseIf Status = TCallStatus.clsInProgress Then
|
|||
|
'If CheckBoxRecord.Checked Then
|
|||
|
' Dim cmd As New System.Diagnostics.ProcessStartInfo
|
|||
|
' Dim proc As Process
|
|||
|
' Dim filename As String = "C:\skypecalls\" & Now.ToString("yyyy-MM-dd-HH-mm-ss") & ".opus"
|
|||
|
' With cmd
|
|||
|
' .FileName = "C:\bin\ffmpeg.exe"
|
|||
|
' .WorkingDirectory = "C:\bin"
|
|||
|
' .UseShellExecute = False
|
|||
|
' .Arguments = "-y -f dshow -ac 2 -i audio=""Virtual Cable 1"" -f dshow -ac 2 -i audio=""Virtual Cable 2"" -filter_complex amix -c:a libopus -vbr on -application voip -frame_duration 60 -b:a 16384 " & filename
|
|||
|
' .CreateNoWindow = False
|
|||
|
' .RedirectStandardInput = True
|
|||
|
' .RedirectStandardOutput = False
|
|||
|
' End With
|
|||
|
' proc = System.Diagnostics.Process.Start(cmd)
|
|||
|
' proc.PriorityClass = ProcessPriorityClass.BelowNormal
|
|||
|
' ffmpeginput = proc.StandardInput
|
|||
|
'End If
|
|||
|
ElseIf Status = TCallStatus.clsFailed Or Status = TCallStatus.clsCancelled Or Status = TCallStatus.clsFinished Then
|
|||
|
'log("", "Finished call " & pCall.Id.ToString)
|
|||
|
'If CheckBoxRecord.Checked Then
|
|||
|
' ffmpeginput.Write("q")
|
|||
|
' ffmpeginput = Nothing
|
|||
|
'End If
|
|||
|
End If
|
|||
|
End Sub
|
|||
|
|
|||
|
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
|
|||
|
|
|||
|
Try
|
|||
|
lastcall = sk.ActiveCalls.Item(1)
|
|||
|
Catch ex As Exception
|
|||
|
|
|||
|
End Try
|
|||
|
If sk.Client.IsRunning = False Then
|
|||
|
sk.Timeout = 240000
|
|||
|
sk.Client.Start()
|
|||
|
End If
|
|||
|
sk.Attach()
|
|||
|
Label1.Text = "Skype: Running"
|
|||
|
Label2.Text = "Version: " + sk.Version
|
|||
|
Label3.Text = "Screen Name: " + sk.CurrentUserHandle
|
|||
|
Label5.Text = "Status: " + sk.CurrentUserStatus.ToString
|
|||
|
Label4.Text = "Protocol: " + sk.Protocol.ToString
|
|||
|
End Sub
|
|||
|
|
|||
|
Private Sub LoadMechlab()
|
|||
|
ammo.Clear()
|
|||
|
mechs.Clear()
|
|||
|
mechskills.Clear()
|
|||
|
modules.Clear()
|
|||
|
upgrades.Clear()
|
|||
|
weapons.Clear()
|
|||
|
|
|||
|
Dim wc As New Net.WebClient
|
|||
|
Dim page As String = wc.DownloadString("http://mwo.smurfy-net.de/mechlab")
|
|||
|
Dim url As String = Regex.Match(page, "(?<=<script src="")/mechlab/data-\S*(?=""></script>)").Value
|
|||
|
Dim data_mechs As String = HttpUtility.HtmlDecode(wc.DownloadString("http://mwo.smurfy-net.de" & url))
|
|||
|
data_mechs = data_mechs.Substring(38, data_mechs.Length - 38 - 7)
|
|||
|
Dim mlist As Xml.XmlNodeList
|
|||
|
Dim xdoc As Xml.XmlDocument = Newtonsoft.Json.JsonConvert.DeserializeXmlNode(data_mechs, "mechlab")
|
|||
|
mlist = xdoc.SelectNodes("mechlab/mechs/*/family")
|
|||
|
For Each x As Xml.XmlNode In mlist
|
|||
|
Dim newpart As New MechPart
|
|||
|
newpart.id = x.ParentNode.Name
|
|||
|
newpart.name = StringToProper(x.InnerText, " ", {})
|
|||
|
If x.ParentNode.SelectNodes("translated_name")(0).InnerText.Contains("-") Then
|
|||
|
newpart.name += x.ParentNode.SelectNodes("translated_name")(0).InnerText.Substring(x.ParentNode.SelectNodes("translated_name")(0).InnerText.IndexOf("-")) 'non hero mech
|
|||
|
Else 'hero mech
|
|||
|
newpart.name = StringToProper(x.ParentNode.SelectNodes("translated_name")(0).InnerText)
|
|||
|
End If
|
|||
|
mechs.Add(newpart)
|
|||
|
Next
|
|||
|
|
|||
|
mlist = xdoc.SelectNodes("mechlab/weapons/*/translatedName")
|
|||
|
For Each x As Xml.XmlNode In mlist
|
|||
|
Dim newpart As New MechPart
|
|||
|
newpart.id = x.ParentNode.Name
|
|||
|
newpart.name = StringToProper(x.InnerText)
|
|||
|
weapons.Add(newpart)
|
|||
|
Next
|
|||
|
|
|||
|
mlist = xdoc.SelectNodes("mechlab/modules/*/translatedName")
|
|||
|
For Each x As Xml.XmlNode In mlist
|
|||
|
Dim newpart As New MechPart
|
|||
|
newpart.id = x.ParentNode.Name
|
|||
|
newpart.name = StringToProper(x.InnerText)
|
|||
|
modules.Add(newpart)
|
|||
|
Next
|
|||
|
mlist = xdoc.SelectNodes("mechlab/ammo/*/translatedName")
|
|||
|
For Each x As Xml.XmlNode In mlist
|
|||
|
Dim newpart As New MechPart
|
|||
|
newpart.id = x.ParentNode.Name
|
|||
|
newpart.name = StringToProper(x.InnerText)
|
|||
|
ammo.Add(newpart)
|
|||
|
Next
|
|||
|
|
|||
|
mlist = xdoc.SelectNodes("mechlab/upgrades/*/translatedName")
|
|||
|
For Each x As Xml.XmlNode In mlist
|
|||
|
Dim newpart As New MechPart
|
|||
|
newpart.id = x.ParentNode.Name
|
|||
|
newpart.name = StringToProper(x.InnerText)
|
|||
|
upgrades.Add(newpart)
|
|||
|
Next
|
|||
|
|
|||
|
mlist = xdoc.SelectNodes("mechlab/mechskills/*/translatedName")
|
|||
|
|
|||
|
|
|||
|
log("", "Mechlab loaded")
|
|||
|
mlabready = True
|
|||
|
End Sub
|
|||
|
|
|||
|
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
|
|||
|
TextBox1.Text = ""
|
|||
|
End Sub
|
|||
|
|
|||
|
Private Sub TextBox2_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
|
|||
|
If e.KeyData = Keys.Enter Then
|
|||
|
If FileIO.FileSystem.FileExists(sounddir + TextBox2.Text + ".wav") Then
|
|||
|
log("localshell", "played " + TextBox2.Text)
|
|||
|
player.SoundLocation = sounddir + TextBox2.Text + ".wav"
|
|||
|
player.Load()
|
|||
|
player.Play()
|
|||
|
End If
|
|||
|
TextBox2.Text = ""
|
|||
|
End If
|
|||
|
End Sub
|
|||
|
|
|||
|
Public Sub log(ByVal user As String, ByVal op As String)
|
|||
|
TextBox1.Text = Now.ToString("dd MMM yyyy HH:mm:ss ") + user + " > " + op + vbCrLf + TextBox1.Text
|
|||
|
End Sub
|
|||
|
|
|||
|
Private Function CanPlay(ByVal handle As String) As Boolean
|
|||
|
If CheckBoxLimit.Checked = False Or handle = "moose_crap" Then
|
|||
|
Return True
|
|||
|
End If
|
|||
|
Dim num As Integer = limitlist.FindIndex(Function(x) x.handle = handle)
|
|||
|
If num = -1 Then
|
|||
|
Dim item As New lastmsg
|
|||
|
item.handle = handle
|
|||
|
item.time = Now
|
|||
|
Me.limitlist.Add(item)
|
|||
|
Return True
|
|||
|
End If
|
|||
|
Dim span As TimeSpan = Now - limitlist(num).time
|
|||
|
If span.TotalSeconds < soundfrequency Then
|
|||
|
sk.SendMessage(handle, "Woah there! You've got to wait a while before sending another command.")
|
|||
|
Return False
|
|||
|
Else
|
|||
|
limitlist(num).time = Now
|
|||
|
Return True
|
|||
|
End If
|
|||
|
End Function
|
|||
|
|
|||
|
Private Class TfwNoGF
|
|||
|
Property name As String
|
|||
|
Property count As Integer
|
|||
|
End Class
|
|||
|
|
|||
|
Private Function ParseLoadout(ByVal mechid As String, ByVal id As String) As String
|
|||
|
Dim wc As New System.Net.WebClient
|
|||
|
Dim unparseddata As String = wc.DownloadString("http://mwo.smurfy-net.de/mechlab/loadouts/" + mechid + "/" + id)
|
|||
|
Dim parsedxml As Xml.XmlDocument = Json.JsonConvert.DeserializeXmlNode(unparseddata, "loadout")
|
|||
|
Dim retstring As String = ""
|
|||
|
retstring = mechs.Find(Function(t) t.id = parsedxml.SelectSingleNode("loadout/mech_id").InnerText).name + vbNewLine + vbNewLine + "==Weapons==" + vbNewLine
|
|||
|
Dim m As New List(Of String)
|
|||
|
For Each x As Xml.XmlNode In parsedxml.SelectNodes("loadout/configuration/*[type='weapon']/id")
|
|||
|
m.Add(weapons.Find(Function(t) t.id = x.InnerText).name)
|
|||
|
Next
|
|||
|
m.Sort()
|
|||
|
For Each x In m
|
|||
|
retstring += (x + vbNewLine)
|
|||
|
Next
|
|||
|
retstring += vbNewLine + "==Modules==" + vbNewLine
|
|||
|
|
|||
|
Dim modulelist As New List(Of TfwNoGF)
|
|||
|
For Each x As Xml.XmlNode In parsedxml.SelectNodes("loadout/configuration/*[type='module']/id")
|
|||
|
Dim modname As String = modules.Find(Function(t) t.id = x.InnerText).name
|
|||
|
Dim foundindex As Integer = modulelist.FindIndex(Function(q) q.name = modname)
|
|||
|
If foundindex = -1 Then
|
|||
|
Dim newgf As New TfwNoGF
|
|||
|
newgf.count = 1
|
|||
|
newgf.name = modname
|
|||
|
modulelist.Add(newgf)
|
|||
|
Else
|
|||
|
modulelist(foundindex).count += 1
|
|||
|
End If
|
|||
|
Next
|
|||
|
For Each x In modulelist
|
|||
|
If x.count = 1 Then
|
|||
|
retstring += x.name + vbNewLine
|
|||
|
Else
|
|||
|
retstring += x.name + " x" + x.count.ToString + vbNewLine
|
|||
|
End If
|
|||
|
Next
|
|||
|
retstring += vbNewLine + "==Upgrades==" + vbNewLine
|
|||
|
|
|||
|
m.Clear()
|
|||
|
For Each x As Xml.XmlNode In parsedxml.SelectNodes("loadout/upgrades/id")
|
|||
|
m.Add(upgrades.Find(Function(t) t.id = x.InnerText).name)
|
|||
|
Next
|
|||
|
For Each x In m
|
|||
|
retstring += (x + vbNewLine)
|
|||
|
Next
|
|||
|
retstring += vbNewLine
|
|||
|
|
|||
|
retstring += "==Ammo==" + vbNewLine
|
|||
|
|
|||
|
modulelist.Clear()
|
|||
|
For Each x As Xml.XmlNode In parsedxml.SelectNodes("loadout/configuration/*[type='ammo']/id")
|
|||
|
Dim modname As String = ammo.Find(Function(t) t.id = x.InnerText).name
|
|||
|
Dim foundindex As Integer = modulelist.FindIndex(Function(q) q.name = modname)
|
|||
|
If foundindex = -1 Then
|
|||
|
Dim newgf As New TfwNoGF
|
|||
|
newgf.count = 1
|
|||
|
newgf.name = modname
|
|||
|
modulelist.Add(newgf)
|
|||
|
Else
|
|||
|
modulelist(foundindex).count += 1
|
|||
|
End If
|
|||
|
Next
|
|||
|
For Each x In modulelist
|
|||
|
If x.count = 1 Then
|
|||
|
retstring += x.name + vbNewLine
|
|||
|
Else
|
|||
|
retstring += x.name + " x" + x.count.ToString + vbNewLine
|
|||
|
End If
|
|||
|
Next
|
|||
|
|
|||
|
retstring += vbNewLine
|
|||
|
|
|||
|
|
|||
|
Dim armor As Integer = 0
|
|||
|
For Each x As Xml.XmlNode In parsedxml.SelectNodes("loadout/configuration/armor")
|
|||
|
armor += x.InnerText
|
|||
|
Next
|
|||
|
retstring += "Total armor: " + armor.ToString
|
|||
|
|
|||
|
Return retstring
|
|||
|
End Function
|
|||
|
|
|||
|
Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
|
|||
|
player.Stop()
|
|||
|
End Sub
|
|||
|
|
|||
|
''' <summary>
|
|||
|
''' Changes an all-caps string into a proper-capitalized string using defualt values
|
|||
|
''' </summary>
|
|||
|
''' <param name="str">Input string to change</param>
|
|||
|
''' <returns>Fixed string</returns>
|
|||
|
''' <remarks></remarks>
|
|||
|
Private Overloads Function StringToProper(str As String) As String
|
|||
|
If str.StartsWith("C-") Then
|
|||
|
str = "CLAN " & str.Substring(2)
|
|||
|
End If
|
|||
|
Return StringToProper(str, " ", {"LRM", "MRM", "SRM", "AC/", "C.A.S.E.", "AMS", "LB", "PPC", "ER", "ECM", "IV", "II", "TAG", "NARC", "10-X", "VI", "S-SRM", "U-AC/", "MG"})
|
|||
|
End Function
|
|||
|
|
|||
|
''' <summary>
|
|||
|
''' Changes an all-caps string into a proper-capitalized string
|
|||
|
''' </summary>
|
|||
|
''' <param name="str">Input string to change</param>
|
|||
|
''' <param name="sep">Seperator characters</param>
|
|||
|
''' <param name="dontmatch">Chunks containing any of these string will not be changed</param>
|
|||
|
''' <returns>Fixed string</returns>
|
|||
|
''' <remarks></remarks>
|
|||
|
Private Overloads Function StringToProper(str As String, sep() As Char, dontmatch() As String) As String
|
|||
|
For Each s In sep
|
|||
|
Dim tempstring As String = ""
|
|||
|
Dim splitstring() As String = str.Split(s)
|
|||
|
For Each x In splitstring
|
|||
|
If x = "" Then
|
|||
|
Continue For
|
|||
|
End If
|
|||
|
If StringContainsString(x, dontmatch) Then
|
|||
|
tempstring += x + s
|
|||
|
Continue For
|
|||
|
End If
|
|||
|
x = x.ToLowerInvariant
|
|||
|
Dim newchar As Char = x(0)
|
|||
|
newchar = Char.ToUpperInvariant(newchar)
|
|||
|
x = x.Remove(0, 1)
|
|||
|
x = newchar + x
|
|||
|
tempstring += x + s
|
|||
|
Next
|
|||
|
str = tempstring.TrimEnd(s)
|
|||
|
Next
|
|||
|
Return str
|
|||
|
End Function
|
|||
|
|
|||
|
Private Function StringContainsString(str As String, match() As String) As Boolean
|
|||
|
For Each x In match
|
|||
|
If str = (x) Or str.StartsWith(x) Then
|
|||
|
Return True
|
|||
|
End If
|
|||
|
Next
|
|||
|
Return False
|
|||
|
End Function
|
|||
|
|
|||
|
Private Function MakeStringInteresting(str As String) As List(Of String)
|
|||
|
Dim Split() As String = str.Split(" .,?!-".ToCharArray)
|
|||
|
Dim ret As New List(Of String)
|
|||
|
For Each x In Split
|
|||
|
For Each y In commonwords
|
|||
|
If x.ToLowerInvariant = (y) Then
|
|||
|
x = ""
|
|||
|
End If
|
|||
|
Next
|
|||
|
If x <> "" And Not ret.Contains(x) Then
|
|||
|
ret.Add(x)
|
|||
|
End If
|
|||
|
Next
|
|||
|
Return ret
|
|||
|
End Function
|
|||
|
|
|||
|
'Private Sub recspeech(sender As Object, e As System.Speech.Recognition.SpeechRecognizedEventArgs) Handles ears.SpeechRecognized
|
|||
|
' If CheckBoxSTT.Checked Then
|
|||
|
' sk.FindChatUsingBlob(goldarblob).SendMessage("Recognized speech:" + vbNewLine + e.Result.Text)
|
|||
|
' End If
|
|||
|
'End Sub
|
|||
|
|
|||
|
Private Sub ReplyToMessage(ByVal pmessage As ChatMessage)
|
|||
|
If ((Now - lastreply).TotalSeconds < replydelay) Or (Not CheckBoxReply.Checked) Then
|
|||
|
Exit Sub
|
|||
|
End If
|
|||
|
|
|||
|
Randomize()
|
|||
|
|
|||
|
Dim didreply As Boolean = True
|
|||
|
Dim body As String = pmessage.Body.ToLowerInvariant.Trim
|
|||
|
|
|||
|
If ((body = ":|" Or body.Contains(":|:|") Or body.Contains(":| :|")) And pmessage.Sender.Handle = "craze42") And Rnd() < 0.1 Then
|
|||
|
If Rnd() > 0.5 Then
|
|||
|
pmessage.Chat.SendMessage(":|(skype)(skype)(skype):|:|:|:|:|" + vbNewLine + ":|(skype)(skype)(skype):|(skype)(skype)(skype)(skype)" + vbNewLine + ":|(skype)(skype)(skype):|(skype)(skype)(skype)(skype)" + vbNewLine + ":|(skype)(skype)(skype):|(skype)(skype)(skype)(skype)" + vbNewLine + ":|:|:|:|:|:|:|:|:|" + vbNewLine + "(skype)(skype)(skype)(skype):|(skype)(skype)(skype):|" + vbNewLine + "(skype)(skype)(skype)(skype):|(skype)(skype)(skype):|" + vbNewLine + "(skype)(skype)(skype)(skype):|(skype)(skype)(skype):|" + vbNewLine + ":|:|:|:|:|(skype)(skype)(skype):|")
|
|||
|
Else
|
|||
|
pmessage.Chat.SendMessage("Funkytown")
|
|||
|
player.SoundLocation = sounddir + "funkytown.wav"
|
|||
|
player.Load()
|
|||
|
player.Play()
|
|||
|
End If
|
|||
|
|
|||
|
ElseIf body = ":|" Or body.Contains(":|:|") Or body.Contains(":| :|") Then
|
|||
|
If Rnd() > 0.9 Then
|
|||
|
pmessage.Chat.SendMessage(pmessage.Sender.FullName + ", EVERYONE is dissapointed in him. :| :|")
|
|||
|
ElseIf Rnd() <= 0.9 And Rnd() > 0.5 Then
|
|||
|
pmessage.Chat.SendMessage("Don't worry " + pmessage.Sender.FullName + ", I'm dissapointed too. :|")
|
|||
|
ElseIf Rnd() <= 0.5 And Rnd() > 0.1 Then
|
|||
|
pmessage.Chat.SendMessage("Hey " + pmessage.Sender.FullName + ", give him a break.")
|
|||
|
Else
|
|||
|
pmessage.Chat.SendMessage("Dude why are you :| ing. I don't even get it.")
|
|||
|
End If
|
|||
|
|
|||
|
ElseIf body.Contains("windowed") Or body.Contains("in a window") Or body.Contains("windowed mode") Or body.Contains("window mode") Then
|
|||
|
pmessage.Chat.SendMessage("Didn't know Harris was in here (wasntme)")
|
|||
|
|
|||
|
ElseIf body.Contains("skype bot pl") Or body.Contains("skypebot pl") Then
|
|||
|
If Now.Hour >= 22 Or Now.Hour <= 6 Then
|
|||
|
pmessage.Chat.SendMessage("Hey I'm busy sleeping |-)")
|
|||
|
Else
|
|||
|
pmessage.Chat.SendMessage("Still in beta, cmon (waiting)")
|
|||
|
End If
|
|||
|
|
|||
|
ElseIf body.Contains("(highfive)") And Rnd() < 0.6 Then
|
|||
|
pmessage.Chat.SendMessage("(highfive)")
|
|||
|
|
|||
|
ElseIf body.Contains("ameri") And body.Contains("clap") Then
|
|||
|
pmessage.Chat.SendMessage("(flag:us)(clap)(flag:us)")
|
|||
|
|
|||
|
ElseIf body.Contains("twitch.tv") And Rnd() > 0.5 Then
|
|||
|
pmessage.Chat.SendMessage("Is this teh urn? Kappa")
|
|||
|
|
|||
|
ElseIf body.Contains("facepalm") And Rnd() > 0.7 Then
|
|||
|
pmessage.Chat.SendMessage("Cmon (facepalm)")
|
|||
|
|
|||
|
ElseIf body.Contains("suicide") Then
|
|||
|
pmessage.Chat.SendMessage("i want to commit sudoku!")
|
|||
|
|
|||
|
ElseIf body.Contains("nigger") And Rnd() < 0.1 Then
|
|||
|
pmessage.Chat.SendMessage("Niggers gonna nig (bandit)")
|
|||
|
|
|||
|
ElseIf body.Contains("pizza") And Rnd() < 0.4 Then
|
|||
|
If Rnd() > 0.5 Then
|
|||
|
pmessage.Chat.SendMessage("Did somebody say pizza!? (pi)")
|
|||
|
Else
|
|||
|
pmessage.Chat.SendMessage("Gotta get me some of that PIZZA PIE! (pi)(mm)(pi)")
|
|||
|
End If
|
|||
|
|
|||
|
ElseIf body.Count(Function(x) x = ">") > 6 Then
|
|||
|
pmessage.Chat.SendMessage("So much greentext, my monitor is almost out of green.")
|
|||
|
|
|||
|
ElseIf body.Contains("4chan.org") And pmessage.Sender.Handle = "piroglith" And Rnd() < 0.2 Then
|
|||
|
pmessage.Chat.SendMessage("Oh there goes Scott with those 4chan links again...")
|
|||
|
|
|||
|
ElseIf pmessage.Sender.Handle = "craze42" And (body.Contains("ing to bed") Or body.Contains("ing to sleep")) And Rnd() < 0.3 Then
|
|||
|
pmessage.Chat.SendMessage("Heading to bed already Corey? Cmon it's only " + Now.ToString("h:mm tt") + "! It's just like that one LAN...")
|
|||
|
|
|||
|
ElseIf body.Contains(":||") And Rnd() > 0.5 Then
|
|||
|
pmessage.Chat.SendMessage("Check out all those chins on that :|")
|
|||
|
|
|||
|
ElseIf body.EndsWith(".wav") And Rnd() < 0.5 And sk.ActiveCalls.Count = 0 Then
|
|||
|
pmessage.Chat.SendMessage("Why are you trying to play a sound? I'm not even in a call. (doh)")
|
|||
|
|
|||
|
ElseIf body.EndsWith("%") And body.Length > 1 And Rnd() < 0.15 Then
|
|||
|
pmessage.Chat.SendMessage("I hold the world record in that category :P")
|
|||
|
|
|||
|
ElseIf body = "butthash" And pmessage.Sender.Handle = "rulebreaker4454" And Rnd() > 0.7 And sk.ActiveCalls.Count > 0 Then
|
|||
|
pmessage.Chat.SendMessage("BUTTHASH? REALLY ALEX? CMON")
|
|||
|
|
|||
|
ElseIf body.Contains("rip in peace") And Rnd() < 0.5 Then
|
|||
|
pmessage.Chat.SendMessage("We cry everytim ;(")
|
|||
|
|
|||
|
ElseIf body.Contains("sandstorm") And Rnd() < 0.7 Then
|
|||
|
pmessage.Chat.SendMessage("༼ つ ◕_◕ ༽つ DUDUDUDUDUDUDUDUDUDU <(◕_◕< )")
|
|||
|
|
|||
|
ElseIf body.Contains("gaybar") And Rnd() < 0.5 Then
|
|||
|
pmessage.Chat.SendMessage("I guess we know where " & pmessage.Sender.FullName & " is going.")
|
|||
|
|
|||
|
Else
|
|||
|
didreply = False
|
|||
|
End If
|
|||
|
|
|||
|
If didreply Then
|
|||
|
lastreply = Now
|
|||
|
End If
|
|||
|
End Sub
|
|||
|
|
|||
|
Private Class quad
|
|||
|
Implements IEquatable(Of quad)
|
|||
|
Private realtokens(3) As String
|
|||
|
Private lowertokens(3) As String
|
|||
|
Public Property tokens As String()
|
|||
|
Get
|
|||
|
Return realtokens
|
|||
|
End Get
|
|||
|
Set(value As String())
|
|||
|
realtokens = value
|
|||
|
'lowertokens(0) = realtokens(0).ToLowerInvariant.Trim(" <>?:""{}|_+,./;'[]\-=`~!@#$%^&*()".ToCharArray)
|
|||
|
'lowertokens(1) = realtokens(1).ToLowerInvariant.Trim(" <>?:""{}|_+,./;'[]\-=`~!@#$%^&*()".ToCharArray)
|
|||
|
'lowertokens(2) = realtokens(2).ToLowerInvariant.Trim(" <>?:""{}|_+,./;'[]\-=`~!@#$%^&*()".ToCharArray)
|
|||
|
'lowertokens(3) = realtokens(3).ToLowerInvariant.Trim(" <>?:""{}|_+,./;'[]\-=`~!@#$%^&*()".ToCharArray)
|
|||
|
End Set
|
|||
|
End Property
|
|||
|
Public Property CanStart As Boolean 'Can this quad start a sentence
|
|||
|
Public Property CanEnd As Boolean 'Can this quad end a sentence
|
|||
|
|
|||
|
Private Shared wordchars() As Char = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890>"
|
|||
|
Public Shared quadlist As New List(Of quad)
|
|||
|
|
|||
|
|
|||
|
Public Overloads Function Equals(other As quad) As Boolean Implements System.IEquatable(Of quad).Equals
|
|||
|
Return Me.tokens(0) = other.tokens(0) AndAlso Me.tokens(1) = other.tokens(1) AndAlso Me.tokens(2) = other.tokens(2) AndAlso Me.tokens(3) = other.tokens(3)
|
|||
|
End Function
|
|||
|
|
|||
|
Public Overrides Function GetHashCode() As Integer
|
|||
|
Return Me.tokens(0).GetHashCode Xor Me.tokens(1).GetHashCode Xor Me.tokens(2).GetHashCode Xor Me.tokens(3).GetHashCode
|
|||
|
End Function
|
|||
|
|
|||
|
Public Overrides Function Equals(obj As Object) As Boolean
|
|||
|
If obj.GetType = GetType(quad) Then
|
|||
|
Return Me.Equals(CType(obj, quad))
|
|||
|
Else
|
|||
|
Return False
|
|||
|
End If
|
|||
|
End Function
|
|||
|
|
|||
|
Public Sub New(s1 As String, s2 As String, s3 As String, s4 As String)
|
|||
|
Me.tokens(0) = s1
|
|||
|
Me.lowertokens(0) = Regex.Match(s1.ToLowerInvariant, "\S*").Value
|
|||
|
Me.tokens(1) = s2
|
|||
|
Me.lowertokens(1) = Regex.Match(s2.ToLowerInvariant, "\S*").Value
|
|||
|
Me.tokens(2) = s3
|
|||
|
Me.lowertokens(2) = Regex.Match(s3.ToLowerInvariant, "\S*").Value
|
|||
|
Me.tokens(3) = s4
|
|||
|
Me.lowertokens(3) = Regex.Match(s4.ToLowerInvariant, "\S*").Value
|
|||
|
End Sub
|
|||
|
|
|||
|
Public Function Contains(s As String)
|
|||
|
Dim ls As String = s.ToLowerInvariant
|
|||
|
Return Me.lowertokens(0) = (ls) OrElse Me.lowertokens(1) = (ls) OrElse Me.lowertokens(2) = (ls) OrElse Me.lowertokens(3) = (ls)
|
|||
|
End Function
|
|||
|
|
|||
|
Public Shared Operator =(a As quad, b As quad)
|
|||
|
Return a.Equals(b)
|
|||
|
End Operator
|
|||
|
|
|||
|
Public Shared Operator <>(a As quad, b As quad)
|
|||
|
Return Not a.Equals(b)
|
|||
|
End Operator
|
|||
|
|
|||
|
Public Overrides Function ToString() As String
|
|||
|
Return Me.tokens(0) & Me.tokens(1) & Me.tokens(2) & Me.tokens(3)
|
|||
|
End Function
|
|||
|
|
|||
|
''' <summary>
|
|||
|
''' True if this quad can come before q
|
|||
|
''' </summary>
|
|||
|
''' <param name="q">Quad to test</param>
|
|||
|
''' <returns></returns>
|
|||
|
''' <remarks></remarks>
|
|||
|
Public Function CanBeBefore(q As quad) As Boolean
|
|||
|
Return q.lowertokens(0) = Me.lowertokens(1) And q.lowertokens(1) = Me.lowertokens(2) And q.lowertokens(2) = Me.lowertokens(3)
|
|||
|
End Function
|
|||
|
|
|||
|
''' <summary>
|
|||
|
''' True if this quad can come after q
|
|||
|
''' </summary>
|
|||
|
''' <param name="q">Quad to test</param>
|
|||
|
''' <returns></returns>
|
|||
|
''' <remarks></remarks>
|
|||
|
Public Function CanBeAfter(q As quad) As Boolean
|
|||
|
Return q.lowertokens(1) = Me.lowertokens(0) And q.lowertokens(2) = Me.lowertokens(1) And q.lowertokens(3) = Me.lowertokens(2)
|
|||
|
End Function
|
|||
|
Public Shared Sub LoadFile(filepath As String)
|
|||
|
Dim i As Integer = 0
|
|||
|
Dim intxt As String = FileIO.FileSystem.ReadAllText(filepath)
|
|||
|
Dim splittext() As String = intxt.Split(vbCrLf)
|
|||
|
For Each x In splittext
|
|||
|
If x.Length >= 8 Then
|
|||
|
AddString(x)
|
|||
|
End If
|
|||
|
i += 1
|
|||
|
Next
|
|||
|
MsgBox("DONE NIGGA")
|
|||
|
End Sub
|
|||
|
|
|||
|
|
|||
|
Public Shared Sub AddString(str As String)
|
|||
|
Dim sentencelist() As String = RegularExpressions.Regex.Split(str, "(?<=[\.!\?\r\n])\s+")
|
|||
|
|
|||
|
For s = 0 To sentencelist.Length - 1
|
|||
|
Dim words As New List(Of String)
|
|||
|
For Each x As Match In Regex.Matches(sentencelist(s), "\S+\s*")
|
|||
|
words.Add(x.Value)
|
|||
|
Next
|
|||
|
'Dim chrarray() As Char = sentencelist(s).ToCharArray
|
|||
|
'Dim buffer As New StringBuilder
|
|||
|
'For i = 0 To chrarray.Length - 1
|
|||
|
' buffer.Append(chrarray(i))
|
|||
|
' If Not wordchars.Contains(chrarray(i)) Then 'we've hit a punctuation character
|
|||
|
' If chrarray(i) = "," Then
|
|||
|
' buffer.Append(" ")
|
|||
|
' End If
|
|||
|
' If buffer.Length > 1 Then
|
|||
|
' words.Add(buffer.ToString)
|
|||
|
' End If
|
|||
|
' buffer.Clear()
|
|||
|
' End If
|
|||
|
'Next
|
|||
|
'If buffer.Length > 0 Then
|
|||
|
' words.Add(buffer.ToString)
|
|||
|
'End If
|
|||
|
If words.Count >= 4 Then
|
|||
|
For i = 0 To words.Count - 4
|
|||
|
Dim q As New quad(words(i), words(i + 1), words(i + 2), words(i + 3))
|
|||
|
Dim index As Integer = quadlist.FindIndex(Function(p) p = q)
|
|||
|
If index = -1 Then
|
|||
|
quadlist.Add(q)
|
|||
|
Else
|
|||
|
q = quadlist(index)
|
|||
|
End If
|
|||
|
If i = 0 Then
|
|||
|
q.CanStart = True
|
|||
|
End If
|
|||
|
If i = words.Count - 4 Then
|
|||
|
q.CanEnd = True
|
|||
|
End If
|
|||
|
Next
|
|||
|
Else
|
|||
|
'didnt learn anything, too short message
|
|||
|
End If
|
|||
|
Next
|
|||
|
|
|||
|
End Sub
|
|||
|
|
|||
|
Public Overloads Shared Function MakeSentence()
|
|||
|
Return MakeSentence("")
|
|||
|
End Function
|
|||
|
|
|||
|
Public Overloads Shared Function MakeSentence(ByVal query As String) As String
|
|||
|
|
|||
|
Dim qwords As New List(Of String)
|
|||
|
qwords = Form1.MakeStringInteresting(query.Replace("skypebot", "").Replace("skype bot", "").Replace("bot", ""))
|
|||
|
If qwords.Count > 0 Then
|
|||
|
query = qwords(Math.Floor(Rnd() * qwords.Count))
|
|||
|
Else
|
|||
|
query = ""
|
|||
|
End If
|
|||
|
Dim midquad As quad
|
|||
|
Dim output As New StringBuilder
|
|||
|
|
|||
|
Dim results As New List(Of quad)
|
|||
|
If query <> "" Then
|
|||
|
results = quadlist.FindAll(Function(p As quad) p.Contains(query))
|
|||
|
End If
|
|||
|
|
|||
|
If results.Count = 0 Then 'pick random form all, none found
|
|||
|
midquad = quadlist(Math.Floor(Rnd() * quadlist.Count))
|
|||
|
Else
|
|||
|
midquad = results(Math.Floor(Rnd() * results.Count))
|
|||
|
End If
|
|||
|
|
|||
|
output.Append(midquad.ToString)
|
|||
|
Dim q As quad = midquad
|
|||
|
|
|||
|
'build back to the start
|
|||
|
While Not q.CanStart
|
|||
|
results = quadlist.FindAll(Function(p As quad) p.CanBeBefore(q))
|
|||
|
q = results(Math.Floor(Rnd() * results.Count))
|
|||
|
output.Insert(0, q.tokens(0), 1)
|
|||
|
End While
|
|||
|
q = midquad
|
|||
|
'build out to the end
|
|||
|
While Not q.CanEnd
|
|||
|
results = quadlist.FindAll(Function(p As quad) p.CanBeAfter(q))
|
|||
|
q = results(Math.Floor(Rnd() * results.Count))
|
|||
|
output.Append(q.tokens(3))
|
|||
|
End While
|
|||
|
|
|||
|
Return output.ToString
|
|||
|
|
|||
|
End Function
|
|||
|
|
|||
|
Public Function GetBytes() As Byte()
|
|||
|
Dim enc As New System.Text.UTF8Encoding
|
|||
|
'str1 0x00 str2 0x00 str3 0x00 str4 0x00 flag 0xff
|
|||
|
Dim byte1() As Byte = enc.GetBytes(Me.tokens(0))
|
|||
|
Dim byte2() As Byte = enc.GetBytes(Me.tokens(1))
|
|||
|
Dim byte3() As Byte = enc.GetBytes(Me.tokens(2))
|
|||
|
Dim byte4() As Byte = enc.GetBytes(Me.tokens(3))
|
|||
|
|
|||
|
Dim flagbyte As Byte = (1 * System.Convert.ToByte(Me.CanStart)) Or (2 * System.Convert.ToByte(Me.CanEnd))
|
|||
|
|
|||
|
Dim ret(byte1.Length + byte2.Length + byte3.Length + byte4.Length + 5) As Byte
|
|||
|
|
|||
|
byte1.CopyTo(ret, 0)
|
|||
|
byte2.CopyTo(ret, byte1.Length + 1)
|
|||
|
byte3.CopyTo(ret, byte1.Length + 1 + byte2.Length + 1)
|
|||
|
byte4.CopyTo(ret, byte1.Length + 1 + byte2.Length + 1 + byte3.Length + 1)
|
|||
|
ret(ret.Length - 2) = flagbyte
|
|||
|
ret(ret.Length - 1) = &HFF
|
|||
|
|
|||
|
Return ret
|
|||
|
End Function
|
|||
|
|
|||
|
Public Sub New(packed() As Byte)
|
|||
|
Dim enc As New System.Text.UTF8Encoding
|
|||
|
'str1 0x00 str2 0x00 str3 0x00 str4 0x00 flag 0xff
|
|||
|
Dim i As Integer = 0
|
|||
|
Dim start As Integer = 0
|
|||
|
Dim byt As Byte = 255
|
|||
|
For d = 0 To 3
|
|||
|
While byt <> &H0
|
|||
|
byt = packed(i)
|
|||
|
i += 1
|
|||
|
End While
|
|||
|
byt = &HFF
|
|||
|
|
|||
|
Me.tokens(d) = enc.GetString(packed, start, i - start - 1)
|
|||
|
Me.lowertokens(d) = Me.tokens(d).ToLowerInvariant.Trim(" <>?:""{}|_+,./;'[]\-=`~!@#$%^&*()".ToCharArray)
|
|||
|
start = i
|
|||
|
Next
|
|||
|
Me.CanStart = packed(packed.Length - 2) And &H1
|
|||
|
Me.CanEnd = packed(packed.Length - 2) And &H2
|
|||
|
End Sub
|
|||
|
|
|||
|
Public Shared Sub Save(path As String)
|
|||
|
Dim barray As New List(Of Byte)
|
|||
|
For Each x In quadlist
|
|||
|
barray.AddRange(x.GetBytes)
|
|||
|
Next
|
|||
|
FileIO.FileSystem.WriteAllBytes(path, barray.ToArray, False)
|
|||
|
End Sub
|
|||
|
|
|||
|
Public Shared Sub Load(path As String)
|
|||
|
quadlist.Clear()
|
|||
|
Dim indata() As Byte = FileIO.FileSystem.ReadAllBytes(path)
|
|||
|
Dim buf() As Byte
|
|||
|
Dim lastindex As Integer = -1
|
|||
|
For i = 0 To indata.Length - 1
|
|||
|
If indata(i) = &HFF And i <> indata.Length - 1 Then
|
|||
|
ReDim buf(i - lastindex - 1)
|
|||
|
For k = 0 To i - lastindex - 1
|
|||
|
buf(k) = indata(lastindex + k + 1)
|
|||
|
Next
|
|||
|
lastindex = i
|
|||
|
Dim q As New quad(buf)
|
|||
|
quadlist.Add(q)
|
|||
|
End If
|
|||
|
Next
|
|||
|
End Sub
|
|||
|
End Class
|
|||
|
|
|||
|
Private Sub ButtonLoadBrain_Click(sender As System.Object, e As System.EventArgs) Handles ButtonLoadBrain.Click
|
|||
|
quad.Load("skypebot.dat")
|
|||
|
log("skypebot", "Loaded " + quad.quadlist.Count.ToString + " quads")
|
|||
|
End Sub
|
|||
|
|
|||
|
Private Sub ButtonSaveBrain_Click(sender As System.Object, e As System.EventArgs) Handles ButtonSaveBrain.Click
|
|||
|
If quad.quadlist.Count > 0 Then
|
|||
|
quad.Save("skypebot.dat")
|
|||
|
End If
|
|||
|
log("", "Saved " & quad.quadlist.Count & " quads")
|
|||
|
End Sub
|
|||
|
|
|||
|
Private Sub Form1_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
|
|||
|
If quad.quadlist.Count > 0 Then
|
|||
|
quad.Save("skypebot.dat")
|
|||
|
End If
|
|||
|
End Sub
|
|||
|
|
|||
|
Private Sub twitchtimer_Tick(sender As System.Object, e As System.EventArgs) Handles twitchtimer.Tick
|
|||
|
'MsgBox("starting timer sub")
|
|||
|
Dim wc As New Net.WebClient
|
|||
|
wc.Headers.Add("Client-ID: " & twitchclientid)
|
|||
|
Dim xdoc As New Xml.XmlDocument
|
|||
|
For Each x In streams
|
|||
|
Try
|
|||
|
'MsgBox(i)
|
|||
|
xdoc = Newtonsoft.Json.JsonConvert.DeserializeXmlNode(wc.DownloadString("https://api.twitch.tv/kraken/streams/" & x.name), "twitch")
|
|||
|
Dim streamnode As Xml.XmlNode = xdoc.SelectSingleNode("twitch/stream")
|
|||
|
If streamnode.InnerXml = "" Then
|
|||
|
x.live = False
|
|||
|
If x.name = "moosecrap" And FileIO.FileSystem.FileExists("C:\apache\htdocs\live\moosecrap.live") Then
|
|||
|
FileIO.FileSystem.DeleteFile("C:\apache\htdocs\live\moosecrap.live")
|
|||
|
End If
|
|||
|
Else
|
|||
|
If Not x.live And (Now - x.lastlive).TotalMinutes > 5 Then
|
|||
|
x.live = True
|
|||
|
Dim t As String = x.name & " just went live!" & vbNewLine &
|
|||
|
streamnode.SelectSingleNode("channel/url").InnerText & vbNewLine &
|
|||
|
"""" & streamnode.SelectSingleNode("channel/status").InnerText & """" & vbNewLine &
|
|||
|
"Game: " & streamnode.SelectSingleNode("game").InnerText
|
|||
|
sk.FindChatUsingBlob(goldarblob).SendMessage(t)
|
|||
|
ElseIf Not x.live Then
|
|||
|
x.live = True
|
|||
|
End If
|
|||
|
x.lastlive = Now
|
|||
|
If x.name = "moosecrap" AndAlso Not FileIO.FileSystem.FileExists("C:\apache\htdocs\live\moosecrap.live") Then
|
|||
|
FileIO.FileSystem.WriteAllText("C:\apache\htdocs\live\moosecrap.live", "", False)
|
|||
|
End If
|
|||
|
End If
|
|||
|
Catch
|
|||
|
End Try
|
|||
|
Next
|
|||
|
End Sub
|
|||
|
|
|||
|
Private Sub CheckBoxTwitch_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBoxTwitch.CheckedChanged
|
|||
|
If CheckBoxTwitch.Checked Then
|
|||
|
If goldarblob <> "" Then
|
|||
|
twitchtimer.Enabled = True
|
|||
|
End If
|
|||
|
Else
|
|||
|
twitchtimer.Enabled = False
|
|||
|
End If
|
|||
|
End Sub
|
|||
|
|
|||
|
''' <summary>
|
|||
|
''' Play a youtube video
|
|||
|
''' </summary>
|
|||
|
''' <param name="id">11-digit alphanumeric youtube video id</param>
|
|||
|
''' <param name="seek">timestamp to seek to</param>
|
|||
|
''' <remarks></remarks>
|
|||
|
Private Sub PlayYouTube(id As String, Optional seek As String = "0")
|
|||
|
Dim ytdlpsi As New ProcessStartInfo("youtube-dl", "-g http://youtube.com/watch?v=" & id)
|
|||
|
ytdlpsi.RedirectStandardOutput = True
|
|||
|
ytdlpsi.UseShellExecute = False
|
|||
|
ytdlpsi.CreateNoWindow = True
|
|||
|
Dim ytdl As Process
|
|||
|
ytdl = Process.Start(ytdlpsi)
|
|||
|
Dim urls() As String = ytdl.StandardOutput.ReadToEnd.Split({vbCr, vbLf}, StringSplitOptions.RemoveEmptyEntries)
|
|||
|
|
|||
|
Dim digits() As String = seek.Split(":")
|
|||
|
Dim timestamp As Double
|
|||
|
Dim mult As Double = 1.0
|
|||
|
For i = digits.Length - 1 To 0 Step -1
|
|||
|
Dim digitdbl As Double
|
|||
|
If Double.TryParse(digits(i), digitdbl) Then
|
|||
|
timestamp += digitdbl * mult
|
|||
|
mult *= 60
|
|||
|
Else
|
|||
|
Throw New Exception("Seek was not a valid timestamp string")
|
|||
|
End If
|
|||
|
Next
|
|||
|
|
|||
|
'Dim ffplaypsi As New ProcessStartInfo("ffplay", "-autoexit -ss " & seek & " """ & urls.Last & """")
|
|||
|
Dim vlcpsi As New ProcessStartInfo(vlcpath, "--play-and-exit --qt-start-minimized --qt-notification=0 --start-time=" & CStr(timestamp) & " """ & urls.Last & """")
|
|||
|
|
|||
|
If Not vlcprocess Is Nothing AndAlso Not vlcprocess.HasExited Then
|
|||
|
vlcprocess.CloseMainWindow()
|
|||
|
End If
|
|||
|
|
|||
|
Me.Focus()
|
|||
|
vlcprocess = Process.Start(vlcpsi)
|
|||
|
Threading.Thread.Sleep(500)
|
|||
|
SetFocus(vlcprocess.MainWindowHandle)
|
|||
|
|
|||
|
|
|||
|
End Sub
|
|||
|
|
|||
|
End Class
|