main.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import inspect
  2. import logging
  3. import os
  4. import socket
  5. import sys
  6. import threading
  7. import webbrowser
  8. from flask import Flask, request, render_template, abort
  9. country_codes = {'ru': '7', 'ua': '380', 'kz': '7', 'by': '375'}
  10. services = os.listdir('services')
  11. service_classes = {}
  12. sys.path.insert(0, 'services')
  13. for service in services:
  14. if service.endswith('.py') and service != 'service.py':
  15. module = __import__(service[:-3])
  16. for member in inspect.getmembers(module, inspect.isclass):
  17. if member[1].__module__ == module.__name__:
  18. service_classes[module] = member[0]
  19. app = Flask(__name__)
  20. log = logging.getLogger('werkzeug')
  21. log.setLevel(logging.CRITICAL)
  22. def get_ip():
  23. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  24. try:
  25. s.connect(('10.255.255.255', 1))
  26. ip = s.getsockname()[0]
  27. except Exception:
  28. ip = '127.0.0.1'
  29. finally:
  30. s.close()
  31. return ip
  32. def run_service(service_class, module_, phone, country_code, phone_code, sms_text, type_):
  33. if type_ == 'call':
  34. getattr(module_, service_class)(phone, [country_code, phone_code], sms_text).send_call()
  35. else:
  36. getattr(module_, service_class)(phone, [country_code, phone_code], sms_text).send_sms()
  37. sys.exit()
  38. @app.route('/', methods=['GET'])
  39. def index():
  40. return render_template('index.html', sms=len(service_classes))
  41. @app.route('/sms', methods=['POST'])
  42. def start():
  43. try:
  44. phone = request.form['phone']
  45. count = request.form['count']
  46. country_code = request.form['country']
  47. phone_code = country_codes[country_code]
  48. send_calls = request.form['call']
  49. sms_text = request.form['smsText']
  50. send_calls_bool = True if send_calls == 'true' else False
  51. for _ in range(int(count)):
  52. for module_, service_class in service_classes.items():
  53. try:
  54. _ = getattr(module_, service_class).send_call
  55. if send_calls_bool:
  56. threading.Thread(target=run_service,
  57. args=(service_class, module_, phone, country_code, phone_code, sms_text,
  58. 'call')).start()
  59. except AttributeError:
  60. threading.Thread(target=run_service,
  61. args=(service_class, module_, phone, country_code, phone_code, sms_text,
  62. 'sms')).start()
  63. return '(ノ◕ヮ◕)ノ*:・゚✧'
  64. except (ValueError, KeyError):
  65. abort(400)
  66. if not bool(os.environ.get('PORT')):
  67. print(' * Listening on http://' + get_ip() + ':8080/')
  68. webbrowser.open('http://' + get_ip() + ':8080/', new=2, autoraise=True)
  69. app.run(host='0.0.0.0', port=8080, threaded=True)