마스터에 원하는 기능이 없는 경우 PR을 수행하기 전에 "Dev" 빌드를 확인하십시오.
TwitchLib은 다양한 Twitch 서비스와 상호 작용할 수 있는 강력한 C# 라이브러리입니다. 현재 지원되는 서비스는 채팅 및 귓속말, API(v5(더 이상 사용되지 않음), helix, 문서화되지 않음, 타사), PubSub 이벤트 시스템 및 Twitch Extensions입니다. 다음은 TwitchLib을 구성하는 핵심 구성요소에 대한 설명입니다.
Discord에서 직접 대화해 보세요. https://discord.gg/8NXaEyV
전체 라이브러리 문서를 보려면 여기에서 doxygen 문서를 확인하세요.
다음은 TwitchLib의 각 핵심 구성 요소를 활용하는 방법에 대한 기본 예입니다. 이는 C# 예제입니다. 참고: Twitchlib.API는 현재 Visual Basic을 지원하지 않습니다. 업데이트: PR'd Visual Basic 수정 사항이지만 이를 사용하는 사람의 테스트가 필요합니다.
using System ;
using TwitchLib . Client ;
using TwitchLib . Client . Enums ;
using TwitchLib . Client . Events ;
using TwitchLib . Client . Extensions ;
using TwitchLib . Client . Models ;
using TwitchLib . Communication . Clients ;
using TwitchLib . Communication . Models ;
namespace TestConsole
{
class Program
{
static void Main ( string [ ] args )
{
Bot bot = new Bot ( ) ;
Console . ReadLine ( ) ;
}
}
class Bot
{
TwitchClient client ;
public Bot ( )
{
ConnectionCredentials credentials = new ConnectionCredentials ( " twitch_username " , " access_token " ) ;
var clientOptions = new ClientOptions
{
MessagesAllowedInPeriod = 750 ,
ThrottlingPeriod = TimeSpan . FromSeconds ( 30 )
} ;
WebSocketClient customClient = new WebSocketClient ( clientOptions ) ;
client = new TwitchClient ( customClient ) ;
client . Initialize ( credentials , " channel " ) ;
client . OnLog += Client_OnLog ;
client . OnJoinedChannel += Client_OnJoinedChannel ;
client . OnMessageReceived += Client_OnMessageReceived ;
client . OnWhisperReceived += Client_OnWhisperReceived ;
client . OnNewSubscriber += Client_OnNewSubscriber ;
client . OnConnected += Client_OnConnected ;
client . Connect ( ) ;
}
private void Client_OnLog ( object sender , OnLogArgs e )
{
Console . WriteLine ( $" { e . DateTime . ToString ( ) } : { e . BotUsername } - { e . Data } " ) ;
}
private void Client_OnConnected ( object sender , OnConnectedArgs e )
{
Console . WriteLine ( $" Connected to { e . AutoJoinChannel } " ) ;
}
private void Client_OnJoinedChannel ( object sender , OnJoinedChannelArgs e )
{
Console . WriteLine ( " Hey guys! I am a bot connected via TwitchLib! " ) ;
client . SendMessage ( e . Channel , " Hey guys! I am a bot connected via TwitchLib! " ) ;
}
private void Client_OnMessageReceived ( object sender , OnMessageReceivedArgs e )
{
if ( e . ChatMessage . Message . Contains ( " badword " ) )
client . TimeoutUser ( e . ChatMessage . Channel , e . ChatMessage . Username , TimeSpan . FromMinutes ( 30 ) , " Bad word! 30 minute timeout! " ) ;
}
private void Client_OnWhisperReceived ( object sender , OnWhisperReceivedArgs e )
{
if ( e . WhisperMessage . Username == " my_friend " )
client . SendWhisper ( e . WhisperMessage . Username , " Hey! Whispers are so cool!! " ) ;
}
private void Client_OnNewSubscriber ( object sender , OnNewSubscriberArgs e )
{
if ( e . Subscriber . SubscriptionPlan == SubscriptionPlan . Prime )
client . SendMessage ( e . Channel , $" Welcome { e . Subscriber . DisplayName } to the substers! You just earned 500 points! So kind of you to use your Twitch Prime on this channel! " ) ;
else
client . SendMessage ( e . Channel , $" Welcome { e . Subscriber . DisplayName } to the substers! You just earned 500 points! " ) ;
}
}
}
Imports System
Imports TwitchLib.Client
Imports TwitchLib.Client.Enums
Imports TwitchLib.Client.Events
Imports TwitchLib.Client.Extensions
Imports TwitchLib.Client.Models
Module Module1
Sub Main()
Dim bot As New Bot()
Console.ReadLine()
End Sub
Friend Class Bot
Private client As TwitchClient
Public Sub New ()
Dim credentials As New ConnectionCredentials( "twitch_username" , "Token" )
client = New TwitchClient()
client.Initialize(credentials, "Channel" )
AddHandler client.OnJoinedChannel, AddressOf onJoinedChannel
AddHandler client.OnMessageReceived, AddressOf onMessageReceived
AddHandler client.OnWhisperReceived, AddressOf onWhisperReceived
AddHandler client.OnNewSubscriber, AddressOf onNewSubscriber
AddHandler client.OnConnected, AddressOf Client_OnConnected
client.Connect()
End Sub
Private Sub Client_OnConnected( ByVal sender As Object , ByVal e As OnConnectedArgs)
Console.WriteLine( $ "Connected to {e.AutoJoinChannel}" )
End Sub
Private Sub onJoinedChannel( ByVal sender As Object , ByVal e As OnJoinedChannelArgs)
Console.WriteLine( "Hey guys! I am a bot connected via TwitchLib!" )
client.SendMessage(e.Channel, "Hey guys! I am a bot connected via TwitchLib!" )
End Sub
Private Sub onMessageReceived( ByVal sender As Object , ByVal e As OnMessageReceivedArgs)
If e.ChatMessage.Message.Contains( "badword" ) Then
client.TimeoutUser(e.ChatMessage.Channel, e.ChatMessage.Username, TimeSpan.FromMinutes( 30 ), "Bad word! 30 minute timeout!" )
End If
End Sub
Private Sub onWhisperReceived( ByVal sender As Object , ByVal e As OnWhisperReceivedArgs)
If e.WhisperMessage.Username = "my_friend" Then
client.SendWhisper(e.WhisperMessage.Username, "Hey! Whispers are so cool!!" )
End If
End Sub
Private Sub onNewSubscriber( ByVal sender As Object , ByVal e As OnNewSubscriberArgs)
If e.Subscriber.SubscriptionPlan = SubscriptionPlan.Prime Then
client.SendMessage(e.Channel, $ "Welcome {e.Subscriber.DisplayName} to the substers! You just earned 500 points! So kind of you to use your Twitch Prime on this channel!" )
Else
client.SendMessage(e.Channel, $ "Welcome {e.Subscriber.DisplayName} to the substers! You just earned 500 points!" )
End If
End Sub
End Class
End Module
TwitchClient 이벤트 및 통화의 전체 목록을 보려면 여기를 클릭하세요.
참고: TwitchAPI는 이제 선택적 클라이언트 ID 및 인증 토큰을 사용하여 인스턴스화해야 하는 싱글톤 클래스입니다. 최소한 클라이언트 ID를 제공하지 못하거나 때로는 액세스 토큰을 제공하지 않으면 예외가 발생할 수 있다는 점을 알아두세요. v5(사용되지 않음) 및 Helix는 거의 전적으로 Twitch 사용자 ID에서 작동합니다. 모든 Twitch API 버전에는 해당 사용자 이름/사용자 ID를 가져오는 방법이 있습니다.
using System . Collections . Generic ;
using System . Threading . Tasks ;
using TwitchLib . Api ;
using TwitchLib . Api . Helix . Models . Users ;
using TwitchLib . Api . V5 . Models . Subscriptions ; //v5 Deprecated
namespace Example
{
class Program
{
private static TwitchAPI api ;
private void Main ( )
{
api = new TwitchAPI ( ) ;
api . Settings . ClientId = " client_id " ;
api . Settings . AccessToken = " access_token " ; // App Secret is not an Accesstoken
}
private async Task ExampleCallsAsync ( )
{
//Gets a list of all the subscritions of the specified channel.
var allSubscriptions = await api . Helix . Subscriptions . GetBroadcasterSubscriptionsAsync ( " broadcasterID " , null , 100 , " accesstoken " )
//Get channels a specified user follows.
var userFollows = await api . Helix . Users . GetUsersFollowsAsync ( " user_id " ) ;
//Get Specified Channel Follows
var channelFollowers = await api . Helix . Users . GetUsersFollowsAsync ( fromId : " channel_id " ) ;
//Returns a stream object if online, if channel is offline it will be null/empty.
var streams = await api . Helix . Streams . GetStreamsAsync ( userIds : userIdsList ) ; // Alternative: userLogins: userLoginsList
//Update Channel Title/Game/Language/Delay - Only require 1 option here.
var request = new ModifyChannelInformationRequest ( ) { GameId = " New_Game_Id " , Title = " New stream title " , BroadcasterLanguage = " New_Language " , Delay = New_Delay } ;
await api . Helix . Channels . ModifyChannelInformationAsync ( " broadcaster_Id " , request , " AccessToken " ) ;
}
}
}
Imports System.Collections.Generic
Imports System.Threading.Tasks
Imports TwitchLib.Api
Imports TwitchLib.Api.Models.Helix.Users.GetUsersFollows
Imports TwitchLib.Api.Models.Helix.Users.GetUsers
Imports TwitchLib.Api.Models.v5.Subscriptions // V5 deprecated
Module Module1
Public api As TwitchAPI
Sub Main()
api = New TwitchAPI()
api.Settings.ClientId = "Client_id"
api.Settings.AccessToken = "access_token" // App Secret is not an Accesstoken
streaming().Wait()
getchanfollows().Wait()
getusersubs().Wait()
getnumberofsubs().Wait()
getsubstochannel().Wait()
Console.ReadLine()
End Sub
Private Async Function getusersubs() As Task
'Checks subscription for a specific user and the channel specified.
Dim subscription As Subscription = Await api.Channels.v5.CheckChannelSubscriptionByUserAsync( "channel_id" , "user_id" )
Console.WriteLine( "User subed: " + subscription.User.Name.ToString)
End Function
Private Async Function streaming() As Task
'shows if the channel is streaming or not (true/false)
Dim isStreaming As Boolean = Await api.Streams.v5.BroadcasterOnlineAsync( "channel_id" )
If isStreaming = True Then
Console.WriteLine( "Streaming" )
Else
Console.WriteLine( "Not Streaming" )
End If
End Function
Private Async Function chanupdate() As Task
'Update Channel Title/Game
'not used this yet
Await api.Channels.v5.UpdateChannelAsync( "channel_id" , "New stream title" , "Stronghold Crusader" )
End Function
Private Async Function getchanfollows() As Task
'Get Specified Channel Follows
Dim channelFollowers = Await api.Channels.v5.GetChannelFollowersAsync( "channel_id" )
Console.WriteLine(channelFollowers.Total.ToString)
End Function
Private Async Function getchanuserfollow() As Task
'Get channels a specified user follows.
Dim userFollows As GetUsersFollowsResponse = Await api.Users.helix.GetUsersFollowsAsync( "user_id" )
Console.WriteLine(userFollows.TotalFollows.ToString)
End Function
Private Async Function getnumberofsubs() As Task
'Get the number of subs to your channel
Dim numberofsubs = Await api.Channels.v5.GetChannelSubscribersAsync( "channel_id" )
Console.WriteLine(numberofsubs.Total.ToString)
End Function
Private Async Function getsubstochannel() As Task
'Gets a list of all the subscritions of the specified channel.
Dim allSubscriptions As List( Of Subscription) = Await api.Channels.v5.GetAllSubscribersAsync( "channel_id" )
Dim num As Integer
For num = 0 To allSubscriptions.Count - 1
Console.WriteLine(allSubscriptions.Item(num).User.Name.ToString)
Next num
End Function
End Module
TwitchAPI 호출의 전체 목록을 보려면 여기를 클릭하세요.
using System ;
using TwitchLib . PubSub ;
using TwitchLib . PubSub . Events ;
namespace TwitchLibPubSubExample
{
class Program
{
private TwitchPubSub client ;
static void Main ( string [ ] args )
{
new Program ( ) . Run ( ) ;
}
private void Run ( )
{
client = new TwitchPubSub ( ) ;
client . OnPubSubServiceConnected += onPubSubServiceConnected ;
client . OnListenResponse += onListenResponse ;
client . OnStreamUp += onStreamUp ;
client . OnStreamDown += onStreamDown ;
client . ListenToVideoPlayback ( " channelUsername " ) ;
client . ListenToBitsEvents ( " channelTwitchID " ) ;
client . Connect ( ) ;
Console . ReadLine ( ) ; // Quick fix to keep program from closing right away. ReadKey could also be used.
}
private void onPubSubServiceConnected ( object sender , EventArgs e )
{
// SendTopics accepts an oauth optionally, which is necessary for some topics
client . SendTopics ( ) ;
}
private void onListenResponse ( object sender , OnListenResponseArgs e )
{
if ( ! e . Successful )
throw new Exception ( $" Failed to listen! Response: { e . Response } " ) ;
}
private void onStreamUp ( object sender , OnStreamUpArgs e )
{
Console . WriteLine ( $" Stream just went up! Play delay: { e . PlayDelay } , server time: { e . ServerTime } " ) ;
}
private void onStreamDown ( object sender , OnStreamDownArgs e )
{
Console . WriteLine ( $" Stream just went down! Server time: { e . ServerTime } " ) ;
}
}
}
TwitchPubSub 기능의 전체 목록을 보려면 여기를 클릭하세요.
여기에서 확장 README를 참조하세요.
참고: 이 프로젝트를 참조용으로 사용하세요. 최신 상태가 보장되지는 않습니다.
이러한 예시를 사용하는 데 문제가 있는 경우 문제 또는 Discord에서 어떤 예시를 참조하고 있는지 알려주세요.
NuGet 콘솔을 통해 NuGet을 통해 이 라이브러리를 설치하려면 다음을 사용합니다.
Install-Package TwitchLib