229 lines
15 KiB
Python
229 lines
15 KiB
Python
import datetime
|
||
import config
|
||
import aprint
|
||
import json
|
||
import requests
|
||
import random
|
||
from urllib.request import urlopen
|
||
|
||
aprint.info("Script started")
|
||
|
||
try:
|
||
fwords = json.loads(open("fword.json", "r").read())
|
||
except:
|
||
fwords = {"vk_fwords": {}, "ds_fwords": {}, "vk_last_fword": 0, "ds_last_fword": 0, "created": datetime.datetime.utcnow().timestamp()}
|
||
|
||
ds_delete_fword = requests.delete(f"https://discordapp.com/api/guilds/{config.DISCORD_GUILD}/members/{fwords['ds_last_fword']}/roles/{config.DISCORD_ROLE_fword}", headers={'Authorization': f'Bot {config.DISCORD_TOKEN}'})
|
||
if ds_delete_fword.ok:
|
||
aprint.info(f"Discord remove role: {ds_delete_fword.status_code} {ds_delete_fword.reason}")
|
||
else:
|
||
aprint.error(f"Discord remove role: {ds_delete_fword.status_code} {ds_delete_fword.reason}")
|
||
|
||
midnight_text = ["Миднайт!",
|
||
"Полночь!",
|
||
"Midnight!",
|
||
"миднигхт",
|
||
"Середина ночи",
|
||
"Смена даты!",
|
||
"00:00",
|
||
"Пора ложиться спать!",
|
||
"12 ночи",
|
||
"Медьникель!",
|
||
"Мёднугхт!",
|
||
"Ночное рандеву",
|
||
"Опівночі!",
|
||
"Арабская ночь",
|
||
"Конец смены"]
|
||
role_names = ["F-word дня",
|
||
"Лох дня",
|
||
"Приговорить к расстрелу",
|
||
"Малолетний дебил",
|
||
"Он отправится в Бразилию",
|
||
"Пропустил много стрелок пока битбоксил с пикой точеной",
|
||
"В дурку отправляется",
|
||
"Поставил крейзифрог на рингтон",
|
||
"Попросил наступить на себя еще раз",
|
||
"ААХАААА ОН ДОЛБОЁБ ПОСМОТРИТЕ НА НЕГООО!!",
|
||
"парннь ты долбоёб",
|
||
"Быдло дня",
|
||
"Фоткаю лучшего подписчика. Улыбнись",
|
||
"Восхваляет солнце"]
|
||
|
||
imgvkrequest = requests.post("https://api.vk.com/method/photos.get", data={'owner_id': "-" + str(config.VK_GROUP_ID),
|
||
'album_id': config.VK_ALBUM_MIDNIGHT_ID,
|
||
'count': 1000,
|
||
'access_token': config.VK_SERVICE_TOKEN,
|
||
'v': '5.124'})
|
||
if imgvkrequest.ok:
|
||
try:
|
||
random_images_query = json.loads(imgvkrequest.text)
|
||
random_number = random.randint(0, random_images_query['response']['count']-1)
|
||
aprint.info(f"VK method 'photos.get': {imgvkrequest.status_code} {imgvkrequest.reason}, returned photos: {random_images_query['response']['count']}, selected: {random_number}")
|
||
image = random_images_query['response']['items'][random_number]
|
||
image_request = urlopen(image["sizes"][-1]['url']).read()
|
||
image_file = open("md.jpg", "wb")
|
||
image_file.write(image_request)
|
||
image_file.close()
|
||
MIDNIGHT_IMAGE = True
|
||
except Exception as e:
|
||
MIDNIGHT_IMAGE = False
|
||
aprint.error(f"Error while getting image: {str(e)}")
|
||
else:
|
||
MIDNIGHT_IMAGE = False
|
||
aprint.error(f"VK method 'photos.get': {imgvkrequest.status_code} {imgvkrequest.reason}")
|
||
selected = random.choice(midnight_text)
|
||
now = datetime.datetime.utcnow()
|
||
new_date = now + datetime.timedelta(hours=3, minutes=3)
|
||
to_ny = datetime.datetime(year=2022, month=1, day=1) - now
|
||
if 30 >= to_ny.days > 1:
|
||
if MIDNIGHT_IMAGE:
|
||
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\nДо нового года осталось {to_ny.days} дн.\nКартинка дня:"
|
||
else:
|
||
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\nДо нового года осталось {to_ny.days} дн.\nОшибка при получении картинки дня"
|
||
elif to_ny.days == 1:
|
||
if MIDNIGHT_IMAGE:
|
||
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\nДо нового года осталось 24 часа.\nКартинка дня:"
|
||
else:
|
||
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\nДо нового года осталось 24 часа.\nОшибка при получении картинки дня"
|
||
elif to_ny.days == 0:
|
||
if MIDNIGHT_IMAGE:
|
||
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\nC новым, 2022 годом!!!\nКартинка дня:"
|
||
else:
|
||
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\nC новым, 2022 годом!!!\nОшибка при получении картинки дня"
|
||
else:
|
||
if MIDNIGHT_IMAGE:
|
||
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\nКартинка дня:"
|
||
else:
|
||
text = f"{selected}\nНаступило {new_date.strftime('%d.%m.%Y')}\n\nОшибка при получении картинки дня"
|
||
aprint.info(f"All ready. Waiting...")
|
||
|
||
MIDNIGHT = False
|
||
while not MIDNIGHT:
|
||
now = datetime.datetime.utcnow()
|
||
if now.hour == 21 and now.minute == 0 and now.second == 1:
|
||
aprint.info("Midnight")
|
||
if MIDNIGHT_IMAGE:
|
||
dcrequest = requests.post(f"https://discordapp.com/api/channels/{config.DISCORD_CHANNEL_ID}/messages",
|
||
headers={'Authorization': f'Bot {config.DISCORD_TOKEN}',
|
||
'Content-Disposition': 'form-data; filename="md.jpg"'},
|
||
data={'payload_json': json.dumps({'content': text}), },
|
||
files={'file': open("md.jpg", 'rb')})
|
||
vkrequest = requests.post("https://api.vk.com/method/messages.send",
|
||
data={'peer_id': int(config.VK_DIALOG_ID), 'message': text,
|
||
'random_id': random.randint(-9223372036854775808, 9223372036854775807),
|
||
'attachment': f"photo{image['owner_id']}_{image['id']}",
|
||
'access_token': config.VK_TOKEN, 'v': '5.124'})
|
||
else:
|
||
dcrequest = requests.post(f"https://discordapp.com/api/channels/{config.DISCORD_CHANNEL_ID}/messages",
|
||
headers={'Authorization': f'Bot {config.DISCORD_TOKEN}'},
|
||
data={'payload_json': json.dumps({'content': text}), })
|
||
vkrequest = requests.post("https://api.vk.com/method/messages.send",
|
||
data={'peer_id': int(config.VK_DIALOG_ID), 'message': text,
|
||
'random_id': random.randint(-9223372036854775808, 9223372036854775807),
|
||
'access_token': config.VK_TOKEN, 'v': '5.124'})
|
||
if dcrequest.ok:
|
||
aprint.info(f"Message to Discord: {dcrequest.status_code} {dcrequest.reason}")
|
||
else:
|
||
aprint.error(f"Message to Discord: {dcrequest.status_code} {dcrequest.reason}")
|
||
if vkrequest.ok:
|
||
aprint.info(f"Message to VK: {vkrequest.status_code} {vkrequest.reason}")
|
||
else:
|
||
aprint.error(f"Message to VK: {vkrequest.status_code} {vkrequest.reason}")
|
||
vk_users_request = requests.post("https://api.vk.com/method/messages.getConversationMembers",
|
||
data={'peer_id': config.VK_DIALOG_ID, 'fields': config.VK_ALBUM_MIDNIGHT_ID,
|
||
'group_id': config.VK_GROUP_ID, 'access_token': config.VK_TOKEN,
|
||
'v': '5.124'})
|
||
if vk_users_request.ok:
|
||
aprint.info(f"VK method 'messages.getConversationMembers': {vk_users_request.status_code} {vk_users_request.reason}")
|
||
random_members_query = json.loads(vk_users_request.text)
|
||
if not fwords.get('vk_fword_story_3'):
|
||
fwords['vk_fword_story_3'] = 0
|
||
if not fwords.get('vk_fword_story_2'):
|
||
fwords['vk_fword_story_2'] = 0
|
||
if not fwords.get('vk_fword_story_1'):
|
||
fwords['vk_fword_story_1'] = 0
|
||
new_vk_fword = False
|
||
while not new_vk_fword:
|
||
random_member = random.choice(random_members_query['response']['profiles'])
|
||
black_list = [292394871, 32272927]
|
||
white_list = [260168666]
|
||
debug_text = f"VK random person: {random_member['first_name']} {random_member['last_name']} - "
|
||
if (random_member['id'] != fwords['vk_last_fword'] and random_member['id'] != fwords['vk_fword_story_1'] and random_member['id'] != fwords['vk_fword_story_2'] and random_member['id'] != fwords['vk_fword_story_3'] and random_member['id'] not in white_list) or random_member['id'] in black_list:
|
||
aprint.debug(debug_text + "selected")
|
||
fwords['vk_fword_story_3'] = fwords['vk_fword_story_2']
|
||
fwords['vk_fword_story_2'] = fwords['vk_fword_story_1']
|
||
fwords['vk_fword_story_1'] = fwords['vk_last_fword']
|
||
fwords['vk_last_fword'] = random_member['id']
|
||
if str(random_member['id']) in fwords["vk_fwords"]:
|
||
fwords["vk_fwords"][str(random_member['id'])] += 1
|
||
else:
|
||
fwords["vk_fwords"][str(random_member['id'])] = 1
|
||
text = f"{random.choice(role_names)}: @id{random_member['id']} ({random_member['first_name']} {random_member['last_name']})"
|
||
vkrequest = requests.post("https://api.vk.com/method/messages.send",
|
||
data={'peer_id': config.VK_DIALOG_ID, 'message': text,
|
||
'random_id': random.randint(-9223372036854775808, 9223372036854775807),
|
||
'access_token': config.VK_TOKEN, 'v': '5.124'})
|
||
new_vk_fword = True
|
||
if vkrequest.ok:
|
||
aprint.info(f"Message to VK: {vkrequest.status_code} {vkrequest.reason}")
|
||
else:
|
||
aprint.error(f"Message to VK: {vkrequest.status_code} {vkrequest.reason}")
|
||
else:
|
||
aprint.debug(debug_text + "not selected")
|
||
else:
|
||
aprint.error(f"VK method 'messages.getConversationMembers': {vk_users_request.status_code} {vk_users_request.reason}")
|
||
ds_members_r = requests.get(f"https://discordapp.com/api/guilds/{config.DISCORD_GUILD}/members?limit=1000",
|
||
headers={'Authorization': f'Bot {config.DISCORD_TOKEN}'})
|
||
if ds_members_r.ok:
|
||
aprint.info(f"Discord guild member list request: {ds_members_r.status_code} {ds_members_r.reason}")
|
||
ds_members = json.loads(ds_members_r.text)
|
||
if not fwords.get('ds_fword_story_3'):
|
||
fwords['ds_fword_story_3'] = 0
|
||
if not fwords.get('ds_fword_story_2'):
|
||
fwords['ds_fword_story_2'] = 0
|
||
if not fwords.get('ds_fword_story_1'):
|
||
fwords['ds_fword_story_1'] = 0
|
||
new_ds_fword = False
|
||
black_list = [235010902640820225, 611931400094089269]
|
||
white_list = [324555734115418112]
|
||
while not new_ds_fword:
|
||
member_fword = random.choice(ds_members)
|
||
debug_text = f"DS random person: {member_fword['user']['username']}#{member_fword['user']['discriminator']} - "
|
||
if (member_fword['user']['id'] != fwords['ds_last_fword'] and member_fword['user']['id'] != fwords['ds_fword_story_1'] and member_fword['user']['id'] != fwords['ds_fword_story_2'] and member_fword['user']['id'] != fwords['ds_fword_story_3'] and member_fword['user']['id'] not in white_list) or member_fword['user']['id'] in black_list:
|
||
aprint.debug(debug_text + "selected")
|
||
fwords['ds_fword_story_3'] = fwords['ds_fword_story_2']
|
||
fwords['ds_fword_story_2'] = fwords['ds_fword_story_1']
|
||
fwords['ds_fword_story_1'] = fwords["ds_last_fword"]
|
||
fwords["ds_last_fword"] = member_fword['user']['id']
|
||
new_ds_fword = True
|
||
random_role = random.choice(role_names)
|
||
ds_req_rename_role = requests.patch(f"https://discordapp.com/api/guilds/{config.DISCORD_GUILD}/roles/{config.DISCORD_ROLE_fword}", headers={'Authorization': f'Bot {config.DISCORD_TOKEN}'}, json={'name': random_role, 'color':random.randint(0x000000, 0xffffff)})
|
||
if ds_req_rename_role.ok:
|
||
aprint.info(f"Discord rename role: {ds_req_rename_role.status_code} {ds_req_rename_role.reason}")
|
||
else:
|
||
aprint.error(f"Discord rename role: {ds_req_rename_role.status_code} {ds_req_rename_role.reason}")
|
||
text = f"{random_role}: <@{member_fword['user']['id']}>"
|
||
ds_send_message_r = requests.post(f"https://discordapp.com/api/channels/{config.DISCORD_CHANNEL_ID}/messages", headers={'Authorization': f'Bot {config.DISCORD_TOKEN}'}, data={'payload_json': json.dumps({'content': text})})
|
||
if ds_send_message_r.ok:
|
||
aprint.info(f"Message to Discord: {dcrequest.status_code} {dcrequest.reason}")
|
||
else:
|
||
aprint.error(f"Message to Discord: {dcrequest.status_code} {dcrequest.reason}")
|
||
ds_set_fword = requests.put(f"https://discordapp.com/api/guilds/{config.DISCORD_GUILD}/members/{member_fword['user']['id']}/roles/{config.DISCORD_ROLE_fword}", headers={'Authorization': f'Bot {config.DISCORD_TOKEN}'})
|
||
if ds_set_fword.ok:
|
||
aprint.info(f"Discord set role: {ds_set_fword.status_code} {ds_set_fword.reason}")
|
||
else:
|
||
aprint.error(f"Discord set role: {ds_set_fword.status_code} {ds_set_fword.reason}")
|
||
if str(member_fword['user']['id']) in fwords['ds_fwords']:
|
||
fwords['ds_fwords'][str(member_fword['user']['id'])] += 1
|
||
else:
|
||
fwords['ds_fwords'][str(member_fword['user']['id'])] = 1
|
||
else:
|
||
aprint.debug(debug_text + "not selected")
|
||
else:
|
||
aprint.error(f"Discord guild member list request: {ds_members_r.status_code} {ds_members_r.reason}")
|
||
with open("fword.json", "w") as jsn:
|
||
json.dump(fwords, jsn)
|
||
MIDNIGHT = True
|
||
|
||
aprint.info("Done")
|