Advertisement
Guest User

Untitled

a guest
Nov 24th, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.83 KB | None | 0 0
  1. #widget.py
  2. import requests
  3. import peewee
  4. import json
  5. from database import *
  6. import vk
  7. import time
  8.  
  9. class WidgetHonoka:
  10.  
  11. __slots__ = ("token", "count", "group_domen", "code")
  12.  
  13. def __init__(self, token, count, group_domen):
  14. self.token = token
  15. self.count = count
  16. self.group_domen = group_domen
  17.  
  18. self.code = self.init_code()
  19.  
  20. def init_code(self):
  21. code = json.loads('{"title":"My Table","title_url":"https://vk.com/kotrik","head":[{"text":"Имя"},{"text":"Сообщения","align":"right"},{"text":"Опыт","align":"right"}],"body":[]}')
  22. code['title'] = "Топ 10 пользователей"
  23. code['title_url'] = f"vk.com/{self.group_domen}"
  24. code['count'] = self.count
  25.  
  26. return code
  27.  
  28. def textify_value(self, value):
  29. avalue = abs(value)
  30. if avalue >= 1000000000000000000000000000000000000000000000000000000000000000:
  31. return str(round(value / 1000000000000000000000000000000000000000000000000000000000000000, 2)) + " вгтл."
  32. if avalue >= 1000000000000000000000000000000000:
  33. return str(round(value / 1000000000000000000000000000000000, 2)) + " дец."
  34. if avalue >= 1000000000000000000000000000000:
  35. return str(round(value / 1000000000000000000000000000000, 2)) + " нон."
  36. if avalue >= 1000000000000000000000000000:
  37. return str(round(value / 1000000000000000000000000000, 2)) + " окт."
  38.  
  39. if avalue >= 1000000000000000000000000:
  40. return str(round(value / 1000000000000000000000000, 2)) + " сптл."
  41.  
  42. if avalue >= 1000000000000000000000:
  43. return str(round(value / 1000000000000000000000, 2)) + " скст."
  44.  
  45. if avalue >= 1000000000000000000:
  46. return str(round(value / 1000000000000000000, 2)) + " квнт."
  47.  
  48. if avalue >= 1000000000000000:
  49. return str(round(value / 1000000000000000, 2)) + " квдр."
  50.  
  51. if avalue >= 1000000000000:
  52. return str(round(value / 1000000000000, 2)) + " трлн."
  53.  
  54. if avalue >= 1000000000:
  55. return str(round(value / 1000000000, 2)) + " млрд."
  56.  
  57. if avalue >= 1000000:
  58. return str(round(value / 1000000, 2)) + " млн."
  59.  
  60. if avalue >= 100000:
  61. return str(round(value / 100000)) + "00 тыс."
  62.  
  63. if avalue >= 1000:
  64. return str(round(value / 1000)) + " тыс."
  65.  
  66. return str(value)
  67.  
  68. def humanize(self, value):
  69. fi = '{:,d}'.format(value).replace(',', '.')
  70.  
  71. return fi
  72.  
  73. def clear(self):
  74. self.code['body'] = []
  75.  
  76. def add_user(self, id, name, mess_count, xp_count):
  77. self.code['body'].append(
  78. [
  79. dict(text=name, icon_id=f"id{id}", url=f"https://vk.com/id{id}"),
  80. dict(text=f"{self.textify_value(mess_count)}"),
  81. dict(text=f"{self.humanize(xp_count)} xp")
  82. ]
  83. )
  84.  
  85. def update_widget(self):
  86. params = {
  87. 'code': f"return {json.dumps(self.code, ensure_ascii=False)};",
  88. 'type': 'table',
  89. 'access_token': self.token,
  90. 'v': '5.80'
  91. }
  92. r = requests.get("https://api.vk.com/method/appWidgets.update", params=params).json()
  93.  
  94. return r
  95.  
  96.  
  97. def main(vka):
  98. users = PxUser.select().order_by(PxUser.xpcount.desc()).limit(10)
  99.  
  100. usr = []
  101. for x in users:
  102. usr += [x.iduser]
  103.  
  104. d = vka.users.get(user_ids=','.join(usr), v="5.80")
  105. for x in d:
  106. user = PxUser.select().where(PxUser.iduser == x['id']).get()
  107.  
  108. Widget.add_user(x['id'], f"{x['first_name']} {x['last_name']}", user.messcount, user.xpcount)
  109.  
  110. r = Widget.update_widget()
  111. if 'response' in r:
  112. print("Sucs!")
  113. else:
  114. print(f"Error! {r}")
  115. time.sleep(60)
  116. Widget.clear()
  117.  
  118.  
  119. if __name__ == "__main__":
  120. global Widget
  121.  
  122. Widget = WidgetHonoka("<token widget>", 10, "<group domain>")
  123.  
  124. token_group = "<vk token>"
  125. session = vk.Session(access_token=token_group)
  126. vka = vk.API(session)
  127.  
  128. while True:
  129. main(vka)
  130.  
  131.  
  132. #database.py
  133. import peewee
  134.  
  135. _name = "kutana"
  136. _host = "127.0.0.1"
  137. _user = "kotrik"
  138. _port = 5432
  139. _password= ""
  140.  
  141. driver = peewee.PostgresqlDatabase
  142. database = driver(_name, host=_host, port=_port, user=_user, password=_password)
  143.  
  144. class PxUser(peewee.Model):
  145. iduser = peewee.CharField()
  146. messcount = peewee.IntegerField()
  147. xpcount = peewee.IntegerField()
  148. rank = peewee.IntegerField()
  149. personal = peewee.CharField()
  150.  
  151. class Meta:
  152. database = database
  153.  
  154. class Role(peewee.Model):
  155. user_id = peewee.BigIntegerField()
  156. role = peewee.TextField()
  157.  
  158. class Meta:
  159. database = database
  160.  
  161. if database:
  162. database.connect()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement