-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.py
More file actions
81 lines (61 loc) · 2.8 KB
/
Copy pathscript.py
File metadata and controls
81 lines (61 loc) · 2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from twitchAPI.twitch import Twitch
from twitchAPI.oauth import UserAuthenticator
from twitchAPI.type import AuthScope, ChatEvent
from twitchAPI.chat import Chat, EventData, ChatMessage, ChatSub, ChatCommand
import asyncio
import os
APP_ID = '2t7xii1685dqqu4sorqndlca8w61nf'
APP_SECRET = os.getenv("SECRET")
USER_SCOPE = [AuthScope.CHAT_READ]
TARGET_CHANNEL = 'feviknight'
# this will be called when the event READY is triggered, which will be on bot start
async def on_ready(ready_event: EventData):
print('Bot is ready for work, joining channels')
# join our target channel, if you want to join multiple, either call join for each individually
# or even better pass a list of channels as the argument
await ready_event.chat.join_room(TARGET_CHANNEL)
# you can do other bot initialization things in here
# this will be called whenever a message in a channel was send by either the bot OR another user
async def on_message(msg: ChatMessage):
print(f'in {msg.room.name}, {msg.user.name} said: {msg.text}')
# this will be called whenever someone subscribes to a channel
async def on_sub(sub: ChatSub):
print(f'New subscription in {sub.room.name}:\n'
f' Type: {sub.sub_plan}\n'
f' Message: {sub.sub_message}')
# this will be called whenever the !reply command is issued
async def test_command(cmd: ChatCommand):
if len(cmd.parameter) == 0:
await cmd.reply('you did not tell me what to reply with')
else:
await cmd.reply(f'{cmd.user.name}: {cmd.parameter}')
# this is where we set up the bot
async def run():
# set up twitch api instance and add user authentication with some scopes
twitch = await Twitch(APP_ID, APP_SECRET)
auth = UserAuthenticator(twitch, USER_SCOPE)
token, refresh_token = await auth.authenticate()
await twitch.set_user_authentication(token, USER_SCOPE, refresh_token)
# create chat instance
chat = await Chat(twitch)
# register the handlers for the events you want
# listen to when the bot is done starting up and ready to join channels
chat.register_event(ChatEvent.READY, on_ready)
# listen to chat messages
chat.register_event(ChatEvent.MESSAGE, on_message)
# listen to channel subscriptions
chat.register_event(ChatEvent.SUB, on_sub)
# there are more events, you can view them all in this documentation
# you can directly register commands and their handlers, this will register the !reply command
chat.register_command('reply', test_command)
# we are done with our setup, lets start this bot up!
chat.start()
# lets run till we press enter in the console
try:
input('press ENTER to stop\\n')
finally:
# now we can close the chat bot and the twitch api client
chat.stop()
await twitch.close()
# lets run our setup
asyncio.run(run())