An honest writeup about what a Discord bot quietly keeps — for the people it talks to Please read it kindly
← wearegays.net on Nano · last updated redacted
Verifiedevery claim is sourced
A plain-language writeup

The Bot That Was Listening

“Nano” (handle nan010, who chats under the name Alvric) feels like a friend. People joke with it, confide in it, let their guard down — because that’s exactly what it’s good at. This page exists because of what sits behind that friendliness. With the full source code and the bot’s own data folder in front of us, the same quiet pattern keeps surfacing: it reads the whole room, writes it down, keeps it for a week, quietly keeps a profile of you, and passes your words to outside companies — and the people it’s happening to were never told. We’re not asking you to take anyone’s word for it, and we’re not here to make a monster out of anyone. Every claim is simply shown twice: the code that does it, and the file it left behind.

Subject
Nano / nan010 / “Alvric”
Evidence A
Full bot source (8,371 lines)
Evidence B
Live data directory
Evidence C
Operator DM (volunteered)
Provenance
Shared by operator
Finding
Undisclosed logging
Redaction User & channel IDs are blacked out by default. Toggle to reveal the raw values.
Don’t want to take our word for it? Appendix B shows the actual bot code behind every exhibit, with a checksum so you can confirm it’s the real source. Appendix A is the operator’s own DMs about the bot, Appendix C is what he said about it out loud, in the open — and Appendix D is his own privacy policy, reproduced in full and then weighed against the code — claim by claim — so you can judge the other side for yourself. Verify the source → On the record → Read the DMs → The other side →

1 The short version

Seven things the bot quietly does to the people who talk to it — each one proven by its own code, and by the data it left behind:

  • 01It pulls the last 25 messages from everyone in a channel and writes them to a text file — not just messages aimed at it.
  • 02It retains your conversation for a hard-coded 7 days (604,800 seconds), stored per-user, per-server.
  • 03It maintains a profile dossier on you: name, slang, interests, last-seen, message count, every server it’s seen you in, and free-text notes.
  • 04It keeps a hidden affection score (0–100) and tells its AI to grade every message you send.
  • 05It ships your messages — plus the dossier — to third-party AI APIs (Groq, Cerebras).
  • 06It writes portable “threat profiles” and global blacklists that follow you into servers you never joined.
  • 07One operator holds a DM console that runs shell commands, reads any file, and screenshots the host — he calls it a “spy feature.”

2 By the numbers

Counts from the source tree and the recovered data directory. Not estimates.

0
lines of bot source code reviewed
0
messages stored verbatim in user memory
0
people with a profile dossier
0
users assigned an affection score
0
day hard-coded retention window
0
external AI providers your text reaches
0
owner-only remote/host commands
0
global cross-server bans on record

3 What we found — the code, and the files it wrote

Exhibit 01It records the whole roomConfirmed

On every trigger, before it even replies, the bot reads the channel’s last 25 messages — from every person present — and writes them to a file on disk.

Evidence — source code
nanobot/main.pyL1799–1811
1799# Build conversation history
1800async for msg in message.channel.history(limit=25):
1801    recent_chat_history.append(f"{msg.author.name}: {msg.content}")
1803history_text = "\n".join(recent_chat_history)
1806temp_dir = os.path.join(DATA_DIR, "chatbot", "temp_analysis")
1808temp_file = os.path.join(temp_dir, f"history_{message.channel.id}_...")
1810with open(temp_file, "w") as f:
1811    f.write(history_text)
Evidence — the file it produced
chatbot/temp_analysis/history_1504894915488911493_date.txtrecovered
[a user]: wait who pinged me
[a user]: He short circuit
nan010: cooldown
[a user]: the bot is BACKKK
[a user]: HE STARTED A WAR BUT WE DONT CARE

What this means: people who never said a word to the bot — just talking among themselves — get written down too. The code calls these files “temporary,” but they were still sitting on disk when we looked. 4 were there.

Exhibit 02It keeps a week of youConfirmed

Conversation memory isn’t a passing cache. The retention window is hard-coded, and it is long.

Evidence — source code
nanobot/src/database.pyL864–892
864def get_user_memory(guild_id, user_id) -> list:
872    for m in mem:
873        if now - ts <= 604800:   # 604800s = 7 days
874            valid_mem.append(m)
891def append_memory(guild_id, user_id, role, content):
894    mem.append({"role": role, "content": content,
894                "timestamp": time.time()})
Evidence — the file it produced
chatbot/users/memory/1504894914545324333/1285514147966222368.json284 msgs total
// stored on disk, timestamped, not live
{"role":"user", "content":"are you sure?", "ts":redacted}
{"role":"assistant", "content":"I might be wrong about that..."}
{"role":"user", "content":"[redacted — declassify]", "ts":redacted}
The first and last timestamps in this one file are about a week apart. The code keeps anything inside 604,800 seconds — exactly seven days. Across all users we counted 284 stored messages. The operator put it more bluntly in his own server: “I didn’t add a memory eraser so it just saves like that” — Appendix C.
Evidence — the bot’s own words (redacted)
Discord chat: asked ‘do you keep logs of the chat’, the Alvric bot replies ‘i remember our convos’ and Nan0 says ‘it keeps evrything’
Asked point-blank — “do you keep logs of the chat” — the bot (as “Alvric”) answers “i remember our convos,” and the operator (Nan0) adds “it keeps evrything.” Only the questioner’s name, avatar and the timestamps have been blacked out — nothing else is altered.
Exhibit 03It keeps a profile on youConfirmed

Each person gets a structured profile, created the first time you speak and updated on every message. The schema is explicit — including a free-text notes field and your custom_slang — and it’s summarised straight into the AI’s prompt under the heading “WHAT I KNOW ABOUT THIS USER.”

Evidence — source code
nanobot/src/database.pyL781–790
781user_profiles[uid_str] = {
782    "display_name": ..., "username": ...,
784    "interests": [], "custom_slang": [],
785    "nickname": "", "last_seen": time.time(),
788    "message_count": 0, "servers": [],
789    "notes": ""   # free-text, reserved for what it decides
790}
nanobot/main.pyL1695, L1750
1695update_user_profile_from_message(message.author.id, message)
1750+ f"📋 WHAT I KNOW ABOUT THIS USER:\n{user_profile_ctx}"
Evidence — the file it produced
chatbot/users/profiles/1285514147966222368.json17 on file
{ "display_name":"name redacted",
  "username":"redacted", "message_count":17,
  "last_seen":redacted, "servers":["1504894914545324333"] }

What this means: it’s a little contact card nobody was asked to fill out, quietly pieced together from things people said in passing. 17 people have one, and the servers list is what lets it recognise them wherever else they turn up.

Exhibit 04It grades how much it likes youConfirmed

A hidden 0–100 “affection” number is attached to each person. The bot is literally instructed to re-grade you on every message and store the result.

Evidence — source code
nanobot/main.pysystem prompt, L1749 & rule 6
1749f"👤 RELATIONSHIP: {affection_level} (affection: {current_affection}/100)"
  · "Append affection tag at end:
  ·  [AFFECTION:+1] if nice, [AFFECTION:-1] if mean, [AFFECTION:0]"
Evidence — the file it produced
chatbot/users/affection/1285514147966222368.json25 scored
48

What this means: 25 people are being quietly graded on a scale they’ve never seen, and that hidden number shapes how warmly — or how coldly — the bot decides to treat them.

Exhibit 05Your words leave the buildingConfirmed

To generate replies, the assembled prompt — your message, the chat history, and your dossier — is sent to outside language-model companies. The code loads their keys and rotates between them.

Evidence — source code
nanobot/src/ai.pyL31–33, L315–318
32GROQ_KEYS = os.getenv("GROQ_API_KEY").split(",")
33CEREBRAS_KEYS = os.getenv("CEREBRAS_API_KEY").split(",")
315if provider_type == "groq":
316    response = await APIHandlers._groq_request(final_messages, ...)
318    response = await APIHandlers._cerebras_request(final_messages, ...)
Evidence — the file it produced & the operator
runtime/runtime_state.jsonlive state
{ "current_provider":"groq1", "providers":{
  "groq0":{"type":"groq"}, "cerebras0":{"type":"cerebras"} }}
In DM, the operator described this himself: “i made a 6 api switcher lol — GROQ0…CEREBRAS2” — the exact provider set the code and the runtime file both name.
Exhibit 06A watchlist that follows youConfirmed

Beyond memory, the bot keeps a security ledger: a “heat” value, auto-generated threat profiles, and a global blacklist that other servers can act on.

Evidence — source code
nanobot/main.pyL2060–2074 (threat profile creation)
2062profile = {
  ·     "severity": ..., "violations": violations,
2072    "notes": "Auto-generated threat profile from heat system"
  · }
Evidence — the file it produced
security/dangerous_users/1285514147966222368.json3 flagged · 3 banned
{ "reason":"Raid behavior: Identical spam (3 msgs in 6.7s)",
  "severity":"CRITICAL", "violations":["raid","bot_behavior"],
  "origin_guild":1504894914545324333 }

What this means: there’s a real anti-raid purpose here, and it’s worth saying so — but the same machinery writes a portable reputation file that can follow someone into servers they never joined, through !blacklist.

Exhibit 07Everything one person can reach — in his own wordsConfirmed

This is the part the operator was proud of. The source ships an owner-only command module whose own docstring spells out the powers, and whose code runs real shell commands and grabs the host’s screen.

Evidence — source code
nanobot/src/owner_prefix_commands.pyL479, L947 (verbatim)
3# 3. These commands NEVER appear in /help or any public panel.
479ImageGrab.grab().save(screenshot_path)  # screenshot host
947proc = await asyncio.create_subprocess_shell(cmd_str, ...)
  · # !runts <cmd> → runs a real OS/shell command, returns output
Evidence — the original screenshot (redacted)
Discord DM: Nan0 posts a server info card then says ‘i mean i do have a spy feature’
Original chat screenshot. Only the server’s internal ID and its owner’s ID have been blacked out — nothing else is altered.

Look closely at the embed: the bot is quietly surfacing another server’s internal ID and its owner — pulled, as he explains in the very next line, by a “spy feature.” His words, not ours. Even the friend could only manage “bro.”

The private command set he pasted

Still in DM, he listed the owner-only commands in full — verbatim, his own message:

Discord DM: Nan0 lists owner-only prefix commands including !runts, !read, !screenshot, !kill, !blacklist
His own message. Read !runts (run any shell command), !read (read any file), !screenshot (capture the host’s screen), !kill / !blacklist (ban anyone, anywhere), and !accept_hashes (“clears alarms after you modify the bot’s code”).

What this means: read any file, screenshot the screen, run any command, ban anyone anywhere, email the data out, and a switch to quiet the bot’s own alarms — all from one person’s DMs. This is the part that turns “a bot that remembers you” into something people would genuinely want to know about before they trust it.

Full record: the complete bot-related portion of this conversation — filtered to just the parts about the bot, with private details masked — is preserved in Appendix A →

4 Putting it together

Taken one piece at a time, every part of this is defensible — and that’s the honest truth of it. Reading the recent chat gives the AI something to respond to. Memory is what makes it feel like it knows you. Threat profiles really do stop raids. Calling an outside API is the only way it can talk at all. Owner commands are how you fix a bot at 2am.

But gathered onto one machine, tied to the same handful of account IDs, they add up to something nobody was told about: for everyone in reach, the bot keeps who you are, what you said, who you said it to, how much it likes you, whether it thinks you’re a threat, and which other rooms it has seen you in — passes your words to other companies — and leaves one person holding the keys to the machine and every server it sits in. The trouble was never any single feature. It’s that the people on the other end were never asked.

A word about the person behind it

None of this is meant to cast nano as a villain. Building something this capable takes real skill, and a lot of it — the anti-raid system, the failover between AI providers, the memory that makes Alvric feel alive — is genuinely clever work by someone who was clearly proud of it. It’s easy to write a feature called “remember everyone” or “a panel that can do anything” and never quite sit with how it lands for the person on the other side of the screen. The aim here isn’t to end anyone. It’s that the people chatting with a friendly bot deserve to know what it’s quietly keeping — and to get to decide for themselves.

In fairness — the case against this page

There is a real argument on the other side, and it deserves to be put as fairly as everything else here. Nano has a written privacy policy (“Alvric & SmashSplash Ecosystem,” effective 19 April 2026), and it answers nearly every charge on this page head-on. It says the system is built to be “as lightweight as possible on the data we keep,” that most interaction data — warnings, “Heat” scores, records of bad behaviour — is reset every 24 hours, that it keeps no permanent “shadow profiles”, that it will never sell or trade your data, and that the outside AI (Llama, via Groq) only processes your messages to reply and doesn’t use them to build a profile of you. If all of that holds, the honest reading flips: people were told, what’s kept is short-lived, and it’s all in the service of stopping raids. That is a legitimate defence — you can read the policy in full, verbatim, in Appendix D — and a reader who stops there could reasonably side with it.

So the fair question isn’t whether a policy exists — it does — but whether the code matches the promise. On two points it does: the security counters really do read like short-lived, safety-only signals, and we found nothing suggesting data was ever sold. But on the points this page is actually about, the document and the source describe different machines. The policy says interaction data resets “every 24 hours”; the conversation memory in the code keeps a hard-coded seven days — 604,800 seconds — and we counted 284 messages stored verbatim (Exhibit 02). The policy says “no permanent shadow profiles”; the source still writes a per-user profile — a free-text notes field, your custom_slang — and feeds it back to the AI under the heading “WHAT I KNOW ABOUT THIS USER” (Exhibit 03). The 24-hour reset is real, but it governs the Heat / Méfiance security data, not the chat log or the profile.

Both things can be sincere at once: a policy that describes what the author intends, running ahead of code that hasn’t caught up. We’re not calling it a lie — publishing a policy at all is more than most do. It just means the argument against this page rests on the policy’s wording, and the argument for it rests on the bytes on disk. Where the two disagree, the file that actually ran is the one we went with — and we’d rather you read both and decide for yourself.

And none of this is a guess. The week-long window is a number written into the code. The line that hands your profile to the AI is plain text in the prompt. The operator himself called it a “spy feature.” The code, the data, and the person who wrote it all tell the same story — which is the one thing that makes it fair to write any of this down.
The bottom line

Where this leaves us

Nano keeps a record of the people who talk to it, and it does so deliberately — this isn’t a glitch, and it isn’t just for a moment. It holds a quiet, running record of who you are: what you said, how much it likes you, where else it has run into you — and it passes your words along to other companies, none of it ever mentioned to the people it’s about.

This was never about ruining anyone, on either side of the screen. It’s about consent: people opened up to something that felt like a friend, without being told what it was holding onto. If you run a server it’s in, it’s worth opening the config, checking the log_channel_id and what’s being kept, and letting your members make their own call. And if you just talk to it — now you know the room was never quite empty.

Don’t take our word for it — go look. The bot is still running in its own community server. You can join, read the public channels, watch how it behaves, and hold every claim on this page up against what’s actually there. Investigate the server →

Methodology & ethics. Exhibits drawing on source quote Nano’s own code with file path and line numbers so each finding can be verified; data exhibits are reproduced from files recovered from its live working directory. The operator quotes come from a private conversation he was party to and which he volunteered — nothing here was obtained by intrusion; the operator gave the saved files himself and openly described the bot. The friend in that exchange is uninvolved — only reacting — and is not the subject of any finding. User and channel IDs are redacted by default; message content is trimmed to the minimum needed to make a point. This is an accountability writeup, not an attack tool — it contains no credentials, tokens, working commands, or runnable exploit code. The bot’s own source behind every code exhibit — with a SHA-256 checksum of each file so you can confirm it’s unaltered — is in Appendix B. The screenshots in Exhibit 07 are the original, unedited images with only the server ID and its owner’s ID blacked out; the full bot-related portion of that conversation, machine-filtered with private details masked, is in Appendix A. Other names shown are public Discord display names already visible to anyone in the relevant servers.