{"id":15017870,"url":"https://github.com/twitchlib/twitchlib","last_synced_at":"2025-05-14T20:11:04.467Z","repository":{"id":40267145,"uuid":"42906885","full_name":"TwitchLib/TwitchLib","owner":"TwitchLib","description":"C# Twitch Chat, Whisper, API and PubSub Library.  Allows for chatting, whispering, stream event subscription and channel/account modification. Supports everything that supports .NETStandard 2.0","archived":false,"fork":false,"pushed_at":"2023-09-26T01:35:21.000Z","size":8983,"stargazers_count":869,"open_issues_count":35,"forks_count":150,"subscribers_count":47,"default_branch":"master","last_synced_at":"2025-05-10T07:36:12.121Z","etag":null,"topics":["api","bot","chat","client","csharp","events","pubsub","twitch","whisper"],"latest_commit_sha":null,"homepage":"https://twitchlib.github.io","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TwitchLib.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-09-22T02:40:30.000Z","updated_at":"2025-05-07T13:49:15.000Z","dependencies_parsed_at":"2024-06-21T04:19:42.558Z","dependency_job_id":"fd89a9ca-3851-4ee3-8ee7-e2489fce855b","html_url":"https://github.com/TwitchLib/TwitchLib","commit_stats":{"total_commits":1204,"total_committers":48,"mean_commits":"25.083333333333332","dds":"0.24501661129568109","last_synced_commit":"305bdf9da8970d4b1e8dfd604e5da208bb781784"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TwitchLib%2FTwitchLib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TwitchLib%2FTwitchLib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TwitchLib%2FTwitchLib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TwitchLib%2FTwitchLib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TwitchLib","download_url":"https://codeload.github.com/TwitchLib/TwitchLib/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254219374,"owners_count":22034397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","bot","chat","client","csharp","events","pubsub","twitch","whisper"],"created_at":"2024-09-24T19:51:06.421Z","updated_at":"2025-05-14T20:11:04.435Z","avatar_url":"https://github.com/TwitchLib.png","language":null,"readme":"\u003cp align=\"center\"\u003e \n\u003cimg src=\"https://cdn.syzuna-programs.de/images/twitchlib.png\" style=\"max-height: 300px;\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://travis-ci.org/swiftyspiffy/TwitchLib.svg\"\u003e\u003cimg src=\"https://api.travis-ci.org/swiftyspiffy/TwitchLib.svg?branch=master\" style=\"max-height: 300px;\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.microsoft.com/net\"\u003e\u003cimg src=\"https://img.shields.io/badge/.NET%20Framework-4.6.2-orange.svg\" style=\"max-height: 300px;\"\u003e\u003c/a\u003e\n\u003cimg src=\"https://img.shields.io/badge/Platform-.NET-lightgrey.svg\" style=\"max-height: 300px;\" alt=\"Platform: iOS\"\u003e\n\u003ca href=\"https://discord.gg/8NXaEyV\"\u003e\u003cimg src=\"https://img.shields.io/badge/Discord-TwitchAPI-red.svg\" style=\"max-height: 300px;\"\u003e\u003c/a\u003e\n\u003ca href=\"http://twitter.com/swiftyspiffy\"\u003e\u003cimg src=\"https://img.shields.io/badge/Twitter-@swiftyspiffy-blue.svg?style=flat\" style=\"max-height: 300px;\"\u003e\u003c/a\u003e\n\u003cimg src=\"https://img.shields.io/badge/.NET%20Standard%20-2.0-ff69b4\" style=\"max-height: 300px;\"\u003e\n\n\u003c/p\u003e\n\n**PLEASE check the \"Dev\" build before doing a PR if master does not have a feature your looking for.**\n\n## About\nTwitchLib is a powerful C# library that allows for interaction with various Twitch services. Currently supported services are: chat and whisper, API's (v5(deprecated), helix, undocumented, and third party), PubSub event system, and Twitch Extensions. Below are the descriptions of the core components that make up TwitchLib.\n\nTalk directly with us on Discord. https://discord.gg/8NXaEyV\n\n* **[TwitchLib.Client](https://github.com/TwitchLib/TwitchLib.Client)**: Handles chat and whisper Twitch services. Complete with a suite of events that fire for virtually every piece of data received from Twitch. Helper methods also exist for replying to whispers or fetching moderator lists.\n* **[TwitchLib.Api](https://github.com/TwitchLib/TwitchLib.Api)**: Complete coverage of v5(deprecated), and Helix endpoints. The API is now a singleton class. This class allows fetching all publicly accessible data as well as modify Twitch services like profiles and streams.\n* **[TwitchLib.PubSub](https://github.com/TwitchLib/TwitchLib.PubSub)**: Supports all documented Twitch PubSub topics as well as a few undocumented ones.\n* **[TwitchLib.Extension](https://github.com/TwitchLib/TwitchLib.Extension)**: EBS implementation for validating requests, interacting with extension via PubSub and calling Extension endpoints.\n* **[TwitchLib.Unity](https://github.com/TwitchLib/TwitchLib.Unity)**: Unity wrapper system for TwitchLib to allow easy usage of TwitchLib in Unity projects!\n* **[TwitchLib.Webhook](https://github.com/TwitchLib/TwitchLib.Webhook)**: Implements ASP.NET Core Webhook Receiver with TwitchLib. [Requires DotNet Core 2.1+]\n\n## Features\n* **TwitchLib.Client**:\n    * Send formatted or raw messages to Twitch\n    * Chat and Whisper command detection and parsing\n    * Helper methods\n        * Timeout, ban, unban users\n        * Change chat color and clear chat\n        * Invoke stream commercials and hosts\n        * Emote only, follower only, subscriber only, and slow mode\n        * Reply-to whisper support\n\t* Handles chat and whisper events:\n\t    * Connected and Joined channel\n\t    * Channel and User state changed\n\t    * Message received/sent\n\t    * Whisper received/sent (Sending requires a known/verified bot)\n\t    * User joined/left\n\t    * Moderator joined/left\n\t    * New subscriptions and resubscriptions\n\t    * Hosting and raid detection\n\t    * Chat clear, user timeouts, user bans\n* **TwitchLib.APi**:\n\t* Supported Twitch API endpoints:**v5(deprecated)**, **Helix**\n\t* Supported API sections:\n\t    * Badges, Bits, Blocks\n\t    * ChannelFeeds, Channels, Chat, Clips, Collections, Communities,\n\t    * Follows\n\t    * Games\n\t    * HypeTrain\n\t    * Ingests\n\t    * Root\n\t    * Search, Streams, Subscriptions\n\t    * Teams\n\t    * ThirdParty\n\t        * Moderator Lookup courtesy of 3v's [https://t.3v.fi](https://t.3v.fi)\n\t        * Twitch Authentication Flow courtesy of swiftyspiffy's [https://twitchtokengenerator.com/](https://twitchtokengenerator.com/)\n\t    * Undocumented\n\t        * ClipChat\n\t        * TwitchPrimeOffers\n\t        * ChannelHosts\n\t        * ChatProperties\n\t        * ChannelPanels\n\t        * CSMaps\n\t        * CSStreams\n\t        * RecentMessages\n\t        * Chatters\n\t        * RecentChannelEvents\n\t        * ChatUser\n\t        * UsernameAvailable\n\t    * User\n\t    * Videos\n\t* Services\n\t\t* **FollowerService**: Service for detection of new followers in somewhat real time.\n\t\t* **LiveStreamMonitor**: Service for detecting when a channel goes online/offline in somewhat real time.\n\t\t* **MessageThrottler**: Service to throttle chat messages to abide by Twitch use requirements.\n* **TwitchLib.PubSub**:\n\t* Supported topics:\n\t    * ChatModeratorActions\n\t    * BitsEvents\n\t    * VideoPlayback\n\t    * Whispers\n\t    * Subscriptions\n\t    * (Dev) Channel Points\n* **TwitchLib.Extension**:\n\t* Developed to be used as part of an EBS (extension back-end service) for a Twitch Extension.\n\t* Perform API calls related to Extensions (create secret, revoke, channels using extension, etc.)\n\t* Validation of requests to EBS using extension secret and JWT.\n\t* Interact with extension via PubSub.\n\n## Documentation\n#### Doxygen\nFor complete library documentation, view the doxygen docs \u003ca href=\"https://twitchlib.github.io/\" target=\"_blank\"\u003ehere\u003c/a\u003e.\n\t\n## Implementing\nBelow are basic examples of how to utilize each of the core components of TwitchLib. These are C# examples. \n*NOTE: Twitchlib.API currently does not support Visual Basic. UPDATE: PR'd Visual Basic fix but requires testing by someone that uses it.*\n\n#### Twitchlib.Client - CSharp\n```csharp\nusing System;\nusing TwitchLib.Client;\nusing TwitchLib.Client.Enums;\nusing TwitchLib.Client.Events;\nusing TwitchLib.Client.Extensions;\nusing TwitchLib.Client.Models;\nusing TwitchLib.Communication.Clients;\nusing TwitchLib.Communication.Models;\n\nnamespace TestConsole\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            Bot bot = new Bot();\n            Console.ReadLine();\n        }\n    }\n\n    class Bot\n    {\n        TwitchClient client;\n\t\n        public Bot()\n        {\n            ConnectionCredentials credentials = new ConnectionCredentials(\"twitch_username\", \"access_token\");\n\t    var clientOptions = new ClientOptions\n                {\n                    MessagesAllowedInPeriod = 750,\n                    ThrottlingPeriod = TimeSpan.FromSeconds(30)\n                };\n            WebSocketClient customClient = new WebSocketClient(clientOptions);\n            client = new TwitchClient(customClient);\n            client.Initialize(credentials, \"channel\");\n\n            client.OnLog += Client_OnLog;\n            client.OnJoinedChannel += Client_OnJoinedChannel;\n            client.OnMessageReceived += Client_OnMessageReceived;\n            client.OnWhisperReceived += Client_OnWhisperReceived;\n            client.OnNewSubscriber += Client_OnNewSubscriber;\n            client.OnConnected += Client_OnConnected;\n\n            client.Connect();\n        }\n  \n        private void Client_OnLog(object sender, OnLogArgs e)\n        {\n            Console.WriteLine($\"{e.DateTime.ToString()}: {e.BotUsername} - {e.Data}\");\n        }\n  \n        private void Client_OnConnected(object sender, OnConnectedArgs e)\n        {\n            Console.WriteLine($\"Connected to {e.AutoJoinChannel}\");\n        }\n  \n        private void Client_OnJoinedChannel(object sender, OnJoinedChannelArgs e)\n        {\n            Console.WriteLine(\"Hey guys! I am a bot connected via TwitchLib!\");\n            client.SendMessage(e.Channel, \"Hey guys! I am a bot connected via TwitchLib!\");\n        }\n\n        private void Client_OnMessageReceived(object sender, OnMessageReceivedArgs e)\n        {\n            if (e.ChatMessage.Message.Contains(\"badword\"))\n                client.TimeoutUser(e.ChatMessage.Channel, e.ChatMessage.Username, TimeSpan.FromMinutes(30), \"Bad word! 30 minute timeout!\");\n        }\n        \n        private void Client_OnWhisperReceived(object sender, OnWhisperReceivedArgs e)\n        {\n            if (e.WhisperMessage.Username == \"my_friend\")\n                client.SendWhisper(e.WhisperMessage.Username, \"Hey! Whispers are so cool!!\");\n        }\n        \n        private void Client_OnNewSubscriber(object sender, OnNewSubscriberArgs e)\n        {\n            if (e.Subscriber.SubscriptionPlan == SubscriptionPlan.Prime)\n                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!\");\n            else\n                client.SendMessage(e.Channel, $\"Welcome {e.Subscriber.DisplayName} to the substers! You just earned 500 points!\");\n        }\n    }\n}\n```\n\n#### Twitchlib.Client - Visual Basic\n```vb\nImports System\nImports TwitchLib.Client\nImports TwitchLib.Client.Enums\nImports TwitchLib.Client.Events\nImports TwitchLib.Client.Extensions\nImports TwitchLib.Client.Models\n\nModule Module1\n\n    Sub Main()\n        Dim bot As New Bot()\n        Console.ReadLine()\n    End Sub\n\n    Friend Class Bot\n        Private client As TwitchClient\n\n        Public Sub New()\n            Dim credentials As New ConnectionCredentials(\"twitch_username\", \"Token\")\n\n            client = New TwitchClient()\n            client.Initialize(credentials, \"Channel\")\n\n            AddHandler client.OnJoinedChannel, AddressOf onJoinedChannel\n            AddHandler client.OnMessageReceived, AddressOf onMessageReceived\n            AddHandler client.OnWhisperReceived, AddressOf onWhisperReceived\n            AddHandler client.OnNewSubscriber, AddressOf onNewSubscriber\n            AddHandler client.OnConnected, AddressOf Client_OnConnected\n\n            client.Connect()\n        End Sub\n        Private Sub Client_OnConnected(ByVal sender As Object, ByVal e As OnConnectedArgs)\n            Console.WriteLine($\"Connected to {e.AutoJoinChannel}\")\n        End Sub\n        Private Sub onJoinedChannel(ByVal sender As Object, ByVal e As OnJoinedChannelArgs)\n            Console.WriteLine(\"Hey guys! I am a bot connected via TwitchLib!\")\n            client.SendMessage(e.Channel, \"Hey guys! I am a bot connected via TwitchLib!\")\n        End Sub\n\n        Private Sub onMessageReceived(ByVal sender As Object, ByVal e As OnMessageReceivedArgs)\n            If e.ChatMessage.Message.Contains(\"badword\") Then\n                client.TimeoutUser(e.ChatMessage.Channel, e.ChatMessage.Username, TimeSpan.FromMinutes(30), \"Bad word! 30 minute timeout!\")\n            End If\n        End Sub\n        Private Sub onWhisperReceived(ByVal sender As Object, ByVal e As OnWhisperReceivedArgs)\n            If e.WhisperMessage.Username = \"my_friend\" Then\n                client.SendWhisper(e.WhisperMessage.Username, \"Hey! Whispers are so cool!!\")\n            End If\n        End Sub\n        Private Sub onNewSubscriber(ByVal sender As Object, ByVal e As OnNewSubscriberArgs)\n            If e.Subscriber.SubscriptionPlan = SubscriptionPlan.Prime Then\n                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!\")\n            Else\n                client.SendMessage(e.Channel, $\"Welcome {e.Subscriber.DisplayName} to the substers! You just earned 500 points!\")\n            End If\n        End Sub\n    End Class\n\n\nEnd Module\n```\n\n\nFor a complete list of TwitchClient events and calls, click \u003ca href=\"https://twitchlib.github.io/class_twitch_lib_1_1_client_1_1_twitch_client.html\" target=\"_blank\"\u003ehere\u003c/a\u003e\n#### Twitchlib.API - CSharp\nNote: TwitchAPI is now a singleton class that needs to be instantiated with optional clientid and auth token. Please know that failure to provide at least a client id, and sometimes an access token will result in exceptions. v5(Deprecated) and Helix operate almost entirely on Twitch user id's. There are methods in all Twitch api versions to get corresponding usernames/userids.\n\n```csharp\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nusing TwitchLib.Api;\nusing TwitchLib.Api.Helix.Models.Users;\nusing TwitchLib.Api.V5.Models.Subscriptions; //v5 Deprecated\n\nnamespace Example\n{\n    class Program\n    {\n        private static TwitchAPI api;\n\n        private void Main()\n        {\n            api = new TwitchAPI();\n            api.Settings.ClientId = \"client_id\";\n            api.Settings.AccessToken = \"access_token\"; // App Secret is not an Accesstoken\n        }\n\n        private async Task ExampleCallsAsync()\n        {\n            //Gets a list of all the subscritions of the specified channel.\n\t    var allSubscriptions = await api.Helix.Subscriptions.GetBroadcasterSubscriptionsAsync(\"broadcasterID\",null ,100 ,\"accesstoken\")\n\n            //Get channels a specified user follows.\n            var userFollows = await api.Helix.Users.GetUsersFollowsAsync(\"user_id\");\n\n            //Get Specified Channel Follows\n            var channelFollowers = await api.Helix.Users.GetUsersFollowsAsync(fromId: \"channel_id\");\n\n            //Returns a stream object if online, if channel is offline it will be null/empty.\n            var streams = await api.Helix.Streams.GetStreamsAsync(userIds: userIdsList); // Alternative: userLogins: userLoginsList\n\n            //Update Channel Title/Game/Language/Delay - Only require 1 option here.\n\t    var request = new ModifyChannelInformationRequest(){GameId = \"New_Game_Id\", Title = \"New stream title\", BroadcasterLanguage = \"New_Language\", Delay = New_Delay};\n            await api.Helix.Channels.ModifyChannelInformationAsync(\"broadcaster_Id\", request, \"AccessToken\");\n        }\n    }\n}\n```\n\n#### Twitchlib.API - Visual Basic\n```vb\nImports System.Collections.Generic\nImports System.Threading.Tasks\n\nImports TwitchLib.Api\nImports TwitchLib.Api.Models.Helix.Users.GetUsersFollows\nImports TwitchLib.Api.Models.Helix.Users.GetUsers\nImports TwitchLib.Api.Models.v5.Subscriptions // V5 deprecated\n\nModule Module1\n\n    Public api As TwitchAPI\n\n    Sub Main()\n        api = New TwitchAPI()\n        api.Settings.ClientId = \"Client_id\"\n        api.Settings.AccessToken = \"access_token\" // App Secret is not an Accesstoken\n        streaming().Wait()\n        getchanfollows().Wait()\n        getusersubs().Wait()\n        getnumberofsubs().Wait()\n        getsubstochannel().Wait()\n        Console.ReadLine()\n    End Sub\n\n    Private Async Function getusersubs() As Task\n        'Checks subscription for a specific user and the channel specified.\n        Dim subscription As Subscription = Await api.Channels.v5.CheckChannelSubscriptionByUserAsync(\"channel_id\", \"user_id\")\n        Console.WriteLine(\"User subed: \" + subscription.User.Name.ToString)\n    End Function\n\n    Private Async Function streaming() As Task\n        'shows if the channel is streaming or not (true/false)\n        Dim isStreaming As Boolean = Await api.Streams.v5.BroadcasterOnlineAsync(\"channel_id\")\n        If isStreaming = True Then\n            Console.WriteLine(\"Streaming\")\n        Else\n            Console.WriteLine(\"Not Streaming\")\n        End If\n    End Function\n\n    Private Async Function chanupdate() As Task\n        'Update Channel Title/Game\n        'not used this yet\n        Await api.Channels.v5.UpdateChannelAsync(\"channel_id\", \"New stream title\", \"Stronghold Crusader\")\n    End Function\n\n    Private Async Function getchanfollows() As Task\n        'Get Specified Channel Follows\n        Dim channelFollowers = Await api.Channels.v5.GetChannelFollowersAsync(\"channel_id\")\n        Console.WriteLine(channelFollowers.Total.ToString)\n    End Function\n\n    Private Async Function getchanuserfollow() As Task\n        'Get channels a specified user follows.\n        Dim userFollows As GetUsersFollowsResponse = Await api.Users.helix.GetUsersFollowsAsync(\"user_id\")\n        Console.WriteLine(userFollows.TotalFollows.ToString)\n    End Function\n\n    Private Async Function getnumberofsubs() As Task\n        'Get the number of subs to your channel\n        Dim numberofsubs = Await api.Channels.v5.GetChannelSubscribersAsync(\"channel_id\")\n        Console.WriteLine(numberofsubs.Total.ToString)\n    End Function\n\n    Private Async Function getsubstochannel() As Task\n        'Gets a list of all the subscritions of the specified channel.\n        Dim allSubscriptions As List(Of Subscription) = Await api.Channels.v5.GetAllSubscribersAsync(\"channel_id\")\n        Dim num As Integer\n        For num = 0 To allSubscriptions.Count - 1\n            Console.WriteLine(allSubscriptions.Item(num).User.Name.ToString)\n        Next num\n    End Function\n\nEnd Module\n```\nFor a complete list of TwitchAPI calls, click \u003ca href=\"https://twitchlib.github.io/class_twitch_lib_1_1_api_1_1_twitch_a_p_i.html\" target=\"_blank\"\u003ehere\u003c/a\u003e\n#### Twitchlib.PubSub\n```csharp\nusing System;\nusing TwitchLib.PubSub;\nusing TwitchLib.PubSub.Events;\n\nnamespace TwitchLibPubSubExample\n{\n    class Program\n    {\n        private TwitchPubSub client;\n        \n        static void Main(string[] args)\n        {\n            new Program().Run();\n        }\n        \n        private void Run()\n        {\n            client = new TwitchPubSub();\n\n            client.OnPubSubServiceConnected += onPubSubServiceConnected;\n            client.OnListenResponse += onListenResponse;\n            client.OnStreamUp += onStreamUp;\n            client.OnStreamDown += onStreamDown;\n\n            client.ListenToVideoPlayback(\"channelUsername\");\n            client.ListenToBitsEvents(\"channelTwitchID\");\n            \n            client.Connect();\n\t    \n\t    Console.ReadLine(); // Quick fix to keep program from closing right away. ReadKey could also be used.\n        }\n        \n\n        private void onPubSubServiceConnected(object sender, EventArgs e)\n        {\n            // SendTopics accepts an oauth optionally, which is necessary for some topics\n            client.SendTopics();\n        }\n        \n        private void onListenResponse(object sender, OnListenResponseArgs e)\n        {\n            if (!e.Successful)\n                throw new Exception($\"Failed to listen! Response: {e.Response}\");\n        }\n\n        private void onStreamUp(object sender, OnStreamUpArgs e)\n        {\n            Console.WriteLine($\"Stream just went up! Play delay: {e.PlayDelay}, server time: {e.ServerTime}\");\n        }\n\n        private void onStreamDown(object sender, OnStreamDownArgs e)\n        {\n            Console.WriteLine($\"Stream just went down! Server time: {e.ServerTime}\");\n        }\n    }\n}\n```\nFor a complete list of TwitchPubSub functionality, click \u003ca href=\"https://twitchlib.github.io/class_twitch_lib_1_1_pub_sub_1_1_twitch_pub_sub.html\" target=\"_blank\"\u003ehere\u003c/a\u003e\n\n#### TwitchLib.Extension\nSee the Extension README \u003ca href=\"https://github.com/TwitchLib/TwitchLib.Extension\" target=\"_blank\"\u003ehere\u003c/a\u003e.\n\n## Examples, Applications, Community Work, and Projects\n\n*NOTE: Use these projects as a reference, they are NOT guaranteed to be up-to-date.*\n\n*If you have any issues using these examples, please indicate what example you are referencing in the Issue or in Discord.*\n\n- Recent commits in projects using TwitchLib: [Link](https://github.com/search?o=desc\u0026q=twitchlib\u0026s=indexed\u0026type=Code)\n- [Bacon_Donut](https://www.twitch.tv/bacon_donut)'s VOD on building a Twitch bot using TwitchLib: [twitch.tv/videos/115788601](https://www.twitch.tv/videos/115788601)\n- Prom3theu5's Conan Exiles Dedicated Server Updater / Service - [Steam](http://steamcommunity.com/app/440900/discussions/6/133256240742484919/) [Github](https://steamcommunity.com/linkfilter/?url=https://github.com/prom3theu5/ConanExilesServerUpdater)\n- Von Jan Suchotzki's German Video Tutorial Series - [His Website](http://www.lernmoment.de/csharp-tutorial-deutsch/twitch-client-architektur/) [Youtube](https://www.youtube.com/watch?v=N0OPTdTGgTI)\n- DHSean's TwitchAutomator [Reddit](https://www.reddit.com/r/pcgaming/comments/4wfosp/ive_created_an_app_called_twitchautomator_which/) [Github](https://github.com/XenZibe/TwitchUpdater)\n- Moerty's Avia Bot, a fully featured bot that is a good example of a built out bot: [https://github.com/Moerty/AivaBot](https://github.com/Moerty/AivaBot)\n- [HardlyDifficult](https://www.twitch.tv/hardlydifficult)'s Chat Bot Creation VODs: [#1](https://www.twitch.tv/videos/141096702) [#2](https://www.twitch.tv/videos/141154684) [#3](https://www.twitch.tv/videos/141210422) [#4](https://www.twitch.tv/videos/141535267)\n- Prom3theu5's TwitchBotBase - [github.com/prom3theu5/TwitchBotBase](https://github.com/prom3theu5/TwitchBotBase)\n- Trump Academi's ASP.NET TwitchLib Implementation - [trumpacademi.com/day-9-twitch-bot-and-mvc-asp-net-implementing-twitchlib/](http://www.trumpacademi.com/day-9-twitch-bot-and-mvc-asp-net-implementing-twitchlib/)\n- ubhkid's Zombie Twitch chat game/overlay - [reddit.com/r/Unity3D/comments/6ll10k/i_made_a_game_for_my_twitch_chat/](https://www.reddit.com/r/Unity3D/comments/6ll10k/i_made_a_game_for_my_twitch_chat/)\n- FPH SpedV: Virtual Freight Company Tool - [sped-v.de](https://www.sped-v.de/)\n- Foglio's Tera Custom Cooldowns - [Tera Custom Cooldowns](https://github.com/Foglio1024/Tera-custom-cooldowns)\n\n## Installation\n\n### [NuGet](https://www.nuget.org/packages/TwitchLib/)\n\nTo install this library via NuGet via NuGet console, use:\n```\nInstall-Package TwitchLib\n```\nand via Package Manager, simply search:\n```\nTwitchLib\n```\nYou are also more than welcome to clone/fork this repo and build the library yourself!\n\n## Dependencies\n\n* Newtonsoft.Json 7.0.1+ ([nuget link](https://www.nuget.org/packages/Newtonsoft.Json/7.0.1)) ([GitHub](https://github.com/JamesNK/Newtonsoft.Json))\n* WebSocketSharp-NonPreRelease ([nuget link](https://www.nuget.org/packages/WebSocketSharp-NonPreRelease/)) ([GitHub](https://github.com/sta/websocket-sharp))\n\n## Contributors\n * Cole ([swiftyspiffy](http://twitter.com/swiftyspiffy))\n * SkyHuk ([SkyHukTV](http://twitter.com/SkyHukTV))\n * Nadermane ([Nadermane](http://twitter.com/nadermane))\n * BenWoodford ([BenWoodford](https://github.com/BenWoodford))\n * igor523 ([igor523](https://github.com/igor523))\n * jxlarrea ([jxlarrea](https://github.com/jxlarrea))\n * GlitchHound ([GlitchHound](https://github.com/GlitchHound))\n * Krutonium ([Krutonium](https://github.com/Krutonium))\n * toffaste1337([toffaste1337](https://github.com/toffaste1337))\n * Mr_Examed ([Mr_Examed](https://www.twitch.tv/mr_examed))\n * XuluniX ([XuluniX](https://github.com/XuluniX))\n * prom3theu5 ([prom3theu5](https://twitter.com/prom3theu5))\n * Ethan Lu ([elu00](https://github.com/elu00))\n * BeerHawk ([BeerHawk](https://github.com/BeerHawk))\n * Syzuna ([Syzuna](https://github.com/Syzuna))\n * LuckyNoS7evin ([luckynos7evin](https://twitch.tv/luckynos7evin))\n * Peter Richter ([DumpsterDoofus](DumpsterDoofus))\n * Mahsaap ([Mahsaap](https://twitter.com/mahsabludra))\n * neon-sunset ([neon-sunset](https://github.com/neon-sunset))\n * AoshiW ([AoshiW](https://github.com/AoshiW))\n * JulanDeAlb ([JulanDeAlb](https://github.com/JulanDeAlb))\n * GimliCZ ([GimliCZ](https://github.com/GimliCZ))\n * Bukk94 ([Bukk94](https://github.com/Bukk94))\n\n## Credits and Other Project Licenses\n * TwitchChatSharp - https://github.com/3ventic/TwitchChatSharp\n   * We used a good portion of the parsing in this project to improve our parsing. Special thanks to [@3ventic](https://3v.fi).\n\n## License\n\nThis project is available under the MIT license. See the LICENSE file for more info.\n\n:)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwitchlib%2Ftwitchlib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftwitchlib%2Ftwitchlib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwitchlib%2Ftwitchlib/lists"}