Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #widget.py
- import requests
- import peewee
- import json
- from database import *
- import vk
- import time
- class WidgetHonoka:
- __slots__ = ("token", "count", "group_domen", "code")
- def __init__(self, token, count, group_domen):
- self.token = token
- self.count = count
- self.group_domen = group_domen
- self.code = self.init_code()
- def init_code(self):
- code = json.loads('{"title":"My Table","title_url":"https://vk.com/kotrik","head":[{"text":"Имя"},{"text":"Сообщения","align":"right"},{"text":"Опыт","align":"right"}],"body":[]}')
- code['title'] = "Топ 10 пользователей"
- code['title_url'] = f"vk.com/{self.group_domen}"
- code['count'] = self.count
- return code
- def textify_value(self, value):
- avalue = abs(value)
- if avalue >= 1000000000000000000000000000000000000000000000000000000000000000:
- return str(round(value / 1000000000000000000000000000000000000000000000000000000000000000, 2)) + " вгтл."
- if avalue >= 1000000000000000000000000000000000:
- return str(round(value / 1000000000000000000000000000000000, 2)) + " дец."
- if avalue >= 1000000000000000000000000000000:
- return str(round(value / 1000000000000000000000000000000, 2)) + " нон."
- if avalue >= 1000000000000000000000000000:
- return str(round(value / 1000000000000000000000000000, 2)) + " окт."
- if avalue >= 1000000000000000000000000:
- return str(round(value / 1000000000000000000000000, 2)) + " сптл."
- if avalue >= 1000000000000000000000:
- return str(round(value / 1000000000000000000000, 2)) + " скст."
- if avalue >= 1000000000000000000:
- return str(round(value / 1000000000000000000, 2)) + " квнт."
- if avalue >= 1000000000000000:
- return str(round(value / 1000000000000000, 2)) + " квдр."
- if avalue >= 1000000000000:
- return str(round(value / 1000000000000, 2)) + " трлн."
- if avalue >= 1000000000:
- return str(round(value / 1000000000, 2)) + " млрд."
- if avalue >= 1000000:
- return str(round(value / 1000000, 2)) + " млн."
- if avalue >= 100000:
- return str(round(value / 100000)) + "00 тыс."
- if avalue >= 1000:
- return str(round(value / 1000)) + " тыс."
- return str(value)
- def humanize(self, value):
- fi = '{:,d}'.format(value).replace(',', '.')
- return fi
- def clear(self):
- self.code['body'] = []
- def add_user(self, id, name, mess_count, xp_count):
- self.code['body'].append(
- [
- dict(text=name, icon_id=f"id{id}", url=f"https://vk.com/id{id}"),
- dict(text=f"{self.textify_value(mess_count)}"),
- dict(text=f"{self.humanize(xp_count)} xp")
- ]
- )
- def update_widget(self):
- params = {
- 'code': f"return {json.dumps(self.code, ensure_ascii=False)};",
- 'type': 'table',
- 'access_token': self.token,
- 'v': '5.80'
- }
- r = requests.get("https://api.vk.com/method/appWidgets.update", params=params).json()
- return r
- def main(vka):
- users = PxUser.select().order_by(PxUser.xpcount.desc()).limit(10)
- usr = []
- for x in users:
- usr += [x.iduser]
- d = vka.users.get(user_ids=','.join(usr), v="5.80")
- for x in d:
- user = PxUser.select().where(PxUser.iduser == x['id']).get()
- Widget.add_user(x['id'], f"{x['first_name']} {x['last_name']}", user.messcount, user.xpcount)
- r = Widget.update_widget()
- if 'response' in r:
- print("Sucs!")
- else:
- print(f"Error! {r}")
- time.sleep(60)
- Widget.clear()
- if __name__ == "__main__":
- global Widget
- Widget = WidgetHonoka("<token widget>", 10, "<group domain>")
- token_group = "<vk token>"
- session = vk.Session(access_token=token_group)
- vka = vk.API(session)
- while True:
- main(vka)
- #database.py
- import peewee
- _name = "kutana"
- _host = "127.0.0.1"
- _user = "kotrik"
- _port = 5432
- _password= ""
- driver = peewee.PostgresqlDatabase
- database = driver(_name, host=_host, port=_port, user=_user, password=_password)
- class PxUser(peewee.Model):
- iduser = peewee.CharField()
- messcount = peewee.IntegerField()
- xpcount = peewee.IntegerField()
- rank = peewee.IntegerField()
- personal = peewee.CharField()
- class Meta:
- database = database
- class Role(peewee.Model):
- user_id = peewee.BigIntegerField()
- role = peewee.TextField()
- class Meta:
- database = database
- if database:
- database.connect()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement