Advertisement
Guest User

Untitled

a guest
Jun 7th, 2016
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.79 KB | None | 0 0
  1. import re
  2. import socket
  3. import json
  4. import urllib.request
  5. from urllib.parse import quote
  6.  
  7.  
  8.  
  9.  
  10. # --------------------------------------------- Start Settings ----------------------------------------------------
  11. HOST = "irc.twitch.tv" # Hostname of the IRC-Server in this case twitch's
  12. PORT = 6667 # Default IRC-Port
  13. CHAN = "#aerozztv" # Channelname = #{Nickname}
  14. NICK = "Evilbot254" # Nickname = Twitch username
  15. PASS = "oauth:y93pv2z5ii0usy6538esd30fc2gdr3" # www.twitchapps.com/tmi/ will help to retrieve the required authkey
  16. # --------------------------------------------- End Settings -------------------------------------------------------
  17.  
  18.  
  19. # --------------------------------------------- Start Functions ----------------------------------------------------
  20. def send_pong(msg):
  21. con.send(bytes('PONG %s\r\n' % msg, 'UTF-8'))
  22.  
  23.  
  24. def send_message(chan, msg):
  25. con.send(bytes('PRIVMSG %s :%s\r\n' % (chan, msg), 'UTF-8'))
  26.  
  27.  
  28. def send_nick(nick):
  29. con.send(bytes('NICK %s\r\n' % nick, 'UTF-8'))
  30.  
  31.  
  32. def send_pass(password):
  33. con.send(bytes('PASS %s\r\n' % password, 'UTF-8'))
  34.  
  35.  
  36. def join_channel(chan):
  37. con.send(bytes('JOIN %s\r\n' % chan, 'UTF-8'))
  38.  
  39.  
  40. def part_channel(chan):
  41. con.send(bytes('PART %s\r\n' % chan, 'UTF-8'))
  42. # --------------------------------------------- End Functions ------------------------------------------------------
  43.  
  44.  
  45. # --------------------------------------------- Start Helper Functions ---------------------------------------------
  46. def get_sender(msg):
  47. result = ""
  48. for char in msg:
  49. if char == "!":
  50. break
  51. if char != ":":
  52. result += char
  53. return result
  54.  
  55.  
  56. def get_message(msg):
  57. result = ""
  58. i = 3
  59. length = len(msg)
  60. while i < length:
  61. result += msg[i] + " "
  62. i += 1
  63. result = result.lstrip(':')
  64. return result
  65.  
  66.  
  67. def parse_message(msg):
  68. if len(msg) >= 1:
  69. msg = msg.split(' ')
  70. options = {'!test': command_test,
  71. '!hello': command_hello,
  72. '!price': command_price,
  73. '!steamprofile': command_steamprofile,
  74. '!steamid64': command_testing,
  75. '!followingsince': command_following,
  76. '!inventoryprice': command_inventory,
  77. '!inventoryhelp': command_inventoryhelp,
  78. '!steamstate': command_steamstate,
  79. '!inventory': command_inventory,
  80. '!asdf': command_asdf}
  81. if msg[0] in options:
  82. options[msg[0]]()
  83. # --------------------------------------------- End Helper Functions -----------------------------------------------
  84.  
  85.  
  86. # --------------------------------------------- Start Command Functions --------------------------------------------
  87. def command_test():
  88. send_message(CHAN, 'testing some stuff')
  89.  
  90. def command_hello():
  91. send_message(CHAN, 'Hello my name is evilbot254')
  92.  
  93. def back_apiError():
  94. send_message(CHAN, "@%s -> This bot sucks please try again later." % sender)
  95.  
  96. def command_testing():
  97. global target
  98. msg = message[:-1].split(" ")
  99. cmd = msg[0].lower()
  100. if len(msg) >= 2:
  101. target = msg[1].strip("@").lower()
  102. else:
  103. target = sender
  104. page = urllib.request.urlopen("https://api.twitch.tv/api/channels/%s" % target).read().decode("utf-8")
  105. jsonData = json.loads(page)
  106. steamid64 = jsonData["steam_id"]
  107. if steamid64:
  108. if target == sender:
  109. send_message(CHAN, "@%s -> Your steamid64 is %s" % (sender,steamid64))
  110. else:
  111. send_message(CHAN, "@%s -> %s's steamid64 is %s" % (sender,target,steamid64))
  112. else:
  113. if target == sender:
  114. send_message(CHAN, "@%s -> Your steam account is not linked." % sender)
  115. else:
  116. send_message(CHAN, "@%s -> %s's Steam account is not linked." % (sender, target))
  117.  
  118. def command_price():
  119. global target
  120. msg = message[:-1].split(" ")
  121. cmd = msg[0].lower()
  122. if len(msg) >= 2:
  123. target = msg[1:]
  124. skin = ""
  125. for word in target:
  126. skin = skin + word + " "
  127. skin = skin[:-1]
  128. skin = skin.replace(" ", "%20")
  129. skin = skin.replace("stattrak", "StatTrak")
  130. skin = skin.replace("ft", r"(Field-Tested)")
  131. skin = skin.replace("bs", r"(Battle-Scarred)")
  132. skin = skin.replace("fn", r"(Factory%20New)")
  133. skin = skin.replace("ww", r"(Well-Worn)")
  134. skin = skin.replace("mw", r"(Minimal%20Wear)")
  135. skin = skin.replace("ak", r"Ak-47")
  136. try:
  137. req = urllib.request.Request("http://csgobackpack.net/api/GetItemPrice/?currency=USD&id=%s&time=7&icon=1" % quote(skin), headers={'User-Agent': 'Mozilla/5.0'})
  138. page = urllib.request.urlopen(req).read().decode('utf-8')
  139. jsonData = json.loads(page)
  140. try:
  141. average = jsonData["average_price"]
  142. lowest = jsonData["lowest_price"]
  143. keyCost = int(float(average)/2.49)
  144. send_message(CHAN, 'The average price is $%s(%s Keys)' % (average,keyCost))
  145. except KeyError:
  146. send_message(CHAN, "Invalid name!")
  147. except socket.error:
  148. send_message(CHAN, "@%s -> %s is not a valid name." (sender, skin))
  149. except UnicodeEncodeError:
  150. send_message(CHAN, "Knives are not working yet")
  151. else:
  152. send_message(CHAN, "You must provide a skin name.")
  153.  
  154.  
  155. def command_steamprofile():
  156. global target
  157. msg = message[:-1].split(" ")
  158. cmd = msg[0].lower()
  159. if len(msg) >= 2:
  160. target = msg[1].strip("@").lower()
  161. else:
  162. target = sender
  163. page = urllib.request.urlopen("https://api.twitch.tv/api/channels/%s" % target).read().decode("utf-8")
  164. jsonData = json.loads(page)
  165. steamid64 = jsonData["steam_id"]
  166. if steamid64:
  167. if target == sender:
  168. send_message(CHAN, "@%s -> Your steamprofile is https://steamcommunity.com/profiles/%s" % (sender,steamid64))
  169. else:
  170. send_message(CHAN, "@%s -> %s's steamidprofile is https://steamcommunity.com/profiles/%s" % (sender,target,steamid64))
  171. else:
  172. if target == sender:
  173. send_message(CHAN, "@%s -> Your steam account is not linked." % sender)
  174. else:
  175. send_message(CHAN, "@%s -> %s's Steam account is not linked." % (sender, target))
  176.  
  177.  
  178. def command_following():
  179. global target
  180. msg = message[:-1].split(" ")
  181. cmd = msg[0].lower()
  182. if len(msg) >= 2:
  183. target = msg[1].strip("@").lower()
  184. else:
  185. target = sender
  186.  
  187. page = urllib.request.urlopen(" https://apis.rtainc.co/twitchbot/following?channel=AerozzTV&user=%s" % target).read().decode("utf-8")
  188. if ("is not following" in page):
  189. if (target == sender):
  190. send_message(CHAN, "@%s -> You are not following" % sender)
  191. else:
  192. send_message(CHAN, "@%s -> %s is not following" % (sender,target))
  193. else:
  194.  
  195. if (target == sender):
  196. send_message(CHAN, "@%s -> you have been following for %s " % (sender,page))
  197. else:
  198. send_message(CHAN, "@%s -> %s Has been following for %s" % (sender,target,page))
  199.  
  200. def command_inventory():
  201. global target
  202. msg = message[:-1].split(" ")
  203. cmd = msg[0].lower()
  204. if len(msg) >= 2:
  205. target = msg[1].strip("@").lower()
  206. else:
  207. target = sender
  208. try:
  209. page = urllib.request.urlopen("https://api.twitch.tv/api/channels/%s" % target).read().decode("utf-8")
  210. jsonData = json.loads(page)
  211. steamid64 = jsonData["steam_id"]
  212. if steamid64:
  213. req = urllib.request.Request("http://csgobackpack.net/api/GetInventoryValue/?id=%s" % steamid64, headers={'User-Agent': 'Mozilla/5.0'})
  214. page = urllib.request.urlopen(req).read().decode('utf-8-sig')
  215. jsonData = json.loads(page)
  216. price = jsonData["value"]
  217. if target == sender:
  218. send_message(CHAN,"@%s -> Your Inventory Value is: $%s" % (sender,price))
  219. else:
  220. send_message(CHAN,"@%s -> %s's Inventory Value is $%s" % (sender,target,price))
  221. else:
  222. if target == sender:
  223. send_message(CHAN,"@%s -> Your steam account must be linked to check your inventory value!" %sender)
  224. else:
  225. send_message(CHAN,"@%s -> %s's Steam account is not linked." %(sender, target))
  226. except socket.error:
  227. send_message(CHAN,"@%s -> That Twitch username seems to be invalid." % sender)
  228.  
  229. def command_inventoryhelp():
  230. global target
  231. msg = message[:-1].split(" ")
  232. cmd = msg[0].lower()
  233. if len(msg) >= 2:
  234. target = msg[1].strip("@").lower()
  235. else:
  236. target = sender
  237. try:
  238. if target == sender:
  239. send_message(CHAN, "@%s -> Show's inventory value. (IMPORTANT) stickers on default guns might break it." %sender)
  240. else:
  241. send_message(CHAN, "@%s -> Show's inventory value. (IMPORTANT) stickers on default guns might break it." %target)
  242. except socket.error:
  243. send_message(CHAN, "@%s -> That Twitch username seems to be invalid." %sender)
  244.  
  245.  
  246. def command_steamstate():
  247. global target
  248. msg = message[:-1].split(" ")
  249. cmd = msg[0].lower()
  250. if len(msg) >= 2:
  251. target = msg[1].strip("@").lower()
  252. else:
  253. target = sender
  254.  
  255. try:
  256. page = urllib.request.urlopen("https://api.twitch.tv/api/channels/%s" % target).read().decode("utf-8")
  257. jsonData = json.loads(page)
  258. steamid64 = jsonData["steam_id"]
  259. if steamid64:
  260.  
  261. page = urllib.request.urlopen("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=9C9530376816B36AEAE1129460042C41&steamids=%s" % steamid64).read().decode("utf-8")
  262. jsonData = json.loads(page)
  263. state = jsonData["response"]["players"][0]["personastate"]
  264. if target == sender:
  265. send_message(CHAN, "@%s -> Your steamstatus is %s" % sender,state)
  266. else:
  267. send_message(CHAN, "@%s -> %s's Steamstatus is %s" % sender,target,state)
  268. else:
  269. if target == sender:
  270.  
  271. send_message(CHAN, "@%s -> You are not linked" % sender)
  272. else:
  273. send_message(CHAN, "@%s -> %s's is not linked" % sender,target)
  274. except socket.error:
  275. send_message(CHAN, "@%s -> That Twitch username seems to be invalid." %sender)
  276. except TypeError:
  277. send_message(CHAN, "@%s -> You typed it wrong." %sender)
  278.  
  279.  
  280. def command_asdf():
  281. send_message(CHAN, 'asdfster')
  282.  
  283. # --------------------------------------------- End Command Functions ----------------------------------------------
  284.  
  285. con = socket.socket()
  286. con.connect((HOST, PORT))
  287.  
  288. send_pass(PASS)
  289. send_nick(NICK)
  290. join_channel(CHAN)
  291.  
  292. data = ""
  293.  
  294. while True:
  295. try:
  296. data = data+con.recv(1024).decode('UTF-8')
  297. data_split = re.split(r"[~\r\n]+", data)
  298. data = data_split.pop()
  299.  
  300. for line in data_split:
  301. line = str.rstrip(line)
  302. line = str.split(line)
  303.  
  304. if len(line) >= 1:
  305. if line[0] == 'PING':
  306. send_pong(line[1])
  307.  
  308. if line[1] == 'PRIVMSG':
  309. sender = get_sender(line[0])
  310. message = get_message(line)
  311. parse_message(message)
  312.  
  313. print(sender + ": " + message)
  314.  
  315. except socket.error:
  316. print("Socket died")
  317.  
  318. except socket.timeout:
  319. print("Socket timeout")
  320. except IndexError:
  321. pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement