-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathirc.py
82 lines (61 loc) · 2.11 KB
/
irc.py
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
82
from message_wrapper import receive_messages, delete_messages
from queue_wrapper import get_queue
import asyncio
import websockets
import json
import logging
logger = logging.getLogger("websockets")
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())
oauth = ""
userId = "virgil246"
channel_list = []
loop = asyncio.get_event_loop()
async def start_connection():
uri = "wss://irc-ws.chat.twitch.tv:443"
async for websocket in websockets.connect(uri):
try:
await websocket.send(f"PASS {oauth}")
await websocket.send(f"NICK {userId}")
for channel in channel_list:
await websocket.send(f"JOIN #{channel}")
await handler(websocket)
except websockets.ConnectionClosed:
continue
async def consumer_handler(websocket):
async for message in websocket:
await consumer(message)
async def consumer(message):
print("message", message)
async def producer_handler(websocket):
while True:
msg_list = await producer()
coro = [send_message(websocket, msg) for msg in msg_list]
await asyncio.gather(*coro)
async def producer():
queue = get_queue("DonateNoti")
batch_size = 10
received_messages = await loop.run_in_executor(
None, receive_messages, queue, batch_size, 2
)
message_list = []
for message in received_messages:
attr, body = unpack_message(message)
donate_msg = json.loads(body)
message_list.append(donate_msg)
if received_messages:
await loop.run_in_executor(None, delete_messages, queue, received_messages)
return message_list
async def handler(websocket):
await asyncio.gather(
consumer_handler(websocket),
producer_handler(websocket),
)
def unpack_message(msg):
return (msg.message_attributes, msg.body)
async def send_message(websocket, donate_msg):
await websocket.send(
f'PRIVMSG #{donate_msg["twitch_id"]} :{donate_msg["name"]}丟了{donate_msg["amount"]}說: {donate_msg["msg"]}'
)
if __name__ == "__main__":
loop.run_until_complete(start_connection())