Advertisement
Guest User

Untitled

a guest
Jun 10th, 2016
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.83 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. '!lastmatch': command_lastmatch,
  81. '!pricecurrency': command_pricecurrency,
  82. '!asdf': command_asdf}
  83. if msg[0] in options:
  84. options[msg[0]]()
  85. # --------------------------------------------- End Helper Functions -----------------------------------------------
  86.  
  87.  
  88. # --------------------------------------------- Start Command Functions --------------------------------------------
  89. def command_test():
  90. send_message(CHAN, 'testing some stuff')
  91.  
  92. def command_hello():
  93. send_message(CHAN, 'Hello my name is evilbot254')
  94.  
  95. def back_apiError():
  96. send_message(CHAN, "@%s -> This bot sucks please try again later." % sender)
  97.  
  98. def command_testing():
  99. global target
  100. msg = message[:-1].split(" ")
  101. cmd = msg[0].lower()
  102. if len(msg) >= 2:
  103. target = msg[1].strip("@").lower()
  104. else:
  105. target = sender
  106. page = urllib.request.urlopen("https://api.twitch.tv/api/channels/%s" % target).read().decode("utf-8")
  107. jsonData = json.loads(page)
  108. steamid64 = jsonData["steam_id"]
  109. if steamid64:
  110. if target == sender:
  111. send_message(CHAN, "@%s -> Your steamid64 is %s" % (sender,steamid64))
  112. else:
  113. send_message(CHAN, "@%s -> %s's steamid64 is %s" % (sender,target,steamid64))
  114. else:
  115. if target == sender:
  116. send_message(CHAN, "@%s -> Your steam account is not linked." % sender)
  117. else:
  118. send_message(CHAN, "@%s -> %s's Steam account is not linked." % (sender, target))
  119.  
  120. def command_price():
  121. validCurrencies = ["GBP", "USD", "SEK", "EUR", "RUB"]
  122.  
  123. global target
  124. msg = message[:-1].split(" ")
  125. cmd = msg[0].lower()
  126. if len(msg) >= 2:
  127. currency = msg[1].upper()
  128. target = msg[2:]
  129. skin = ""
  130. for word in target:
  131. skin = skin + word + " "
  132. skin = skin[:-1]
  133. skin = skin.replace(" ", "%20")
  134. skin = skin.replace("stattrak", "StatTrak")
  135. skin = skin.replace("ft", r"(Field-Tested)")
  136. skin = skin.replace("bs", r"(Battle-Scarred)")
  137. skin = skin.replace("fn", r"(Factory%20New)")
  138. skin = skin.replace("ww", r"(Well-Worn)")
  139. skin = skin.replace("mw", r"(Minimal%20Wear)")
  140. skin = skin.replace("ak", r"Ak-47%20|")
  141. skin = skin.replace("m4a1", r"M4A1-S%20|")
  142. skin = skin.replace("usp", r"USP-S%20|")
  143. skin = skin.replace("p2k", r"P2000%20|")
  144. skin = skin.replace("cz", r"CZ75-Auto%20|")
  145. skin = skin.replace("dual", r"Dual%20Berettas%20|")
  146. skin = skin.replace("pp-bison", r"PP-Bison%20|")
  147. skin = skin.replace("p250", r"P250%20|")
  148. skin = skin.replace("aug", r"AUG%20|")
  149. skin = skin.replace("ump", r"UMP-45%20|")
  150. skin = skin.replace("galil", r"Galil AR%20|")
  151. skin = skin.replace("ssg", r"SSG 08%20|")
  152. skin = skin.replace("tec9", r"Tec-9%20|")
  153. skin = skin.replace("xm", r"XM1014%20|")
  154. skin = skin.replace("g3", r"G3SG1%20|")
  155. skin = skin.replace("m249", r"M249%20|")
  156. skin = skin.replace("mp9", r"MP9%20|")
  157. skin = skin.replace("sawedoff", r"Sawed-Off%20|")
  158. skin = skin.replace("sawed", r"Sawed-Off%20|")
  159. skin = skin.replace("sg", r"SG 553%20|")
  160. skin = skin.replace("awp", r"AWP%20|")
  161. skin = skin.replace("glock", r"Glock-18%20|")
  162. skin = skin.replace("desert", r"Desert Eagle%20|")
  163. skin = skin.replace("r8", r"R8 Revolver%20|")
  164. skin = skin.replace("revolver", r"R8 Revolver%20|")
  165. skin = skin.replace("nova", r"Nova%20|")
  166. skin = skin.replace("mag7", r"MAG-7%20|")
  167. skin = skin.replace("swag7", r"MAG-7%20|")
  168. skin = skin.replace("mac10", r"MAC-10%20|")
  169. skin = skin.replace("mp7", r"MP7%20|")
  170. skin = skin.replace("p90", r"P90%20|")
  171. skin = skin.replace("pro90", r"P90%20|")
  172. skin = skin.replace("mp9", r"MP9%20|")
  173. skin = skin.replace("m4a4", r"M4A4%20|")
  174. skin = skin.replace("scar", r"SCAR-20%20|")
  175. skin = skin.replace("scar20", r"SCAR-20%20")
  176. skin = skin.replace("vanillabayonet", r"★ Bayonet")
  177. skin = skin.replace("vanillabutterfly", r"★ Butterfly Knife")
  178. skin = skin.replace("vanillafalchion", r"★ Falchion Knife")
  179. skin = skin.replace("vanillaflip", r"★ Flip Knife")
  180. skin = skin.replace("vanillagut", r"★ Gut Knife")
  181. skin = skin.replace("vanillahuntsman", r"★ Huntsman Knife")
  182. skin = skin.replace("vanillakarambit", r"★ Karambit")
  183. skin = skin.replace("vanillam9", r"★ M9 Bayonet")
  184. skin = skin.replace("vanillashadow", r"★ Shadow Daggers")
  185. skin = skin.replace("vanillabowie", r"★ Bowie Knife")
  186. skin = skin.replace("vanillabuttplugs", r"★ Shadow Daggers")
  187. skin = skin.replace("vanillashadowdaggers",r"★ Shadow Daggers")
  188. skin = skin.replace("vanillam9bayonet", r"★ M9 Bayonet")
  189. skin = skin.replace("vanillabowieknife", r"★ Bowie Knife")
  190. skin = skin.replace("bayonet", r"★ Bayonet%20|")
  191. skin = skin.replace("butterfly", r"★ Butterfly Knife%20|")
  192. skin = skin.replace("falchion", r"★ Falchion Knife%20|")
  193. skin = skin.replace("flip", r"★ Flip Knife%20|")
  194. skin = skin.replace("gut", r"★ Gut Knife%20|")
  195. skin = skin.replace("huntsman", r"★ Huntsman Knife%20|")
  196. skin = skin.replace("karambit", r"★ Karambit%20|")
  197. skin = skin.replace("m9", r"★ M9 Bayonet%20|")
  198. skin = skin.replace("shadow", r"★ Shadow Daggers%20|")
  199. skin = skin.replace("bowie", r"★ Bowie Knife%20|")
  200. skin = skin.replace("buttplugs", r"★ Shadow Daggers%20|")
  201. skin = skin.replace("shadowdaggers",r"★ Shadow Daggers%20|")
  202. skin = skin.replace("m9bayonet", r"★ M9 Bayonet%20|")
  203. skin = skin.replace("bowieknife", r"★ Bowie Knife%20|")
  204. currency = currency.replace("$", r"USD")
  205.  
  206. try:
  207. req = urllib.request.Request("http://csgobackpack.net/api/GetItemPrice/?currency=%s&id=%s&time=7&icon=1" % (currency, quote(skin)), headers={'User-Agent': 'Mozilla/5.0'})
  208. page = urllib.request.urlopen(req).read().decode('utf-8')
  209. jsonData = json.loads(page)
  210. try:
  211. average = jsonData["average_price"]
  212. lowest = jsonData["lowest_price"]
  213. currency = jsonData["currency"]
  214. if currency in validCurrencies:
  215. if currency == "USD":
  216. keyCost = int(float(average)/2.49)
  217. send_message(CHAN, 'The average price is %s %s(%s Keys) ' % (average,currency,keyCost))
  218. elif currency == "SEK":
  219. keyCost = int(float(average)/20.67)
  220. send_message(CHAN, 'The average price is %s %s(%s Keys) ' % (average,currency,keyCost))
  221. elif currency == "EUR":
  222. keyCost = int(float(average)/2.21)
  223. send_message(CHAN, 'The average price is %s %s(%s Keys) ' % (average,currency,keyCost))
  224. elif currency == "GBP":
  225. keyCost = int(float(average)/1.73)
  226. send_message(CHAN, 'The average price is %s %s(%s Keys) ' % (average,currency,keyCost))
  227. elif currency == "RUB":
  228. keyCost = int(float(average)/162.49)
  229. send_message(CHAN, 'The average price is %s %s(%s Keys) ' % (average,currency,keyCost))
  230.  
  231.  
  232. except KeyError:
  233. send_message(CHAN, "Invalid item name!")
  234. else:
  235. send_message(CHAN, "not a valid currency! or you didn't add one !pricecurrency")
  236. except socket.error:
  237. send_message(CHAN, "@%s -> %s is not a valid name." % (sender, skin))
  238. except UnicodeEncodeError:
  239. send_message(CHAN, "Sorry something went wrong")
  240. else:
  241. send_message(CHAN, "You must provide a skin name.")
  242.  
  243.  
  244. def command_steamprofile():
  245. global target
  246. msg = message[:-1].split(" ")
  247. cmd = msg[0].lower()
  248. if len(msg) >= 2:
  249. target = msg[1].strip("@").lower()
  250. else:
  251. target = sender
  252. page = urllib.request.urlopen("https://api.twitch.tv/api/channels/%s" % target).read().decode("utf-8")
  253. jsonData = json.loads(page)
  254. steamid64 = jsonData["steam_id"]
  255. if steamid64:
  256. if target == sender:
  257. send_message(CHAN, "@%s -> Your steamprofile is https://steamcommunity.com/profiles/%s" % (sender,steamid64))
  258. else:
  259. send_message(CHAN, "@%s -> %s's steamidprofile is https://steamcommunity.com/profiles/%s" % (sender,target,steamid64))
  260. else:
  261. if target == sender:
  262. send_message(CHAN, "@%s -> Your steam account is not linked." % sender)
  263. else:
  264. send_message(CHAN, "@%s -> %s's Steam account is not linked." % (sender, target))
  265.  
  266.  
  267. def command_following():
  268. global target
  269. msg = message[:-1].split(" ")
  270. cmd = msg[0].lower()
  271. if len(msg) >= 2:
  272. target = msg[1].strip("@").lower()
  273. else:
  274. target = sender
  275.  
  276. page = urllib.request.urlopen(" https://apis.rtainc.co/twitchbot/following?channel=AerozzTV&user=%s" % target).read().decode("utf-8")
  277. if ("is not following" in page):
  278. if (target == sender):
  279. send_message(CHAN, "@%s -> You are not following" % sender)
  280. else:
  281. send_message(CHAN, "@%s -> %s is not following" % (sender,target))
  282. else:
  283.  
  284. if (target == sender):
  285. send_message(CHAN, "@%s -> you have been following for %s " % (sender,page))
  286. else:
  287. send_message(CHAN, "@%s -> %s Has been following for %s" % (sender,target,page))
  288.  
  289. def command_inventory():
  290. global target
  291. msg = message[:-1].split(" ")
  292. cmd = msg[0].lower()
  293. if len(msg) >= 2:
  294. target = msg[1].strip("@").lower()
  295. else:
  296. target = sender
  297. try:
  298. page = urllib.request.urlopen("https://api.twitch.tv/api/channels/%s" % target).read().decode("utf-8")
  299. jsonData = json.loads(page)
  300. steamid64 = jsonData["steam_id"]
  301. if steamid64:
  302. req = urllib.request.Request("http://csgobackpack.net/api/GetInventoryValue/?id=%s" % steamid64, headers={'User-Agent': 'Mozilla/5.0'})
  303. page = urllib.request.urlopen(req).read().decode('utf-8-sig')
  304. jsonData = json.loads(page)
  305. price = jsonData["value"]
  306. if target == sender:
  307. send_message(CHAN,"@%s -> Your Inventory Value is: $%s" % (sender,price))
  308. else:
  309. send_message(CHAN,"@%s -> %s's Inventory Value is $%s" % (sender,target,price))
  310. else:
  311. if target == sender:
  312. send_message(CHAN,"@%s -> Your steam account must be linked to check your inventory value!" %sender)
  313. else:
  314. send_message(CHAN,"@%s -> %s's Steam account is not linked." %(sender, target))
  315. except socket.error:
  316. send_message(CHAN,"@%s -> That Twitch username seems to be invalid." % sender)
  317.  
  318. def command_inventoryhelp():
  319. global target
  320. msg = message[:-1].split(" ")
  321. cmd = msg[0].lower()
  322. if len(msg) >= 2:
  323. target = msg[1].strip("@").lower()
  324. else:
  325. target = sender
  326. try:
  327. if target == sender:
  328. send_message(CHAN, "@%s -> Show's inventory value. (IMPORTANT) stickers on default guns might break it." %sender)
  329. else:
  330. send_message(CHAN, "@%s -> Show's inventory value. (IMPORTANT) stickers on default guns might break it." %target)
  331. except socket.error:
  332. send_message(CHAN, "@%s -> That Twitch username seems to be invalid." %sender)
  333.  
  334.  
  335. def command_steamstate():
  336. global target
  337. msg = message[:-1].split(" ")
  338. cmd = msg[0].lower()
  339. if len(msg) >= 2:
  340. target = msg[1].strip("@").lower()
  341. else:
  342. target = sender
  343.  
  344. try:
  345. page = urllib.request.urlopen("https://api.twitch.tv/api/channels/%s" % target).read().decode("utf-8")
  346. jsonData = json.loads(page)
  347. steamid64 = jsonData["steam_id"]
  348. if steamid64:
  349.  
  350. page = urllib.request.urlopen("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=9C9530376816B36AEAE1129460042C41&steamids=%s" % steamid64).read().decode("utf-8")
  351. jsonData = json.loads(page)
  352. state = jsonData["response"]["players"][0]["personastate"]
  353. if target == sender:
  354. send_message(CHAN, "@%s -> Your steamstatus is %s" % sender,state)
  355. else:
  356. send_message(CHAN, "@%s -> %s's Steamstatus is %s" % sender,target,state)
  357. else:
  358. if target == sender:
  359.  
  360. send_message(CHAN, "@%s -> You are not linked" % sender)
  361. else:
  362. send_message(CHAN, "@%s -> %s's is not linked" % sender,target)
  363. except socket.error:
  364. send_message(CHAN, "@%s -> That Twitch username seems to be invalid." %sender)
  365. except TypeError:
  366. send_message(CHAN, "@%s -> You typed it wrong." %sender)
  367.  
  368. def command_lastmatch():
  369. global target
  370. msg = message[:-1].split(" ")
  371. cmd = msg[0].lower()
  372. if len(msg) >= 2:
  373. target = msg[1].strip("@").lower()
  374. else:
  375. target = sender
  376.  
  377. req = urllib.request.Request("http://csgo-stats.net/nightbot.php?user=aerozztv&action=lastmatch" ,headers={'User-Agent': 'Mozilla/5.0'})
  378. page = urllib.request.urlopen(req).read().decode('utf-8')
  379. if "Use" in page and "https://csgo-stats.net/" in page:
  380. pass
  381. elif "https://csgo-stats.net/" in page and not "Use" in page:
  382. page = page[:-40]
  383. send_message(CHAN, "@%s Aerozztv's last game stats are -> %s" % (sender,page))
  384.  
  385. def command_pricecurrency():
  386. global target
  387. msg = message[:-1].split(" ")
  388. cmd = msg[0].lower()
  389. if len(msg) >= 2:
  390. target = msg[1].strip("@").lower()
  391. else:
  392. target = sender
  393. if (target == sender):
  394. send_message(CHAN, "@%s -> Currently there is USD, GBP, EUR and SEK." %(sender))
  395. else:
  396. send_message(CHAN, "@%s -> Currently there is USD, GBP, EUR and SEK." %(target))
  397.  
  398.  
  399.  
  400. def command_asdf():
  401. send_message(CHAN, 'asdfster')
  402.  
  403. # --------------------------------------------- End Command Functions ----------------------------------------------
  404.  
  405. con = socket.socket()
  406. con.connect((HOST, PORT))
  407.  
  408. send_pass(PASS)
  409. send_nick(NICK)
  410. join_channel(CHAN)
  411.  
  412. data = ""
  413.  
  414. while True:
  415. try:
  416. data = data+con.recv(1024).decode('UTF-8')
  417. data_split = re.split(r"[~\r\n]+", data)
  418. data = data_split.pop()
  419.  
  420. for line in data_split:
  421. line = str.rstrip(line)
  422. line = str.split(line)
  423.  
  424. if len(line) >= 1:
  425. if line[0] == 'PING':
  426. send_pong(line[1])
  427.  
  428. if line[1] == 'PRIVMSG':
  429. sender = get_sender(line[0])
  430. message = get_message(line)
  431. parse_message(message)
  432.  
  433. print(sender + ": " + message)
  434.  
  435. except socket.error:
  436. print("Socket died")
  437.  
  438. except socket.timeout:
  439. print("Socket timeout")
  440. except IndexError:
  441. pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement