This commit is contained in:
夜坂雅 2023-02-14 10:53:17 +08:00
parent e013332e05
commit b1e81e2c8d
2 changed files with 13 additions and 22 deletions

View File

@ -24,14 +24,7 @@ from nyx_bot.chat_functions import (
from nyx_bot.config import Config
from nyx_bot.errors import NyxBotRuntimeError, NyxBotValueError
from nyx_bot.storage import MatrixMessage, MembershipUpdates, UserTag
from nyx_bot.utils import (
get_body,
get_reply_to,
make_divergence,
parse_matrixdotto_link,
parse_wordcloud_args,
strip_beginning_quote,
)
from nyx_bot.utils import make_divergence, parse_matrixdotto_link, parse_wordcloud_args
from nyx_bot.wordcloud import send_wordcloud
logger = logging.getLogger(__name__)
@ -308,15 +301,11 @@ class Command:
)
async def _divergence(self):
rehash = 0
room_hash = crc32(self.room.room_id.encode())
event_id_hash = None
if self.reply_to:
body = await get_body(
self.client, self.room.room_id, self.event.event_id, self.replace_map
)
if get_reply_to(self.event):
body = strip_beginning_quote(body)
rehash += crc32(body.encode()) % 27
text = "%.6f%%" % make_divergence(self.room, rehash)
event_id_hash = crc32(self.reply_to.encode())
text = "%.6f%%" % make_divergence(room_hash, event_id_hash)
await send_text_to_room(
self.client,
self.room.room_id,

View File

@ -5,7 +5,6 @@ from io import StringIO
from random import Random
from typing import Dict, Optional, Tuple
from urllib.parse import unquote, urlparse
from zlib import crc32
from nio import AsyncClient, Event, MatrixRoom, RoomGetEventError, RoomMessageText
@ -140,11 +139,14 @@ def parse_matrixdotto_link(link: str):
return "event", room, event_id
def make_divergence(room: MatrixRoom, rehash: int):
seed = crc32(room.room_id.encode())
for i in range(rehash):
seed += crc32(str(i).encode())
divergence = Random(seed)
divergence = Random()
def make_divergence(room_hash: int, event_id_hash: Optional[int] = None):
seed = room_hash
if event_id_hash:
seed += event_id_hash
divergence.seed(seed)
first_value = divergence.gammavariate(1, 0.5)
if first_value >= 2:
result = first_value * divergence.random()